Always use MediaPlayback audio category when playing to AppleTV
[WebKit-https.git] / Source / WebCore / platform / audio / cocoa / MediaSessionManagerCocoa.cpp
index fbf2f29cf50872b6356c4af67ee4dfc1cb396c6c..b3e16279df8b95c51526d5772f5480b8a37dcd1a 100644 (file)
@@ -37,9 +37,8 @@ using namespace WebCore;
 
 static const size_t kWebAudioBufferSize = 128;
 static const size_t kLowPowerVideoBufferSize = 4096;
-static const Seconds updateSessionStateDelay { 100_ms };
 
-void PlatformMediaSessionManager::scheduleUpdateSessionState()
+void PlatformMediaSessionManager::updateSessionState()
 {
     LOG(Media, "PlatformMediaSessionManager::scheduleUpdateSessionState() - types: Video(%d), Audio(%d), WebAudio(%d)", count(PlatformMediaSession::Video), count(PlatformMediaSession::Audio), count(PlatformMediaSession::WebAudio));
 
@@ -65,34 +64,27 @@ void PlatformMediaSessionManager::scheduleUpdateSessionState()
     if (!DeprecatedGlobalSettings::shouldManageAudioSessionCategory())
         return;
 
-    if (!m_updateStateTimer) {
-        auto updateSessionState = [this] () mutable {
-
-            bool hasWebAudioType = false;
-            bool hasAudibleAudioOrVideoMediaType = false;
-            bool hasAudioCapture = anyOfSessions([&hasWebAudioType, &hasAudibleAudioOrVideoMediaType] (PlatformMediaSession& session, size_t) mutable {
-                auto type = session.mediaType();
-                if (type == PlatformMediaSession::WebAudio)
-                    hasWebAudioType = true;
-                if ((type == PlatformMediaSession::VideoAudio || type == PlatformMediaSession::Audio) && session.canProduceAudio() && session.state() == PlatformMediaSession::Playing)
-                    hasAudibleAudioOrVideoMediaType = true;
-                return (type == PlatformMediaSession::MediaStreamCapturingAudio);
-            });
-
-            if (hasAudioCapture)
-                AudioSession::sharedSession().setCategory(AudioSession::PlayAndRecord);
-            else if (hasAudibleAudioOrVideoMediaType)
-                AudioSession::sharedSession().setCategory(AudioSession::MediaPlayback);
-            else if (hasWebAudioType)
-                AudioSession::sharedSession().setCategory(AudioSession::AmbientSound);
-            else
-                AudioSession::sharedSession().setCategory(AudioSession::None);
-        };
-
-        m_updateStateTimer = std::make_unique<DeferrableOneShotTimer>(WTFMove(updateSessionState), updateSessionStateDelay);
-    }
-
-    m_updateStateTimer->restart();
+    bool hasWebAudioType = false;
+    bool hasAudibleAudioOrVideoMediaType = false;
+    bool hasAudioCapture = anyOfSessions([&hasWebAudioType, &hasAudibleAudioOrVideoMediaType] (PlatformMediaSession& session, size_t) mutable {
+        auto type = session.mediaType();
+        if (type == PlatformMediaSession::WebAudio)
+            hasWebAudioType = true;
+        if ((type == PlatformMediaSession::VideoAudio || type == PlatformMediaSession::Audio) && session.canProduceAudio() && session.state() == PlatformMediaSession::Playing)
+            hasAudibleAudioOrVideoMediaType = true;
+        if (session.isPlayingToWirelessPlaybackTarget())
+            hasAudibleAudioOrVideoMediaType = true;
+        return (type == PlatformMediaSession::MediaStreamCapturingAudio);
+    });
+
+    if (hasAudioCapture)
+        AudioSession::sharedSession().setCategory(AudioSession::PlayAndRecord);
+    else if (hasAudibleAudioOrVideoMediaType)
+        AudioSession::sharedSession().setCategory(AudioSession::MediaPlayback);
+    else if (hasWebAudioType)
+        AudioSession::sharedSession().setCategory(AudioSession::AmbientSound);
+    else
+        AudioSession::sharedSession().setCategory(AudioSession::None);
 }
 
 #endif // USE(AUDIO_SESSION)