Title: [195592] trunk
Revision
195592
Author
[email protected]
Date
2016-01-26 09:17:49 -0800 (Tue, 26 Jan 2016)

Log Message

LayoutTest media/airplay-target-availability.html is flaky
https://bugs.webkit.org/show_bug.cgi?id=153100
<rdar://problem/24346796>

Reviewed by Daniel Bates.

Source/WebCore:

No new tests, media/airplay-target-availability.html was updated

* Modules/mediasession/WebMediaSessionManager.cpp:
(WebCore::WebMediaSessionManager::clientStateDidChange): Schedule a configuration scan if
  any of the config flags have changed.
(WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Update logging.

LayoutTests:

* media/airplay-target-availability-expected.txt:
* media/airplay-target-availability.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (195591 => 195592)


--- trunk/LayoutTests/ChangeLog	2016-01-26 17:00:18 UTC (rev 195591)
+++ trunk/LayoutTests/ChangeLog	2016-01-26 17:17:49 UTC (rev 195592)
@@ -1,3 +1,14 @@
+2016-01-26  Eric Carlson  <[email protected]>
+
+        LayoutTest media/airplay-target-availability.html is flaky
+        https://bugs.webkit.org/show_bug.cgi?id=153100
+        <rdar://problem/24346796>
+
+        Reviewed by Daniel Bates.
+
+        * media/airplay-target-availability-expected.txt:
+        * media/airplay-target-availability.html:
+
 2016-01-26  Daniel Bates  <[email protected]>
 
         LayoutTest http/tests/security/xssAuditor/embed-tag-in-path-unterminated.html crashing

Modified: trunk/LayoutTests/media/airplay-target-availability-expected.txt (195591 => 195592)


--- trunk/LayoutTests/media/airplay-target-availability-expected.txt	2016-01-26 17:00:18 UTC (rev 195591)
+++ trunk/LayoutTests/media/airplay-target-availability-expected.txt	2016-01-26 17:17:49 UTC (rev 195592)
@@ -2,15 +2,15 @@
 
 Test that 'webkitplaybacktargetavailabilitychanged' event is sent when at least one video element has playable media.
 
+EVENT( webkitplaybacktargetavailabilitychanged )
+EXPECTED (event.availability == 'not-available') OK
 
-EVENT: 'webkitplaybacktargetavailabilitychanged', event.availability = 'not-available'
+** simulate device becoming available
+EVENT( webkitplaybacktargetavailabilitychanged )
 
+** set src on video that does not have event listener
+EVENT( webkitplaybacktargetavailabilitychanged )
+EXPECTED (event.availability == 'available') OK
 
-EVENT: 'webkitplaybacktargetavailabilitychanged', event.availability = 'not-available'
-
-** setting src on video that does not have event listener
-
-EVENT: 'webkitplaybacktargetavailabilitychanged', event.availability = 'available'
-
 END OF TEST
 

Modified: trunk/LayoutTests/media/airplay-target-availability.html (195591 => 195592)


--- trunk/LayoutTests/media/airplay-target-availability.html	2016-01-26 17:00:18 UTC (rev 195591)
+++ trunk/LayoutTests/media/airplay-target-availability.html	2016-01-26 17:17:49 UTC (rev 195592)
@@ -1,7 +1,7 @@
 <html>
     <head>
-        <script src=""
-        <script src=""
+        <script src=''></script>
+        <script src=''></script>
         <script>
             var video1;
             var video2;
@@ -13,38 +13,53 @@
 
                 if (window.internals)
                     internals.setMockMediaPlaybackTargetPickerEnabled(true);
-
-                video1.addEventListener('webkitplaybacktargetavailabilitychanged', targetAvailabilityChanged);
-                setTimeout(setSource, 200);
+                
+                video1.addEventListener('webkitplaybacktargetavailabilitychanged', noSource, true);
             }
             
-            function targetAvailabilityChanged(event)
+            function noSource(event)
             {
-                consoleWrite(`<br>EVENT: '${event.type}', event.availability = '${event.availability}'<br>`);
+                video1.removeEventListener('webkitplaybacktargetavailabilitychanged', noSource, true);
 
-                if (event.availability != "available")
-                    return;
+                consoleWrite(`EVENT( ${event.type} )`);
+                testExpected('event.availability', 'not-available');
 
-                if (event.availability == "available" && video2.src == "") {
-                    failTest("Event sent before any video is a candidate for airplay");
-                    return;
-                }
+                video1.addEventListener('webkitplaybacktargetavailabilitychanged', haveTarget, true);
+
+                consoleWrite('<br>** simulate device becoming available');
+                if (window.internals)
+                    internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
+            }
                 
-                endTest();
-            }
-            
-            function setSource()
+            function haveTarget(event)
             {
-                consoleWrite('** setting src on video that does not have event listener');
-                if (window.internals)
-                    internals.setMockMediaPlaybackTargetPickerState("Sleepy TV", "DeviceAvailable");
+                // 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;
+
+                video1.removeEventListener('webkitplaybacktargetavailabilitychanged', haveTarget, true);
+                consoleWrite(`EVENT( ${event.type} )`);
+
+                consoleWrite('<br>** set src on video that does not have event listener');
+
                 video2.src = "" 'content/test');
+                video1.addEventListener('webkitplaybacktargetavailabilitychanged', withSource, true);
             }
 
+            function withSource(event)
+            {
+                consoleWrite(`EVENT( ${event.type} )`);
+                testExpected('event.availability', 'available');
+                consoleWrite('');
+                endTest();
+            }
+
         </script>
     </head>
 
-    <body _onload_="start()">
+    <body _onload_='start()'>
         <video controls></video>
         <br>
         <video controls></video>

Modified: trunk/Source/WebCore/ChangeLog (195591 => 195592)


--- trunk/Source/WebCore/ChangeLog	2016-01-26 17:00:18 UTC (rev 195591)
+++ trunk/Source/WebCore/ChangeLog	2016-01-26 17:17:49 UTC (rev 195592)
@@ -1,3 +1,18 @@
+2016-01-26  Eric Carlson  <[email protected]>
+
+        LayoutTest media/airplay-target-availability.html is flaky
+        https://bugs.webkit.org/show_bug.cgi?id=153100
+        <rdar://problem/24346796>
+
+        Reviewed by Daniel Bates.
+
+        No new tests, media/airplay-target-availability.html was updated
+
+        * Modules/mediasession/WebMediaSessionManager.cpp:
+        (WebCore::WebMediaSessionManager::clientStateDidChange): Schedule a configuration scan if
+          any of the config flags have changed.
+        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Update logging.
+
 2016-01-25  Carlos Garcia Campos  <[email protected]>
 
         Main frame scrollbars not updated on hovering when using overlay scrollbars

Modified: trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp (195591 => 195592)


--- trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2016-01-26 17:00:18 UTC (rev 195591)
+++ trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2016-01-26 17:17:49 UTC (rev 195592)
@@ -215,7 +215,7 @@
     changedClientState->flags = newFlags;
 
     MediaProducer::MediaStateFlags updateConfigurationFlags = MediaProducer::RequiresPlaybackTargetMonitoring | MediaProducer::HasPlaybackTargetAvailabilityListener | MediaProducer::HasAudioOrVideo;
-    if (!flagsAreSet(oldFlags, updateConfigurationFlags) && flagsAreSet(newFlags, updateConfigurationFlags))
+    if ((oldFlags & updateConfigurationFlags) != (newFlags & updateConfigurationFlags))
         scheduleDelayedTask(TargetMonitoringConfigurationTask);
 
     MediaProducer::MediaStateFlags playingToTargetFlags = MediaProducer::IsPlayingToExternalDevice | MediaProducer::IsPlayingVideo;
@@ -358,7 +358,7 @@
             haveClientWithMedia = true;
     }
 
-    LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", (int)monitoringRequired);
+    LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", static_cast<int>(monitoringRequired || (hasAvailabilityListener && haveClientWithMedia)));
 
     if (monitoringRequired || (hasAvailabilityListener && haveClientWithMedia))
         targetPicker().startingMonitoringPlaybackTargets();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to