Title: [258064] trunk
Revision
258064
Author
[email protected]
Date
2020-03-06 22:58:10 -0800 (Fri, 06 Mar 2020)

Log Message

[Cocoa] Re-enable CFPrefs direct mode
https://bugs.webkit.org/show_bug.cgi?id=208690

Reviewed by Brent Fulgham.

Source/WebKit:

This patch re-enabled CF prefs direct mode on iOS and macOS, and addresses performance issues and Accessibility issues
with the original patch. Performance issues are addressed by creating the NSUserDefaults objects in the UI process on
a non-main thread, while the Accessibility issues are fixed by issuing an extension to the preferences service when
Accessibility is enabled.

API test: WebKit.GrantAccessPreferencesService

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _grantAccessToPreferenceService]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/Cocoa/PreferenceObserver.mm:
(registerDefaultsOverride):
(-[WKUserDefaults _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:]):
(-[WKPreferenceObserver init]):
* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::grantAccessToPreferenceService):
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitialize):
(WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
(WebKit::WebProcessPool::platformInitializeWebProcess):
(WebKit::WebProcessPool::registerNotificationObservers):
* UIProcess/Cocoa/WebProcessProxyCocoa.mm:
(WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
(WebKit::WebProcessProxy::unblockPreferenceServiceIfNeeded):
* UIProcess/WebPageProxy.h:
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didFinishLaunching):
* UIProcess/WebProcessProxy.h:
* UIProcess/ios/WebProcessProxyIOS.mm:
(WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded): Deleted.
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::unblockAccessibilityServer): Deleted.
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):
(WebKit::WebProcess::platformInitializeProcess):
(WebKit::WebProcess::unblockPreferenceService):
(WebKit::WebProcess::unblockAccessibilityServer):
* WebProcess/com.apple.WebProcess.sb.in:

Source/WTF:

* wtf/PlatformEnable.h:

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm: Added.
(TEST):
* TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
(TestWebKitAPI::TEST):

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (258063 => 258064)


--- trunk/Source/WTF/ChangeLog	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WTF/ChangeLog	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1,3 +1,12 @@
+2020-03-06  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Re-enable CFPrefs direct mode
+        https://bugs.webkit.org/show_bug.cgi?id=208690
+
+        Reviewed by Brent Fulgham.
+
+        * wtf/PlatformEnable.h:
+
 2020-03-06  Peng Liu  <[email protected]>
 
         Use the feature flags mechanism to give default feature preference values

Modified: trunk/Source/WTF/wtf/PlatformEnable.h (258063 => 258064)


--- trunk/Source/WTF/wtf/PlatformEnable.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WTF/wtf/PlatformEnable.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -868,4 +868,4 @@
 #error "ENABLE(WEBGL2) requires ENABLE(WEBGL)"
 #endif
 
-#define ENABLE_CFPREFS_DIRECT_MODE 0
+#define ENABLE_CFPREFS_DIRECT_MODE 1

Modified: trunk/Source/WebKit/ChangeLog (258063 => 258064)


--- trunk/Source/WebKit/ChangeLog	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/ChangeLog	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1,3 +1,57 @@
+2020-03-06  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Re-enable CFPrefs direct mode
+        https://bugs.webkit.org/show_bug.cgi?id=208690
+
+        Reviewed by Brent Fulgham.
+
+        This patch re-enabled CF prefs direct mode on iOS and macOS, and addresses performance issues and Accessibility issues
+        with the original patch. Performance issues are addressed by creating the NSUserDefaults objects in the UI process on
+        a non-main thread, while the Accessibility issues are fixed by issuing an extension to the preferences service when
+        Accessibility is enabled.
+
+        API test: WebKit.GrantAccessPreferencesService
+
+        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode const):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _grantAccessToPreferenceService]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/Cocoa/PreferenceObserver.mm:
+        (registerDefaultsOverride):
+        (-[WKUserDefaults _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:]):
+        (-[WKPreferenceObserver init]):
+        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+        (WebKit::WebPageProxy::grantAccessToPreferenceService):
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::platformInitialize):
+        (WebKit::WebProcessPool::platformResolvePathsForSandboxExtensions):
+        (WebKit::WebProcessPool::platformInitializeWebProcess):
+        (WebKit::WebProcessPool::registerNotificationObservers):
+        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
+        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
+        (WebKit::WebProcessProxy::unblockPreferenceServiceIfNeeded):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::didFinishLaunching):
+        * UIProcess/WebProcessProxy.h:
+        * UIProcess/ios/WebProcessProxyIOS.mm:
+        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded): Deleted.
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::unblockAccessibilityServer): Deleted.
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+        (WebKit::WebProcess::platformInitializeProcess):
+        (WebKit::WebProcess::unblockPreferenceService):
+        (WebKit::WebProcess::unblockAccessibilityServer):
+        * WebProcess/com.apple.WebProcess.sb.in:
+
 2020-03-06  Kate Cheney  <[email protected]>
 
         UIProcess needs mechanism to specify AppBound domains

Copied: trunk/Source/WebKit/Platform/spi/Cocoa/AccessibilitySupportSPI.h (from rev 258063, trunk/Source/WebKit/Platform/spi/ios/AccessibilitySupportSPI.h) (0 => 258064)


--- trunk/Source/WebKit/Platform/spi/Cocoa/AccessibilitySupportSPI.h	                        (rev 0)
+++ trunk/Source/WebKit/Platform/spi/Cocoa/AccessibilitySupportSPI.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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. ``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
+ * 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.
+ */
+
+#pragma once
+
+#if HAVE(ACCESSIBILITY_SUPPORT)
+
+#if USE(APPLE_INTERNAL_SDK)
+
+// FIXME (46432011): We shouldn't need to wrap this include in extern "C".
+WTF_EXTERN_C_BEGIN
+#include <AccessibilitySupport.h>
+WTF_EXTERN_C_END
+
+#else
+
+WTF_EXTERN_C_BEGIN
+
+extern Boolean _AXSKeyRepeatEnabled();
+extern Boolean _AXSApplicationAccessibilityEnabled();
+extern CFStringRef kAXSApplicationAccessibilityEnabledNotification;
+#if HAVE(ACCESSIBILITY_BUNDLES_PATH)
+extern CFStringRef _AXSCopyPathForAccessibilityBundle(CFStringRef bundle);
+#endif
+
+#if PLATFORM(IOS_FAMILY) && ENABLE(FULL_KEYBOARD_ACCESS)
+extern CFStringRef kAXSFullKeyboardAccessEnabledNotification;
+extern Boolean _AXSFullKeyboardAccessEnabled();
+#endif
+
+WTF_EXTERN_C_END
+
+#endif
+
+#endif // HAVE(ACCESSIBILITY_SUPPORT)

Deleted: trunk/Source/WebKit/Platform/spi/ios/AccessibilitySupportSPI.h (258063 => 258064)


--- trunk/Source/WebKit/Platform/spi/ios/AccessibilitySupportSPI.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/Platform/spi/ios/AccessibilitySupportSPI.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2018 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. ``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
- * 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.
- */
-
-#pragma once
-
-#if HAVE(ACCESSIBILITY_SUPPORT)
-
-#if USE(APPLE_INTERNAL_SDK)
-
-// FIXME (46432011): We shouldn't need to wrap this include in extern "C".
-WTF_EXTERN_C_BEGIN
-#include <AccessibilitySupport.h>
-WTF_EXTERN_C_END
-
-#else
-
-WTF_EXTERN_C_BEGIN
-
-#if PLATFORM(IOS_FAMILY)
-extern Boolean _AXSKeyRepeatEnabled();
-extern Boolean _AXSApplicationAccessibilityEnabled();
-extern CFStringRef kAXSApplicationAccessibilityEnabledNotification;
-#if HAVE(ACCESSIBILITY_BUNDLES_PATH)
-extern CFStringRef _AXSCopyPathForAccessibilityBundle(CFStringRef bundle);
-#endif
-
-#endif // PLATFORM(IOS_FAMILY)
-
-#if PLATFORM(IOS_FAMILY) && ENABLE(FULL_KEYBOARD_ACCESS)
-extern CFStringRef kAXSFullKeyboardAccessEnabledNotification;
-extern Boolean _AXSFullKeyboardAccessEnabled();
-#endif
-
-WTF_EXTERN_C_END
-
-#endif
-
-#endif // HAVE(ACCESSIBILITY_SUPPORT)

Modified: trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb (258063 => 258064)


--- trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-03-07 06:58:10 UTC (rev 258064)
@@ -536,7 +536,6 @@
 (allow mach-lookup
     (global-name "com.apple.logd")
     (global-name "com.apple.logd.events")
-    (global-name "com.apple.cfprefsd.daemon")
 )
 
 (deny mach-lookup (with telemetry)

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (258063 => 258064)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-03-07 06:58:10 UTC (rev 258064)
@@ -185,7 +185,7 @@
 #if PLATFORM(COCOA)
     // FIXME(207716): The following should be removed when the GPU process is complete.
     encoder << mediaExtensionHandles;
-#if !ENABLE(CFPREFS_DIRECT_MODE)
+#if ENABLE(CFPREFS_DIRECT_MODE)
     encoder << preferencesExtensionHandle;
 #endif
 #endif
@@ -504,7 +504,7 @@
     parameters.mediaExtensionHandles = WTFMove(*mediaExtensionHandles);
     // FIXME(207716): End region to remove.
 
-#if !ENABLE(CFPREFS_DIRECT_MODE)
+#if ENABLE(CFPREFS_DIRECT_MODE)
     Optional<Optional<SandboxExtension::Handle>> preferencesExtensionHandle;
     decoder >> preferencesExtensionHandle;
     if (!preferencesExtensionHandle)

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (258063 => 258064)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -227,7 +227,7 @@
 
 #if PLATFORM(COCOA)
     SandboxExtension::HandleArray mediaExtensionHandles; // FIXME(207716): Remove when GPU process is complete.
-#if !ENABLE(CFPREFS_DIRECT_MODE)
+#if ENABLE(CFPREFS_DIRECT_MODE)
     Optional<SandboxExtension::Handle> preferencesExtensionHandle;
 #endif
 #endif

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -2915,6 +2915,12 @@
 #endif
 }
 
+- (void)_grantAccessToPreferenceService
+{
+    if (_page)
+        _page->grantAccessToPreferenceService();
+}
+
 #pragma mark - scrollPerformanceData
 
 - (void)_setScrollPerformanceDataCollectionEnabled:(BOOL)enabled

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -342,6 +342,8 @@
 
 - (void)_setIsNavigatingToAppBoundDomain:(BOOL)isNavigatingToAppBoundDomain completionHandler:(void (^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
+- (void)_grantAccessToPreferenceService WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 @end
 
 #if TARGET_OS_IPHONE

Modified: trunk/Source/WebKit/UIProcess/Cocoa/PreferenceObserver.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/Cocoa/PreferenceObserver.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PreferenceObserver.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -28,10 +28,25 @@
 
 #import "WebProcessPool.h"
 
+#import <wtf/ObjCRuntimeExtras.h>
+
+static IMP registerDefaultsOriginal = nil;
+static bool registeringDefaults = false;
+
+static void registerDefaultsOverride(id self, SEL selector, NSDictionary<NSString *, id> *dictionary)
+{
+    registeringDefaults = true;
+    wtfCallIMP<void>(registerDefaultsOriginal, self, selector, dictionary);
+    registeringDefaults = false;
+}
+
 @implementation WKUserDefaults
 
 - (void)_notifyObserversOfChangeFromValuesForKeys:(NSDictionary<NSString *, id> *)oldValues toValuesForKeys:(NSDictionary<NSString *, id> *)newValues
 {
+    if (registeringDefaults)
+        return;
+
     [super _notifyObserversOfChangeFromValuesForKeys:oldValues toValuesForKeys:newValues];
 
     if ([oldValues isEqualToDictionary:newValues])
@@ -87,6 +102,9 @@
 
 - (instancetype)init
 {
+    Method registerDefaultsMethod = class_getInstanceMethod(objc_getClass("NSUserDefaults"), @selector(registerDefaults:));
+    registerDefaultsOriginal = method_setImplementation(registerDefaultsMethod, (IMP)registerDefaultsOverride);
+
     std::initializer_list<NSString*> domains = {
         @"com.apple.Accessibility",
 #if PLATFORM(IOS_FAMILY)

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -314,4 +314,9 @@
 }
 #endif
 
+void WebPageProxy::grantAccessToPreferenceService()
+{
+    process().unblockPreferenceServiceIfNeeded();
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "WebProcessPool.h"
 
+#import "AccessibilitySupportSPI.h"
 #import "CookieStorageUtilsCF.h"
 #import "LegacyCustomProtocolManagerClient.h"
 #import "Logging.h"
@@ -75,7 +76,6 @@
 #if PLATFORM(MAC)
 #import <QuartzCore/CARemoteLayerServer.h>
 #else
-#import "AccessibilitySupportSPI.h"
 #import "UIKitSPI.h"
 #import <pal/ios/ManagedConfigurationSoftLink.h>
 #import <pal/spi/ios/ManagedConfigurationSPI.h>
@@ -173,6 +173,13 @@
         installMemoryPressureHandler();
 
     setLegacyCustomProtocolManagerClient(makeUnique<LegacyCustomProtocolManagerClient>());
+
+#if ENABLE(CFPREFS_DIRECT_MODE)
+    dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
+        // Start observing preference changes.
+        [WKPreferenceObserver sharedInstance];
+    });
+#endif
 }
 
 #if PLATFORM(IOS_FAMILY)
@@ -197,11 +204,6 @@
     m_resolvedPaths.containerCachesDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebProcessPool::webContentCachesDirectory());
     m_resolvedPaths.containerTemporaryDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebProcessPool::containerTemporaryDirectory());
 #endif
-
-#if ENABLE(CFPREFS_DIRECT_MODE)
-    // Start observing preference changes.
-    [WKPreferenceObserver sharedInstance];
-#endif
 }
 
 #if PLATFORM(IOS)
@@ -442,10 +444,13 @@
         for (size_t i = 0, size = services.size(); i < size; ++i)
             SandboxExtension::createHandleForMachLookup(services[i], WTF::nullopt, parameters.mediaExtensionHandles[i]);
     }
-#if !ENABLE(CFPREFS_DIRECT_MODE)
-    SandboxExtension::Handle preferencesExtensionHandle;
-    SandboxExtension::createHandleForMachLookup("com.apple.cfprefsd.daemon", WTF::nullopt, preferencesExtensionHandle);
-    parameters.preferencesExtensionHandle = WTFMove(preferencesExtensionHandle);
+
+#if ENABLE(CFPREFS_DIRECT_MODE)
+    if (_AXSApplicationAccessibilityEnabled()) {
+        SandboxExtension::Handle preferencesExtensionHandle;
+        SandboxExtension::createHandleForMachLookup("com.apple.cfprefsd.daemon", WTF::nullopt, preferencesExtensionHandle);
+        parameters.preferencesExtensionHandle = WTFMove(preferencesExtensionHandle);
+    }
 #endif
 }
 
@@ -647,15 +652,17 @@
 #elif !PLATFORM(MACCATALYST)
     CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), this, backlightLevelDidChangeCallback, static_cast<CFStringRef>(UIBacklightLevelChangedNotification), nullptr, CFNotificationSuspensionBehaviorCoalesce);
 #if PLATFORM(IOS)
-    m_accessibilityEnabledObserver = [[NSNotificationCenter defaultCenter] addObserverForName:(__bridge id)kAXSApplicationAccessibilityEnabledNotification object:nil queue:[NSOperationQueue currentQueue] usingBlock:^(NSNotification *) {
-        for (size_t i = 0; i < m_processes.size(); ++i)
-            m_processes[i]->unblockAccessibilityServerIfNeeded();
-    }];
 #if ENABLE(REMOTE_INSPECTOR)
     CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), this, remoteWebInspectorEnabledCallback, static_cast<CFStringRef>(CFSTR(WIRServiceEnabledNotification)), nullptr, CFNotificationSuspensionBehaviorCoalesce);
 #endif
 #endif // PLATFORM(IOS)
 #endif // !PLATFORM(IOS_FAMILY)
+    m_accessibilityEnabledObserver = [[NSNotificationCenter defaultCenter] addObserverForName:(__bridge id)kAXSApplicationAccessibilityEnabledNotification object:nil queue:[NSOperationQueue currentQueue] usingBlock:^(NSNotification *) {
+        for (size_t i = 0; i < m_processes.size(); ++i) {
+            m_processes[i]->unblockPreferenceServiceIfNeeded();
+            m_processes[i]->unblockAccessibilityServerIfNeeded();
+        }
+    }];
 }
 
 void WebProcessPool::unregisterNotificationObservers()

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -225,4 +225,43 @@
         send(Messages::WebProcess::EnableRemoteWebInspector(handle), 0);
 }
 #endif
+
+void WebProcessProxy::unblockAccessibilityServerIfNeeded()
+{
+    if (m_hasSentMessageToUnblockAccessibilityServer)
+        return;
+    if (!_AXSApplicationAccessibilityEnabled())
+        return;
+    if (!processIdentifier())
+        return;
+    if (!canSendMessage())
+        return;
+
+    SandboxExtension::Handle handle;
+#if PLATFORM(IOS_FAMILY)
+    if (!SandboxExtension::createHandleForMachLookup("com.apple.iphone.axserver-systemwide", connection() ? connection()->getAuditToken() : WTF::nullopt, handle))
+        return;
+#endif
+
+    send(Messages::WebProcess::UnblockAccessibilityServer(handle), 0);
+    m_hasSentMessageToUnblockAccessibilityServer = true;
 }
+
+void WebProcessProxy::unblockPreferenceServiceIfNeeded()
+{
+    if (m_hasSentMessageToUnblockPreferenceService)
+        return;
+    if (!processIdentifier())
+        return;
+    if (!canSendMessage())
+        return;
+
+    SandboxExtension::Handle handle;
+    if (!SandboxExtension::createHandleForMachLookup("com.apple.cfprefsd.daemon", connection() ? connection()->getAuditToken() : WTF::nullopt, handle))
+        return;
+
+    send(Messages::WebProcess::UnblockPreferenceService(handle), 0);
+    m_hasSentMessageToUnblockPreferenceService = true;
+}
+
+}

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1706,6 +1706,10 @@
     void revokeAccessToAssetServices();
 #endif
 
+#if PLATFORM(COCOA)
+    void grantAccessToPreferenceService();
+#endif
+
     void setIsNavigatingToAppBoundDomainTesting(bool, CompletionHandler<void()>&&);
 
 private:

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -706,7 +706,7 @@
     std::unique_ptr<PerActivityStateCPUUsageSampler> m_perActivityStateCPUUsageSampler;
 #endif
 
-#if PLATFORM(IOS_FAMILY)
+#if PLATFORM(COCOA)
     RetainPtr<NSObject> m_accessibilityEnabledObserver;
 #endif
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-03-07 06:58:10 UTC (rev 258064)
@@ -936,7 +936,9 @@
         if (xpc_connection_t xpcConnection = connection()->xpcConnection())
             m_throttler.didConnectToProcess(xpc_connection_get_pid(xpcConnection));
     }
+#endif
 
+#if PLATFORM(COCOA)
     unblockAccessibilityServerIfNeeded();
 #endif
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -336,8 +336,9 @@
     void enableRemoteInspectorIfNeeded();
 #endif
     
-#if PLATFORM(IOS_FAMILY)
+#if PLATFORM(COCOA)
     void unblockAccessibilityServerIfNeeded();
+    void unblockPreferenceServiceIfNeeded();
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -531,10 +532,14 @@
     ForegroundWebProcessToken m_foregroundToken;
     BackgroundWebProcessToken m_backgroundToken;
 #if PLATFORM(IOS_FAMILY)
-    bool m_hasSentMessageToUnblockAccessibilityServer { false };
     std::unique_ptr<WebCore::DeferrableOneShotTimer> m_unexpectedActivityTimer;
 #endif
 
+#if PLATFORM(COCOA)
+    bool m_hasSentMessageToUnblockAccessibilityServer { false };
+    bool m_hasSentMessageToUnblockPreferenceService { false };
+#endif
+
     HashMap<String, uint64_t> m_pageURLRetainCountMap;
 
     Optional<WebCore::RegistrableDomain> m_registrableDomain;

Modified: trunk/Source/WebKit/UIProcess/ios/WebProcessProxyIOS.mm (258063 => 258064)


--- trunk/Source/WebKit/UIProcess/ios/WebProcessProxyIOS.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/UIProcess/ios/WebProcessProxyIOS.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -43,25 +43,6 @@
 #endif
 }
 
-void WebProcessProxy::unblockAccessibilityServerIfNeeded()
-{
-    if (m_hasSentMessageToUnblockAccessibilityServer)
-        return;
-    if (!_AXSApplicationAccessibilityEnabled())
-        return;
-    if (!processIdentifier())
-        return;
-    if (!canSendMessage())
-        return;
-
-    SandboxExtension::Handle handle;
-    if (!SandboxExtension::createHandleForMachLookup("com.apple.iphone.axserver-systemwide", connection() ? connection()->getAuditToken() : WTF::nullopt, handle))
-        return;
-
-    send(Messages::WebProcess::UnblockAccessibilityServer(handle), 0);
-    m_hasSentMessageToUnblockAccessibilityServer = true;
-}
-
 } // namespace WebKit
 
 #endif // PLATFORM(IOS_FAMILY)

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (258063 => 258064)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-03-07 06:58:10 UTC (rev 258064)
@@ -737,7 +737,6 @@
 		2DABA7761A82B42100EF0F1A /* APIHistoryClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DABA7751A82B42100EF0F1A /* APIHistoryClient.h */; };
 		2DACE64E18ADBFF000E4CA76 /* _WKThumbnailViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DACE64D18ADBFF000E4CA76 /* _WKThumbnailViewInternal.h */; };
 		2DAF06D618BD1A470081CEB1 /* SmartMagnificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAF06D418BD1A470081CEB1 /* SmartMagnificationController.h */; };
-		2DB7667121B5E48A0045DDB1 /* AccessibilitySupportSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB7667021B5E48A0045DDB1 /* AccessibilitySupportSPI.h */; };
 		2DB94299234E7A7F00E776AD /* WKMouseGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB94297234E7A7F00E776AD /* WKMouseGestureRecognizer.h */; };
 		2DB96053239886C100102791 /* com.apple.WebKit.GPU.sb in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2DB96052239886B900102791 /* com.apple.WebKit.GPU.sb */; };
 		2DC18FAD218910490025A88D /* WKDrawingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DC18FAB218910480025A88D /* WKDrawingView.h */; };
@@ -1798,6 +1797,7 @@
 		E38A1FC023A551BF00D2374F /* UserInterfaceIdiom.mm in Sources */ = {isa = PBXBuildFile; fileRef = E38A1FBF23A551BF00D2374F /* UserInterfaceIdiom.mm */; };
 		E39628DD23960CC600658ECD /* WebDeviceOrientationUpdateProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E39628DB23960CC500658ECD /* WebDeviceOrientationUpdateProvider.h */; };
 		E39628DE23960CC600658ECD /* WebDeviceOrientationUpdateProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E39628DC23960CC600658ECD /* WebDeviceOrientationUpdateProvider.cpp */; };
+		E3CAAA442413279900CED2E2 /* AccessibilitySupportSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */; };
 		E413F59D1AC1ADC400345360 /* NetworkCacheEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = E413F59B1AC1ADB600345360 /* NetworkCacheEntry.h */; };
 		E42E06101AA7523B00B11699 /* NetworkCacheIOChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = E42E060B1AA7440D00B11699 /* NetworkCacheIOChannel.h */; };
 		E42E06121AA75ABD00B11699 /* NetworkCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = E42E06111AA75ABD00B11699 /* NetworkCacheData.h */; };
@@ -3126,7 +3126,6 @@
 		2DAF06D518BD1A470081CEB1 /* SmartMagnificationController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SmartMagnificationController.mm; path = ios/SmartMagnificationController.mm; sourceTree = "<group>"; };
 		2DAF06D818BD23BA0081CEB1 /* SmartMagnificationController.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = SmartMagnificationController.messages.in; path = ios/SmartMagnificationController.messages.in; sourceTree = "<group>"; };
 		2DAF4FFA1B636181006013D6 /* ViewGestureController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ViewGestureController.cpp; sourceTree = "<group>"; };
-		2DB7667021B5E48A0045DDB1 /* AccessibilitySupportSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySupportSPI.h; sourceTree = "<group>"; };
 		2DB94297234E7A7F00E776AD /* WKMouseGestureRecognizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WKMouseGestureRecognizer.h; path = ios/WKMouseGestureRecognizer.h; sourceTree = "<group>"; };
 		2DB94298234E7A7F00E776AD /* WKMouseGestureRecognizer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = WKMouseGestureRecognizer.mm; path = ios/WKMouseGestureRecognizer.mm; sourceTree = "<group>"; };
 		2DB96052239886B900102791 /* com.apple.WebKit.GPU.sb */ = {isa = PBXFileReference; lastKnownFileType = text; path = com.apple.WebKit.GPU.sb; sourceTree = "<group>"; };
@@ -5228,6 +5227,7 @@
 		E39628DB23960CC500658ECD /* WebDeviceOrientationUpdateProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDeviceOrientationUpdateProvider.h; sourceTree = "<group>"; };
 		E39628DC23960CC600658ECD /* WebDeviceOrientationUpdateProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDeviceOrientationUpdateProvider.cpp; sourceTree = "<group>"; };
 		E39628E423971F3400658ECD /* WebDeviceOrientationUpdateProvider.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebDeviceOrientationUpdateProvider.messages.in; sourceTree = "<group>"; };
+		E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySupportSPI.h; sourceTree = "<group>"; };
 		E404907021DE65F70037F0DB /* ScrollerPairMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollerPairMac.h; sourceTree = "<group>"; };
 		E404907121DE65F70037F0DB /* ScrollingTreeFrameScrollingNodeRemoteMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingTreeFrameScrollingNodeRemoteMac.cpp; sourceTree = "<group>"; };
 		E404907221DE65F70037F0DB /* ScrollerPairMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollerPairMac.mm; sourceTree = "<group>"; };
@@ -7057,6 +7057,7 @@
 		3754D5411B3A2998003A4C7F /* Cocoa */ = {
 			isa = PBXGroup;
 			children = (
+				E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */,
 				1A5705101BE410E500874AF1 /* BlockSPI.h */,
 				37C21CAD1E994C0C0029D5F9 /* CorePredictionSPI.h */,
 				2DAADA8E2298C21000E36B0C /* DeviceManagementSPI.h */,
@@ -10193,7 +10194,6 @@
 		CE1A0BCB1A48E6C60054EF74 /* ios */ = {
 			isa = PBXGroup;
 			children = (
-				2DB7667021B5E48A0045DDB1 /* AccessibilitySupportSPI.h */,
 				CE1A0BCC1A48E6C60054EF74 /* AssertionServicesSPI.h */,
 				CDA041F31ACE2105004A13EC /* BackBoardServicesSPI.h */,
 				2D4AF0882044C3C4006C8817 /* FrontBoardServicesSPI.h */,
@@ -10445,7 +10445,7 @@
 				A115DC72191D82DA00DA8072 /* _WKWebViewPrintFormatter.h in Headers */,
 				A19DD3C01D07D16800AC823B /* _WKWebViewPrintFormatterInternal.h in Headers */,
 				A182D5B51BE6BD250087A7CC /* AccessibilityIOS.h in Headers */,
-				2DB7667121B5E48A0045DDB1 /* AccessibilitySupportSPI.h in Headers */,
+				E3CAAA442413279900CED2E2 /* AccessibilitySupportSPI.h in Headers */,
 				A7D792D81767CCA300881CBE /* ActivityAssertion.h in Headers */,
 				6BD05865220CE8C2000BED5C /* AdClickAttributionManager.h in Headers */,
 				634842511FB26E7100946E3C /* APIApplicationManifest.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (258063 => 258064)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1975,14 +1975,6 @@
     PlatformKeyboardEvent::setCurrentModifierState({ });
 }
 
-#if PLATFORM(IOS_FAMILY)
-void WebProcess::unblockAccessibilityServer(const SandboxExtension::Handle& handle)
-{
-    bool ok = SandboxExtension::consumePermanently(handle);
-    ASSERT_UNUSED(ok, ok);
-}
-#endif
-
 bool WebProcess::areAllPagesThrottleable() const
 {
     return WTF::allOf(m_pageMap.values(), [](auto& page) {

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (258063 => 258064)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2020-03-07 06:58:10 UTC (rev 258064)
@@ -299,8 +299,6 @@
 
 #if PLATFORM(IOS_FAMILY)
     void accessibilityProcessSuspendedNotification(bool);
-    
-    void unblockAccessibilityServer(const SandboxExtension::Handle&);
 #endif
 
 #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
@@ -313,6 +311,8 @@
     void enableRemoteWebInspector(const SandboxExtension::Handle&);
 #endif
     void notifyPreferencesChanged(const String& domain, const String& key, const Optional<String>& encodedValue);
+    void unblockAccessibilityServer(const SandboxExtension::Handle&);
+    void unblockPreferenceService(const SandboxExtension::Handle&);
 #endif
 
     bool areAllPagesThrottleable() const;

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (258063 => 258064)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-03-07 06:58:10 UTC (rev 258064)
@@ -154,10 +154,6 @@
     SetBackForwardCacheCapacity(unsigned capacity);
     ClearCachedPage(struct WebCore::BackForwardItemIdentifier backForwardItemID) -> () Async
 
-#if PLATFORM(IOS_FAMILY)
-    UnblockAccessibilityServer(WebKit::SandboxExtension::Handle handle)
-#endif
-
 #if PLATFORM(GTK) || PLATFORM(WPE)
     SendMessageToWebExtension(struct WebKit::UserMessage userMessage)
 #endif
@@ -174,5 +170,7 @@
 
 #if PLATFORM(COCOA)
     NotifyPreferencesChanged(String domain, String key, Optional<String> encodedValue)
+    UnblockAccessibilityServer(WebKit::SandboxExtension::Handle handle)
+    UnblockPreferenceService(WebKit::SandboxExtension::Handle handle)
 #endif
 }

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (258063 => 258064)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -288,12 +288,14 @@
     // FIXME(207716): The following should be removed when the GPU process is complete.
     for (size_t i = 0, size = parameters.mediaExtensionHandles.size(); i < size; ++i)
         SandboxExtension::consumePermanently(parameters.mediaExtensionHandles[i]);
+#endif
 
-#if !ENABLE(CFPREFS_DIRECT_MODE)
-    if (parameters.preferencesExtensionHandle)
+#if ENABLE(CFPREFS_DIRECT_MODE)
+    if (parameters.preferencesExtensionHandle) {
         SandboxExtension::consumePermanently(*parameters.preferencesExtensionHandle);
+        _CFPrefsSetDirectModeEnabled(false);
+    }
 #endif
-#endif
 }
 
 void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters)
@@ -572,8 +574,6 @@
     else
         m_processType = ProcessType::WebContent;
 
-    registerWithAccessibility();
-
 #if USE(OS_STATE)
     registerWithStateDumper();
 #endif
@@ -945,6 +945,7 @@
         cache.addSupportedTypes(types);
 }
 
+#if ENABLE(CFPREFS_DIRECT_MODE)
 void WebProcess::notifyPreferencesChanged(const String& domain, const String& key, const Optional<String>& encodedValue)
 {
     auto defaults = adoptNS([[NSUserDefaults alloc] initWithSuiteName:domain]);
@@ -963,6 +964,14 @@
     [defaults setObject:object.get() forKey:key];
 }
 
+void WebProcess::unblockPreferenceService(const SandboxExtension::Handle& handle)
+{
+    bool ok = SandboxExtension::consumePermanently(handle);
+    ASSERT_UNUSED(ok, ok);
+    _CFPrefsSetDirectModeEnabled(false);
+}
+#endif
+
 #if PLATFORM(IOS)
 void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetHandle,  WebKit::SandboxExtension::Handle&& mobileAssetV2Handle)
 {
@@ -1008,6 +1017,17 @@
 }
 #endif
 
+void WebProcess::unblockAccessibilityServer(const SandboxExtension::Handle& handle)
+{
+#if PLATFORM(IOS_FAMILY)
+    bool ok = SandboxExtension::consumePermanently(handle);
+    ASSERT_UNUSED(ok, ok);
+#endif
+    
+    registerWithAccessibility();
+}
+
+
 } // namespace WebKit
 
 #undef RELEASE_LOG_SESSION_ID

Modified: trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in (258063 => 258064)


--- trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in	2020-03-07 06:58:10 UTC (rev 258064)
@@ -644,7 +644,9 @@
     (with report) (with telemetry)
 #endif
     (global-name "com.apple.PowerManagement.control")
+#if !ENABLE(CFPREFS_DIRECT_MODE)
     (global-name "com.apple.cfprefsd.daemon")
+#endif
     (global-name "com.apple.coreservices.launchservicesd")
     (global-name "com.apple.lsd.mapdb")
     (global-name "com.apple.trustd.agent")

Modified: trunk/Tools/ChangeLog (258063 => 258064)


--- trunk/Tools/ChangeLog	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Tools/ChangeLog	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1,3 +1,16 @@
+2020-03-06  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Re-enable CFPrefs direct mode
+        https://bugs.webkit.org/show_bug.cgi?id=208690
+
+        Reviewed by Brent Fulgham.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm: Added.
+        (TEST):
+        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
+        (TestWebKitAPI::TEST):
+
 2020-03-06  Kate Cheney  <[email protected]>
 
         UIProcess needs mechanism to specify AppBound domains

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (258063 => 258064)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2020-03-07 06:58:10 UTC (rev 258064)
@@ -1004,6 +1004,7 @@
 		E324A6F02041C82000A76593 /* UniqueArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E398BC0F2041C76300387136 /* UniqueArray.cpp */; };
 		E325C90723E3870200BC7D3B /* PictureInPictureSupport.mm in Sources */ = {isa = PBXBuildFile; fileRef = E325C90623E3870200BC7D3B /* PictureInPictureSupport.mm */; };
 		E32B549222810AC4008AD702 /* Packed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E32B549122810AC0008AD702 /* Packed.cpp */; };
+		E34A6D192412DE390012AB6E /* GrantAccessToPreferencesService.mm in Sources */ = {isa = PBXBuildFile; fileRef = E34A6D182412DE390012AB6E /* GrantAccessToPreferencesService.mm */; };
 		E35B908223F60DD0000011FF /* LocalizedDeviceModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = E35B908123F60DD0000011FF /* LocalizedDeviceModel.mm */; };
 		E35FC7B222B82A7300F32F98 /* JSLockTakesWebThreadLock.mm in Sources */ = {isa = PBXBuildFile; fileRef = E35FC7B122B82A6D00F32F98 /* JSLockTakesWebThreadLock.mm */; };
 		E373D7911F2CF35200C6FAAF /* Signals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3953F951F2CF32100A76A2E /* Signals.cpp */; };
@@ -2601,6 +2602,7 @@
 		E302BDA92404B92300865277 /* CompactRefPtrTuple.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompactRefPtrTuple.cpp; sourceTree = "<group>"; };
 		E325C90623E3870200BC7D3B /* PictureInPictureSupport.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PictureInPictureSupport.mm; sourceTree = "<group>"; };
 		E32B549122810AC0008AD702 /* Packed.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Packed.cpp; sourceTree = "<group>"; };
+		E34A6D182412DE390012AB6E /* GrantAccessToPreferencesService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = GrantAccessToPreferencesService.mm; sourceTree = "<group>"; };
 		E35B908123F60DD0000011FF /* LocalizedDeviceModel.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalizedDeviceModel.mm; sourceTree = "<group>"; };
 		E35FC7B122B82A6D00F32F98 /* JSLockTakesWebThreadLock.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSLockTakesWebThreadLock.mm; sourceTree = "<group>"; };
 		E388887020C9098100E632BC /* WorkerPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerPool.cpp; sourceTree = "<group>"; };
@@ -2908,6 +2910,7 @@
 				C15CBB2F23F1FF1A00300CC7 /* BacklightLevelNotification.mm */,
 				C1692DC923D10DAE006E88F7 /* Battery.mm */,
 				E394AE6E23F2303E005B4936 /* GrantAccessToMobileAssets.mm */,
+				E34A6D182412DE390012AB6E /* GrantAccessToPreferencesService.mm */,
 				E35B908123F60DD0000011FF /* LocalizedDeviceModel.mm */,
 				C145CC0B23DA5A0F003A5EEB /* MimeTypes.mm */,
 				E325C90623E3870200BC7D3B /* PictureInPictureSupport.mm */,
@@ -4846,6 +4849,7 @@
 				07CE1CF31F06A7E000BF89F5 /* GetUserMediaNavigation.mm in Sources */,
 				07E499911F9E56DF002F1EF3 /* GetUserMediaReprompt.mm in Sources */,
 				E394AE6F23F2303E005B4936 /* GrantAccessToMobileAssets.mm in Sources */,
+				E34A6D192412DE390012AB6E /* GrantAccessToPreferencesService.mm in Sources */,
 				8E4A85371E1D1AB200F53B0F /* GridPosition.cpp in Sources */,
 				7CCE7EFA1A411AE600447C4C /* HitTestResultNodeHandle.cpp in Sources */,
 				7CCE7EC11A411A7E00447C4C /* HTMLCollectionNamedItem.mm in Sources */,

Copied: trunk/Tools/TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm (from rev 258063, trunk/Source/WebKit/UIProcess/ios/WebProcessProxyIOS.mm) (0 => 258064)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#include "config.h"
+
+#if WK_HAVE_C_SPI
+
+#import "PlatformUtilities.h"
+#import "TestWKWebView.h"
+#import <WebKit/WKWebViewPrivate.h>
+
+TEST(WebKit, GrantAccessPreferencesService)
+{
+    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    WKRetainPtr<WKContextRef> context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest"));
+    configuration.get().processPool = (WKProcessPool *)context.get();
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get() addToWindow:YES]);
+
+    [webView _grantAccessToPreferenceService];
+
+    auto sandboxAccess = [&] {
+        return [webView stringByEvaluatingJavaScript:@"window.internals.hasSandboxMachLookupAccessToGlobalName('com.apple.WebKit.WebContent', 'com.apple.cfprefsd.daemon')"].boolValue;
+    };
+
+    ASSERT_TRUE(sandboxAccess);
+}
+
+#endif

Modified: trunk/Tools/TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm (258063 => 258064)


--- trunk/Tools/TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm	2020-03-07 06:28:57 UTC (rev 258063)
+++ trunk/Tools/TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm	2020-03-07 06:58:10 UTC (rev 258064)
@@ -36,6 +36,12 @@
 #import <WebKit/_WKRemoteObjectInterface.h>
 #import <WebKit/_WKRemoteObjectRegistry.h>
 
+#import <wtf/SoftLinking.h>
+
+SOFT_LINK_LIBRARY(libAccessibility)
+SOFT_LINK(libAccessibility, _AXSZoomTouchSetEnabled, void, (Boolean enabled), (enabled));
+SOFT_LINK(libAccessibility, _AXSApplicationAccessibilitySetEnabled, void, (Boolean enabled), (enabled));
+
 @implementation WKWebView (WKAccessibilityTesting)
 - (NSArray<NSValue *> *)rectsAtSelectionOffset:(NSInteger)offset withText:(NSString *)text
 {
@@ -148,6 +154,9 @@
 
 TEST(AccessibilityTests, WebProcessLoaderBundleLoaded)
 {
+    _AXSZoomTouchSetEnabled(true);
+    _AXSApplicationAccessibilitySetEnabled(true);
+
     WKWebViewConfiguration *configuration = [WKWebViewConfiguration _test_configurationWithTestPlugInClassName:@"AccessibilityTestPlugin"];
     auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration]);
     _WKRemoteObjectInterface *interface = [_WKRemoteObjectInterface remoteObjectInterfaceWithProtocol:@protocol(AccessibilityTestSupportProtocol)];
@@ -171,6 +180,9 @@
         isDone = true;
     }];
     TestWebKitAPI::Util::run(&isDone);
+
+    _AXSZoomTouchSetEnabled(false);
+    _AXSApplicationAccessibilitySetEnabled(false);
 }
 
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to