Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 17897423938e86e276fab1d57b6ef0d99944e41d https://github.com/WebKit/WebKit/commit/17897423938e86e276fab1d57b6ef0d99944e41d Author: Eric Carlson <eric.carl...@apple.com> Date: 2025-07-24 (Thu, 24 Jul 2025)
Changed paths: M Source/WebCore/Headers.cmake M Source/WebCore/Modules/audiosession/DOMAudioSession.cpp M Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp M Source/WebCore/Modules/mediasession/MediaSession.cpp M Source/WebCore/Modules/mediasession/MediaSession.h M Source/WebCore/Modules/mediastream/MediaStream.cpp M Source/WebCore/Modules/mediastream/MediaStream.h M Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp M Source/WebCore/Modules/mediastream/MediaStreamTrack.h M Source/WebCore/Modules/mediastream/UserMediaRequest.cpp M Source/WebCore/Modules/webaudio/AudioContext.cpp M Source/WebCore/Modules/webaudio/AudioContext.h M Source/WebCore/Modules/webaudio/BaseAudioContext.cpp M Source/WebCore/Modules/webaudio/BaseAudioContext.h M Source/WebCore/SaferCPPExpectations/UncheckedCallArgsCheckerExpectations M Source/WebCore/WebCore.xcodeproj/project.pbxproj M Source/WebCore/dom/Document.cpp M Source/WebCore/html/HTMLMediaElement.cpp M Source/WebCore/html/HTMLMediaElement.h M Source/WebCore/html/MediaElementSession.cpp M Source/WebCore/page/Page.cpp M Source/WebCore/page/Page.h M Source/WebCore/page/PageConfiguration.h M Source/WebCore/page/SettingsBase.h M Source/WebCore/page/cocoa/PageCocoa.mm M Source/WebCore/platform/RemoteCommandListener.h M Source/WebCore/platform/audio/MediaSessionManagerInterface.h M Source/WebCore/platform/audio/PlatformMediaSession.cpp M Source/WebCore/platform/audio/PlatformMediaSession.h M Source/WebCore/platform/audio/PlatformMediaSessionInterface.cpp M Source/WebCore/platform/audio/PlatformMediaSessionInterface.h M Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp M Source/WebCore/platform/audio/PlatformMediaSessionManager.h A Source/WebCore/platform/audio/PlatformMediaSessionTypes.h M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm M Source/WebCore/platform/audio/glib/MediaSessionManagerGLib.cpp M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h M Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm M Source/WebCore/platform/graphics/MediaPlaybackTarget.h M Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp M Source/WebCore/platform/mediacapabilities/MediaDecodingConfiguration.h M Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp M Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h M Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp M Source/WebCore/testing/InternalSettings.cpp M Source/WebCore/testing/Internals.cpp M Source/WebCore/testing/Internals.h M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in M Source/WebKit/UIProcess/WebPageProxy.cpp M Source/WebKit/UIProcess/WebPageProxy.h M Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp M Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm M Source/WebKit/WebProcess/WebPage/WebPage.cpp M Source/WebKit/WebProcess/WebPage/WebPage.h M Source/WebKit/WebProcess/WebPage/WebPage.messages.in M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm M Source/WebKit/WebProcess/WebProcess.cpp M Source/WebKit/WebProcess/WebProcess.h M Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm Log Message: ----------- Remove PlatformMediaSessionManager::singleton https://bugs.webkit.org/show_bug.cgi?id=292687 rdar://150885431 Reviewed by Andy Estes. For site-isolation we will need to move MediaSessionManager and related classes to the GPU process and have a different MediaSessionManagerInterface proxy for every Page. As a step in this direction, get rid of PlatformMediaSessionManager::singleton and add Page::mediaSessionManager and remove all PlatformMediaSessionManager static methods. Add a factory function to PageConfiguration that WebProcess will use to create a RemoveMediaSessionManager once it exists. * Source/WebCore/Headers.cmake: * Source/WebCore/Modules/audiosession/DOMAudioSession.cpp: (WebCore::DOMAudioSession::setType): Use Page::mediaSessionManager instead of PlatformMediaSessionManager::singleton. * Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp: (WebCore::gatherDecodingInfo): Ditto. * Source/WebCore/Modules/mediasession/MediaSession.cpp: (WebCore::MediaSession::setActionHandler): Ditto. (WebCore::MediaSession::protectedDocument const): Add Document RefPtr (WebCore::MediaSession::sessionManager const): Add accessor. (WebCore::MediaSession::activeMediaElement const): (WebCore::MediaSession::updateNowPlayingInfo): (WebCore::MediaSession::updateCaptureState): (WebCore::MediaSession::document const): Deleted. * Source/WebCore/Modules/mediasession/MediaSession.h: * Source/WebCore/Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::startProducingData): Call `sessionCanProduceAudioChanged` if the stream has an audio track so we don't need to do call it from the Mock audio source. (WebCore::MediaStream::mediaSessionManager const): * Source/WebCore/Modules/mediastream/MediaStream.h: * Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Use Page::mediaSessionManager instead of PlatformMediaSessionManager::singleton. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::stopTrack): Ditto. (WebCore::MediaStreamTrack::trackEnded): Ditto. (WebCore::MediaStreamTrack::trackMutedChanged): Ditto. (WebCore::MediaStreamTrack::mediaSessionManager const): * Source/WebCore/Modules/mediastream/MediaStreamTrack.h: * Source/WebCore/Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::start): Ditto. * Source/WebCore/Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::defaultDestinationWillBecomeConnected): Ditto. (WebCore::AudioContext::sessionManager const): Ditto. * Source/WebCore/Modules/webaudio/AudioContext.h: * Source/WebCore/Modules/webaudio/BaseAudioContext.cpp: (WebCore::BaseAudioContext::setState): Ditto. (WebCore::BaseAudioContext::mediaSessionManager const): * Source/WebCore/Modules/webaudio/BaseAudioContext.h: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/dom/Document.cpp: (WebCore::Document::visibilityStateChanged): Ditto. * Source/WebCore/html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::bestMediaElementForRemoteControls): Deleted. (WebCore::HTMLMediaElement::seekToPlaybackPositionEndedTimerFired): Use Page::mediaSessionManager instead of PlatformMediaSessionManager::singleton. (WebCore::HTMLMediaElement::couldPlayIfEnoughData const): Ditto. (WebCore::HTMLMediaElement::shouldDisableSleep const): Ditto. (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const): Ditto. (WebCore::HTMLMediaElement::sessionManager const): * Source/WebCore/html/HTMLMediaElement.h: * Source/WebCore/html/MediaElementSession.cpp: (WebCore::MediaElementSession::isVisibleInViewportChanged): Use PlatformMediaSessionClient::sessionManager instead of PlatformMediaSessionManager::singleton. (WebCore::MediaElementSession::clientDataBufferingTimerFired): Ditto. (WebCore::MediaElementSession::updateClientDataBuffering): Ditto. (WebCore::MediaElementSession::canShowControlsManager const): Ditto. (WebCore::MediaElementSession::setHasPlaybackTargetAvailabilityListeners): Ditto. * Source/WebCore/page/Page.cpp: (WebCore::Page::bestMediaElementForRemoteControls): Move from HTMLMediaElement. (WebCore::Page::mediaPlaybackExists): Use mediaSessionManager instance variable instead of PlatformMediaSessionManager::singletonIfExists. (WebCore::Page::mediaPlaybackIsPaused): Ditto. (WebCore::Page::pauseAllMediaPlayback): Ditto. (WebCore::Page::suspendAllMediaPlayback): Ditto. (WebCore::Page::resumeAllMediaPlayback): Ditto. (WebCore::Page::suspendAllMediaBuffering): Ditto. (WebCore::Page::resumeAllMediaBuffering): Ditto. (WebCore::Page::setActivityState): Ditto. (WebCore::Page::activeNowPlayingSessionUpdateTimerFired): Ditto. (WebCore::Page::setPresentingApplicationAuditToken): Ditto. (WebCore::Page::mediaSessionManager): Allocate `m_mediaSessionManager` with the factory function if it doesn't exist. If m_mediaSessionManagerFactory is null, true for WK1 and WK2 until we move the session manager to the GPU process, create a factory that allocates and instance of PlatformMediaSessionManager. (WebCore::Page::mediaSessionManagerIfExists const): (WebCore::Page::mediaSessionManagerForPageIdentifier): * Source/WebCore/page/Page.h: * Source/WebCore/page/PageConfiguration.h: Add MediaSessionManagerFactory. * Source/WebCore/page/cocoa/PageCocoa.mm: (WebCore::Page::setPresentingApplicationBundleIdentifier): Use mediaSessionManager() instead of PlatformMediaSessionManager directly. * Source/WebCore/platform/RemoteCommandListener.h: * Source/WebCore/platform/audio/MediaSessionManagerInterface.h: Inherit from ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr. (WebCore::MediaSessionManagerInterface::addSupportedCommand): (WebCore::MediaSessionManagerInterface::removeSupportedCommand): (WebCore::MediaSessionManagerInterface::supportedCommands const): * Source/WebCore/platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::setActive): Use the client's mediaSessionManager instead of PlatformMediaSessionManager::singleton. (WebCore::PlatformMediaSession::setState): Ditto. (WebCore::PlatformMediaSession::clientWillBeginPlayback): Ditto. (WebCore::PlatformMediaSession::processClientWillPausePlayback): Ditto. (WebCore::PlatformMediaSession::stopSession): Ditto. (WebCore::PlatformMediaSession::isPlayingToWirelessPlaybackTargetChanged): Ditto. (WebCore::PlatformMediaSession::canProduceAudioChanged): Ditto. (WebCore::PlatformMediaSession::clientCharacteristicsChanged): Ditto. * Source/WebCore/platform/audio/PlatformMediaSessionInterface.cpp: * Source/WebCore/platform/audio/PlatformMediaSessionInterface.h: Move structs, classes, and enums used by both PlatformMediaSessionInterface andn MediaSessionManagerInterface to PlatformMediaSessionTypes.h to avoid recursive includes. (WebCore::PlatformMediaSessionInterface::sessionManager const): * Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp: (WebCore::PlatformMediaSessionManager::create): Add optional PageIdentifier parameter. (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): Make not static. (WebCore::PlatformMediaSessionManager::updateAudioSessionCategoryIfNecessary): Ditto. (WebCore::sharedPlatformMediaSessionManager): Deleted. (WebCore::PlatformMediaSessionManager::singleton): Deleted. (WebCore::PlatformMediaSessionManager::singletonIfExists): Deleted. (WebCore::PlatformMediaSessionManager::setAlternateWebMPlayerEnabled): Deleted. (WebCore::PlatformMediaSessionManager::alternateWebMPlayerEnabled): Deleted. * Source/WebCore/platform/audio/PlatformMediaSessionManager.h: (WebCore::PlatformMediaSessionManager::ref const): Deleted. (WebCore::PlatformMediaSessionManager::deref const): Deleted. * Source/WebCore/platform/audio/PlatformMediaSessionTypes.h: Added. * Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h: * Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm: (WebCore::MediaSessionManagerCocoa::MediaSessionManagerCocoa): Don't initialize m_defaultBufferSize as it requires a sync call to the GPU process. (WebCore::MediaSessionManagerCocoa::updateSessionState): Initialize m_defaultBufferSize if necessary. (WebCore::PlatformMediaSessionManager::create): Add optional PageIdentifier parameter. * Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::PlatformMediaSessionManager::create): Ditto. * Source/WebCore/platform/graphics/MediaPlayer.cpp: (WebCore::cocoaWebMPlayerEnabled): (WebCore::MediaPlayer::setCocoaWebMPlayerEnabled): * Source/WebCore/platform/graphics/MediaPlayer.h: * Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp: (WebCore::computeMediaCapabilitiesInfo): Use the factory function to look up the correct media session for the configuration page identifier. * Source/WebCore/platform/mediacapabilities/MediaDecodingConfiguration.h: Add optional page identifier. * Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp: (WebCore::mediaSessionManagerProvider): (WebCore::MediaEngineConfigurationFactory::setMediaSessionManagerProvider): (WebCore::MediaEngineConfigurationFactory::mediaSessionManagerForPageIdentifier): * Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h: * Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::startProducingData): Remove the call to PlatformMediaSessionManager::singleton().sessionCanProduceAudioChanged, it is done in MediaStream::startProducingData. Remove the asserts about audio session category and mode because they will be changed asynchronously. * Source/WebCore/testing/InternalSettings.cpp: (WebCore::InternalSettings::Backup::Backup): (WebCore::InternalSettings::Backup::restoreTo): (WebCore::InternalSettingsWrapper::InternalSettingsWrapper): Deleted. (WebCore::InternalSettingsWrapper::~InternalSettingsWrapper): Deleted. (): Deleted. (WebCore::InternalSettingsWrapper::internalSettings const): Deleted. (WebCore::InternalSettings::supplementName): Deleted. (WebCore::InternalSettings::from): Deleted. (WebCore::InternalSettings::hostDestroyed): Deleted. (WebCore::InternalSettings::InternalSettings): Deleted. (WebCore::InternalSettings::create): Deleted. (WebCore::InternalSettings::resetToConsistentState): Deleted. (WebCore::InternalSettings::settings const): Deleted. (WebCore::InternalSettings::setStandardFontFamily): Deleted. (WebCore::InternalSettings::setSerifFontFamily): Deleted. (WebCore::InternalSettings::setSansSerifFontFamily): Deleted. (WebCore::InternalSettings::setFixedFontFamily): Deleted. (WebCore::InternalSettings::setCursiveFontFamily): Deleted. (WebCore::InternalSettings::setFantasyFontFamily): Deleted. (WebCore::InternalSettings::setPictographFontFamily): Deleted. (WebCore::InternalSettings::setTextAutosizingWindowSizeOverride): Deleted. (WebCore::InternalSettings::setEditingBehavior): Deleted. (WebCore::InternalSettings::setStorageBlockingPolicy): Deleted. (WebCore::InternalSettings::setMinimumTimerInterval): Deleted. (WebCore::InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls): Deleted. (WebCore::InternalSettings::setFontLoadTimingOverride): Deleted. (WebCore::InternalSettings::setAllowAnimationControlsOverride): Deleted. (WebCore::InternalSettings::setUserInterfaceDirectionPolicy): Deleted. (WebCore::InternalSettings::setSystemLayoutDirection): Deleted. (WebCore::InternalSettings::forcedColorsAreInvertedAccessibilityValue const): Deleted. (WebCore::InternalSettings::setForcedColorsAreInvertedAccessibilityValue): Deleted. (WebCore::InternalSettings::forcedDisplayIsMonochromeAccessibilityValue const): Deleted. (WebCore::InternalSettings::setForcedDisplayIsMonochromeAccessibilityValue): Deleted. (WebCore::InternalSettings::forcedPrefersContrastAccessibilityValue const): Deleted. (WebCore::InternalSettings::setForcedPrefersContrastAccessibilityValue): Deleted. (WebCore::InternalSettings::forcedPrefersReducedMotionAccessibilityValue const): Deleted. (WebCore::InternalSettings::setForcedPrefersReducedMotionAccessibilityValue): Deleted. (WebCore::InternalSettings::forcedSupportsHighDynamicRangeValue const): Deleted. (WebCore::InternalSettings::setForcedSupportsHighDynamicRangeValue): Deleted. (WebCore::InternalSettings::vp9DecoderEnabled const): Deleted. (WebCore::InternalSettings::setCustomPasteboardDataEnabled): Deleted. (WebCore::InternalSettings::setShouldManageAudioSessionCategory): Deleted. (WebCore::InternalSettings::setShouldDisplayTrackKind): Deleted. (WebCore::InternalSettings::shouldDisplayTrackKind): Deleted. (WebCore::InternalSettings::setEditableRegionEnabled): Deleted. (WebCore::InternalSettings::setCanStartMedia): Deleted. (WebCore::InternalSettings::setUseDarkAppearance): Deleted. (WebCore::InternalSettings::setUseElevatedUserInterfaceLevel): Deleted. (WebCore::InternalSettings::setAllowUnclampedScrollPosition): Deleted. (WebCore::InternalSettings::setShouldDeactivateAudioSession): Deleted. (WebCore::InternalSettings::setShouldMockBoldSystemFontForAccessibility): Deleted. (WebCore::InternalSettings::setDefaultAudioContextSampleRate): Deleted. (WebCore::InternalSettings::setAllowedMediaContainerTypes): Deleted. (WebCore::InternalSettings::setAllowedMediaCodecTypes): Deleted. (WebCore::InternalSettings::setAllowedMediaVideoCodecIDs): Deleted. (WebCore::InternalSettings::setAllowedMediaAudioCodecIDs): Deleted. (WebCore::InternalSettings::setAllowedMediaCaptionFormatTypes): Deleted. * Source/WebCore/testing/Internals.cpp: (WebCore::Internals::resetToConsistentState): (WebCore::Internals::beginMediaSessionInterruption): (WebCore::Internals::endMediaSessionInterruption): (WebCore::Internals::applicationWillBecomeInactive): (WebCore::Internals::applicationDidBecomeActive): (WebCore::Internals::applicationWillEnterForeground const): (WebCore::Internals::applicationDidEnterBackground const): (WebCore::Internals::setMediaSessionRestrictions): (WebCore::Internals::mediaSessionRestrictions const): (WebCore::Internals::postRemoteControlCommand): (WebCore::Internals::simulateSystemSleep const): (WebCore::Internals::simulateSystemWake const): (WebCore::Internals::nowPlayingMetadata const): (WebCore::Internals::nowPlayingState const): (WebCore::Internals::isMonitoringWirelessRoutes const): (WebCore::Internals::audioCaptureSourceCount const): (WebCore::Internals::processWillSuspend): (WebCore::Internals::processDidResume): (WebCore::Internals::setIsPlayingToAutomotiveHeadUnit): (WebCore::Internals::platformSupportedCommands const): (WebCore::Internals::sessionManager const): * Source/WebCore/testing/Internals.h: * Source/WebKit/GPUProcess/GPUProcess.cpp: (WebKit::GPUProcess::updateGPUProcessPreferences): setAlternateWebMPlayerEnabled moved from PlatformMediaSessionManager to MediaPlayer. * Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in: * Source/WebKit/UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::processWillSuspend): Added, used to (WebKit::WebPageProxy::processDidResume): * Source/WebKit/UIProcess/WebPageProxy.h: * Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp: (WebKit::GPUProcessConnection::didReceiveRemoteCommand): Pass the remote command to the WebProcess, which will pass it to the each WebPage, which will pass it to the Page, which will pass it to the media session manager. * Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm: (WebKit::WebPage::requestActiveNowPlayingSessionInfo): (WebKit::WebPage::processSystemWillSleep const): (WebKit::WebPage::processSystemDidWake const): * Source/WebKit/WebProcess/WebPage/WebPage.cpp: (WebKit::m_textAnimationController): (WebKit::WebPage::updatePreferences): (WebKit::WebPage::processWillSuspend): (WebKit::WebPage::processDidResume): (WebKit::WebPage::didReceiveRemoteCommand): (WebKit::WebPage::startObservingNowPlayingMetadata): (WebKit::WebPage::stopObservingNowPlayingMetadata): (WebKit::WebPage::mediaSessionManager const): (WebKit::WebPage::mediaSessionManagerIfExists const): * Source/WebKit/WebProcess/WebPage/WebPage.h: * Source/WebKit/WebProcess/WebPage/WebPage.messages.in: * Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::applicationWillResignActive): (WebKit::WebPage::applicationDidEnterBackground): (WebKit::WebPage::applicationWillEnterForeground): (WebKit::WebPage::applicationDidBecomeActive): (WebKit::WebPage::applicationDidEnterBackgroundForMedia): (WebKit::WebPage::applicationWillEnterForegroundForMedia): * Source/WebKit/WebProcess/WebProcess.cpp: (WebKit::WebProcess::prepareToSuspend): (WebKit::WebProcess::processDidResume): (WebKit::WebProcess::didReceiveRemoteCommand): * Source/WebKit/WebProcess/WebProcess.h: * Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::systemWillSleep): (WebKit::WebProcess::systemDidWake): Canonical link: https://commits.webkit.org/297837@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes