Title: [183826] trunk/Source/WebCore
Revision
183826
Author
[email protected]
Date
2015-05-05 13:50:02 -0700 (Tue, 05 May 2015)

Log Message

Only autoplay videos should not automatically play to playback target
https://bugs.webkit.org/show_bug.cgi?id=144633

Reviewed by Jer Noble.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::HTMLMediaElement): Set RequireUserGestureToAutoplayToExternalDevice.
(WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Remove
RequireUserGestureToAutoplayToExternalDevice.
(WebCore::HTMLMediaElement::mediaState): Set ExternalDeviceAutoPlayCandidate if playback
was started from a user gesture, even if the video loops and/or doesn't have audio.

* html/HTMLMediaSession.h: Define RequireUserGestureToAutoplayToExternalDevice.
(WebCore::HTMLMediaSession::hasBehaviorRestriction): New.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (183825 => 183826)


--- trunk/Source/WebCore/ChangeLog	2015-05-05 20:42:44 UTC (rev 183825)
+++ trunk/Source/WebCore/ChangeLog	2015-05-05 20:50:02 UTC (rev 183826)
@@ -1,3 +1,20 @@
+2015-05-05  Eric Carlson  <[email protected]>
+
+        Only autoplay videos should not automatically play to playback target
+        https://bugs.webkit.org/show_bug.cgi?id=144633
+
+        Reviewed by Jer Noble.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::HTMLMediaElement): Set RequireUserGestureToAutoplayToExternalDevice.
+        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Remove
+        RequireUserGestureToAutoplayToExternalDevice.
+        (WebCore::HTMLMediaElement::mediaState): Set ExternalDeviceAutoPlayCandidate if playback
+        was started from a user gesture, even if the video loops and/or doesn't have audio.
+
+        * html/HTMLMediaSession.h: Define RequireUserGestureToAutoplayToExternalDevice.
+        (WebCore::HTMLMediaSession::hasBehaviorRestriction): New.
+
 2015-05-05  Brent Fulgham  <[email protected]>
 
         Unreviewed logging fix.

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (183825 => 183826)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-05-05 20:42:44 UTC (rev 183825)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-05-05 20:50:02 UTC (rev 183826)
@@ -341,6 +341,9 @@
 
     m_mediaSession->addBehaviorRestriction(HTMLMediaSession::RequireUserGestureForFullscreen);
     m_mediaSession->addBehaviorRestriction(HTMLMediaSession::RequirePageConsentToLoadMedia);
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+    m_mediaSession->addBehaviorRestriction(HTMLMediaSession::RequireUserGestureToAutoplayToExternalDevice);
+#endif
 
     // FIXME: We should clean up and look to better merge the iOS and non-iOS code below.
     Settings* settings = document.settings();
@@ -5892,6 +5895,7 @@
     HTMLMediaSession::BehaviorRestrictions restrictionsToRemove = HTMLMediaSession::RequireUserGestureForLoad
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
         | HTMLMediaSession::RequireUserGestureToShowPlaybackTargetPicker
+        | HTMLMediaSession::RequireUserGestureToAutoplayToExternalDevice
 #endif
         | HTMLMediaSession::RequireUserGestureForLoad
         | HTMLMediaSession::RequireUserGestureForRateChange
@@ -6210,9 +6214,9 @@
             state |= RequiresPlaybackTargetMonitoring;
     }
 
-    if (hasActiveVideo && hasAudio && !loop())
+    bool requireUserGesture = m_mediaSession->hasBehaviorRestriction(HTMLMediaSession::RequireUserGestureToAutoplayToExternalDevice);
+    if (hasActiveVideo && (!requireUserGesture || (hasAudio && !loop())))
         state |= ExternalDeviceAutoPlayCandidate;
-
 #endif
 
     if (!isPlaying())

Modified: trunk/Source/WebCore/html/HTMLMediaSession.h (183825 => 183826)


--- trunk/Source/WebCore/html/HTMLMediaSession.h	2015-05-05 20:42:44 UTC (rev 183825)
+++ trunk/Source/WebCore/html/HTMLMediaSession.h	2015-05-05 20:50:02 UTC (rev 183826)
@@ -83,17 +83,19 @@
         RequireUserGestureForFullscreen = 1 << 2,
         RequirePageConsentToLoadMedia = 1 << 3,
         RequirePageConsentToResumeMedia = 1 << 4,
+        RequireUserGestureForAudioRateChange = 1 << 5,
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-        RequireUserGestureToShowPlaybackTargetPicker = 1 << 5,
-        WirelessVideoPlaybackDisabled =  1 << 6,
+        RequireUserGestureToShowPlaybackTargetPicker = 1 << 6,
+        WirelessVideoPlaybackDisabled =  1 << 7,
+        RequireUserGestureToAutoplayToExternalDevice = 1 << 8,
 #endif
-        RequireUserGestureForAudioRateChange = 1 << 7,
     };
     typedef unsigned BehaviorRestrictions;
 
     WEBCORE_EXPORT BehaviorRestrictions behaviorRestrictions() const { return m_restrictions; }
     WEBCORE_EXPORT void addBehaviorRestriction(BehaviorRestrictions);
     WEBCORE_EXPORT void removeBehaviorRestriction(BehaviorRestrictions);
+    bool hasBehaviorRestriction(BehaviorRestrictions restriction) const { return restriction & m_restrictions; }
 
 #if ENABLE(MEDIA_SOURCE)
     size_t maximumMediaSourceBufferSize(const SourceBuffer&) const;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to