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 ¶meters)
+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]);