Title: [263313] trunk/Source
Revision
263313
Author
cdu...@apple.com
Date
2020-06-19 20:50:10 -0700 (Fri, 19 Jun 2020)

Log Message

[Cocoa] Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued
https://bugs.webkit.org/show_bug.cgi?id=213414
<rdar://problem/64548684>

Reviewed by Per Arne Vollan.

Source/WebCore:

setHasConsumedSandboxExtensions() can now get called several times, every time a WebPage is created.
Once a sandbox extension has been consumed, there is no going back so return early if the state is
already "Consumed".

* platform/cocoa/NetworkExtensionContentFilter.mm:
(WebCore::NetworkExtensionContentFilter::setHasConsumedSandboxExtensions):
* platform/cocoa/ParentalControlsContentFilter.mm:
(WebCore::ParentalControlsContentFilter::setHasConsumedSandboxExtension):

Source/WebKit:

Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued.
This is a Safari launch time optimization since the checks needed to decide whether or not to issue
the extensions are expensive and there is no reason to issue them as soon as the process launches
(especially in the case of a prewarmed process).

* Shared/Cocoa/LoadParametersCocoa.mm:
(WebKit::LoadParameters::platformEncode const):
(WebKit::LoadParameters::platformDecode):
* Shared/LoadParameters.h:
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::addPlatformLoadParameters):
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::addPlatformLoadParameters):
(WebKit::WebPageProxy::loadRequestWithNavigationShared):
(WebKit::WebPageProxy::loadFile):
(WebKit::WebPageProxy::loadDataWithNavigationShared):
(WebKit::WebPageProxy::loadAlternateHTML):
(WebKit::WebPageProxy::loadWebArchiveData):
* UIProcess/WebPageProxy.h:
* UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::hasNetworkExtensionSandboxAccess const):
(WebKit::WebProcessProxy::markHasNetworkExtensionSandboxAccess):
(WebKit::WebProcessProxy::hasManagedSessionSandboxAccess const):
(WebKit::WebProcessProxy::markHasManagedSessionSandboxAccess):
* WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::platformDidReceiveLoadParameters):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (263312 => 263313)


--- trunk/Source/WebCore/ChangeLog	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebCore/ChangeLog	2020-06-20 03:50:10 UTC (rev 263313)
@@ -1,3 +1,20 @@
+2020-06-19  Chris Dumez  <cdu...@apple.com>
+
+        [Cocoa] Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued
+        https://bugs.webkit.org/show_bug.cgi?id=213414
+        <rdar://problem/64548684>
+
+        Reviewed by Per Arne Vollan.
+
+        setHasConsumedSandboxExtensions() can now get called several times, every time a WebPage is created.
+        Once a sandbox extension has been consumed, there is no going back so return early if the state is
+        already "Consumed".
+
+        * platform/cocoa/NetworkExtensionContentFilter.mm:
+        (WebCore::NetworkExtensionContentFilter::setHasConsumedSandboxExtensions):
+        * platform/cocoa/ParentalControlsContentFilter.mm:
+        (WebCore::ParentalControlsContentFilter::setHasConsumedSandboxExtension):
+
 2020-06-19  Zalan Bujtas  <za...@apple.com>
 
         [AutoSizing] Resolve viewport units against the preferred content size

Modified: trunk/Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm (263312 => 263313)


--- trunk/Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -228,6 +228,9 @@
 
 void NetworkExtensionContentFilter::setHasConsumedSandboxExtensions(bool hasConsumedSandboxExtensions)
 {
+    if (m_sandboxExtensionsState == SandboxExtensionsState::Consumed)
+        return;
+
     m_sandboxExtensionsState = (hasConsumedSandboxExtensions ? SandboxExtensionsState::Consumed : SandboxExtensionsState::NotConsumed);
 }
 

Modified: trunk/Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm (263312 => 263313)


--- trunk/Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -150,6 +150,9 @@
 #if PLATFORM(IOS)
 void ParentalControlsContentFilter::setHasConsumedSandboxExtension(bool hasConsumedSandboxExtension)
 {
+    if (m_sandboxExtensionState == SandboxExtensionState::Consumed)
+        return;
+
     m_sandboxExtensionState = (hasConsumedSandboxExtension ? SandboxExtensionState::Consumed : SandboxExtensionState::NotConsumed);
 }
 #endif

Modified: trunk/Source/WebKit/ChangeLog (263312 => 263313)


--- trunk/Source/WebKit/ChangeLog	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/ChangeLog	2020-06-20 03:50:10 UTC (rev 263313)
@@ -1,3 +1,46 @@
+2020-06-19  Chris Dumez  <cdu...@apple.com>
+
+        [Cocoa] Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued
+        https://bugs.webkit.org/show_bug.cgi?id=213414
+        <rdar://problem/64548684>
+
+        Reviewed by Per Arne Vollan.
+
+        Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued.
+        This is a Safari launch time optimization since the checks needed to decide whether or not to issue
+        the extensions are expensive and there is no reason to issue them as soon as the process launches
+        (especially in the case of a prewarmed process).
+
+        * Shared/Cocoa/LoadParametersCocoa.mm:
+        (WebKit::LoadParameters::platformEncode const):
+        (WebKit::LoadParameters::platformDecode):
+        * Shared/LoadParameters.h:
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode const):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+        (WebKit::WebPageProxy::addPlatformLoadParameters):
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::platformInitializeWebProcess):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::addPlatformLoadParameters):
+        (WebKit::WebPageProxy::loadRequestWithNavigationShared):
+        (WebKit::WebPageProxy::loadFile):
+        (WebKit::WebPageProxy::loadDataWithNavigationShared):
+        (WebKit::WebPageProxy::loadAlternateHTML):
+        (WebKit::WebPageProxy::loadWebArchiveData):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebProcessProxy.h:
+        (WebKit::WebProcessProxy::hasNetworkExtensionSandboxAccess const):
+        (WebKit::WebProcessProxy::markHasNetworkExtensionSandboxAccess):
+        (WebKit::WebProcessProxy::hasManagedSessionSandboxAccess const):
+        (WebKit::WebProcessProxy::markHasManagedSessionSandboxAccess):
+        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
+        (WebKit::WebPage::platformDidReceiveLoadParameters):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+
 2020-06-19  Ryan Haddad  <ryanhad...@apple.com>
 
         Unreviewed, reverting r263287.

Modified: trunk/Source/WebKit/Shared/Cocoa/LoadParametersCocoa.mm (263312 => 263313)


--- trunk/Source/WebKit/Shared/Cocoa/LoadParametersCocoa.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/Shared/Cocoa/LoadParametersCocoa.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -36,13 +36,46 @@
 void LoadParameters::platformEncode(IPC::Encoder& encoder) const
 {
     IPC::encode(encoder, dataDetectionContext.get());
+
+    encoder << neHelperExtensionHandle;
+    encoder << neSessionManagerExtensionHandle;
+#if PLATFORM(IOS)
+    encoder << contentFilterExtensionHandle;
+    encoder << frontboardServiceExtensionHandle;
+#endif
 }
 
-bool LoadParameters::platformDecode(IPC::Decoder& decoder, LoadParameters& data)
+bool LoadParameters::platformDecode(IPC::Decoder& decoder, LoadParameters& parameters)
 {
-    if (!IPC::decode(decoder, data.dataDetectionContext))
+    if (!IPC::decode(decoder, parameters.dataDetectionContext))
         return false;
 
+    Optional<Optional<SandboxExtension::Handle>> neHelperExtensionHandle;
+    decoder >> neHelperExtensionHandle;
+    if (!neHelperExtensionHandle)
+        return false;
+    parameters.neHelperExtensionHandle = WTFMove(*neHelperExtensionHandle);
+
+    Optional<Optional<SandboxExtension::Handle>> neSessionManagerExtensionHandle;
+    decoder >> neSessionManagerExtensionHandle;
+    if (!neSessionManagerExtensionHandle)
+        return false;
+    parameters.neSessionManagerExtensionHandle = WTFMove(*neSessionManagerExtensionHandle);
+
+#if PLATFORM(IOS)
+    Optional<Optional<SandboxExtension::Handle>> contentFilterExtensionHandle;
+    decoder >> contentFilterExtensionHandle;
+    if (!contentFilterExtensionHandle)
+        return false;
+    parameters.contentFilterExtensionHandle = WTFMove(*contentFilterExtensionHandle);
+
+    Optional<Optional<SandboxExtension::Handle>> frontboardServiceExtensionHandle;
+    decoder >> frontboardServiceExtensionHandle;
+    if (!frontboardServiceExtensionHandle)
+        return false;
+    parameters.frontboardServiceExtensionHandle = WTFMove(*frontboardServiceExtensionHandle);
+#endif
+
     return true;
 }
 

Modified: trunk/Source/WebKit/Shared/LoadParameters.h (263312 => 263313)


--- trunk/Source/WebKit/Shared/LoadParameters.h	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/Shared/LoadParameters.h	2020-06-20 03:50:10 UTC (rev 263313)
@@ -74,7 +74,13 @@
 
 #if PLATFORM(COCOA)
     RetainPtr<NSDictionary> dataDetectionContext;
+    Optional<SandboxExtension::Handle> neHelperExtensionHandle;
+    Optional<SandboxExtension::Handle> neSessionManagerExtensionHandle;
 #endif
+#if PLATFORM(IOS)
+    Optional<SandboxExtension::Handle> contentFilterExtensionHandle;
+    Optional<SandboxExtension::Handle> frontboardServiceExtensionHandle;
+#endif
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (263312 => 263313)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-06-20 03:50:10 UTC (rev 263313)
@@ -157,8 +157,6 @@
     
 #if PLATFORM(IOS)
     encoder << compilerServiceExtensionHandle;
-    encoder << contentFilterExtensionHandle;
-    encoder << frontboardServiceExtensionHandle;
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -168,8 +166,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    encoder << neHelperExtensionHandle;
-    encoder << neSessionManagerExtensionHandle;
     encoder << mapDBExtensionHandle;
     encoder << systemHasBattery;
 #endif
@@ -421,18 +417,6 @@
     if (!compilerServiceExtensionHandle)
         return false;
     parameters.compilerServiceExtensionHandle = WTFMove(*compilerServiceExtensionHandle);
-
-    Optional<Optional<SandboxExtension::Handle>> contentFilterExtensionHandle;
-    decoder >> contentFilterExtensionHandle;
-    if (!contentFilterExtensionHandle)
-        return false;
-    parameters.contentFilterExtensionHandle = WTFMove(*contentFilterExtensionHandle);
-
-    Optional<Optional<SandboxExtension::Handle>> frontboardServiceExtensionHandle;
-    decoder >> frontboardServiceExtensionHandle;
-    if (!frontboardServiceExtensionHandle)
-        return false;
-    parameters.frontboardServiceExtensionHandle = WTFMove(*frontboardServiceExtensionHandle);
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -456,18 +440,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    Optional<Optional<SandboxExtension::Handle>> neHelperExtensionHandle;
-    decoder >> neHelperExtensionHandle;
-    if (!neHelperExtensionHandle)
-        return false;
-    parameters.neHelperExtensionHandle = WTFMove(*neHelperExtensionHandle);
-
-    Optional<Optional<SandboxExtension::Handle>> neSessionManagerExtensionHandle;
-    decoder >> neSessionManagerExtensionHandle;
-    if (!neSessionManagerExtensionHandle)
-        return false;
-    parameters.neSessionManagerExtensionHandle = WTFMove(*neSessionManagerExtensionHandle);
-
     Optional<Optional<SandboxExtension::Handle>> mapDBExtensionHandle;
     decoder >> mapDBExtensionHandle;
     if (!mapDBExtensionHandle)

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (263312 => 263313)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-06-20 03:50:10 UTC (rev 263313)
@@ -201,8 +201,6 @@
     
 #if PLATFORM(IOS)
     Optional<SandboxExtension::Handle> compilerServiceExtensionHandle;
-    Optional<SandboxExtension::Handle> contentFilterExtensionHandle;
-    Optional<SandboxExtension::Handle> frontboardServiceExtensionHandle;
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -212,8 +210,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    Optional<SandboxExtension::Handle> neHelperExtensionHandle;
-    Optional<SandboxExtension::Handle> neSessionManagerExtensionHandle;
     Optional<SandboxExtension::Handle> mapDBExtensionHandle;
     bool systemHasBattery { false };
 #endif

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (263312 => 263313)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -47,7 +47,9 @@
 #import <WebCore/SearchPopupMenuCocoa.h>
 #import <WebCore/TextAlternativeWithRange.h>
 #import <WebCore/ValidationBubble.h>
+#import <pal/spi/cocoa/NEFilterSourceSPI.h>
 #import <wtf/BlockPtr.h>
+#import <wtf/SoftLinking.h>
 #import <wtf/cf/TypeCastsCF.h>
 
 #if ENABLE(MEDIA_USAGE)
@@ -54,6 +56,16 @@
 #import "MediaUsageManagerCocoa.h"
 #endif
 
+#if PLATFORM(IOS)
+#import <pal/spi/cocoa/WebFilterEvaluatorSPI.h>
+
+SOFT_LINK_PRIVATE_FRAMEWORK(WebContentAnalysis);
+SOFT_LINK_CLASS(WebContentAnalysis, WebFilterEvaluator);
+#endif
+
+SOFT_LINK_FRAMEWORK_OPTIONAL(NetworkExtension);
+SOFT_LINK_CLASS_OPTIONAL(NetworkExtension, NEFilterSource);
+
 #define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, process().connection())
 #define MESSAGE_CHECK_COMPLETION(assertion, completion) MESSAGE_CHECK_COMPLETION_BASE(assertion, process().connection(), completion)
 
@@ -129,9 +141,38 @@
 }
 #endif
 
-void WebPageProxy::addPlatformLoadParameters(LoadParameters& loadParameters)
+void WebPageProxy::addPlatformLoadParameters(WebProcessProxy& process, LoadParameters& loadParameters)
 {
     loadParameters.dataDetectionContext = m_uiClient->dataDetectionContext();
+
+    if (!process.hasNetworkExtensionSandboxAccess() && [getNEFilterSourceClass() filterRequired]) {
+        SandboxExtension::Handle helperHandle;
+        SandboxExtension::createHandleForMachLookup("com.apple.nehelper"_s, WTF::nullopt, helperHandle);
+        loadParameters.neHelperExtensionHandle = WTFMove(helperHandle);
+        SandboxExtension::Handle managerHandle;
+#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
+        SandboxExtension::createHandleForMachLookup("com.apple.nesessionmanager"_s, WTF::nullopt, managerHandle);
+#else
+        SandboxExtension::createHandleForMachLookup("com.apple.nesessionmanager.content-filter"_s, WTF::nullopt, managerHandle);
+#endif
+        loadParameters.neSessionManagerExtensionHandle = WTFMove(managerHandle);
+
+        process.markHasNetworkExtensionSandboxAccess();
+    }
+
+#if PLATFORM(IOS)
+    if (!process.hasManagedSessionSandboxAccess() && [getWebFilterEvaluatorClass() isManagedSession]) {
+        SandboxExtension::Handle handle;
+        SandboxExtension::createHandleForMachLookup("com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI"_s, WTF::nullopt, handle);
+        loadParameters.contentFilterExtensionHandle = WTFMove(handle);
+
+        SandboxExtension::Handle frontboardServiceExtensionHandle;
+        if (SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, WTF::nullopt, frontboardServiceExtensionHandle))
+            loadParameters.frontboardServiceExtensionHandle = WTFMove(frontboardServiceExtensionHandle);
+
+        process.markHasManagedSessionSandboxAccess();
+    }
+#endif
 }
 
 void WebPageProxy::createSandboxExtensionsIfNeeded(const Vector<String>& files, SandboxExtension::Handle& fileReadHandle, SandboxExtension::HandleArray& fileUploadHandles)

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (263312 => 263313)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -79,8 +79,6 @@
 #import <QuartzCore/CARemoteLayerServer.h>
 #else
 #import "UIKitSPI.h"
-#import <pal/ios/ManagedConfigurationSoftLink.h>
-#import <pal/spi/ios/ManagedConfigurationSPI.h>
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -87,19 +85,8 @@
 #import <pal/spi/ios/MobileGestaltSPI.h>
 #endif
 
-#if PLATFORM(IOS)
-#import <pal/spi/cocoa/WebFilterEvaluatorSPI.h>
-
-SOFT_LINK_PRIVATE_FRAMEWORK(WebContentAnalysis);
-SOFT_LINK_CLASS(WebContentAnalysis, WebFilterEvaluator);
-#endif
-
 #if PLATFORM(COCOA)
 #import <WebCore/SystemBattery.h>
-#import <pal/spi/cocoa/NEFilterSourceSPI.h>
-
-SOFT_LINK_FRAMEWORK_OPTIONAL(NetworkExtension);
-SOFT_LINK_CLASS_OPTIONAL(NetworkExtension, NEFilterSource);
 #endif
 
 NSString *WebServiceWorkerRegistrationDirectoryDefaultsKey = @"WebServiceWorkerRegistrationDirectory";
@@ -408,18 +395,6 @@
 #endif
     
 #if PLATFORM(COCOA)
-    if ([getNEFilterSourceClass() filterRequired]) {
-        SandboxExtension::Handle helperHandle;
-        SandboxExtension::createHandleForMachLookup("com.apple.nehelper"_s, WTF::nullopt, helperHandle);
-        parameters.neHelperExtensionHandle = WTFMove(helperHandle);
-        SandboxExtension::Handle managerHandle;
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
-        SandboxExtension::createHandleForMachLookup("com.apple.nesessionmanager"_s, WTF::nullopt, managerHandle);
-#else
-        SandboxExtension::createHandleForMachLookup("com.apple.nesessionmanager.content-filter"_s, WTF::nullopt, managerHandle);
-#endif
-        parameters.neSessionManagerExtensionHandle = WTFMove(managerHandle);
-    }
     parameters.systemHasBattery = systemHasBattery();
 
     SandboxExtension::Handle mapDBHandle;
@@ -426,19 +401,7 @@
     if (SandboxExtension::createHandleForMachLookup("com.apple.lsd.mapdb"_s, WTF::nullopt, mapDBHandle, SandboxExtension::Flags::NoReport))
         parameters.mapDBExtensionHandle = WTFMove(mapDBHandle);
 #endif
-    
-#if PLATFORM(IOS)
-    if ([getWebFilterEvaluatorClass() isManagedSession]) {
-        SandboxExtension::Handle handle;
-        SandboxExtension::createHandleForMachLookup("com.apple.uikit.viewservice.com.apple.WebContentFilter.remoteUI"_s, WTF::nullopt, handle);
-        parameters.contentFilterExtensionHandle = WTFMove(handle);
 
-        SandboxExtension::Handle frontboardServiceExtensionHandle;
-        if (SandboxExtension::createHandleForMachLookup("com.apple.frontboard.systemappservices"_s, WTF::nullopt, frontboardServiceExtensionHandle))
-            parameters.frontboardServiceExtensionHandle = WTFMove(frontboardServiceExtensionHandle);
-    }
-#endif
-
 #if PLATFORM(IOS_FAMILY)
     parameters.currentUserInterfaceIdiomIsPad = currentUserInterfaceIdiomIsPad();
     parameters.supportsPictureInPicture = supportsPictureInPicture();

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (263312 => 263313)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-06-20 03:50:10 UTC (rev 263313)
@@ -1266,7 +1266,7 @@
 }
 
 #if !PLATFORM(COCOA)
-void WebPageProxy::addPlatformLoadParameters(LoadParameters&)
+void WebPageProxy::addPlatformLoadParameters(WebProcessProxy&, LoadParameters&)
 {
 }
 #endif
@@ -1323,7 +1323,7 @@
     loadParameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
     maybeInitializeSandboxExtensionHandle(process, url, m_pageLoadState.resourceDirectoryURL(), loadParameters.sandboxExtensionHandle);
 
-    addPlatformLoadParameters(loadParameters);
+    addPlatformLoadParameters(process, loadParameters);
 
     preconnectTo(url);
 
@@ -1385,7 +1385,7 @@
     loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
     const bool checkAssumedReadAccessToResourceURL = false;
     maybeInitializeSandboxExtensionHandle(m_process, fileURL, resourceDirectoryURL, loadParameters.sandboxExtensionHandle, checkAssumedReadAccessToResourceURL);
-    addPlatformLoadParameters(loadParameters);
+    addPlatformLoadParameters(m_process, loadParameters);
 
 #if HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_AUDIT_TOKEN)
     if (m_process->isLaunching())
@@ -1445,7 +1445,7 @@
     loadParameters.websitePolicies = WTFMove(websitePolicies);
     loadParameters.shouldOpenExternalURLsPolicy = shouldOpenExternalURLsPolicy;
     loadParameters.isNavigatingToAppBoundDomain = isNavigatingToAppBoundDomain;
-    addPlatformLoadParameters(loadParameters);
+    addPlatformLoadParameters(process, loadParameters);
 
     process->assumeReadAccessToBaseURL(*this, baseURL);
     process->send(Messages::WebPage::LoadData(loadParameters), webPageID);
@@ -1487,7 +1487,7 @@
     loadParameters.unreachableURLString = unreachableURL.string();
     loadParameters.provisionalLoadErrorURLString = m_failingProvisionalLoadURL;
     loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
-    addPlatformLoadParameters(loadParameters);
+    addPlatformLoadParameters(process(), loadParameters);
 
     m_process->assumeReadAccessToBaseURL(*this, baseURL.string());
     m_process->assumeReadAccessToBaseURL(*this, unreachableURL.string());
@@ -1516,7 +1516,7 @@
     loadParameters.MIMEType = "application/x-webarchive"_s;
     loadParameters.encodingName = "utf-16"_s;
     loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
-    addPlatformLoadParameters(loadParameters);
+    addPlatformLoadParameters(process(), loadParameters);
 
     send(Messages::WebPage::LoadData(loadParameters));
     m_process->startResponsivenessTimer();

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (263312 => 263313)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-06-20 03:50:10 UTC (rev 263313)
@@ -603,7 +603,7 @@
 
     void closePage();
 
-    void addPlatformLoadParameters(LoadParameters&);
+    void addPlatformLoadParameters(WebProcessProxy&, LoadParameters&);
     RefPtr<API::Navigation> loadRequest(WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, API::Object* userData = nullptr);
     RefPtr<API::Navigation> loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
     RefPtr<API::Navigation> loadData(const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow);

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (263312 => 263313)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-06-20 03:50:10 UTC (rev 263313)
@@ -388,6 +388,15 @@
 
     bool hasSleepDisabler() const;
 
+#if PLATFORM(COCOA)
+    bool hasNetworkExtensionSandboxAccess() const { return m_hasNetworkExtensionSandboxAccess; }
+    void markHasNetworkExtensionSandboxAccess() { m_hasNetworkExtensionSandboxAccess = true; }
+#endif
+#if PLATFORM(IOS)
+    bool hasManagedSessionSandboxAccess() const { return m_hasManagedSessionSandboxAccess; }
+    void markHasManagedSessionSandboxAccess() { m_hasManagedSessionSandboxAccess = true; }
+#endif
+
 protected:
     WebProcessProxy(WebProcessPool&, WebsiteDataStore*, IsPrewarmed);
 
@@ -578,6 +587,12 @@
 #if ENABLE(ATTACHMENT_ELEMENT) && PLATFORM(IOS_FAMILY)
     bool m_hasIssuedAttachmentElementRelatedSandboxExtensions { false };
 #endif
+#if PLATFORM(COCOA)
+    bool m_hasNetworkExtensionSandboxAccess { false };
+#endif
+#if PLATFORM(IOS)
+    bool m_hasManagedSessionSandboxAccess { false };
+#endif
     Optional<UseLazyStop> m_shouldStartResponsivenessTimerWhenLaunched;
 
 #if PLATFORM(WATCHOS)

Modified: trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm (263312 => 263313)


--- trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -45,6 +45,7 @@
 #import <WebCore/HTMLOListElement.h>
 #import <WebCore/HTMLUListElement.h>
 #import <WebCore/HitTestResult.h>
+#import <WebCore/NetworkExtensionContentFilter.h>
 #import <WebCore/NodeRenderStyle.h>
 #import <WebCore/PaymentCoordinator.h>
 #import <WebCore/PlatformMediaSessionManager.h>
@@ -51,13 +52,32 @@
 #import <WebCore/Range.h>
 #import <WebCore/RenderElement.h>
 
+#if PLATFORM(IOS)
+#import <WebCore/ParentalControlsContentFilter.h>
+#endif
+
 #if PLATFORM(COCOA)
 
 namespace WebKit {
 
-void WebPage::platformDidReceiveLoadParameters(const LoadParameters& loadParameters)
+void WebPage::platformDidReceiveLoadParameters(const LoadParameters& parameters)
 {
-    m_dataDetectionContext = loadParameters.dataDetectionContext;
+    m_dataDetectionContext = parameters.dataDetectionContext;
+
+    if (parameters.neHelperExtensionHandle)
+        SandboxExtension::consumePermanently(*parameters.neHelperExtensionHandle);
+    if (parameters.neSessionManagerExtensionHandle)
+        SandboxExtension::consumePermanently(*parameters.neSessionManagerExtensionHandle);
+    NetworkExtensionContentFilter::setHasConsumedSandboxExtensions(parameters.neHelperExtensionHandle.hasValue() && parameters.neSessionManagerExtensionHandle.hasValue());
+
+#if PLATFORM(IOS)
+    if (parameters.contentFilterExtensionHandle)
+        SandboxExtension::consumePermanently(*parameters.contentFilterExtensionHandle);
+    ParentalControlsContentFilter::setHasConsumedSandboxExtension(parameters.contentFilterExtensionHandle.hasValue());
+
+    if (parameters.frontboardServiceExtensionHandle)
+        SandboxExtension::consumePermanently(*parameters.frontboardServiceExtensionHandle);
+#endif
 }
 
 void WebPage::requestActiveNowPlayingSessionInfo(CallbackID callbackID)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (263312 => 263313)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-06-20 03:17:41 UTC (rev 263312)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-06-20 03:50:10 UTC (rev 263313)
@@ -63,7 +63,6 @@
 #import <WebCore/LogInitialization.h>
 #import <WebCore/MemoryRelease.h>
 #import <WebCore/NSScrollerImpDetails.h>
-#import <WebCore/NetworkExtensionContentFilter.h>
 #import <WebCore/PerformanceLogging.h>
 #import <WebCore/PictureInPictureSupport.h>
 #import <WebCore/RuntimeApplicationChecks.h>
@@ -94,10 +93,6 @@
 #import <_javascript_Core/RemoteInspector.h>
 #endif
 
-#if PLATFORM(IOS)
-#import <WebCore/ParentalControlsContentFilter.h>
-#endif
-
 #if PLATFORM(IOS_FAMILY)
 #import "UIKitSPI.h"
 #import <bmalloc/MemoryStatusSPI.h>
@@ -272,13 +267,6 @@
 #if PLATFORM(IOS)
     if (parameters.compilerServiceExtensionHandle)
         SandboxExtension::consumePermanently(*parameters.compilerServiceExtensionHandle);
-
-    if (parameters.contentFilterExtensionHandle)
-        SandboxExtension::consumePermanently(*parameters.contentFilterExtensionHandle);
-    ParentalControlsContentFilter::setHasConsumedSandboxExtension(parameters.contentFilterExtensionHandle.hasValue());
-
-    if (parameters.frontboardServiceExtensionHandle)
-        SandboxExtension::consumePermanently(*parameters.frontboardServiceExtensionHandle);
 #endif
 
 #if PLATFORM(IOS_FAMILY)
@@ -287,12 +275,6 @@
     SandboxExtension::consumePermanently(parameters.dynamicIOKitExtensionHandles);
 #endif
     
-    if (parameters.neHelperExtensionHandle)
-        SandboxExtension::consumePermanently(*parameters.neHelperExtensionHandle);
-    if (parameters.neSessionManagerExtensionHandle)
-        SandboxExtension::consumePermanently(*parameters.neSessionManagerExtensionHandle);
-    NetworkExtensionContentFilter::setHasConsumedSandboxExtensions(parameters.neHelperExtensionHandle.hasValue() && parameters.neSessionManagerExtensionHandle.hasValue());
-
     setSystemHasBattery(parameters.systemHasBattery);
 
 #if PLATFORM(IOS_FAMILY)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to