Title: [254990] trunk/Source/WebKit
Revision
254990
Author
pvol...@apple.com
Date
2020-01-23 11:09:02 -0800 (Thu, 23 Jan 2020)

Log Message

[iOS] Make it possible for WebKit clients to enable connections to asset services in the WebContent process
https://bugs.webkit.org/show_bug.cgi?id=206551

Reviewed by Brent Fulgham.

Add SPI to grant and revoke access to asset services in the WebContent process.

No new tests, since this should have an API test, but API tests are not running on iOS devices. We could
create an API test for simulator, but the simulator has no sandbox.

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/API/ios/WKWebViewIOS.mm:
(-[WKWebView _grantAccessToAssetServices]):
(-[WKWebView _revokeAccessToAssetServices]):
* UIProcess/WebPageProxy.h:
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::grantAccessToAssetServices):
(WebKit::WebPageProxy::revokeAccessToAssetServices):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::grantAccessToAssetServices):
(WebKit::WebProcess::revokeAccessToAssetServices):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (254989 => 254990)


--- trunk/Source/WebKit/ChangeLog	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/ChangeLog	2020-01-23 19:09:02 UTC (rev 254990)
@@ -1,5 +1,32 @@
 2020-01-23  Per Arne Vollan  <pvol...@apple.com>
 
+        [iOS] Make it possible for WebKit clients to enable connections to asset services in the WebContent process
+        https://bugs.webkit.org/show_bug.cgi?id=206551
+
+        Reviewed by Brent Fulgham.
+
+        Add SPI to grant and revoke access to asset services in the WebContent process.
+
+        No new tests, since this should have an API test, but API tests are not running on iOS devices. We could
+        create an API test for simulator, but the simulator has no sandbox.
+
+        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/API/ios/WKWebViewIOS.mm:
+        (-[WKWebView _grantAccessToAssetServices]):
+        (-[WKWebView _revokeAccessToAssetServices]):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::grantAccessToAssetServices):
+        (WebKit::WebPageProxy::revokeAccessToAssetServices):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::grantAccessToAssetServices):
+        (WebKit::WebProcess::revokeAccessToAssetServices):
+
+2020-01-23  Per Arne Vollan  <pvol...@apple.com>
+
         [iOS] Camera is lost during WebRTC demo
         https://bugs.webkit.org/show_bug.cgi?id=206613
         <rdar://problem/58764572>

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


--- trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-01-23 19:09:02 UTC (rev 254990)
@@ -934,7 +934,7 @@
 (allow mach-lookup
     (require-all
         (extension "com.apple.webkit.extension.mach")
-        (global-name "com.apple.iphone.axserver-systemwide" "com.apple.tccd" "com.apple.nehelper" "com.apple.nesessionmanager.content-filter" "com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI" "com.apple.diagnosticd" "com.apple.lsd.open")))
+        (global-name "com.apple.iphone.axserver-systemwide" "com.apple.tccd" "com.apple.nehelper" "com.apple.nesessionmanager.content-filter" "com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI" "com.apple.diagnosticd" "com.apple.lsd.open" "com.apple.mobileassetd" "com.apple.mobileassetd.v2")))
 
 (allow mach-lookup
     (require-all

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


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-01-23 19:09:02 UTC (rev 254990)
@@ -487,6 +487,9 @@
 
 - (UIView *)_fullScreenPlaceholderView WK_API_AVAILABLE(ios(12.0));
 
+- (void)_grantAccessToAssetServices WK_API_AVAILABLE(ios(WK_IOS_TBA));
+- (void)_revokeAccessToAssetServices WK_API_AVAILABLE(ios(WK_IOS_TBA));
+
 @end
 
 @interface WKWebView () <UIResponderStandardEditActions>

Modified: trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm (254989 => 254990)


--- trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm	2020-01-23 19:09:02 UTC (rev 254990)
@@ -3067,6 +3067,18 @@
     return nil;
 }
 
+- (void)_grantAccessToAssetServices
+{
+    if (_page)
+        _page->grantAccessToAssetServices();
+}
+
+- (void)_revokeAccessToAssetServices
+{
+    if (_page)
+        _page->revokeAccessToAssetServices();
+}
+
 @end // WKWebView (WKPrivateIOS)
 
 #if ENABLE(FULLSCREEN_API)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (254989 => 254990)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-01-23 19:09:02 UTC (rev 254990)
@@ -1668,6 +1668,11 @@
     bool hasQueuedKeyEvent() const;
     const NativeWebKeyboardEvent& firstQueuedKeyEvent() const;
 
+#if PLATFORM(IOS)
+    void grantAccessToAssetServices();
+    void revokeAccessToAssetServices();
+#endif
+
 private:
     WebPageProxy(PageClient&, WebProcessProxy&, Ref<API::PageConfiguration>&&);
     void platformInitialize();

Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (254989 => 254990)


--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2020-01-23 19:09:02 UTC (rev 254990)
@@ -58,6 +58,7 @@
 #import "WebAutocorrectionContext.h"
 #import "WebAutocorrectionData.h"
 #import "WebPageMessages.h"
+#import "WebProcessMessages.h"
 #import "WebProcessPool.h"
 #import "WebProcessProxy.h"
 #import <WebCore/FrameView.h>
@@ -1499,6 +1500,21 @@
     return WebContentMode::Desktop;
 }
 
+#if PLATFORM(IOS)
+void WebPageProxy::grantAccessToAssetServices()
+{
+    SandboxExtension::Handle mobileAssetHandle, mobileAssetHandleV2;
+    SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd", WTF::nullopt, mobileAssetHandle);
+    SandboxExtension::createHandleForMachLookup("com.apple.mobileassetd.v2", WTF::nullopt, mobileAssetHandle);
+    process().send(Messages::WebProcess::GrantAccessToAssetServices(mobileAssetHandle, mobileAssetHandleV2), 0);
+}
+
+void WebPageProxy::revokeAccessToAssetServices()
+{
+    process().send(Messages::WebProcess::RevokeAccessToAssetServices(), 0);
+}
+#endif
+
 } // namespace WebKit
 
 #undef RELEASE_LOG_IF_ALLOWED

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (254989 => 254990)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2020-01-23 19:09:02 UTC (rev 254990)
@@ -309,6 +309,11 @@
     bool removeServiceWorkerRegistration(WebCore::ServiceWorkerRegistrationIdentifier);
 #endif
 
+#if PLATFORM(IOS)
+    void grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetHandle,  WebKit::SandboxExtension::Handle&& mobileAssetV2Handle);
+    void revokeAccessToAssetServices();
+#endif
+
 private:
     WebProcess();
     ~WebProcess();
@@ -617,6 +622,11 @@
 #if ENABLE(RESOURCE_LOAD_STATISTICS)
     WebCore::ThirdPartyCookieBlockingMode m_thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All };
 #endif
+
+#if PLATFORM(IOS)
+    RefPtr<SandboxExtension> m_assetServiceExtension;
+    RefPtr<SandboxExtension> m_assetServiceV2Extension;
+#endif
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (254989 => 254990)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-01-23 19:09:02 UTC (rev 254990)
@@ -164,4 +164,9 @@
     SeedResourceLoadStatisticsForTesting(WebCore::RegistrableDomain firstPartyDomain, WebCore::RegistrableDomain thirdPartyDomain, bool shouldScheduleNotification) -> () Async
     SetShouldBlockThirdPartyCookiesForTesting(enum:uint8_t WebCore::ThirdPartyCookieBlockingMode blockingMode) -> () Async
 #endif
+
+#if PLATFORM(IOS)
+    GrantAccessToAssetServices(WebKit::SandboxExtension::Handle mobileAssetHandle, WebKit::SandboxExtension::Handle mobileAssetV2Handle)
+    RevokeAccessToAssetServices()
+#endif
 }

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (254989 => 254990)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-01-23 19:05:24 UTC (rev 254989)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-01-23 19:09:02 UTC (rev 254990)
@@ -846,6 +846,28 @@
         cache.addSupportedTypes(types);
 }
 
+#if PLATFORM(IOS)
+void WebProcess::grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetHandle,  WebKit::SandboxExtension::Handle&& mobileAssetV2Handle)
+{
+    if (m_assetServiceExtension && m_assetServiceV2Extension)
+        return;
+    m_assetServiceExtension = SandboxExtension::create(WTFMove(mobileAssetHandle));
+    m_assetServiceExtension->consume();
+    m_assetServiceV2Extension = SandboxExtension::create(WTFMove(mobileAssetV2Handle));
+    m_assetServiceV2Extension->consume();
+}
+
+void WebProcess::revokeAccessToAssetServices()
+{
+    if (!m_assetServiceExtension || !m_assetServiceV2Extension)
+        return;
+    m_assetServiceExtension->revoke();
+    m_assetServiceExtension = nullptr;
+    m_assetServiceV2Extension->revoke();
+    m_assetServiceV2Extension = nullptr;
+}
+#endif
+
 } // namespace WebKit
 
 #undef RELEASE_LOG_SESSION_ID
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to