Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8bab7e486b9e9b8bc8042aa39f34ec0532cacb4e
https://github.com/WebKit/WebKit/commit/8bab7e486b9e9b8bc8042aa39f34ec0532cacb4e
Author: Jean-Yves Avenard <[email protected]>
Date: 2026-03-09 (Mon, 09 Mar 2026)
Changed paths:
A
LayoutTests/media/mediacapabilities/mediacapabilities-decodingInfo-spatialRendering-expected.txt
A
LayoutTests/media/mediacapabilities/mediacapabilities-decodingInfo-spatialRendering.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/ios/TestExpectations
M LayoutTests/platform/mac/TestExpectations
M Source/WebCore/SourcesCocoa.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/platform/audio/MediaSessionManagerInterface.cpp
M Source/WebCore/platform/audio/MediaSessionManagerInterface.h
M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h
M Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm
A Source/WebCore/platform/audio/cocoa/SpatialAudioPlaybackHelper.h
M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h
M Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm
M Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h
M Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm
A Source/WebCore/platform/audio/ios/SpatialAudioPlaybackHelperIOS.mm
A Source/WebCore/platform/audio/mac/SpatialAudioPlaybackHelperMac.cpp
M
Source/WebCore/platform/graphics/cocoa/PlatformMediaEngineConfigurationFactoryCocoa.cpp
M Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.cpp
M Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.h
M Source/WebKit/Scripts/webkit/messages.py
M
Source/WebKit/WebProcess/GPU/media/RemoteAudioSessionConfiguration.serialization.in
M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp
M Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h
M
Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.messages.in
Log Message:
-----------
MediaCapabilities will always return unsupported if spatialRendering is set
to true
https://bugs.webkit.org/show_bug.cgi?id=309336
rdar://171733202
Reviewed by Eric Carlson.
MediaCapabilities failed to properly resolve the promise if the spatialRendering
attribute was set on the AudioConfiguration.
The reason was that computeMediaCapabilitiesInfo was looking for a
MediaSessionManager
that did not exist in the GPU process.
We extract the handling of Spatial Audio Support detection from
MediaSessionManagerCocoa
into its own SpatialAudioPlaybackHelper and have the
PlatformMediaEngineConfigurationFactoryCocoa
directly queries it for support check.
There was no use for the web process to know about the state of spatial audio
support,
so we can remove the client listeners used to propagate the changes from the
MediaSessionHelper
back to the MediaSessionManager. It was also incorrectly reporting the support
state as changing
if the last queried returned false (like if query for a particular
configuration contained less than 3 channels)
SpatialAudioPlaybackHelper.h - Simple header with a single public static method
`supportsSpatialAudioPlaybackForConfiguration`
Design Decisions:
* Mac implementation is stateless (no singleton needed) - queries AudioToolbox
directly
* iOS implementation maintains cached state with notification observer for
route changes
*
LayoutTests/media/mediacapabilities/mediacapabilities-decodingInfo-spatialRendering-expected.txt:
Added.
*
LayoutTests/media/mediacapabilities/mediacapabilities-decodingInfo-spatialRendering.html:
Added. Test will fail unless hardware supports spatial rendering (e.g. real
iPhone or macbooks)
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac/TestExpectations:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/audio/MediaSessionManagerInterface.cpp:
(WebCore::MediaSessionManagerInterface::setSupportsSpatialAudioPlayback):
Deleted.
* Source/WebCore/platform/audio/MediaSessionManagerInterface.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.h:
* Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm:
(WebCore::MediaSessionManagerCocoa::supportsSpatialAudioPlaybackForConfiguration):
Deleted.
* Source/WebCore/platform/audio/cocoa/SpatialAudioPlaybackHelper.h: Added.
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.h:
* Source/WebCore/platform/audio/ios/MediaSessionHelperIOS.mm:
(-[WebMediaSessionHelper initWithCallback:]):
(MediaSessionHelper::activeAudioRouteSupportsSpatialPlaybackDidChange): Deleted.
(MediaSessionHelper::updateActiveAudioRouteSupportsSpatialPlayback): Deleted.
(MediaSessionHelper::setActiveAudioRouteSupportsSpatialPlayback): Deleted.
(-[WebMediaSessionHelper spatialPlaybackCapabilitiesChanged:]): Deleted.
* Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.h:
* Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::MediaSessionManageriOS::activeAudioRouteSupportsSpatialPlaybackDidChange):
Deleted.
(WebCore::MediaSessionManagerCocoa::supportsSpatialAudioPlaybackForConfiguration):
Deleted.
* Source/WebCore/platform/audio/ios/SpatialAudioPlaybackHelperIOS.mm: Added.
(WebCore::SpatialAudioPlaybackHelperIOS::singleton):
(WebCore::SpatialAudioPlaybackHelperIOS::SpatialAudioPlaybackHelperIOS):
(WebCore::SpatialAudioPlaybackHelperIOS::~SpatialAudioPlaybackHelperIOS):
(WebCore::SpatialAudioPlaybackHelperIOS::updateActiveAudioRouteSupportsSpatialPlayback):
(WebCore::SpatialAudioPlaybackHelper::supportsSpatialAudioPlaybackForConfiguration):
(-[WebSpatialAudioPlaybackObserver initWithCallback:]):
(-[WebSpatialAudioPlaybackObserver shutdown]):
(-[WebSpatialAudioPlaybackObserver dealloc]):
(-[WebSpatialAudioPlaybackObserver spatialPlaybackCapabilitiesChanged:]):
* Source/WebCore/platform/audio/mac/SpatialAudioPlaybackHelperMac.cpp: Added.
(WebCore::SpatialAudioPlaybackHelper::supportsSpatialAudioPlaybackForConfiguration):
*
Source/WebCore/platform/graphics/cocoa/PlatformMediaEngineConfigurationFactoryCocoa.cpp:
(WebCore::computeMediaCapabilitiesInfo):
* Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.cpp:
(WebKit::RemoteMediaSessionHelperProxy::activeAudioRouteSupportsSpatialPlaybackDidChange):
Deleted.
* Source/WebKit/GPUProcess/media/ios/RemoteMediaSessionHelperProxy.h:
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
*
Source/WebKit/WebProcess/GPU/media/RemoteAudioSessionConfiguration.serialization.in:
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.cpp:
(WebKit::RemoteMediaSessionHelper::activeAudioRouteSupportsSpatialPlaybackDidChange):
Deleted.
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.h:
* Source/WebKit/WebProcess/GPU/media/ios/RemoteMediaSessionHelper.messages.in:
Canonical link: https://commits.webkit.org/308963@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications