Title: [201522] trunk
- Revision
- 201522
- Author
- eric.carl...@apple.com
- Date
- 2016-05-31 13:47:53 -0700 (Tue, 31 May 2016)
Log Message
[Mac] AirPlay route is sometimes reset when changing video.src
https://bugs.webkit.org/show_bug.cgi?id=158226
<rdar://problem/24197592>
Reviewed by Jer Noble.
Source/WebCore:
Test: media/airplay-autoplay.html
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Remove the gesture requirement
if currently processing a user gesture.
(WebCore::HTMLMediaElement::dispatchEvent): Set m_failedToPlayToWirelessTarget to false when
dispatching webkitcurrentplaybacktargetiswirelesschanged so an element can succeed after failing.
LayoutTests:
* media/airplay-autoplay-expected.txt: Added.
* media/airplay-autoplay.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (201521 => 201522)
--- trunk/LayoutTests/ChangeLog 2016-05-31 20:32:21 UTC (rev 201521)
+++ trunk/LayoutTests/ChangeLog 2016-05-31 20:47:53 UTC (rev 201522)
@@ -1,3 +1,14 @@
+2016-05-31 Eric Carlson <eric.carl...@apple.com>
+
+ [Mac] AirPlay route is sometimes reset when changing video.src
+ https://bugs.webkit.org/show_bug.cgi?id=158226
+ <rdar://problem/24197592>
+
+ Reviewed by Jer Noble.
+
+ * media/airplay-autoplay-expected.txt: Added.
+ * media/airplay-autoplay.html: Added.
+
2016-05-31 Dave Hyatt <hy...@apple.com>
REGRESSION (r189567): Elements with aspect ratios not handled correctly inside flexbox.
Added: trunk/LayoutTests/media/airplay-autoplay-expected.txt (0 => 201522)
--- trunk/LayoutTests/media/airplay-autoplay-expected.txt (rev 0)
+++ trunk/LayoutTests/media/airplay-autoplay-expected.txt 2016-05-31 20:47:53 UTC (rev 201522)
@@ -0,0 +1,22 @@
+
+** set video.src
+RUN(video.src = "" 'content/test'))
+
+EVENT(canplaythrough)
+
+** simulate choosing a device from the menu
+RUN(video.webkitShowPlaybackTargetPicker())
+EVENT(webkitcurrentplaybacktargetiswirelesschanged)
+
+** start playing
+RUN(video.play())
+
+EVENT(ended)
+
+** reset video source
+RUN(video.src = "" 'content/test'))
+RUN(video.play())
+
+EVENT(webkitcurrentplaybacktargetiswirelesschanged)
+END OF TEST
+
Added: trunk/LayoutTests/media/airplay-autoplay.html (0 => 201522)
--- trunk/LayoutTests/media/airplay-autoplay.html (rev 0)
+++ trunk/LayoutTests/media/airplay-autoplay.html 2016-05-31 20:47:53 UTC (rev 201522)
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>AirPlay target should persist across src change</title>
+ <script src=""
+ <script src=""
+ <script>
+
+ var phase = 'video-1';
+
+ if (window.internals) {
+ internals.setMockMediaPlaybackTargetPickerEnabled(true);
+ internals.setMockMediaPlaybackTargetPickerState('', 'Unknown');
+ }
+
+ function start()
+ {
+ findMediaElement();
+
+ consoleWrite('** set video.src');
+ run(`video.src = "" 'content/test')`);
+ video.addEventListener('webkitcurrentplaybacktargetiswirelesschanged', currentTargetChanged, true);
+ waitForEventOnce('canplaythrough', canplaythrough);
+ waitForEventOnce('ended', ended);
+ consoleWrite('');
+ }
+
+ function canplaythrough()
+ {
+ consoleWrite('<br>** simulate choosing a device from the menu');
+ runWithKeyDown(function() {
+ run(`video.webkitShowPlaybackTargetPicker()`);
+ setTimeout(function() {
+ if (window.internals) {
+ internals.setMockMediaPlaybackTargetPickerEnabled(true);
+ internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
+ }
+ }, 100);
+ });
+ video.currentTime = video.duration - 1;
+ }
+
+ function currentTargetChanged(ev)
+ {
+ if (!video.webkitCurrentPlaybackTargetIsWireless)
+ return;
+
+ consoleWrite(`EVENT(${ev.type})`);
+ switch (phase) {
+ case 'video-1':
+ phase = 'video-2';
+ consoleWrite('<br>** start playing');
+ run(`video.play()`);
+ consoleWrite('');
+ break;
+ case 'video-2':
+ endTest();
+ break;
+ }
+ }
+
+ function ended()
+ {
+ consoleWrite('<br>** reset video source');
+ run(`video.src = "" 'content/test')`);
+ run(`video.play()`);
+ consoleWrite('');
+ }
+
+ </script>
+</head>
+<body _onload_="start()">
+ <video controls></video>
+</body>
+</html>
Modified: trunk/LayoutTests/platform/mac/TestExpectations (201521 => 201522)
--- trunk/LayoutTests/platform/mac/TestExpectations 2016-05-31 20:32:21 UTC (rev 201521)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2016-05-31 20:47:53 UTC (rev 201522)
@@ -1293,6 +1293,7 @@
# WIRELESS_PLAYBACK_TARGET not enabled on Yosemite.
[ Yosemite ] media/airplay-target-availability.html
[ Yosemite ] media/controls/airplay-picker.html
+[ Yosemite ] media/airplay-autoplay.html
webkit.org/b/153086 sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T2.html [ Pass Crash ]
Modified: trunk/Source/WebCore/ChangeLog (201521 => 201522)
--- trunk/Source/WebCore/ChangeLog 2016-05-31 20:32:21 UTC (rev 201521)
+++ trunk/Source/WebCore/ChangeLog 2016-05-31 20:47:53 UTC (rev 201522)
@@ -1,3 +1,19 @@
+2016-05-31 Eric Carlson <eric.carl...@apple.com>
+
+ [Mac] AirPlay route is sometimes reset when changing video.src
+ https://bugs.webkit.org/show_bug.cgi?id=158226
+ <rdar://problem/24197592>
+
+ Reviewed by Jer Noble.
+
+ Test: media/airplay-autoplay.html
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Remove the gesture requirement
+ if currently processing a user gesture.
+ (WebCore::HTMLMediaElement::dispatchEvent): Set m_failedToPlayToWirelessTarget to false when
+ dispatching webkitcurrentplaybacktargetiswirelesschanged so an element can succeed after failing.
+
2016-05-31 Chris Dumez <cdu...@apple.com>
Regression(r201482): Crash under dispatch_semaphore_wait
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (201521 => 201522)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-05-31 20:32:21 UTC (rev 201521)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-05-31 20:47:53 UTC (rev 201522)
@@ -5186,6 +5186,8 @@
void HTMLMediaElement::webkitShowPlaybackTargetPicker()
{
LOG(Media, "HTMLMediaElement::webkitShowPlaybackTargetPicker(%p)", this);
+ if (ScriptController::processingUserGestureForMedia())
+ removeBehaviorsRestrictionsAfterFirstUserGesture();
m_mediaSession->showPlaybackTargetPicker(*this);
}
@@ -5213,8 +5215,10 @@
bool HTMLMediaElement::dispatchEvent(Event& event)
{
- if (event.type() == eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent)
+ if (event.type() == eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent) {
+ m_failedToPlayToWirelessTarget = false;
scheduleDelayedAction(CheckPlaybackTargetCompatablity);
+ }
return HTMLElement::dispatchEvent(event);
}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes