[Webkit-unassigned] [Bug 167214] Record whether a media element was prevented from playing without user interaction
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri Jan 20 10:05:45 PST 2017
https://bugs.webkit.org/show_bug.cgi?id=167214
Jer Noble <jer.noble at apple.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #299269|review?, commit-queue? |review-
Flags| |
--- Comment #3 from Jer Noble <jer.noble at apple.com> ---
Comment on attachment 299269
--> https://bugs.webkit.org/attachment.cgi?id=299269
Patch
View in context: https://bugs.webkit.org/attachment.cgi?id=299269&action=review
> Source/WebCore/html/HTMLMediaElement.cpp:3106
> + bool preventedPlaybackWithoutUserGesture = false;
> + if (!m_mediaSession->playbackPermitted(*this, &preventedPlaybackWithoutUserGesture)) {
> + if (preventedPlaybackWithoutUserGesture)
> + m_preventedFromPlayingWithoutUserGesture = true;
> return;
> + }
When is m_preventedFromPlayingWithoutUserGesture ever reset to false?
> Source/WebCore/html/HTMLMediaElement.h:719
> - bool canTransitionFromAutoplayToPlay() const;
> + bool canTransitionFromAutoplayToPlay(bool* preventedPlaybackWithoutUserGesture) const;
This and ...
> Source/WebCore/html/MediaElementSession.h:55
> - bool playbackPermitted(const HTMLMediaElement&) const;
> + bool playbackPermitted(const HTMLMediaElement&, bool* preventedPlaybackWithoutUserGesture) const;
This.
I don't like this "out boolean pointer parameter" change. We should some other way of representing failure, on the order of "ExceptionOr<>". For example, something like:
enum class PlaybackDenialReason {
UserGestureRequired,
PageConsentRequired,
FullscreenRequired,
};
template <typename T>
class SuccessOr : public optional<T> {
public:
explicit constexpr operator bool() const { return !optional::operator bool(); }
};
And have these methods return SuccessOr<PlaybackDenialReason>. I.e.:
SuccessOr<PlaybackDenialReason> playbackPermitted(const HTMLMediaElement&) const;
So the call sites can remain exactly the same:
if (!playbackPermitted(m_element)) { ... }
And in the places we care about why playback was denied, we can look at the return value:
auto success = canTransitionFromAutoplayToPlay(&preventedPlaybackWithoutUserGesture));
if (success) { ... } else {
m_preventedFromPlayingWithoutUserGesture = success.value() == PlaybackDenialReason:: UserGestureRequired;
}
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-unassigned/attachments/20170120/aed2858b/attachment-0001.html>
More information about the webkit-unassigned
mailing list