void PlatformMediaSessionManager::sessionWillEndPlayback(PlatformMediaSession& session) { LOG(Media, "PlatformMediaSessionManager::sessionWillEndPlayback - %p", &session); if (m_sessions.size() < 2) return; size_t pausingSessionIndex = notFound; size_t lastPlayingSessionIndex = notFound; for (size_t i = 0; i < m_sessions.size(); ++i) { PlatformMediaSession* oneSession = m_sessions[i]; if (oneSession == &session) { pausingSessionIndex = i; continue; } if (oneSession->state() == PlatformMediaSession::Playing) { lastPlayingSessionIndex = i; continue; } if (oneSession->state() != PlatformMediaSession::Playing) break; } if (lastPlayingSessionIndex == notFound || pausingSessionIndex == notFound) return; if (pausingSessionIndex > lastPlayingSessionIndex) return; m_sessions.remove(pausingSessionIndex); m_sessions.insert(lastPlayingSessionIndex, &session); LOG(Media, "PlatformMediaSessionManager::sessionWillEndPlayback - session moved from index %zu to %zu", pausingSessionIndex, lastPlayingSessionIndex); }
bool PlatformMediaSessionManager::sessionWillBeginPlayback(PlatformMediaSession& session) { LOG(Media, "PlatformMediaSessionManager::sessionWillBeginPlayback - %p", &session); setCurrentSession(session); PlatformMediaSession::MediaType sessionType = session.mediaType(); SessionRestrictions restrictions = m_restrictions[sessionType]; if (session.state() == PlatformMediaSession::Interrupted && restrictions & InterruptedPlaybackNotPermitted) return false; #if USE(AUDIO_SESSION) if (activeAudioSessionRequired() && !AudioSession::sharedSession().tryToSetActive(true)) return false; #endif if (m_interrupted) endInterruption(PlatformMediaSession::NoFlags); Vector<PlatformMediaSession*> sessions = m_sessions; for (auto* oneSession : sessions) { if (oneSession == &session) continue; if (oneSession->mediaType() == sessionType && restrictions & ConcurrentPlaybackNotPermitted) oneSession->pauseSession(); } updateSessionState(); return true; }
void PlatformMediaSessionManager::sessionIsPlayingToWirelessPlaybackTargetChanged(PlatformMediaSession& session) { if (!m_isApplicationInBackground || !(m_restrictions[session.mediaType()] & BackgroundProcessPlaybackRestricted)) return; if (session.state() != PlatformMediaSession::Interrupted) session.beginInterruption(PlatformMediaSession::EnteringBackground); }
bool PlatformMediaSessionManager::sessionCanLoadMedia(const PlatformMediaSession& session) const { return session.state() == PlatformMediaSession::Playing || !session.isHidden() || session.isPlayingToWirelessPlaybackTarget(); }
bool PlatformMediaSessionManager::sessionCanLoadMedia(const PlatformMediaSession& session) const { return session.state() == PlatformMediaSession::Playing || !session.isHidden() || session.shouldOverrideBackgroundLoadingRestriction(); }