Title: [201841] trunk
Revision
201841
Author
jer.no...@apple.com
Date
2016-06-08 16:09:44 -0700 (Wed, 08 Jun 2016)

Log Message

With audio user gesture restriction in place, video.src = '', video.play() succeeds where it should fail.
https://bugs.webkit.org/show_bug.cgi?id=158546

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/video-playback-restriction-play-before-load.html

Don't check that the media element isPlaying(); that will only return true if playback has begun.
Instead, check !paused(), as that will be true as soon as the play() method returns.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
(WebCore::HTMLMediaElement::updateShouldPlay):
* rendering/RenderLayer.h:

LayoutTests:

* media/video-playback-restriction-play-before-load-expected.txt: Added.
* media/video-playback-restriction-play-before-load.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (201840 => 201841)


--- trunk/LayoutTests/ChangeLog	2016-06-08 23:04:11 UTC (rev 201840)
+++ trunk/LayoutTests/ChangeLog	2016-06-08 23:09:44 UTC (rev 201841)
@@ -1,3 +1,13 @@
+2016-06-08  Jer Noble  <jer.no...@apple.com>
+
+        With audio user gesture restriction in place, video.src = '', video.play() succeeds where it should fail.
+        https://bugs.webkit.org/show_bug.cgi?id=158546
+
+        Reviewed by Eric Carlson.
+
+        * media/video-playback-restriction-play-before-load-expected.txt: Added.
+        * media/video-playback-restriction-play-before-load.html: Added.
+
 2016-06-08  Chris Dumez  <cdu...@apple.com>
 
         First parameter to MessagePort / DedicatedWorkerGlobalScope.postMessage() should be mandatory

Added: trunk/LayoutTests/media/video-playback-restriction-play-before-load-expected.txt (0 => 201841)


--- trunk/LayoutTests/media/video-playback-restriction-play-before-load-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/video-playback-restriction-play-before-load-expected.txt	2016-06-08 23:09:44 UTC (rev 201841)
@@ -0,0 +1,9 @@
+Test that, when RequireUserGestureForAudioRateChange is set, starting playback of an audio file requires a user gesture.
+
+
+RUN(internals.setMediaElementRestrictions(video, "RequireUserGestureForAudioRateChange"))
+RUN(video.src = "" 'content/test'))
+RUN(video.play().then(resolvePromise, rejectPromise))
+Promise correctly rejected.
+END OF TEST
+

Added: trunk/LayoutTests/media/video-playback-restriction-play-before-load.html (0 => 201841)


--- trunk/LayoutTests/media/video-playback-restriction-play-before-load.html	                        (rev 0)
+++ trunk/LayoutTests/media/video-playback-restriction-play-before-load.html	2016-06-08 23:09:44 UTC (rev 201841)
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>video-playback-restriction-play-before-load</title>
+    <script src=""
+    <script src=""
+
+    <script>
+    function runTest()
+    {
+        video = document.getElementsByTagName('video')[0];
+
+        if (window.internals)
+            run('internals.setMediaElementRestrictions(video, "RequireUserGestureForAudioRateChange")');
+
+        waitForEventAndFail('error');
+        run("video.src = "" 'content/test')");
+        run('video.play().then(resolvePromise, rejectPromise)');
+    }    
+
+    function resolvePromise()
+    {
+        failTest("Promise incorrectly resolved.");
+    }
+
+    function rejectPromise()
+    {
+        consoleWrite("Promise correctly rejected.");
+        endTest();
+    }
+    </script>
+</head>
+
+<body _onload_="runTest()">
+    <p>Test that, when RequireUserGestureForAudioRateChange is set, starting playback of an audio file requires a user gesture.</p>
+    <video controls autoplay></audio>
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (201840 => 201841)


--- trunk/Source/WebCore/ChangeLog	2016-06-08 23:04:11 UTC (rev 201840)
+++ trunk/Source/WebCore/ChangeLog	2016-06-08 23:09:44 UTC (rev 201841)
@@ -1,3 +1,20 @@
+2016-06-08  Jer Noble  <jer.no...@apple.com>
+
+        With audio user gesture restriction in place, video.src = '', video.play() succeeds where it should fail.
+        https://bugs.webkit.org/show_bug.cgi?id=158546
+
+        Reviewed by Eric Carlson.
+
+        Test: media/video-playback-restriction-play-before-load.html
+
+        Don't check that the media element isPlaying(); that will only return true if playback has begun.
+        Instead, check !paused(), as that will be true as soon as the play() method returns.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
+        (WebCore::HTMLMediaElement::updateShouldPlay):
+        * rendering/RenderLayer.h:
+
 2016-06-08  Alex Christensen  <achristen...@webkit.org>
 
         Modernize WebSocket code

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (201840 => 201841)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2016-06-08 23:04:11 UTC (rev 201840)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2016-06-08 23:09:44 UTC (rev 201841)
@@ -4642,7 +4642,7 @@
         mediaControls()->reset();
     updateRenderer();
 
-    if (isPlaying() && !m_mediaSession->playbackPermitted(*this))
+    if (!paused() && !m_mediaSession->playbackPermitted(*this))
         pauseInternal();
 
     m_mediaSession->setCanProduceAudio(m_player && m_readyState >= HAVE_METADATA && hasAudio());
@@ -7054,7 +7054,7 @@
 
 void HTMLMediaElement::updateShouldPlay()
 {
-    if (isPlaying() && !m_mediaSession->playbackPermitted(*this))
+    if (!paused() && !m_mediaSession->playbackPermitted(*this))
         pauseInternal();
     else if (canTransitionFromAutoplayToPlay())
         play();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to