Title: [261016] trunk
Revision
261016
Author
pvol...@apple.com
Date
2020-05-01 13:30:21 -0700 (Fri, 01 May 2020)

Log Message

[iOS] Every running WebContent process should be granted access to frontboard services when Accessibility is enabled
https://bugs.webkit.org/show_bug.cgi?id=211238

Reviewed by Daniel Bates.

Source/WebKit:

Currently, every WebContent process is granted access to frontboard services if Accessibility is enabled at the
time of startup. However, WebContent processes running at the time when Accessibility is enabled are not granted
access, which is a bug.

API test: WebKit.AccessibilityHasFrontboardServiceAccess

* UIProcess/AuxiliaryProcessProxy.cpp:
(WebKit::AuxiliaryProcessProxy::sendMessage):
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* UIProcess/Cocoa/WebProcessProxyCocoa.mm:
(WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::unblockServicesRequiredByAccessibility):
(WebKit::WebProcess::unblockAccessibilityServer): Deleted.

Tools:

* TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (261015 => 261016)


--- trunk/Source/WebKit/ChangeLog	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/ChangeLog	2020-05-01 20:30:21 UTC (rev 261016)
@@ -1,3 +1,28 @@
+2020-05-01  Per Arne Vollan  <pvol...@apple.com>
+
+        [iOS] Every running WebContent process should be granted access to frontboard services when Accessibility is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=211238
+
+        Reviewed by Daniel Bates.
+
+        Currently, every WebContent process is granted access to frontboard services if Accessibility is enabled at the
+        time of startup. However, WebContent processes running at the time when Accessibility is enabled are not granted
+        access, which is a bug.
+
+        API test: WebKit.AccessibilityHasFrontboardServiceAccess
+
+        * UIProcess/AuxiliaryProcessProxy.cpp:
+        (WebKit::AuxiliaryProcessProxy::sendMessage):
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::platformInitializeWebProcess):
+        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
+        (WebKit::WebProcessProxy::unblockAccessibilityServerIfNeeded):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::unblockServicesRequiredByAccessibility):
+        (WebKit::WebProcess::unblockAccessibilityServer): Deleted.
+
 2020-05-01  Chris Dumez  <cdu...@apple.com>
 
         [iOS] Unable to take RunningBoard process assertions in the iOS Simulator

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (261015 => 261016)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-05-01 20:30:21 UTC (rev 261016)
@@ -384,7 +384,7 @@
 #endif
 
 #if PLATFORM(IOS_FAMILY)
-    if (!WebCore::IOSApplication::isMobileSafari() || _AXSApplicationAccessibilityEnabled())
+    if (!WebCore::IOSApplication::isMobileSafari())
         parameters.dynamicMachExtensionHandles = SandboxExtension::createHandlesForMachLookup(nonBrowserServices(), WTF::nullopt);
     
     if (isInternalInstall()) {

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm (261015 => 261016)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2020-05-01 20:30:21 UTC (rev 261016)
@@ -219,13 +219,13 @@
     if (!canSendMessage())
         return;
 
-    SandboxExtension::Handle handle;
+    SandboxExtension::HandleArray handleArray;
 #if PLATFORM(IOS_FAMILY)
-    if (!SandboxExtension::createHandleForMachLookup("com.apple.iphone.axserver-systemwide", connection() ? connection()->getAuditToken() : WTF::nullopt, handle))
-        return;
+    handleArray = SandboxExtension::createHandlesForMachLookup({ "com.apple.iphone.axserver-systemwide"_s, "com.apple.frontboard.systemappservices"_s }, connection() ? connection()->getAuditToken() : WTF::nullopt);
+    ASSERT(handleArray.size() == 2);
 #endif
 
-    send(Messages::WebProcess::UnblockAccessibilityServer(handle), 0);
+    send(Messages::WebProcess::UnblockServicesRequiredByAccessibility(handleArray), 0);
     m_hasSentMessageToUnblockAccessibilityServer = true;
 }
 

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (261015 => 261016)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2020-05-01 20:30:21 UTC (rev 261016)
@@ -297,7 +297,7 @@
 #if ENABLE(REMOTE_INSPECTOR)
     void enableRemoteWebInspector(const SandboxExtension::Handle&);
 #endif
-    void unblockAccessibilityServer(const SandboxExtension::Handle&);
+    void unblockServicesRequiredByAccessibility(const SandboxExtension::HandleArray&);
 #if ENABLE(CFPREFS_DIRECT_MODE)
     void notifyPreferencesChanged(const String& domain, const String& key, const Optional<String>& encodedValue);
     void unblockPreferenceService(SandboxExtension::HandleArray&&);

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (261015 => 261016)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-05-01 20:30:21 UTC (rev 261016)
@@ -166,7 +166,7 @@
 #endif
 
 #if PLATFORM(COCOA)
-    UnblockAccessibilityServer(WebKit::SandboxExtension::Handle handle)
+    UnblockServicesRequiredByAccessibility(WebKit::SandboxExtension::HandleArray handleArray)
 #if ENABLE(CFPREFS_DIRECT_MODE)
     NotifyPreferencesChanged(String domain, String key, Optional<String> encodedValue)
     UnblockPreferenceService(WebKit::SandboxExtension::HandleArray handleArray)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (261015 => 261016)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-05-01 20:30:21 UTC (rev 261016)
@@ -1007,11 +1007,11 @@
 }
 #endif
 
-void WebProcess::unblockAccessibilityServer(const SandboxExtension::Handle& handle)
+void WebProcess::unblockServicesRequiredByAccessibility(const SandboxExtension::HandleArray& handleArray)
 {
 #if PLATFORM(IOS_FAMILY)
-    bool ok = SandboxExtension::consumePermanently(handle);
-    ASSERT_UNUSED(ok, ok);
+    bool consumed = SandboxExtension::consumePermanently(handleArray);
+    ASSERT_UNUSED(consumed, consumed);
 #endif
     registerWithAccessibility();
 }

Modified: trunk/Tools/ChangeLog (261015 => 261016)


--- trunk/Tools/ChangeLog	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Tools/ChangeLog	2020-05-01 20:30:21 UTC (rev 261016)
@@ -1,3 +1,13 @@
+2020-05-01  Per Arne Vollan  <pvol...@apple.com>
+
+        [iOS] Every running WebContent process should be granted access to frontboard services when Accessibility is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=211238
+
+        Reviewed by Daniel Bates.
+
+        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
+        (TEST):
+
 2020-05-01  Don Olmstead  <don.olmst...@sony.com>
 
         [GTK] Add additional exports to support hidden visibility

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm (261015 => 261016)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm	2020-05-01 20:09:43 UTC (rev 261015)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm	2020-05-01 20:30:21 UTC (rev 261016)
@@ -68,4 +68,24 @@
     ASSERT_TRUE(sandboxAccess());
 }
 
+#if PLATFORM(IOS_FAMILY)
+TEST(WebKit, AccessibilityHasFrontboardServiceAccess)
+{
+    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 synchronouslyLoadTestPageNamed:@"simple"];
+
+    [[NSNotificationCenter defaultCenter] postNotificationName:NSApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification object:nil userInfo:nil];
+
+    auto sandboxAccess = [&] {
+        return [webView stringByEvaluatingJavaScript:@"window.internals.hasSandboxMachLookupAccessToGlobalName('com.apple.WebKit.WebContent', 'com.apple.frontboard.systemappservices')"].boolValue;
+    };
+
+    ASSERT_TRUE(sandboxAccess());
+}
+#endif // PLATFORM(IOS_FAMILY)
+
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to