Title: [211136] trunk/LayoutTests
Revision
211136
Author
grao...@webkit.org
Date
2017-01-24 22:30:23 -0800 (Tue, 24 Jan 2017)

Log Message

LayoutTest media/modern-media-controls/airplay-support/airplay-support.html is failing
https://bugs.webkit.org/show_bug.cgi?id=164323

Reviewed by Jon Lee.

Make media/modern-media-controls/airplay-support/airplay-support.html more robust by following
the same pattern used in media/airplay-target-availability.html which proved to be robust.

* media/modern-media-controls/airplay-support/airplay-support.html:
* platform/mac/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (211135 => 211136)


--- trunk/LayoutTests/ChangeLog	2017-01-25 05:02:56 UTC (rev 211135)
+++ trunk/LayoutTests/ChangeLog	2017-01-25 06:30:23 UTC (rev 211136)
@@ -1,3 +1,16 @@
+2017-01-24  Antoine Quint  <grao...@apple.com>
+
+        LayoutTest media/modern-media-controls/airplay-support/airplay-support.html is failing
+        https://bugs.webkit.org/show_bug.cgi?id=164323
+
+        Reviewed by Jon Lee.
+
+        Make media/modern-media-controls/airplay-support/airplay-support.html more robust by following
+        the same pattern used in media/airplay-target-availability.html which proved to be robust.
+
+        * media/modern-media-controls/airplay-support/airplay-support.html:
+        * platform/mac/TestExpectations:
+
 2017-01-24  Joseph Pecoraro  <pecor...@apple.com>
 
         Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature

Modified: trunk/LayoutTests/media/modern-media-controls/airplay-support/airplay-support.html (211135 => 211136)


--- trunk/LayoutTests/media/modern-media-controls/airplay-support/airplay-support.html	2017-01-25 05:02:56 UTC (rev 211135)
+++ trunk/LayoutTests/media/modern-media-controls/airplay-support/airplay-support.html	2017-01-25 06:30:23 UTC (rev 211136)
@@ -9,37 +9,50 @@
 
 description("Testing the <code>AirPlaySupport</code> behavior.");
 
-iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
-
 const container = document.querySelector("div#host");
 const media = document.querySelector("video");
 const mediaController = createControls(container, media, null);
 
-window.internals.setMockMediaPlaybackTargetPickerEnabled(false);
-
-media.addEventListener("play", () => {
-    media.addEventListener("webkitplaybacktargetavailabilitychanged", playbackTargetAvailabilityChanged);
-    media.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", currentPlaybackTargetIsWirelessChanged);
-
+(function makeAirPlayAvailable()
+{
     debug("Making AirPlay routes available.");
+    media.addEventListener("webkitplaybacktargetavailabilitychanged", playbackTargetAvailabilityChangedOnce, true);
     window.internals.setMockMediaPlaybackTargetPickerEnabled(true);
-});
+})();
 
-let playbackTargetBecameAvailable = false;
-function playbackTargetAvailabilityChanged(event)
+function playbackTargetAvailabilityChangedOnce(event)
 {
-    if (event.availability == "available" && !playbackTargetBecameAvailable) {
-        playbackTargetBecameAvailable = true;
-        shouldBeTrue("mediaController.controls.airplayButton.enabled");
-        shouldBeFalse("mediaController.controls.airplayButton.on");
+    media.removeEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedOnce, true);
+    media.addEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedAgain, true);
 
-        debug("");
-        debug("Entering AirPlay playback mode.");
-        window.internals.setMockMediaPlaybackTargetPickerState("Sleepy TV", "DeviceAvailable");
-        media.webkitShowPlaybackTargetPicker();
-    }
+    window.internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
 }
+    
+function playbackTargetAvailabilityChangedAgain(event)
+{
+    // setMockMediaPlaybackTargetPickerState happens asynchronously in WK2 and a
+    // "webkitplaybacktargetavailabilitychanged" is always sent when an event listener
+    // is added, so we may get a "not available" event first.
+    if (event.availability == 'not-available')
+        return;
 
+    media.removeEventListener('webkitplaybacktargetavailabilitychanged', playbackTargetAvailabilityChangedAgain, true);
+
+    shouldBeTrue("mediaController.controls.airplayButton.enabled");
+    shouldBeFalse("mediaController.controls.airplayButton.on");
+
+    window.setTimeout(enterAirPlay, 100);
+}
+
+function enterAirPlay()
+{
+    debug("");
+    debug("Entering AirPlay playback mode.");
+
+    media.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", currentPlaybackTargetIsWirelessChanged);
+    media.webkitShowPlaybackTargetPicker();
+}
+
 function currentPlaybackTargetIsWirelessChanged(event)
 {
     if (!media.webkitCurrentPlaybackTargetIsWireless)
@@ -54,8 +67,6 @@
     finishJSTest();
 }
 
-setTimeout(finishJSTest, 3000);
-
 </script>
 <script src=""
 </body>

Modified: trunk/LayoutTests/platform/mac/TestExpectations (211135 => 211136)


--- trunk/LayoutTests/platform/mac/TestExpectations	2017-01-25 05:02:56 UTC (rev 211135)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2017-01-25 06:30:23 UTC (rev 211136)
@@ -1478,9 +1478,6 @@
 media/modern-media-controls/placard-support/ipad/placard-support-pip.html [ Skip ]
 media/modern-media-controls/scrubber-support/ipad/scrubber-support-drag.html [ Skip ]
 
-# These sometimes work but more often than not don't
-webkit.org/b/164323 media/modern-media-controls/airplay-support/airplay-support.html [ Pass Failure ]
-
 # This one always times out on the bots, cannot reproduce locally.
 webkit.org/b/165234 media/modern-media-controls/audio/audio-controls-buttons.html [ Pass Timeout ]
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to