Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8b4aba8cb2e4c3bf2f6f607c9ba0a161225955ed
https://github.com/WebKit/WebKit/commit/8b4aba8cb2e4c3bf2f6f607c9ba0a161225955ed
Author: Jean-Yves Avenard <[email protected]>
Date: 2026-09-15 (Tue, 15 Sep 2026)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/page/Page.cpp
M Source/WebCore/page/Page.h
M Source/WebCore/platform/PageIdentifier.h
R Source/WebCore/platform/audio/MediaSessionManagerClient.h
M Source/WebCore/platform/audio/MediaSessionManagerInterface.cpp
M Source/WebCore/platform/audio/MediaSessionManagerInterface.h
M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm
M Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
M Source/WebKit/GPUProcess/GPUProcess.cpp
M Source/WebKit/GPUProcess/GPUProcess.h
M Source/WebKit/GPUProcess/GPUProcess.messages.in
M Source/WebKit/Scripts/webkit/messages.py
M Source/WebKit/Shared/ProcessQualified.serialization.in
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebProcess.cpp
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/NowPlayingSession.mm
Log Message:
-----------
When multiple Safari audio sources are playing, single NPLA instance keeps
flipping through them erratically
https://bugs.webkit.org/show_bug.cgi?id=324221
rdar://182349993
Reviewed by Eric Carlson.
The GPU process collect the Now Playing Info sent by all content process;
the last CP to send the information would win and the UI process would
use that information in the NPLA.
319542@main added an election in the GPUP that picks the preferred media element
but that code was only enabled with site isolation or if
remoteMediaSessionManagerEnabled
was true.
We can actually always use the GPUP arbitror unconditionally.
When enabling it, anything related to the MediaSessionManagerClient and tracking
which Now Playing Session is active in the content process becomes dead code
and can be removed greatly simplifying the code.
A committed main-frame load destroys the page's media sessions, but the GPUP
only
hears that over the content process's connection, which is not ordered against
the
commit; the UIP withdraws the page's candidacy so the election cannot disagree
with
what it reports.
Test: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/NowPlayingSession.mm
* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::hasActiveNowPlayingSessionChanged): Deleted.
* Source/WebCore/page/Page.cpp:
(WebCore::Page::didChangeMainDocument):
(WebCore::Page::hasActiveNowPlayingSessionChanged): Deleted.
(WebCore::Page::updateActiveNowPlayingSessionNow): Deleted.
* Source/WebCore/page/Page.h:
(WebCore::Page::hasActiveNowPlayingSession const): Deleted.
* Source/WebCore/platform/PageIdentifier.h:
* Source/WebCore/platform/audio/MediaSessionManagerClient.h: Removed.
* Source/WebCore/platform/audio/MediaSessionManagerInterface.cpp:
(WebCore::MediaSessionManagerInterface::MediaSessionManagerInterface):
(): Deleted.
(WebCore::MediaSessionManagerInterface::client const): Deleted.
(WebCore::MediaSessionManagerInterface::setClient): Deleted.
(WebCore::MediaSessionManagerInterface::hasActiveNowPlayingSessionInGroup):
Deleted.
* Source/WebCore/platform/audio/MediaSessionManagerInterface.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::removeSession):
(WebCore::MediaSessionManagerCocoa::activeNowPlayingSessionChanged):
* Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::MediaSessionManageriOS::activeNowPlayingSessionChanged):
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::clearNowPlayingInfoForPage):
(WebKit::GPUConnectionToWebProcess::setNowPlayingInfoForPage):
(WebKit::GPUConnectionToWebProcess::nowPlayingClientDidClose):
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::createGPUConnectionToWebProcess):
(WebKit::GPUProcess::sharedPreferencesForWebProcessDidChange):
(WebKit::GPUProcess::removeGPUConnectionToWebProcess):
(WebKit::GPUProcess::recomputeNowPlayingOwner):
(WebKit::GPUProcess::withdrawNowPlayingCandidate):
(WebKit::GPUProcess::updateNowPlayingArbiterActive): Deleted.
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/Scripts/webkit/messages.py:
(types_that_cannot_be_forward_declared):
(headers_for_type):
* Source/WebKit/Shared/ProcessQualified.serialization.in:
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::gpuProcessExited):
(WebKit::pageForNowPlayingOwner):
(WebKit::GPUProcessProxy::nowPlayingOwnerDidChange):
(WebKit::GPUProcessProxy::withdrawNowPlayingCandidatesForPage):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didCommitLoadForFrame):
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::setIsInRedo):
(WebKit::WebChromeClient::hasActiveNowPlayingSessionChanged): Deleted.
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::hasActiveNowPlayingSessionChanged): Deleted.
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::didReceiveRemoteCommand):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/NowPlayingSession.mm:
(createWebViewInItsOwnWebContentProcess):
(TEST(NowPlayingSession, OneOwnerAcrossWebContentProcesses)):
Canonical link: https://commits.webkit.org/321233@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications