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