Changeset 295560 in webkit


Ignore:
Timestamp:
Jun 15, 2022 8:39:17 AM (2 years ago)
Author:
pvollan@apple.com
Message:

[GPUP] Send Audio component registrations from the UI process
https://bugs.webkit.org/show_bug.cgi?id=241339
<rdar://88659991>

Reviewed by Geoffrey Garen.

Currently, Audio component registrations are only sent to the WebContent process. They should be sent to the GPU process as well.
This patch moves the existing registration code from the WebContent process code to the Auxiliary process code.

  • Source/WebKit/GPUProcess/GPUProcess.messages.in:
  • Source/WebKit/Shared/AuxiliaryProcess.h:
  • Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm:

(WebKit::AuxiliaryProcess::consumeAudioComponentRegistrations):

  • Source/WebKit/UIProcess/AuxiliaryProcessProxy.h:
  • Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProcyCocoa.mm: Added.

(WebKit::AuxiliaryProcessProxy::fetchAudioComponentServerRegistrations):

  • Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm:

(WebKit::WebProcessProxy::sendAudioComponentRegistrations):

  • Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:

(WebKit::GPUProcessProxy::didFinishLaunching):

  • Source/WebKit/WebKit.xcodeproj/project.pbxproj:
  • Source/WebKit/WebProcess/WebProcess.h:
  • Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:

(WebKit::WebProcess::consumeAudioComponentRegistrations): Deleted.

Canonical link: https://commits.webkit.org/251565@main

Location:
trunk/Source
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/wtf/PlatformHave.h

    r295557 r295560  
    12371237#endif
    12381238
     1239#if !defined(HAVE_AUDIO_COMPONENT_SERVER_REGISTRATIONS) && PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 120000
     1240#define HAVE_AUDIO_COMPONENT_SERVER_REGISTRATIONS 1
     1241#endif
     1242
    12391243#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 130000)
    12401244#define HAVE_SHARING_SERVICE_PICKER_POPOVER_SPI 1
  • trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in

    r295530 r295560  
    9292#endif
    9393
     94#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     95    ConsumeAudioComponentRegistrations(IPC::SharedBufferReference registrationData)
     96#endif
     97
    9498#if HAVE(POWERLOG_TASK_MODE_QUERY)
    9599    EnablePowerLogging(WebKit::SandboxExtension::Handle handle)
  • trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in

    r295530 r295560  
    643643    (ipc-posix-name-prefix "AudioIO"))
    644644
     645#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     646(deny mach-lookup (with telemetry)
     647    (global-name "com.apple.audio.AudioComponentRegistrar"))
     648#else
    645649(allow mach-lookup
    646650    (global-name "com.apple.audio.AudioComponentRegistrar"))
     651#endif
    647652
    648653#if !ENABLE(CFPREFS_DIRECT_MODE)
  • trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb.in

    r295235 r295560  
    694694    (xpc-service-name "com.apple.audio.toolbox.reporting.service")
    695695)
     696
     697(deny mach-lookup (with no-log) (with telemetry)
     698    (global-name "com.apple.audio.AudioComponentRegistrar"))
    696699
    697700(deny mach-lookup (with telemetry)
  • trunk/Source/WebKit/Shared/AuxiliaryProcess.h

    r295270 r295560  
    4545OBJC_CLASS NSDictionary;
    4646
     47namespace IPC {
     48class SharedBufferReference;
     49}
     50
    4751namespace WebKit {
    4852
     
    153157    void populateMobileGestaltCache(std::optional<SandboxExtension::Handle>&& mobileGestaltExtensionHandle);
    154158
     159#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     160    void consumeAudioComponentRegistrations(const IPC::SharedBufferReference&);
     161#endif
     162   
    155163private:
    156164    virtual bool shouldOverrideQuarantine() { return true; }
  • trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm

    r295510 r295560  
    4747#endif
    4848
     49#import <pal/cf/AudioToolboxSoftLink.h>
     50
    4951#if HAVE(UPDATE_WEB_ACCESSIBILITY_SETTINGS) && ENABLE(CFPREFS_DIRECT_MODE)
    5052SOFT_LINK_LIBRARY_OPTIONAL(libAccessibility)
     
    239241}
    240242
     243#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     244void AuxiliaryProcess::consumeAudioComponentRegistrations(const IPC::SharedBufferReference& data)
     245{
     246    using namespace PAL;
     247
     248    if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentApplyServerRegistrations())
     249        return;
     250
     251    if (data.isNull())
     252        return;
     253    auto registrations = data.unsafeBuffer()->createCFData();
     254
     255    auto err = AudioComponentApplyServerRegistrations(registrations.get());
     256    if (noErr != err)
     257        RELEASE_LOG_ERROR(Process, "Could not apply AudioComponent registrations, err(%ld)", static_cast<long>(err));
     258}
     259#endif
     260
    241261} // namespace WebKit
  • trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h

    r295087 r295560  
    178178    bool mayBecomeUnresponsive() override;
    179179
     180#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     181    static RefPtr<WebCore::SharedBuffer> fetchAudioComponentServerRegistrations();
     182#endif
     183
    180184private:
    181185    virtual void connectionWillOpen(IPC::Connection&);
  • trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm

    r294852 r295560  
    4141#import "WebProcessPool.h"
    4242#import <WebCore/RuntimeApplicationChecks.h>
    43 #import <WebCore/WebMAudioUtilitiesCocoa.h>
    4443#import <sys/sysctl.h>
    4544#import <wtf/NeverDestroyed.h>
     
    6766#endif
    6867
    69 #import <pal/cf/AudioToolboxSoftLink.h>
    70 
    7168namespace WebKit {
    7269
     
    271268#endif
    272269
     270#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
    273271void WebProcessProxy::sendAudioComponentRegistrations()
    274272{
    275     using namespace PAL;
    276 
    277     if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentFetchServerRegistrations())
    278         return;
    279 
    280273    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakThis = WeakPtr { *this }] () mutable {
    281         CFDataRef registrations { nullptr };
    282 
    283         WebCore::registerOpusDecoderIfNeeded();
    284         WebCore::registerVorbisDecoderIfNeeded();
    285         if (noErr != AudioComponentFetchServerRegistrations(&registrations) || !registrations)
     274
     275        auto registrations = fetchAudioComponentServerRegistrations();
     276        if (!registrations)
    286277            return;
    287 
    288         RunLoop::main().dispatch([weakThis = WTFMove(weakThis), registrations = adoptCF(registrations)] () {
     278       
     279        RunLoop::main().dispatch([weakThis = WTFMove(weakThis), registrations = WTFMove(registrations)] () mutable {
    289280            if (!weakThis)
    290281                return;
    291282
    292             auto registrationData = WebCore::SharedBuffer::create(registrations.get());
    293             weakThis->send(Messages::WebProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrationData))), 0);
     283            weakThis->send(Messages::WebProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrations))), 0);
    294284        });
    295285    });
    296286}
     287#endif
    297288
    298289bool WebProcessProxy::messageSourceIsValidWebContentProcess()
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r295530 r295560  
    170170    // Initialize the GPU process.
    171171    send(Messages::GPUProcess::InitializeGPUProcess(parameters), 0);
     172
     173#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
     174    auto registrations = fetchAudioComponentServerRegistrations();
     175    if (registrations)
     176        send(Messages::GPUProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrations))), 0);
     177#endif
     178
    172179    updateProcessAssertion();
    173180}
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r295365 r295560  
    912912#endif
    913913
    914 #if PLATFORM(COCOA)
     914#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
    915915    process.sendAudioComponentRegistrations();
    916916#endif
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r295443 r295560  
    22462246                E1E552C516AE065F004ED653 /* SandboxInitializationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E552C316AE065E004ED653 /* SandboxInitializationParameters.h */; };
    22472247                E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E1EE53DC11F8CF9F00CCBEE4 /* InjectedBundlePageEditorClient.h */; };
     2248                E326E357284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */; };
    22482249                E36FF00327F36FBD004BE21A /* SandboxStateVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = E36FF00127F36FBD004BE21A /* SandboxStateVariables.h */; };
    22492250                E36FF00427F36FBD004BE21A /* preferences.sb in Resources */ = {isa = PBXBuildFile; fileRef = E36FF00227F36FBD004BE21A /* preferences.sb */; };
     
    70207021                E30CFB9D2660663C0094D9C0 /* com.apple.WebKit.WebContent.sb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = com.apple.WebKit.WebContent.sb; path = DerivedSources/WebKit/com.apple.WebKit.WebContent.sb; sourceTree = BUILT_PRODUCTS_DIR; };
    70217022                E313664D265EE5AF0051084F /* com.apple.WebKit.WebContent.sb.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.apple.WebKit.WebContent.sb.in; sourceTree = "<group>"; };
     7023                E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AuxiliaryProcessProcyCocoa.mm; sourceTree = "<group>"; };
    70227024                E3439B632345463A0011DE0B /* NetworkProcessConnectionInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = NetworkProcessConnectionInfo.h; path = Network/NetworkProcessConnectionInfo.h; sourceTree = "<group>"; };
    70237025                E34B110C27C46BC6006D2F2E /* libWebCoreTestShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libWebCoreTestShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
     
    82308232                                2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */,
    82318233                                C1710CF224A7BD0300D7C112 /* XPCEventHandler.h */,
     8234                                E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */,
    82328235                        );
    82338236                        path = Cocoa;
     
    1680116804                                2D11B7622126A282006F8878 /* UnifiedSource9.cpp in Sources */,
    1680216805                                2D11B7632126A282006F8878 /* UnifiedSource10-mm.mm in Sources */,
     16806                                E326E357284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm in Sources */,
    1680316807                                2D11B7642126A282006F8878 /* UnifiedSource10.cpp in Sources */,
    1680416808                                2D11B7652126A282006F8878 /* UnifiedSource11-mm.mm in Sources */,
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r294802 r295560  
    7979}
    8080
    81 namespace IPC {
    82 class SharedBufferReference;
    83 }
    84 
    8581namespace PAL {
    8682class SessionID;
     
    534530#endif
    535531
    536 #if PLATFORM(COCOA)
    537     void consumeAudioComponentRegistrations(const IPC::SharedBufferReference&);
    538 #endif
    539    
    540532    void platformInitializeProcess(const AuxiliaryProcessInitializationParameters&);
    541533
  • trunk/Source/WebKit/WebProcess/WebProcess.messages.in

    r294802 r295560  
    195195#endif
    196196
    197 #if PLATFORM(COCOA)
     197#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
    198198    ConsumeAudioComponentRegistrations(IPC::SharedBufferReference registrationData)
     199#endif
     200
     201#if PLATFORM(COCOA)
    199202    AccessibilityPreferencesDidChange(struct WebKit::AccessibilityPreferences accessibilityPreferences)
    200203#endif
  • trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

    r295476 r295560  
    162162
    163163#import <WebCore/MediaAccessibilitySoftLink.h>
    164 #import <pal/cf/AudioToolboxSoftLink.h>
    165164#import <pal/cf/VideoToolboxSoftLink.h>
    166165#import <pal/cocoa/AVFoundationSoftLink.h>
     
    12561255#endif
    12571256
    1258 void WebProcess::consumeAudioComponentRegistrations(const IPC::SharedBufferReference& data)
    1259 {
    1260     using namespace PAL;
    1261 
    1262     if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentApplyServerRegistrations())
    1263         return;
    1264 
    1265     if (data.isNull())
    1266         return;
    1267     auto registrations = data.unsafeBuffer()->createCFData();
    1268 
    1269     auto err = AudioComponentApplyServerRegistrations(registrations.get());
    1270     if (noErr != err)
    1271         WEBPROCESS_RELEASE_LOG_ERROR(Process, "Could not apply AudioComponent registrations, err(%ld)", static_cast<long>(err));
    1272 }
    1273 
    12741257#if PLATFORM(MAC)
    12751258void WebProcess::openDirectoryCacheInvalidated(SandboxExtension::Handle&& handle)
Note: See TracChangeset for help on using the changeset viewer.