Title: [243384] trunk
Revision
243384
Author
cdu...@apple.com
Date
2019-03-22 10:01:14 -0700 (Fri, 22 Mar 2019)

Log Message

Prewarmed processes should be usable with any website data store
https://bugs.webkit.org/show_bug.cgi?id=196104

Reviewed by Alex Christensen.

Source/WebKit:

Split WebsiteDataStore-specific data out of WebProcessCreationParameters and into a new
WebProcessDataStoreParameters struct so that we do not need a WebsiteDataStore in order
to lauch and initialize a WebProcess. When the process finally gets used and we thus
know which WebsiteDataStore they will be used for, we send the WebProcessDataStoreParameters
to the process to that it can do its data store-specific initialization.

This allows prewarmed processes not not have a WebsiteDataStore assocated with them. They
can then be used for any WebsiteDataStore when we need them.

This is also used by our dummy WebProcessProxy since it does not have a backing process and
thus has no associated WebsiteDataStore.

* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* Shared/WebProcessDataStoreParameters.h: Added.
(WebKit::WebProcessDataStoreParameters::encode const):
(WebKit::WebProcessDataStoreParameters::decode):
* UIProcess/API/C/WKContext.cpp:
(WKContextWarmInitialProcess):
* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _warmInitialProcess]):
* UIProcess/ServiceWorkerProcessProxy.cpp:
(WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
(WebKit::WebProcessPool::createNewWebProcess):
(WebKit::WebProcessPool::tryTakePrewarmedProcess):
(WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
(WebKit::WebProcessPool::initializeNewWebProcess):
(WebKit::WebProcessPool::prewarmProcess):
(WebKit::WebProcessPool::processForRegistrableDomain):
(WebKit::WebProcessPool::createWebPage):
(WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
* UIProcess/WebProcessPool.h:
(WebKit::WebProcessPool::sendToOneProcess):
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::create):
(WebKit::WebProcessProxy::WebProcessProxy):
(WebKit::WebProcessProxy::setWebsiteDataStore):
(WebKit::WebProcessProxy::addExistingWebPage):
* UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::websiteDataStore const):
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
(WebKit::WebMediaKeyStorageManager::setWebsiteDataStore):
* WebProcess/MediaCache/WebMediaKeyStorageManager.h:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
(WebKit::WebProcess::setWebsiteDataStoreParameters):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/WebProcessSupplement.h:
(WebKit::WebProcessSupplement::initialize):
(WebKit::WebProcessSupplement::setWebsiteDataStore):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):
(WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
* WebProcess/win/WebProcessWin.cpp:
(WebKit::WebProcess::platformInitializeWebProcess):
(WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

Tools:

Add API test coverage.

* TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
(runInitialWarmedProcessUsedTest):
(TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (243383 => 243384)


--- trunk/Source/WebKit/ChangeLog	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/ChangeLog	2019-03-22 17:01:14 UTC (rev 243384)
@@ -1,3 +1,75 @@
+2019-03-22  Chris Dumez  <cdu...@apple.com>
+
+        Prewarmed processes should be usable with any website data store
+        https://bugs.webkit.org/show_bug.cgi?id=196104
+
+        Reviewed by Alex Christensen.
+
+        Split WebsiteDataStore-specific data out of WebProcessCreationParameters and into a new
+        WebProcessDataStoreParameters struct so that we do not need a WebsiteDataStore in order
+        to lauch and initialize a WebProcess. When the process finally gets used and we thus
+        know which WebsiteDataStore they will be used for, we send the WebProcessDataStoreParameters
+        to the process to that it can do its data store-specific initialization.
+
+        This allows prewarmed processes not not have a WebsiteDataStore assocated with them. They
+        can then be used for any WebsiteDataStore when we need them.
+
+        This is also used by our dummy WebProcessProxy since it does not have a backing process and
+        thus has no associated WebsiteDataStore.
+
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode const):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * Shared/WebProcessDataStoreParameters.h: Added.
+        (WebKit::WebProcessDataStoreParameters::encode const):
+        (WebKit::WebProcessDataStoreParameters::decode):
+        * UIProcess/API/C/WKContext.cpp:
+        (WKContextWarmInitialProcess):
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (-[WKProcessPool _warmInitialProcess]):
+        * UIProcess/ServiceWorkerProcessProxy.cpp:
+        (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::notifyProcessPoolToPrewarm):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
+        (WebKit::WebProcessPool::createNewWebProcess):
+        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
+        (WebKit::WebProcessPool::sendWebProcessDataStoreParameters):
+        (WebKit::WebProcessPool::initializeNewWebProcess):
+        (WebKit::WebProcessPool::prewarmProcess):
+        (WebKit::WebProcessPool::processForRegistrableDomain):
+        (WebKit::WebProcessPool::createWebPage):
+        (WebKit::WebProcessPool::didReachGoodTimeToPrewarm):
+        * UIProcess/WebProcessPool.h:
+        (WebKit::WebProcessPool::sendToOneProcess):
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::create):
+        (WebKit::WebProcessProxy::WebProcessProxy):
+        (WebKit::WebProcessProxy::setWebsiteDataStore):
+        (WebKit::WebProcessProxy::addExistingWebPage):
+        * UIProcess/WebProcessProxy.h:
+        (WebKit::WebProcessProxy::websiteDataStore const):
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
+        (WebKit::WebMediaKeyStorageManager::setWebsiteDataStore):
+        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::initializeWebProcess):
+        (WebKit::WebProcess::setWebsiteDataStoreParameters):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/WebProcessSupplement.h:
+        (WebKit::WebProcessSupplement::initialize):
+        (WebKit::WebProcessSupplement::setWebsiteDataStore):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
+        * WebProcess/win/WebProcessWin.cpp:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
+
 2019-03-22  Simon Fraser  <simon.fra...@apple.com>
 
         REGRESSION (r242687): Flicker when pinch-zooming pages in macOS Safari

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (243383 => 243384)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -48,24 +48,13 @@
     encoder << injectedBundlePathExtensionHandle;
     encoder << additionalSandboxExtensionHandles;
     encoder << initializationUserData;
-    encoder << applicationCacheDirectory;
-    encoder << applicationCacheFlatFileSubdirectoryName;
-    encoder << applicationCacheDirectoryExtensionHandle;
-    encoder << webSQLDatabaseDirectory;
-    encoder << webSQLDatabaseDirectoryExtensionHandle;
-    encoder << mediaCacheDirectory;
-    encoder << mediaCacheDirectoryExtensionHandle;
-    encoder << _javascript_ConfigurationDirectory;
-    encoder << _javascript_ConfigurationDirectoryExtensionHandle;
 #if PLATFORM(IOS_FAMILY)
     encoder << cookieStorageDirectoryExtensionHandle;
     encoder << containerCachesDirectoryExtensionHandle;
     encoder << containerTemporaryDirectoryExtensionHandle;
 #endif
-    encoder << mediaKeyStorageDirectory;
     encoder << webCoreLoggingChannels;
     encoder << webKitLoggingChannels;
-    encoder << mediaKeyStorageDirectoryExtensionHandle;
 #if ENABLE(MEDIA_STREAM)
     encoder << audioCaptureExtensionHandle;
     encoder << shouldCaptureAudioInUIProcess;
@@ -89,7 +78,6 @@
     encoder << shouldEnableMemoryPressureReliefLogging;
     encoder << shouldSuppressMemoryPressureHandler;
     encoder << shouldUseFontSmoothing;
-    encoder << resourceLoadStatisticsEnabled;
     encoder << fontWhitelist;
     encoder << terminationTimeout;
     encoder << languages;
@@ -185,44 +173,7 @@
     parameters.additionalSandboxExtensionHandles = WTFMove(*additionalSandboxExtensionHandles);
     if (!decoder.decode(parameters.initializationUserData))
         return false;
-    if (!decoder.decode(parameters.applicationCacheDirectory))
-        return false;
-    if (!decoder.decode(parameters.applicationCacheFlatFileSubdirectoryName))
-        return false;
-    
-    Optional<SandboxExtension::Handle> applicationCacheDirectoryExtensionHandle;
-    decoder >> applicationCacheDirectoryExtensionHandle;
-    if (!applicationCacheDirectoryExtensionHandle)
-        return false;
-    parameters.applicationCacheDirectoryExtensionHandle = WTFMove(*applicationCacheDirectoryExtensionHandle);
 
-    if (!decoder.decode(parameters.webSQLDatabaseDirectory))
-        return false;
-
-    Optional<SandboxExtension::Handle> webSQLDatabaseDirectoryExtensionHandle;
-    decoder >> webSQLDatabaseDirectoryExtensionHandle;
-    if (!webSQLDatabaseDirectoryExtensionHandle)
-        return false;
-    parameters.webSQLDatabaseDirectoryExtensionHandle = WTFMove(*webSQLDatabaseDirectoryExtensionHandle);
-
-    if (!decoder.decode(parameters.mediaCacheDirectory))
-        return false;
-    
-    Optional<SandboxExtension::Handle> mediaCacheDirectoryExtensionHandle;
-    decoder >> mediaCacheDirectoryExtensionHandle;
-    if (!mediaCacheDirectoryExtensionHandle)
-        return false;
-    parameters.mediaCacheDirectoryExtensionHandle = WTFMove(*mediaCacheDirectoryExtensionHandle);
-
-    if (!decoder.decode(parameters._javascript_ConfigurationDirectory))
-        return false;
-    
-    Optional<SandboxExtension::Handle> _javascript_ConfigurationDirectoryExtensionHandle;
-    decoder >> _javascript_ConfigurationDirectoryExtensionHandle;
-    if (!_javascript_ConfigurationDirectoryExtensionHandle)
-        return false;
-    parameters._javascript_ConfigurationDirectoryExtensionHandle = WTFMove(*_javascript_ConfigurationDirectoryExtensionHandle);
-
 #if PLATFORM(IOS_FAMILY)
     
     Optional<SandboxExtension::Handle> cookieStorageDirectoryExtensionHandle;
@@ -244,18 +195,10 @@
     parameters.containerTemporaryDirectoryExtensionHandle = WTFMove(*containerTemporaryDirectoryExtensionHandle);
 
 #endif
-    if (!decoder.decode(parameters.mediaKeyStorageDirectory))
-        return false;
     if (!decoder.decode(parameters.webCoreLoggingChannels))
         return false;
     if (!decoder.decode(parameters.webKitLoggingChannels))
         return false;
-    
-    Optional<SandboxExtension::Handle> mediaKeyStorageDirectoryExtensionHandle;
-    decoder >> mediaKeyStorageDirectoryExtensionHandle;
-    if (!mediaKeyStorageDirectoryExtensionHandle)
-        return false;
-    parameters.mediaKeyStorageDirectoryExtensionHandle = WTFMove(*mediaKeyStorageDirectoryExtensionHandle);
 
 #if ENABLE(MEDIA_STREAM)
 
@@ -306,8 +249,6 @@
         return false;
     if (!decoder.decode(parameters.shouldUseFontSmoothing))
         return false;
-    if (!decoder.decode(parameters.resourceLoadStatisticsEnabled))
-        return false;
     if (!decoder.decode(parameters.fontWhitelist))
         return false;
     if (!decoder.decode(parameters.terminationTimeout))

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (243383 => 243384)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -75,21 +75,11 @@
 
     UserData initializationUserData;
 
-    String applicationCacheDirectory;
-    String applicationCacheFlatFileSubdirectoryName;
-    SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;
-    String webSQLDatabaseDirectory;
-    SandboxExtension::Handle webSQLDatabaseDirectoryExtensionHandle;
-    String mediaCacheDirectory;
-    SandboxExtension::Handle mediaCacheDirectoryExtensionHandle;
-    String _javascript_ConfigurationDirectory;
-    SandboxExtension::Handle _javascript_ConfigurationDirectoryExtensionHandle;
 #if PLATFORM(IOS_FAMILY)
     SandboxExtension::Handle cookieStorageDirectoryExtensionHandle;
     SandboxExtension::Handle containerCachesDirectoryExtensionHandle;
     SandboxExtension::Handle containerTemporaryDirectoryExtensionHandle;
 #endif
-    SandboxExtension::Handle mediaKeyStorageDirectoryExtensionHandle;
 #if ENABLE(MEDIA_STREAM)
     SandboxExtension::Handle audioCaptureExtensionHandle;
     bool shouldCaptureAudioInUIProcess { false };
@@ -96,7 +86,6 @@
     bool shouldCaptureVideoInUIProcess { false };
     bool shouldCaptureDisplayInUIProcess { false };
 #endif
-    String mediaKeyStorageDirectory;
 
     String webCoreLoggingChannels;
     String webKitLoggingChannels;
@@ -128,7 +117,6 @@
     bool shouldEnableMemoryPressureReliefLogging { false };
     bool shouldSuppressMemoryPressureHandler { false };
     bool shouldUseFontSmoothing { true };
-    bool resourceLoadStatisticsEnabled { false };
     bool fullKeyboardAccessEnabled { false };
     bool memoryCacheDisabled { false };
     bool attrStyleEnabled { false };

Added: trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h (0 => 243384)


--- trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2010-2019 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.
+ */
+
+#pragma once
+
+namespace WebKit {
+
+struct WebProcessDataStoreParameters {
+    String applicationCacheDirectory;
+    SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;
+    String applicationCacheFlatFileSubdirectoryName;
+    String webSQLDatabaseDirectory;
+    SandboxExtension::Handle webSQLDatabaseDirectoryExtensionHandle;
+    String mediaCacheDirectory;
+    SandboxExtension::Handle mediaCacheDirectoryExtensionHandle;
+    String mediaKeyStorageDirectory;
+    SandboxExtension::Handle mediaKeyStorageDirectoryExtensionHandle;
+    String _javascript_ConfigurationDirectory;
+    SandboxExtension::Handle _javascript_ConfigurationDirectoryExtensionHandle;
+    bool resourceLoadStatisticsEnabled { false };
+
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<WebProcessDataStoreParameters> decode(Decoder&);
+};
+
+template<class Encoder>
+void WebProcessDataStoreParameters::encode(Encoder& encoder) const
+{
+    encoder << applicationCacheDirectory;
+    encoder << applicationCacheDirectoryExtensionHandle;
+    encoder << applicationCacheFlatFileSubdirectoryName;
+    encoder << webSQLDatabaseDirectory;
+    encoder << webSQLDatabaseDirectoryExtensionHandle;
+    encoder << mediaCacheDirectory;
+    encoder << mediaCacheDirectoryExtensionHandle;
+    encoder << mediaKeyStorageDirectory;
+    encoder << mediaKeyStorageDirectoryExtensionHandle;
+    encoder << _javascript_ConfigurationDirectory;
+    encoder << _javascript_ConfigurationDirectoryExtensionHandle;
+    encoder << resourceLoadStatisticsEnabled;
+}
+
+template<class Decoder>
+Optional<WebProcessDataStoreParameters> WebProcessDataStoreParameters::decode(Decoder& decoder)
+{
+    WebProcessDataStoreParameters parameters;
+
+    if (!decoder.decode(parameters.applicationCacheDirectory))
+        return WTF::nullopt;
+
+    Optional<SandboxExtension::Handle> applicationCacheDirectoryExtensionHandle;
+    decoder >> applicationCacheDirectoryExtensionHandle;
+    if (!applicationCacheDirectoryExtensionHandle)
+        return WTF::nullopt;
+    parameters.applicationCacheDirectoryExtensionHandle = WTFMove(*applicationCacheDirectoryExtensionHandle);
+
+    if (!decoder.decode(parameters.applicationCacheFlatFileSubdirectoryName))
+        return WTF::nullopt;
+
+    if (!decoder.decode(parameters.webSQLDatabaseDirectory))
+        return WTF::nullopt;
+
+    Optional<SandboxExtension::Handle> webSQLDatabaseDirectoryExtensionHandle;
+    decoder >> webSQLDatabaseDirectoryExtensionHandle;
+    if (!webSQLDatabaseDirectoryExtensionHandle)
+        return WTF::nullopt;
+    parameters.webSQLDatabaseDirectoryExtensionHandle = WTFMove(*webSQLDatabaseDirectoryExtensionHandle);
+
+    if (!decoder.decode(parameters.mediaCacheDirectory))
+        return WTF::nullopt;
+
+    Optional<SandboxExtension::Handle> mediaCacheDirectoryExtensionHandle;
+    decoder >> mediaCacheDirectoryExtensionHandle;
+    if (!mediaCacheDirectoryExtensionHandle)
+        return WTF::nullopt;
+    parameters.mediaCacheDirectoryExtensionHandle = WTFMove(*mediaCacheDirectoryExtensionHandle);
+
+    if (!decoder.decode(parameters.mediaKeyStorageDirectory))
+        return WTF::nullopt;
+
+    Optional<SandboxExtension::Handle> mediaKeyStorageDirectoryExtensionHandle;
+    decoder >> mediaKeyStorageDirectoryExtensionHandle;
+    if (!mediaKeyStorageDirectoryExtensionHandle)
+        return WTF::nullopt;
+    parameters.mediaKeyStorageDirectoryExtensionHandle = WTFMove(*mediaKeyStorageDirectoryExtensionHandle);
+
+    if (!decoder.decode(parameters._javascript_ConfigurationDirectory))
+        return WTF::nullopt;
+
+    Optional<SandboxExtension::Handle> _javascript_ConfigurationDirectoryExtensionHandle;
+    decoder >> _javascript_ConfigurationDirectoryExtensionHandle;
+    if (!_javascript_ConfigurationDirectoryExtensionHandle)
+        return WTF::nullopt;
+    parameters._javascript_ConfigurationDirectoryExtensionHandle = WTFMove(*_javascript_ConfigurationDirectoryExtensionHandle);
+
+    if (!decoder.decode(parameters.resourceLoadStatisticsEnabled))
+        return WTF::nullopt;
+
+    return parameters;
+}
+
+} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -524,7 +524,7 @@
 
 void WKContextWarmInitialProcess(WKContextRef contextRef)
 {
-    WebKit::toImpl(contextRef)->prewarmProcess(nullptr, WebKit::WebProcessPool::MayCreateDefaultDataStore::Yes);
+    WebKit::toImpl(contextRef)->prewarmProcess();
 }
 
 void WKContextGetStatistics(WKContextRef contextRef, void* context, WKContextGetStatisticsFunction callback)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2019-03-22 17:01:14 UTC (rev 243384)
@@ -389,7 +389,7 @@
 
 - (void)_warmInitialProcess
 {
-    _processPool->prewarmProcess(nullptr, WebKit::WebProcessPool::MayCreateDefaultDataStore::Yes);
+    _processPool->prewarmProcess();
 }
 
 - (void)_automationCapabilitiesDidChange

Modified: trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -51,7 +51,7 @@
 }
 
 ServiceWorkerProcessProxy::ServiceWorkerProcessProxy(WebProcessPool& pool, const RegistrableDomain& registrableDomain, WebsiteDataStore& store)
-    : WebProcessProxy { pool, store, IsPrewarmed::No }
+    : WebProcessProxy { pool, &store, IsPrewarmed::No }
     , m_registrableDomain(registrableDomain)
     , m_serviceWorkerPageID(generatePageID())
 {

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -571,7 +571,7 @@
 
 void WebPageProxy::notifyProcessPoolToPrewarm()
 {
-    m_process->processPool().didReachGoodTimeToPrewarm(m_websiteDataStore);
+    m_process->processPool().didReachGoodTimeToPrewarm();
 }
 
 void WebPageProxy::setPreferences(WebPreferences& preferences)

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -72,6 +72,7 @@
 #include "WebPreferencesKeys.h"
 #include "WebProcessCache.h"
 #include "WebProcessCreationParameters.h"
+#include "WebProcessDataStoreParameters.h"
 #include "WebProcessMessages.h"
 #include "WebProcessPoolMessages.h"
 #include "WebProcessProxy.h"
@@ -694,7 +695,7 @@
     m_serviceWorkerProcesses.add(WTFMove(registrableDomain), serviceWorkerProcessProxy.ptr());
 
     updateProcessAssertions();
-    initializeNewWebProcess(serviceWorkerProcessProxy, *websiteDataStore);
+    initializeNewWebProcess(serviceWorkerProcessProxy, websiteDataStore);
 
     auto* serviceWorkerProcessProxyPtr = serviceWorkerProcessProxy.ptr();
     m_processes.append(WTFMove(serviceWorkerProcessProxy));
@@ -789,7 +790,7 @@
     platformResolvePathsForSandboxExtensions();
 }
 
-WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore& websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
+WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
 {
     auto processProxy = WebProcessProxy::create(*this, websiteDataStore, isPrewarmed);
     auto& process = processProxy.get();
@@ -807,12 +808,12 @@
     if (!m_prewarmedProcess)
         return nullptr;
 
-    if (&m_prewarmedProcess->websiteDataStore() != &websiteDataStore)
-        return nullptr;
-
     ASSERT(m_prewarmedProcess->isPrewarmed());
     m_prewarmedProcess->markIsNoLongerInPrewarmedPool();
 
+    m_prewarmedProcess->setWebsiteDataStore(websiteDataStore);
+    sendWebProcessDataStoreParameters(*m_prewarmedProcess, websiteDataStore);
+
     return std::exchange(m_prewarmedProcess, nullptr);
 }
 
@@ -839,36 +840,17 @@
 }
 #endif
 
-void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore& websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
+void WebProcessPool::sendWebProcessDataStoreParameters(WebProcessProxy& process, WebsiteDataStore& websiteDataStore)
 {
-    auto initializationActivityToken = process.throttler().backgroundActivityToken();
-    auto scopeExit = makeScopeExit([&process, initializationActivityToken] {
-        // Round-trip to the Web Content process before releasing the
-        // initialization activity token, so that we're sure that all
-        // messages sent from this function have been handled.
-        process.isResponsive([initializationActivityToken] (bool) { });
-    });
+    WebProcessDataStoreParameters parameters;
 
-    ensureNetworkProcess();
-
-    WebProcessCreationParameters parameters;
-
     websiteDataStore.resolveDirectoriesIfNecessary();
 
-    parameters.injectedBundlePath = m_resolvedPaths.injectedBundlePath;
-    if (!parameters.injectedBundlePath.isEmpty())
-        SandboxExtension::createHandleWithoutResolvingPath(parameters.injectedBundlePath, SandboxExtension::Type::ReadOnly, parameters.injectedBundlePathExtensionHandle);
-
-    parameters.additionalSandboxExtensionHandles.allocate(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size());
-    for (size_t i = 0, size = m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size(); i < size; ++i)
-        SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths[i], SandboxExtension::Type::ReadOnly, parameters.additionalSandboxExtensionHandles[i]);
-
     parameters.applicationCacheDirectory = websiteDataStore.resolvedApplicationCacheDirectory();
     if (parameters.applicationCacheDirectory.isEmpty())
         parameters.applicationCacheDirectory = m_resolvedPaths.applicationCacheDirectory;
     if (!parameters.applicationCacheDirectory.isEmpty())
         SandboxExtension::createHandleWithoutResolvingPath(parameters.applicationCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.applicationCacheDirectoryExtensionHandle);
-
     parameters.applicationCacheFlatFileSubdirectoryName = m_configuration->applicationCacheFlatFileSubdirectoryName();
 
     parameters.webSQLDatabaseDirectory = websiteDataStore.resolvedDatabaseDirectory();
@@ -889,10 +871,6 @@
     if (!parameters.mediaKeyStorageDirectory.isEmpty())
         SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeyStorageDirectoryExtensionHandle);
 
-#if PLATFORM(IOS_FAMILY)
-    setJavaScriptConfigurationFileEnabledFromDefaults();
-#endif
-
     if (_javascript_ConfigurationFileEnabled()) {
         parameters._javascript_ConfigurationDirectory = websiteDataStore.resolvedJavaScriptConfigurationDirectory();
         if (!parameters._javascript_ConfigurationDirectory.isEmpty())
@@ -899,6 +877,37 @@
             SandboxExtension::createHandleWithoutResolvingPath(parameters._javascript_ConfigurationDirectory, SandboxExtension::Type::ReadWrite, parameters._javascript_ConfigurationDirectoryExtensionHandle);
     }
 
+    parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled();
+
+    process.send(Messages::WebProcess::SetWebsiteDataStoreParameters(parameters), 0);
+}
+
+void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
+{
+    auto initializationActivityToken = process.throttler().backgroundActivityToken();
+    auto scopeExit = makeScopeExit([&process, initializationActivityToken] {
+        // Round-trip to the Web Content process before releasing the
+        // initialization activity token, so that we're sure that all
+        // messages sent from this function have been handled.
+        process.isResponsive([initializationActivityToken] (bool) { });
+    });
+
+    ensureNetworkProcess();
+
+    WebProcessCreationParameters parameters;
+
+    parameters.injectedBundlePath = m_resolvedPaths.injectedBundlePath;
+    if (!parameters.injectedBundlePath.isEmpty())
+        SandboxExtension::createHandleWithoutResolvingPath(parameters.injectedBundlePath, SandboxExtension::Type::ReadOnly, parameters.injectedBundlePathExtensionHandle);
+
+    parameters.additionalSandboxExtensionHandles.allocate(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size());
+    for (size_t i = 0, size = m_resolvedPaths.additionalWebProcessSandboxExtensionPaths.size(); i < size; ++i)
+        SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths[i], SandboxExtension::Type::ReadOnly, parameters.additionalSandboxExtensionHandles[i]);
+
+#if PLATFORM(IOS_FAMILY)
+    setJavaScriptConfigurationFileEnabledFromDefaults();
+#endif
+
     parameters.cacheModel = cacheModel();
     parameters.languages = configuration().overrideLanguages().isEmpty() ? userPreferredLanguages() : configuration().overrideLanguages();
 
@@ -958,7 +967,6 @@
         parameters.waylandCompositorDisplayName = WaylandCompositor::singleton().displayName();
 #endif
 
-    parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled();
 #if ENABLE(MEDIA_STREAM)
     parameters.shouldCaptureAudioInUIProcess = m_configuration->shouldCaptureAudioInUIProcess();
     parameters.shouldCaptureVideoInUIProcess = m_configuration->shouldCaptureVideoInUIProcess();
@@ -989,6 +997,9 @@
     process.send(Messages::WebProcess::SetQOS(webProcessLatencyQOS(), webProcessThroughputQOS()), 0);
 #endif
 
+    if (websiteDataStore)
+        sendWebProcessDataStoreParameters(process, *websiteDataStore);
+
     if (m_automationSession)
         process.send(Messages::WebProcess::EnsureAutomationSessionProxy(m_automationSession->sessionIdentifier()), 0);
 
@@ -1014,35 +1025,13 @@
 #endif
 }
 
-void WebProcessPool::prewarmProcess(WebsiteDataStore* websiteDataStore, MayCreateDefaultDataStore mayCreateDefaultDataStore)
+void WebProcessPool::prewarmProcess()
 {
-    if (m_prewarmedProcess && websiteDataStore && &m_prewarmedProcess->websiteDataStore() != websiteDataStore) {
-        RELEASE_LOG(PerformanceLogging, "Shutting down prewarmed process %i because we needed a prewarmed process with a different data store", m_prewarmedProcess->processIdentifier());
-        m_prewarmedProcess->shutDown();
-        ASSERT(!m_prewarmedProcess);
-    }
-
     if (m_prewarmedProcess)
         return;
 
-    if (!websiteDataStore) {
-        websiteDataStore = m_websiteDataStore ? &m_websiteDataStore->websiteDataStore() : nullptr;
-        if (!websiteDataStore) {
-            if (!m_processes.isEmpty())
-                websiteDataStore = &m_processes.last()->websiteDataStore();
-            else if (mayCreateDefaultDataStore == MayCreateDefaultDataStore::Yes || API::WebsiteDataStore::defaultDataStoreExists())
-                websiteDataStore = &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
-            else {
-                RELEASE_LOG(PerformanceLogging, "Unable to prewarming a WebProcess because we could not find a usable data store");
-                return;
-            }
-        }
-    }
-
-    ASSERT(websiteDataStore);
-
     RELEASE_LOG(PerformanceLogging, "Prewarming a WebProcess for performance");
-    createNewWebProcess(*websiteDataStore, WebProcessProxy::IsPrewarmed::Yes);
+    createNewWebProcess(nullptr, WebProcessProxy::IsPrewarmed::Yes);
 }
 
 void WebProcessPool::enableProcessTermination()
@@ -1169,7 +1158,7 @@
     }
 
     if (!usesSingleWebProcess())
-        return createNewWebProcess(websiteDataStore);
+        return createNewWebProcess(&websiteDataStore);
 
 #if PLATFORM(COCOA)
     bool mustMatchDataStore = API::WebsiteDataStore::defaultDataStoreExists() && &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
@@ -1178,15 +1167,17 @@
 #endif
 
     for (auto& process : m_processes) {
-        if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
+        if (process == m_prewarmedProcess || process == m_dummyProcessProxy)
             continue;
 #if ENABLE(SERVICE_WORKER)
         if (is<ServiceWorkerProcessProxy>(*process))
             continue;
 #endif
+        if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)
+            continue;
         return *process;
     }
-    return createNewWebProcess(websiteDataStore);
+    return createNewWebProcess(&websiteDataStore);
 }
 
 Ref<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, Ref<API::PageConfiguration>&& pageConfiguration)
@@ -1221,7 +1212,7 @@
     } else if (!m_isDelayedWebProcessLaunchDisabled) {
         // In the common case, we delay process launch until something is actually loaded in the page.
         if (!m_dummyProcessProxy) {
-            auto dummyProcessProxy = WebProcessProxy::create(*this, WebsiteDataStore::createNonPersistent().get(), WebProcessProxy::IsPrewarmed::No, WebProcessProxy::ShouldLaunchProcess::No);
+            auto dummyProcessProxy = WebProcessProxy::create(*this, nullptr, WebProcessProxy::IsPrewarmed::No, WebProcessProxy::ShouldLaunchProcess::No);
             m_dummyProcessProxy = dummyProcessProxy.ptr();
             m_processes.append(WTFMove(dummyProcessProxy));
         }
@@ -1391,7 +1382,7 @@
     }
 }
 
-void WebProcessPool::didReachGoodTimeToPrewarm(WebsiteDataStore& dataStore)
+void WebProcessPool::didReachGoodTimeToPrewarm()
 {
     if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation() || usesSingleWebProcess())
         return;
@@ -1402,7 +1393,7 @@
         return;
     }
 
-    prewarmProcess(&dataStore, MayCreateDefaultDataStore::No);
+    prewarmProcess();
 }
 
 void WebProcessPool::populateVisitedLinks()

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -106,6 +106,7 @@
 struct NetworkProcessCreationParameters;
 struct StatisticsData;
 struct WebProcessCreationParameters;
+struct WebProcessDataStoreParameters;
     
 typedef GenericCallback<API::Dictionary*> DictionaryCallback;
 
@@ -311,8 +312,7 @@
 
     WebProcessProxy& processForRegistrableDomain(WebsiteDataStore&, WebPageProxy*, const WebCore::RegistrableDomain&); // Will return an existing one if limit is met or due to caching.
 
-    enum class MayCreateDefaultDataStore { No, Yes };
-    void prewarmProcess(WebsiteDataStore*, MayCreateDefaultDataStore);
+    void prewarmProcess();
 
     bool shouldTerminate(WebProcessProxy*);
 
@@ -477,7 +477,7 @@
 
     void clearSuspendedPages(AllowProcessCaching);
 
-    void didReachGoodTimeToPrewarm(WebsiteDataStore&);
+    void didReachGoodTimeToPrewarm();
 
     void didCollectPrewarmInformation(const WebCore::RegistrableDomain&, const WebCore::PrewarmInformation&);
 
@@ -517,8 +517,9 @@
 
     RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&);
 
-    WebProcessProxy& createNewWebProcess(WebsiteDataStore&, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
-    void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore&, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
+    WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
+    void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
+    void sendWebProcessDataStoreParameters(WebProcessProxy&, WebsiteDataStore&);
 
     void requestWebContentStatistics(StatisticsRequest&);
     void requestNetworkingStatistics(StatisticsRequest&);
@@ -837,7 +838,7 @@
     }
 
     if (!messageSent) {
-        prewarmProcess(nullptr, MayCreateDefaultDataStore::No);
+        prewarmProcess();
         RefPtr<WebProcessProxy> process = m_processes.last();
         if (process->canSendMessage())
             process->send(std::forward<T>(message), 0);

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -122,7 +122,7 @@
     return pageMap;
 }
 
-Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsPrewarmed isPrewarmed, ShouldLaunchProcess shouldLaunchProcess)
+Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore* websiteDataStore, IsPrewarmed isPrewarmed, ShouldLaunchProcess shouldLaunchProcess)
 {
     auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore, isPrewarmed));
     if (shouldLaunchProcess == ShouldLaunchProcess::Yes)
@@ -130,7 +130,7 @@
     return proxy;
 }
 
-WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore& websiteDataStore, IsPrewarmed isPrewarmed)
+WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore* websiteDataStore, IsPrewarmed isPrewarmed)
     : AuxiliaryProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
     , m_responsivenessTimer(*this)
     , m_backgroundResponsivenessTimer(*this)
@@ -219,6 +219,12 @@
     validateFreezerStatus();
 }
 
+void WebProcessProxy::setWebsiteDataStore(WebsiteDataStore& dataStore)
+{
+    ASSERT(!m_websiteDataStore);
+    m_websiteDataStore = &dataStore;
+}
+
 void WebProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
 {
     launchOptions.processType = ProcessLauncher::ProcessType::Web;
@@ -375,7 +381,7 @@
     ASSERT(!m_pageMap.contains(webPage.pageID()));
     ASSERT(!globalPageMap().contains(webPage.pageID()));
     ASSERT(!m_isInProcessCache);
-    ASSERT(m_websiteDataStore.ptr() == &webPage.websiteDataStore() || processPool().dummyProcessProxy() == this);
+    ASSERT(!m_websiteDataStore || m_websiteDataStore == &webPage.websiteDataStore());
 
     if (beginsUsingDataStore == BeginsUsingDataStore::Yes)
         m_processPool->pageBeginUsingWebsiteDataStore(webPage.pageID(), webPage.websiteDataStore());

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (243383 => 243384)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -105,7 +105,7 @@
 
     enum class ShouldLaunchProcess : bool { No, Yes };
 
-    static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore&, IsPrewarmed, ShouldLaunchProcess = ShouldLaunchProcess::Yes);
+    static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore*, IsPrewarmed, ShouldLaunchProcess = ShouldLaunchProcess::Yes);
     ~WebProcessProxy();
 
     WebConnection* webConnection() const { return m_webConnection.get(); }
@@ -120,8 +120,8 @@
     void setIsInProcessCache(bool);
     bool isInProcessCache() const { return m_isInProcessCache; }
 
-    // FIXME: WebsiteDataStores should be made per-WebPageProxy throughout WebKit2
-    WebsiteDataStore& websiteDataStore() const { return m_websiteDataStore.get(); }
+    WebsiteDataStore& websiteDataStore() const { ASSERT(m_websiteDataStore); return *m_websiteDataStore; }
+    void setWebsiteDataStore(WebsiteDataStore&);
 
     static WebProcessProxy* processForIdentifier(WebCore::ProcessIdentifier);
     static WebPageProxy* webPage(uint64_t pageID);
@@ -342,7 +342,7 @@
 
 protected:
     static uint64_t generatePageID();
-    WebProcessProxy(WebProcessPool&, WebsiteDataStore&, IsPrewarmed);
+    WebProcessProxy(WebProcessPool&, WebsiteDataStore*, IsPrewarmed);
 
     // AuxiliaryProcessProxy
     void getLaunchOptions(ProcessLauncher::LaunchOptions&) override;
@@ -493,8 +493,7 @@
 
     VisibleWebPageCounter m_visiblePageCounter;
 
-    // FIXME: WebsiteDataStores should be made per-WebPageProxy throughout WebKit2. Get rid of this member.
-    Ref<WebsiteDataStore> m_websiteDataStore;
+    RefPtr<WebsiteDataStore> m_websiteDataStore;
 
     bool m_isUnderMemoryPressure { false };
 

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (243383 => 243384)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2019-03-22 17:01:14 UTC (rev 243384)
@@ -902,6 +902,7 @@
 		463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		463FD4821EB94EC000A2982C /* ProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */; };
 		466BC03C1FA266DA002FA9C1 /* WebSWContextManagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */; };
+		467E43E82243FF7D00B13924 /* WebProcessDataStoreParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */; };
 		46A2B6091E5676A600C3DEDA /* BackgroundProcessResponsivenessTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */; };
 		46DF063C1F3905F8001980BB /* NetworkCORSPreflightChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */; };
 		4A3CC18B19B0640F00D14AEF /* UserMediaPermissionRequestManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A410F3A19AF7B04002EBAB5 /* UserMediaPermissionRequestManagerProxy.h */; };
@@ -3123,6 +3124,7 @@
 		466BC0381FA266C9002FA9C1 /* WebSWContextManagerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWContextManagerConnection.cpp; sourceTree = "<group>"; };
 		466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWContextManagerConnection.h; sourceTree = "<group>"; };
 		466BC03A1FA266C9002FA9C1 /* WebSWContextManagerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWContextManagerConnection.messages.in; sourceTree = "<group>"; };
+		467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessDataStoreParameters.h; sourceTree = "<group>"; };
 		4683569A21E81CC7006E27A3 /* ProvisionalPageProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProvisionalPageProxy.h; sourceTree = "<group>"; };
 		4683569B21E81CC7006E27A3 /* ProvisionalPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProvisionalPageProxy.cpp; sourceTree = "<group>"; };
 		46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; };
@@ -5214,6 +5216,7 @@
 				BCD598AA112B7FDF00EC8C23 /* WebPreferencesStore.h */,
 				BC306823125A6B9400E71278 /* WebProcessCreationParameters.cpp */,
 				BC306822125A6B9400E71278 /* WebProcessCreationParameters.h */,
+				467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */,
 				37948401150C350600E52CE9 /* WebRenderLayer.cpp */,
 				37948402150C350600E52CE9 /* WebRenderLayer.h */,
 				3760881C150413E900FC82C7 /* WebRenderObject.cpp */,
@@ -9668,6 +9671,7 @@
 				1A043A09124D11A900FFBFB5 /* WebProcessConnection.h in Headers */,
 				1A043F6A12514D8B00FFBFB5 /* WebProcessConnectionMessages.h in Headers */,
 				BC306824125A6B9400E71278 /* WebProcessCreationParameters.h in Headers */,
+				467E43E82243FF7D00B13924 /* WebProcessDataStoreParameters.h in Headers */,
 				1AFA4B901A65A9E2006C4AB4 /* WebProcessLifetimeObserver.h in Headers */,
 				1AFA4B8C1A65A1D0006C4AB4 /* WebProcessLifetimeTracker.h in Headers */,
 				BC3066BF125A442100E71278 /* WebProcessMessages.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -26,7 +26,7 @@
 #include "config.h"
 #include "WebMediaKeyStorageManager.h"
 
-#include "WebProcessCreationParameters.h"
+#include "WebProcessDataStoreParameters.h"
 #include <WebCore/SecurityOrigin.h>
 #include <WebCore/SecurityOriginData.h>
 #include <wtf/FileSystem.h>
@@ -35,7 +35,7 @@
 namespace WebKit {
 using namespace WebCore;
 
-void WebMediaKeyStorageManager::initialize(const WebProcessCreationParameters &parameters)
+void WebMediaKeyStorageManager::setWebsiteDataStore(const WebProcessDataStoreParameters& parameters)
 {
     ASSERT(!parameters.mediaKeyStorageDirectory.isEmpty());
     m_mediaKeyStorageDirectory = parameters.mediaKeyStorageDirectory;

Modified: trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.h (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -55,7 +55,7 @@
     void deleteAllMediaKeyEntries();
 
 private:
-    void initialize(const WebProcessCreationParameters&) override;
+    void setWebsiteDataStore(const WebProcessDataStoreParameters&) override;
 
     String m_mediaKeyStorageDirectory;
 };

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -61,6 +61,7 @@
 #include "WebPlatformStrategies.h"
 #include "WebPluginInfoProvider.h"
 #include "WebProcessCreationParameters.h"
+#include "WebProcessDataStoreParameters.h"
 #include "WebProcessMessages.h"
 #include "WebProcessPoolMessages.h"
 #include "WebProcessProxyMessages.h"
@@ -285,7 +286,7 @@
     MemoryPressureHandler::ReliefLogger::setLoggingEnabled(parameters.shouldEnableMemoryPressureReliefLogging);
 #endif
 
-    platformInitializeWebProcess(WTFMove(parameters));
+    platformInitializeWebProcess(parameters);
 
     // Match the QoS of the UIProcess and the scrolling thread but use a slightly lower priority.
     WTF::Thread::setCurrentThreadIsUserInteractive(-1);
@@ -341,20 +342,6 @@
     for (auto& supplement : m_supplements.values())
         supplement->initialize(parameters);
 
-    auto& databaseManager = DatabaseManager::singleton();
-    databaseManager.initialize(parameters.webSQLDatabaseDirectory);
-
-    // FIXME: This should be constructed per data store, not per process.
-    m_applicationCacheStorage = ApplicationCacheStorage::create(parameters.applicationCacheDirectory, parameters.applicationCacheFlatFileSubdirectoryName);
-#if PLATFORM(IOS_FAMILY)
-    m_applicationCacheStorage->setDefaultOriginQuota(25ULL * 1024 * 1024);
-#endif
-
-#if ENABLE(VIDEO)
-    if (!parameters.mediaCacheDirectory.isEmpty())
-        WebCore::HTMLMediaElement::setMediaCacheDirectory(parameters.mediaCacheDirectory);
-#endif
-
     setCacheModel(parameters.cacheModel);
 
     if (!parameters.languages.isEmpty())
@@ -402,8 +389,6 @@
 
     setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval);
 
-    setResourceLoadStatisticsEnabled(parameters.resourceLoadStatisticsEnabled);
-
     setAlwaysUsesComplexTextCodePath(parameters.shouldAlwaysUseComplexTextCodePath);
 
     setShouldUseFontSmoothing(parameters.shouldUseFontSmoothing);
@@ -472,6 +457,30 @@
     RELEASE_LOG(Process, "%p - WebProcess::initializeWebProcess: Presenting process = %d", this, WebCore::presentingApplicationPID());
 }
 
+void WebProcess::setWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters)
+{
+    auto& databaseManager = DatabaseManager::singleton();
+    databaseManager.initialize(parameters.webSQLDatabaseDirectory);
+
+    // FIXME: This should be constructed per data store, not per process.
+    m_applicationCacheStorage = ApplicationCacheStorage::create(parameters.applicationCacheDirectory, parameters.applicationCacheFlatFileSubdirectoryName);
+#if PLATFORM(IOS_FAMILY)
+    m_applicationCacheStorage->setDefaultOriginQuota(25ULL * 1024 * 1024);
+#endif
+
+#if ENABLE(VIDEO)
+    if (!parameters.mediaCacheDirectory.isEmpty())
+        WebCore::HTMLMediaElement::setMediaCacheDirectory(parameters.mediaCacheDirectory);
+#endif
+
+    setResourceLoadStatisticsEnabled(parameters.resourceLoadStatisticsEnabled);
+
+    for (auto& supplement : m_supplements.values())
+        supplement->setWebsiteDataStore(parameters);
+
+    platformSetWebsiteDataStoreParameters(WTFMove(parameters));
+}
+
 bool WebProcess::hasPageRequiringPageCacheWhileSuspended() const
 {
     for (auto& page : m_pageMap.values()) {

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -36,6 +36,7 @@
 #include "TextCheckerState.h"
 #include "ViewUpdateDispatcher.h"
 #include "WebInspectorInterruptDispatcher.h"
+#include "WebProcessCreationParameters.h"
 #include <WebCore/ActivityState.h>
 #include <WebCore/RegistrableDomain.h>
 #if PLATFORM(MAC)
@@ -104,12 +105,13 @@
 class WebLoaderStrategy;
 class WebPage;
 class WebPageGroupProxy;
+struct WebProcessCreationParameters;
+struct WebProcessDataStoreParameters;
 class WebProcessSupplement;
 enum class WebsiteDataType;
 struct WebPageCreationParameters;
 struct WebPageGroupData;
 struct WebPreferencesStore;
-struct WebProcessCreationParameters;
 struct WebsiteData;
 struct WebsiteDataStoreParameters;
 
@@ -262,7 +264,9 @@
     ~WebProcess();
 
     void initializeWebProcess(WebProcessCreationParameters&&);
-    void platformInitializeWebProcess(WebProcessCreationParameters&&);
+    void platformInitializeWebProcess(WebProcessCreationParameters&);
+    void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&);
+    void platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&);
 
     void prewarmGlobally();
     void prewarmWithDomainInformation(const WebCore::PrewarmInformation&);

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2019-03-22 17:01:14 UTC (rev 243384)
@@ -22,6 +22,7 @@
 
 messages -> WebProcess LegacyReceiver {
     InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters)
+    SetWebsiteDataStoreParameters(struct WebKit::WebProcessDataStoreParameters parameters)
 
     # Create a new page.
     CreateWebPage(uint64_t newPageID, struct WebKit::WebPageCreationParameters pageCreationParameters)

Modified: trunk/Source/WebKit/WebProcess/WebProcessSupplement.h (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/WebProcessSupplement.h	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/WebProcessSupplement.h	2019-03-22 17:01:14 UTC (rev 243384)
@@ -30,12 +30,12 @@
 namespace WebKit {
 
 struct WebProcessCreationParameters;
+struct WebProcessDataStoreParameters;
 
 class WebProcessSupplement : public AuxiliaryProcessSupplement {
 public:
-    virtual void initialize(const WebProcessCreationParameters&)
-    {
-    }
+    virtual void initialize(const WebProcessCreationParameters&) { }
+    virtual void setWebsiteDataStore(const WebProcessDataStoreParameters&) { }
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2019-03-22 17:01:14 UTC (rev 243384)
@@ -43,6 +43,7 @@
 #import "WebInspector.h"
 #import "WebPage.h"
 #import "WebProcessCreationParameters.h"
+#import "WebProcessDataStoreParameters.h"
 #import "WebProcessProxyMessages.h"
 #import "WebsiteDataStoreParameters.h"
 #import <_javascript_Core/ConfigFile.h>
@@ -131,7 +132,7 @@
 }
 #endif
 
-void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&& parameters)
+void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
 {
 #if !LOG_DISABLED || !RELEASE_LOG_DISABLED
     WebCore::initializeLogChannelsIfNecessary(parameters.webCoreLoggingChannels);
@@ -145,11 +146,6 @@
 
 #if ENABLE(SANDBOX_EXTENSIONS)
     SandboxExtension::consumePermanently(parameters.uiProcessBundleResourcePathExtensionHandle);
-    SandboxExtension::consumePermanently(parameters.webSQLDatabaseDirectoryExtensionHandle);
-    SandboxExtension::consumePermanently(parameters.applicationCacheDirectoryExtensionHandle);
-    SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle);
-    SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle);
-    SandboxExtension::consumePermanently(parameters._javascript_ConfigurationDirectoryExtensionHandle);
 #if ENABLE(MEDIA_STREAM)
     SandboxExtension::consumePermanently(parameters.audioCaptureExtensionHandle);
 #endif
@@ -160,11 +156,6 @@
 #endif
 #endif
 
-    if (!parameters._javascript_ConfigurationDirectory.isEmpty()) {
-        String _javascript_ConfigFile = parameters._javascript_ConfigurationDirectory + "/JSC.config";
-        JSC::processConfigFile(_javascript_ConfigFile.latin1().data(), "com.apple.WebKit.WebContent", parameters.uiProcessBundleIdentifier.latin1().data());
-    }
-
     // Disable NSURLCache.
     auto urlCache = adoptNS([[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]);
     [NSURLCache setSharedURLCache:urlCache.get()];
@@ -216,6 +207,22 @@
 #endif
 }
 
+void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters)
+{
+#if ENABLE(SANDBOX_EXTENSIONS)
+    SandboxExtension::consumePermanently(parameters.webSQLDatabaseDirectoryExtensionHandle);
+    SandboxExtension::consumePermanently(parameters.applicationCacheDirectoryExtensionHandle);
+    SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle);
+    SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle);
+    SandboxExtension::consumePermanently(parameters._javascript_ConfigurationDirectoryExtensionHandle);
+#endif
+
+    if (!parameters._javascript_ConfigurationDirectory.isEmpty()) {
+        String _javascript_ConfigFile = parameters._javascript_ConfigurationDirectory + "/JSC.config";
+        JSC::processConfigFile(_javascript_ConfigFile.latin1().data(), "com.apple.WebKit.WebContent", m_uiProcessBundleIdentifier.latin1().data());
+    }
+}
+
 void WebProcess::initializeProcessName(const AuxiliaryProcessInitializationParameters&)
 {
 #if PLATFORM(MAC)

Modified: trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -49,7 +49,7 @@
     WebCore::MemoryCache::singleton().setDisabled(cacheModel == CacheModel::DocumentViewer);
 }
 
-void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&& parameters)
+void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
 {
 #if PLATFORM(WPE)
     if (!parameters.isServiceWorkerProcess) {
@@ -69,6 +69,10 @@
 #endif
 }
 
+void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&)
+{
+}
+
 void WebProcess::platformTerminate()
 {
 }

Modified: trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp (243383 => 243384)


--- trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp	2019-03-22 17:01:14 UTC (rev 243384)
@@ -34,10 +34,15 @@
 }
 
 namespace WebKit {
-void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&&)
+
+void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&)
 {
 }
 
+void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&)
+{
+}
+
 void WebProcess::platformTerminate()
 {
 }

Modified: trunk/Tools/ChangeLog (243383 => 243384)


--- trunk/Tools/ChangeLog	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Tools/ChangeLog	2019-03-22 17:01:14 UTC (rev 243384)
@@ -1,3 +1,16 @@
+2019-03-22  Chris Dumez  <cdu...@apple.com>
+
+        Prewarmed processes should be usable with any website data store
+        https://bugs.webkit.org/show_bug.cgi?id=196104
+
+        Reviewed by Alex Christensen.
+
+        Add API test coverage.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
+        (runInitialWarmedProcessUsedTest):
+        (TEST):
+
 2019-03-22  David Kilzer  <ddkil...@apple.com>
 
         Back out local changes to Alex's Subversion working directory

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (243383 => 243384)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm	2019-03-22 16:54:54 UTC (rev 243383)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm	2019-03-22 17:01:14 UTC (rev 243384)
@@ -49,7 +49,8 @@
     EXPECT_TRUE([pool _hasPrewarmedWebProcess]);
 }
 
-TEST(WKProcessPool, InitialWarmedProcessUsed)
+enum class ShouldUseEphemeralStore { No, Yes };
+static void runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore shouldUseEphemeralStore)
 {
     auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
     processPoolConfiguration.get().prewarmsProcessesAutomatically = NO;
@@ -62,6 +63,8 @@
 
     auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     configuration.get().processPool = pool.get();
+    if (shouldUseEphemeralStore == ShouldUseEphemeralStore::Yes)
+        configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
 
     auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
 
@@ -76,6 +79,16 @@
     EXPECT_EQ(1U, [pool _webPageContentProcessCount]);
 }
 
+TEST(WKProcessPool, InitialWarmedProcessUsed)
+{
+    runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore::No);
+}
+
+TEST(WKProcessPool, InitialWarmedProcessUsedForEphemeralSession)
+{
+    runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore::Yes);
+}
+
 TEST(WKProcessPool, AutomaticProcessWarming)
 {
     auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to