Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 17897423938e86e276fab1d57b6ef0d99944e41d
https://github.com/WebKit/WebKit/commit/17897423938e86e276fab1d57b6ef0d99944e41d
Author: Eric Carlson <[email protected]>
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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes