Diff
Modified: trunk/Source/WTF/wtf/PlatformHave.h (295559 => 295560)
--- trunk/Source/WTF/wtf/PlatformHave.h 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WTF/wtf/PlatformHave.h 2022-06-15 15:39:17 UTC (rev 295560)
@@ -1236,6 +1236,10 @@
#define HAVE_UIKIT_RESIZABLE_WINDOWS 1
#endif
+#if !defined(HAVE_AUDIO_COMPONENT_SERVER_REGISTRATIONS) && PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 120000
+#define HAVE_AUDIO_COMPONENT_SERVER_REGISTRATIONS 1
+#endif
+
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 130000)
#define HAVE_SHARING_SERVICE_PICKER_POPOVER_SPI 1
#endif
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (295559 => 295560)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-06-15 15:39:17 UTC (rev 295560)
@@ -91,6 +91,10 @@
OpenDirectoryCacheInvalidated(WebKit::SandboxExtension::Handle handle)
#endif
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+ ConsumeAudioComponentRegistrations(IPC::SharedBufferReference registrationData)
+#endif
+
#if HAVE(POWERLOG_TASK_MODE_QUERY)
EnablePowerLogging(WebKit::SandboxExtension::Handle handle)
#endif
Modified: trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in (295559 => 295560)
--- trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in 2022-06-15 15:39:17 UTC (rev 295560)
@@ -642,8 +642,13 @@
(allow ipc-posix-shm-read* ipc-posix-shm-write-data
(ipc-posix-name-prefix "AudioIO"))
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+(deny mach-lookup (with telemetry)
+ (global-name "com.apple.audio.AudioComponentRegistrar"))
+#else
(allow mach-lookup
(global-name "com.apple.audio.AudioComponentRegistrar"))
+#endif
#if !ENABLE(CFPREFS_DIRECT_MODE)
(allow mach-lookup (with telemetry)
Modified: trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb.in (295559 => 295560)
--- trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb.in 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb.in 2022-06-15 15:39:17 UTC (rev 295560)
@@ -694,6 +694,9 @@
(xpc-service-name "com.apple.audio.toolbox.reporting.service")
)
+(deny mach-lookup (with no-log) (with telemetry)
+ (global-name "com.apple.audio.AudioComponentRegistrar"))
+
(deny mach-lookup (with telemetry)
(xpc-service-name "com.apple.iconservices")
(global-name
Modified: trunk/Source/WebKit/Shared/AuxiliaryProcess.h (295559 => 295560)
--- trunk/Source/WebKit/Shared/AuxiliaryProcess.h 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/Shared/AuxiliaryProcess.h 2022-06-15 15:39:17 UTC (rev 295560)
@@ -44,6 +44,10 @@
OBJC_CLASS NSDictionary;
+namespace IPC {
+class SharedBufferReference;
+}
+
namespace WebKit {
class SandboxInitializationParameters;
@@ -152,6 +156,10 @@
void populateMobileGestaltCache(std::optional<SandboxExtension::Handle>&& mobileGestaltExtensionHandle);
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+ void consumeAudioComponentRegistrations(const IPC::SharedBufferReference&);
+#endif
+
private:
virtual bool shouldOverrideQuarantine() { return true; }
Modified: trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm (295559 => 295560)
--- trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm 2022-06-15 15:39:17 UTC (rev 295560)
@@ -46,6 +46,8 @@
#import <pal/spi/mac/HIServicesSPI.h>
#endif
+#import <pal/cf/AudioToolboxSoftLink.h>
+
#if HAVE(UPDATE_WEB_ACCESSIBILITY_SETTINGS) && ENABLE(CFPREFS_DIRECT_MODE)
SOFT_LINK_LIBRARY_OPTIONAL(libAccessibility)
SOFT_LINK_OPTIONAL(libAccessibility, _AXSUpdateWebAccessibilitySettings, void, (), ());
@@ -238,4 +240,22 @@
#endif
}
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+void AuxiliaryProcess::consumeAudioComponentRegistrations(const IPC::SharedBufferReference& data)
+{
+ using namespace PAL;
+
+ if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentApplyServerRegistrations())
+ return;
+
+ if (data.isNull())
+ return;
+ auto registrations = data.unsafeBuffer()->createCFData();
+
+ auto err = AudioComponentApplyServerRegistrations(registrations.get());
+ if (noErr != err)
+ RELEASE_LOG_ERROR(Process, "Could not apply AudioComponent registrations, err(%ld)", static_cast<long>(err));
+}
+#endif
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h (295559 => 295560)
--- trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h 2022-06-15 15:39:17 UTC (rev 295560)
@@ -177,6 +177,10 @@
void didChangeIsResponsive() override { }
bool mayBecomeUnresponsive() override;
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+ static RefPtr<WebCore::SharedBuffer> fetchAudioComponentServerRegistrations();
+#endif
+
private:
virtual void connectionWillOpen(IPC::Connection&);
virtual void processWillShutDown(IPC::Connection&) = 0;
Added: trunk/Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProcyCocoa.mm (0 => 295560)
--- trunk/Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProcyCocoa.mm (rev 0)
+++ trunk/Source/WebKit/UIProcess/Cocoa/AuxiliaryProcessProcyCocoa.mm 2022-06-15 15:39:17 UTC (rev 295560)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "AuxiliaryProcessProxy.h"
+
+#if PLATFORM(COCOA)
+
+#import <WebCore/WebMAudioUtilitiesCocoa.h>
+#import <pal/cf/AudioToolboxSoftLink.h>
+
+namespace WebKit {
+
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+RefPtr<WebCore::SharedBuffer> AuxiliaryProcessProxy::fetchAudioComponentServerRegistrations()
+{
+ using namespace PAL;
+
+ CFDataRef registrations { nullptr };
+
+ if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentFetchServerRegistrations())
+ return nullptr;
+
+ WebCore::registerOpusDecoderIfNeeded();
+ WebCore::registerVorbisDecoderIfNeeded();
+
+ if (noErr != AudioComponentFetchServerRegistrations(®istrations) || !registrations)
+ return nullptr;
+
+ return WebCore::SharedBuffer::create(registrations);
+}
+#endif
+
+} // namespace WebKit
+
+#endif // PLATFORM(COCOA)
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm (295559 => 295560)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm 2022-06-15 15:39:17 UTC (rev 295560)
@@ -40,7 +40,6 @@
#import "WebProcessMessages.h"
#import "WebProcessPool.h"
#import <WebCore/RuntimeApplicationChecks.h>
-#import <WebCore/WebMAudioUtilitiesCocoa.h>
#import <sys/sysctl.h>
#import <wtf/NeverDestroyed.h>
#import <wtf/Scope.h>
@@ -66,8 +65,6 @@
#include "TCCSoftLink.h"
#endif
-#import <pal/cf/AudioToolboxSoftLink.h>
-
namespace WebKit {
static const Seconds unexpectedActivityDuration = 10_s;
@@ -270,30 +267,24 @@
}
#endif
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
void WebProcessProxy::sendAudioComponentRegistrations()
{
- using namespace PAL;
-
- if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentFetchServerRegistrations())
- return;
-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakThis = WeakPtr { *this }] () mutable {
- CFDataRef registrations { nullptr };
- WebCore::registerOpusDecoderIfNeeded();
- WebCore::registerVorbisDecoderIfNeeded();
- if (noErr != AudioComponentFetchServerRegistrations(®istrations) || !registrations)
+ auto registrations = fetchAudioComponentServerRegistrations();
+ if (!registrations)
return;
-
- RunLoop::main().dispatch([weakThis = WTFMove(weakThis), registrations = adoptCF(registrations)] () {
+
+ RunLoop::main().dispatch([weakThis = WTFMove(weakThis), registrations = WTFMove(registrations)] () mutable {
if (!weakThis)
return;
- auto registrationData = WebCore::SharedBuffer::create(registrations.get());
- weakThis->send(Messages::WebProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrationData))), 0);
+ weakThis->send(Messages::WebProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrations))), 0);
});
});
}
+#endif
bool WebProcessProxy::messageSourceIsValidWebContentProcess()
{
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (295559 => 295560)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-06-15 15:39:17 UTC (rev 295560)
@@ -169,6 +169,13 @@
// Initialize the GPU process.
send(Messages::GPUProcess::InitializeGPUProcess(parameters), 0);
+
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+ auto registrations = fetchAudioComponentServerRegistrations();
+ if (registrations)
+ send(Messages::GPUProcess::ConsumeAudioComponentRegistrations(IPC::SharedBufferReference(WTFMove(registrations))), 0);
+#endif
+
updateProcessAssertion();
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (295559 => 295560)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-06-15 15:39:17 UTC (rev 295560)
@@ -911,7 +911,7 @@
process.send(Messages::WebProcess::BacklightLevelDidChange(displayBrightness()), 0);
#endif
-#if PLATFORM(COCOA)
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
process.sendAudioComponentRegistrations();
#endif
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (295559 => 295560)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2022-06-15 15:39:17 UTC (rev 295560)
@@ -2245,6 +2245,7 @@
E1D26A53175964D90095BFD1 /* WebContentProcess.xib in Resources */ = {isa = PBXBuildFile; fileRef = E1D26A4C1759634E0095BFD1 /* WebContentProcess.xib */; };
E1E552C516AE065F004ED653 /* SandboxInitializationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E552C316AE065E004ED653 /* SandboxInitializationParameters.h */; };
E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E1EE53DC11F8CF9F00CCBEE4 /* InjectedBundlePageEditorClient.h */; };
+ E326E357284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */; };
E36FF00327F36FBD004BE21A /* SandboxStateVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = E36FF00127F36FBD004BE21A /* SandboxStateVariables.h */; };
E36FF00427F36FBD004BE21A /* preferences.sb in Resources */ = {isa = PBXBuildFile; fileRef = E36FF00227F36FBD004BE21A /* preferences.sb */; };
E3816B3D27E2463A005EAFC0 /* WebMockContentFilterManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3816B3B27E24639005EAFC0 /* WebMockContentFilterManager.cpp */; };
@@ -7019,6 +7020,7 @@
E1EE53E611F8CFFB00CCBEE4 /* InjectedBundlePageEditorClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageEditorClient.cpp; sourceTree = "<group>"; };
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; };
E313664D265EE5AF0051084F /* com.apple.WebKit.WebContent.sb.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.apple.WebKit.WebContent.sb.in; sourceTree = "<group>"; };
+ E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AuxiliaryProcessProcyCocoa.mm; sourceTree = "<group>"; };
E3439B632345463A0011DE0B /* NetworkProcessConnectionInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = NetworkProcessConnectionInfo.h; path = Network/NetworkProcessConnectionInfo.h; sourceTree = "<group>"; };
E34B110C27C46BC6006D2F2E /* libWebCoreTestShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libWebCoreTestShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
E34B110F27C46D09006D2F2E /* libWebCoreTestSupport.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libWebCoreTestSupport.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -8229,6 +8231,7 @@
2DC6D9C118C44A610043BAD4 /* WKWebViewContentProviderRegistry.h */,
2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */,
C1710CF224A7BD0300D7C112 /* XPCEventHandler.h */,
+ E326E356284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm */,
);
path = Cocoa;
sourceTree = "<group>";
@@ -16800,6 +16803,7 @@
2D11B7612126A282006F8878 /* UnifiedSource9-mm.mm in Sources */,
2D11B7622126A282006F8878 /* UnifiedSource9.cpp in Sources */,
2D11B7632126A282006F8878 /* UnifiedSource10-mm.mm in Sources */,
+ E326E357284E580E00157372 /* AuxiliaryProcessProcyCocoa.mm in Sources */,
2D11B7642126A282006F8878 /* UnifiedSource10.cpp in Sources */,
2D11B7652126A282006F8878 /* UnifiedSource11-mm.mm in Sources */,
2D11B7662126A282006F8878 /* UnifiedSource11.cpp in Sources */,
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (295559 => 295560)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2022-06-15 15:39:17 UTC (rev 295560)
@@ -78,10 +78,6 @@
class Object;
}
-namespace IPC {
-class SharedBufferReference;
-}
-
namespace PAL {
class SessionID;
}
@@ -533,10 +529,6 @@
void systemDidWake();
#endif
-#if PLATFORM(COCOA)
- void consumeAudioComponentRegistrations(const IPC::SharedBufferReference&);
-#endif
-
void platformInitializeProcess(const AuxiliaryProcessInitializationParameters&);
// IPC::Connection::Client
Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (295559 => 295560)
--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2022-06-15 15:39:17 UTC (rev 295560)
@@ -194,8 +194,11 @@
SystemDidWake()
#endif
+#if HAVE(AUDIO_COMPONENT_SERVER_REGISTRATIONS)
+ ConsumeAudioComponentRegistrations(IPC::SharedBufferReference registrationData)
+#endif
+
#if PLATFORM(COCOA)
- ConsumeAudioComponentRegistrations(IPC::SharedBufferReference registrationData)
AccessibilityPreferencesDidChange(struct WebKit::AccessibilityPreferences accessibilityPreferences)
#endif
Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (295559 => 295560)
--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2022-06-15 15:34:26 UTC (rev 295559)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2022-06-15 15:39:17 UTC (rev 295560)
@@ -161,7 +161,6 @@
#endif
#import <WebCore/MediaAccessibilitySoftLink.h>
-#import <pal/cf/AudioToolboxSoftLink.h>
#import <pal/cf/VideoToolboxSoftLink.h>
#import <pal/cocoa/AVFoundationSoftLink.h>
#import <pal/cocoa/DataDetectorsCoreSoftLink.h>
@@ -1255,22 +1254,6 @@
}
#endif
-void WebProcess::consumeAudioComponentRegistrations(const IPC::SharedBufferReference& data)
-{
- using namespace PAL;
-
- if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentApplyServerRegistrations())
- return;
-
- if (data.isNull())
- return;
- auto registrations = data.unsafeBuffer()->createCFData();
-
- auto err = AudioComponentApplyServerRegistrations(registrations.get());
- if (noErr != err)
- WEBPROCESS_RELEASE_LOG_ERROR(Process, "Could not apply AudioComponent registrations, err(%ld)", static_cast<long>(err));
-}
-
#if PLATFORM(MAC)
void WebProcess::openDirectoryCacheInvalidated(SandboxExtension::Handle&& handle)
{