Title: [195738] branches/safari-601-branch/Source/WebCore

Diff

Modified: branches/safari-601-branch/Source/WebCore/ChangeLog (195737 => 195738)


--- branches/safari-601-branch/Source/WebCore/ChangeLog	2016-01-28 16:18:32 UTC (rev 195737)
+++ branches/safari-601-branch/Source/WebCore/ChangeLog	2016-01-28 16:26:25 UTC (rev 195738)
@@ -1,3 +1,23 @@
+2016-01-26  Eric Carlson  <[email protected]>
+
+        Cherry-pick r195592 and parts of r194672 to fix rdar://24154288
+        <rdar://problem/24154288> FaradayDotFour: Do not see AirPlay icon in Vimeo
+
+        Unreviewed.
+
+        * Modules/mediasession/WebMediaSessionManager.cpp:
+        (WebCore::mediaProducerStateString): Log a new flag.
+        (WebCore::WebMediaSessionManager::clientStateDidChange): Schedule a client
+          reconfiguration if the 'requires monitoring', 'has listener', or 'has audio or
+          video' flags have changed.
+        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Start monitoring if
+          at least one client has a listener and at least one has audio/video.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaState): Set new flags.
+
+        * page/MediaProducer.h: Add new flags.
+
 2016-01-27  Matthew Hanson  <[email protected]>
 
         Merge r195609. rdar://problem/24337868

Modified: branches/safari-601-branch/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp (195737 => 195738)


--- branches/safari-601-branch/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2016-01-28 16:18:32 UTC (rev 195737)
+++ branches/safari-601-branch/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp	2016-01-28 16:26:25 UTC (rev 195738)
@@ -74,6 +74,8 @@
         string.append("IsPlayingVideo + ");
     if (flags & MediaProducer::IsPlayingToExternalDevice)
         string.append("IsPlayingToExternalDevice + ");
+    if (flags & MediaProducer::HasPlaybackTargetAvailabilityListener)
+        string.append("HasPlaybackTargetAvailabilityListener + ");
     if (flags & MediaProducer::RequiresPlaybackTargetMonitoring)
         string.append("RequiresPlaybackTargetMonitoring + ");
     if (flags & MediaProducer::ExternalDeviceAutoPlayCandidate)
@@ -174,7 +176,9 @@
     LOG(Media, "WebMediaSessionManager::clientStateDidChange(%p + %llu) - new flags = %s, old flags = %s", &client, contextId, mediaProducerStateString(newFlags).utf8().data(), mediaProducerStateString(oldFlags).utf8().data());
 
     changedClientState->flags = newFlags;
-    if (!flagsAreSet(oldFlags, MediaProducer::RequiresPlaybackTargetMonitoring) && flagsAreSet(newFlags, MediaProducer::RequiresPlaybackTargetMonitoring))
+    
+    MediaProducer::MediaStateFlags updateConfigurationFlags = MediaProducer::RequiresPlaybackTargetMonitoring | MediaProducer::HasPlaybackTargetAvailabilityListener | MediaProducer::HasAudioOrVideo;
+    if ((oldFlags & updateConfigurationFlags) != (newFlags & updateConfigurationFlags))
         scheduleDelayedTask(TargetMonitoringConfigurationTask);
 
     MediaProducer::MediaStateFlags playingToTargetFlags = MediaProducer::IsPlayingToExternalDevice | MediaProducer::IsPlayingVideo;
@@ -196,7 +200,7 @@
             return;
     }
 
-    // Do not take begin playing to the device unless playback has just started.
+    // Do not begin playing to the device unless playback has just started.
     if (!flagsAreSet(newFlags, MediaProducer::IsPlayingVideo) || flagsAreSet(oldFlags, MediaProducer::IsPlayingVideo))
         return;
 
@@ -304,16 +308,22 @@
 void WebMediaSessionManager::configurePlaybackTargetMonitoring()
 {
     bool monitoringRequired = false;
+    bool hasAvailabilityListener = false;
+    bool haveClientWithMedia = false;
     for (auto& state : m_clientState) {
         if (state->flags & MediaProducer::RequiresPlaybackTargetMonitoring) {
             monitoringRequired = true;
             break;
         }
+        if (state->flags & MediaProducer::HasPlaybackTargetAvailabilityListener)
+            hasAvailabilityListener = true;
+        if (state->flags & MediaProducer::HasAudioOrVideo)
+            haveClientWithMedia = true;
     }
 
-    LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", (int)monitoringRequired);
+    LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", static_cast<int>(monitoringRequired || (hasAvailabilityListener && haveClientWithMedia)));
 
-    if (monitoringRequired)
+    if (monitoringRequired || (hasAvailabilityListener && haveClientWithMedia))
         targetPicker().startingMonitoringPlaybackTargets();
     else
         targetPicker().stopMonitoringPlaybackTargets();

Modified: branches/safari-601-branch/Source/WebCore/html/HTMLMediaElement.cpp (195737 => 195738)


--- branches/safari-601-branch/Source/WebCore/html/HTMLMediaElement.cpp	2016-01-28 16:18:32 UTC (rev 195737)
+++ branches/safari-601-branch/Source/WebCore/html/HTMLMediaElement.cpp	2016-01-28 16:26:25 UTC (rev 195738)
@@ -6434,7 +6434,6 @@
 
 MediaProducer::MediaStateFlags HTMLMediaElement::mediaState() const
 {
-
     MediaStateFlags state = IsNotPlaying;
 
     bool hasActiveVideo = isVideo() && hasVideo();
@@ -6443,13 +6442,19 @@
     if (m_player && m_player->isCurrentPlaybackTargetWireless())
         state |= IsPlayingToExternalDevice;
 
-    if (m_player && m_hasPlaybackTargetAvailabilityListeners && !m_mediaSession->wirelessVideoPlaybackDisabled(*this))
-        state |= RequiresPlaybackTargetMonitoring;
+    if (m_hasPlaybackTargetAvailabilityListeners) {
+        state |= HasPlaybackTargetAvailabilityListener;
+        if (!m_mediaSession->wirelessVideoPlaybackDisabled(*this))
+            state |= RequiresPlaybackTargetMonitoring;
+    }
 
     bool requireUserGesture = m_mediaSession->hasBehaviorRestriction(MediaElementSession::RequireUserGestureToAutoplayToExternalDevice);
     if (m_readyState >= HAVE_METADATA && !requireUserGesture && !m_failedToPlayToWirelessTarget)
         state |= ExternalDeviceAutoPlayCandidate;
 
+    if (hasActiveVideo || hasAudio)
+        state |= HasAudioOrVideo;
+
     if (hasActiveVideo && endedPlayback())
         state |= DidPlayToEnd;
 #endif

Modified: branches/safari-601-branch/Source/WebCore/page/MediaProducer.h (195737 => 195738)


--- branches/safari-601-branch/Source/WebCore/page/MediaProducer.h	2016-01-28 16:18:32 UTC (rev 195737)
+++ branches/safari-601-branch/Source/WebCore/page/MediaProducer.h	2016-01-28 16:26:25 UTC (rev 195738)
@@ -38,6 +38,8 @@
         RequiresPlaybackTargetMonitoring = 1 << 3,
         ExternalDeviceAutoPlayCandidate = 1 << 4,
         DidPlayToEnd = 1 << 5,
+        HasPlaybackTargetAvailabilityListener = 1 << 9,
+        HasAudioOrVideo = 1 << 10,
     };
     typedef unsigned MediaStateFlags;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to