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

Reply via email to