Diff
Modified: trunk/Source/WebKit/ChangeLog (249817 => 249818)
--- trunk/Source/WebKit/ChangeLog 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/ChangeLog 2019-09-12 22:46:20 UTC (rev 249818)
@@ -1,5 +1,38 @@
2019-09-12 Chris Dumez <cdu...@apple.com>
+ Pass sessionID to WebProcess with other WebProcessDataStoreParameters
+ https://bugs.webkit.org/show_bug.cgi?id=201730
+
+ Reviewed by Alex Christensen.
+
+ Pass sessionID to WebProcess with other WebProcessDataStoreParameters and store
+ it on the WebProcess object. In follow-up patches, I will use this sessionID
+ more and leverage the fact that we have one sessionID per Webprocess to simplify
+ the WebKit2-layer code.
+
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::encode const):
+ (WebKit::WebProcessCreationParameters::decode):
+ * Shared/WebProcessCreationParameters.h:
+ * Shared/WebProcessDataStoreParameters.h:
+ (WebKit::WebProcessDataStoreParameters::encode const):
+ (WebKit::WebProcessDataStoreParameters::decode):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::tryTakePrewarmedProcess):
+ (WebKit::WebProcessPool::webProcessDataStoreParameters):
+ (WebKit::WebProcessPool::initializeNewWebProcess):
+ (WebKit::WebProcessPool::sendWebProcessDataStoreParameters): Deleted.
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::setWebsiteDataStore):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::initializeWebProcess):
+ (WebKit::WebProcess::setWebsiteDataStoreParameters):
+ * WebProcess/WebProcess.h:
+ (WebKit::WebProcess::sessionID const):
+
+2019-09-12 Chris Dumez <cdu...@apple.com>
+
[WKTR] Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED()
https://bugs.webkit.org/show_bug.cgi?id=201546
Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (249817 => 249818)
--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp 2019-09-12 22:46:20 UTC (rev 249818)
@@ -156,6 +156,8 @@
encoder << hostClientFileDescriptor;
encoder << implementationLibraryName;
#endif
+
+ encoder << websiteDataStoreParameters;
}
bool WebProcessCreationParameters::decode(IPC::Decoder& decoder, WebProcessCreationParameters& parameters)
@@ -380,6 +382,12 @@
return false;
#endif
+ Optional<Optional<WebProcessDataStoreParameters>> websiteDataStoreParameters;
+ decoder >> websiteDataStoreParameters;
+ if (!websiteDataStoreParameters)
+ return false;
+ parameters.websiteDataStoreParameters = WTFMove(*websiteDataStoreParameters);
+
return true;
}
Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (249817 => 249818)
--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h 2019-09-12 22:46:20 UTC (rev 249818)
@@ -29,6 +29,7 @@
#include "SandboxExtension.h"
#include "TextCheckerState.h"
#include "UserData.h"
+#include "WebProcessDataStoreParameters.h"
#include <pal/SessionID.h>
#include <wtf/HashMap.h>
#include <wtf/ProcessID.h>
@@ -194,6 +195,8 @@
IPC::Attachment hostClientFileDescriptor;
CString implementationLibraryName;
#endif
+
+ Optional<WebProcessDataStoreParameters> websiteDataStoreParameters;
};
} // namespace WebKit
Modified: trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h (249817 => 249818)
--- trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h 2019-09-12 22:46:20 UTC (rev 249818)
@@ -26,10 +26,12 @@
#pragma once
#include "SandboxExtension.h"
+#include <pal/SessionID.h>
namespace WebKit {
struct WebProcessDataStoreParameters {
+ PAL::SessionID sessionID;
String applicationCacheDirectory;
SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;
String applicationCacheFlatFileSubdirectoryName;
@@ -50,6 +52,7 @@
template<class Encoder>
void WebProcessDataStoreParameters::encode(Encoder& encoder) const
{
+ encoder << sessionID;
encoder << applicationCacheDirectory;
encoder << applicationCacheDirectoryExtensionHandle;
encoder << applicationCacheFlatFileSubdirectoryName;
@@ -67,9 +70,13 @@
template<class Decoder>
Optional<WebProcessDataStoreParameters> WebProcessDataStoreParameters::decode(Decoder& decoder)
{
- WebProcessDataStoreParameters parameters;
+ Optional<PAL::SessionID> sessionID;
+ decoder >> sessionID;
+ if (!sessionID)
+ return WTF::nullopt;
- if (!decoder.decode(parameters.applicationCacheDirectory))
+ String applicationCacheDirectory;
+ if (!decoder.decode(applicationCacheDirectory))
return WTF::nullopt;
Optional<SandboxExtension::Handle> applicationCacheDirectoryExtensionHandle;
@@ -76,12 +83,13 @@
decoder >> applicationCacheDirectoryExtensionHandle;
if (!applicationCacheDirectoryExtensionHandle)
return WTF::nullopt;
- parameters.applicationCacheDirectoryExtensionHandle = WTFMove(*applicationCacheDirectoryExtensionHandle);
- if (!decoder.decode(parameters.applicationCacheFlatFileSubdirectoryName))
+ String applicationCacheFlatFileSubdirectoryName;
+ if (!decoder.decode(applicationCacheFlatFileSubdirectoryName))
return WTF::nullopt;
- if (!decoder.decode(parameters.webSQLDatabaseDirectory))
+ String webSQLDatabaseDirectory;
+ if (!decoder.decode(webSQLDatabaseDirectory))
return WTF::nullopt;
Optional<SandboxExtension::Handle> webSQLDatabaseDirectoryExtensionHandle;
@@ -88,9 +96,9 @@
decoder >> webSQLDatabaseDirectoryExtensionHandle;
if (!webSQLDatabaseDirectoryExtensionHandle)
return WTF::nullopt;
- parameters.webSQLDatabaseDirectoryExtensionHandle = WTFMove(*webSQLDatabaseDirectoryExtensionHandle);
- if (!decoder.decode(parameters.mediaCacheDirectory))
+ String mediaCacheDirectory;
+ if (!decoder.decode(mediaCacheDirectory))
return WTF::nullopt;
Optional<SandboxExtension::Handle> mediaCacheDirectoryExtensionHandle;
@@ -97,9 +105,9 @@
decoder >> mediaCacheDirectoryExtensionHandle;
if (!mediaCacheDirectoryExtensionHandle)
return WTF::nullopt;
- parameters.mediaCacheDirectoryExtensionHandle = WTFMove(*mediaCacheDirectoryExtensionHandle);
- if (!decoder.decode(parameters.mediaKeyStorageDirectory))
+ String mediaKeyStorageDirectory;
+ if (!decoder.decode(mediaKeyStorageDirectory))
return WTF::nullopt;
Optional<SandboxExtension::Handle> mediaKeyStorageDirectoryExtensionHandle;
@@ -106,9 +114,9 @@
decoder >> mediaKeyStorageDirectoryExtensionHandle;
if (!mediaKeyStorageDirectoryExtensionHandle)
return WTF::nullopt;
- parameters.mediaKeyStorageDirectoryExtensionHandle = WTFMove(*mediaKeyStorageDirectoryExtensionHandle);
- if (!decoder.decode(parameters._javascript_ConfigurationDirectory))
+ String _javascript_ConfigurationDirectory;
+ if (!decoder.decode(_javascript_ConfigurationDirectory))
return WTF::nullopt;
Optional<SandboxExtension::Handle> _javascript_ConfigurationDirectoryExtensionHandle;
@@ -115,12 +123,26 @@
decoder >> _javascript_ConfigurationDirectoryExtensionHandle;
if (!_javascript_ConfigurationDirectoryExtensionHandle)
return WTF::nullopt;
- parameters._javascript_ConfigurationDirectoryExtensionHandle = WTFMove(*_javascript_ConfigurationDirectoryExtensionHandle);
- if (!decoder.decode(parameters.resourceLoadStatisticsEnabled))
+ bool resourceLoadStatisticsEnabled = false;
+ if (!decoder.decode(resourceLoadStatisticsEnabled))
return WTF::nullopt;
- return parameters;
+ return WebProcessDataStoreParameters {
+ WTFMove(*sessionID),
+ WTFMove(applicationCacheDirectory),
+ WTFMove(*applicationCacheDirectoryExtensionHandle),
+ WTFMove(applicationCacheFlatFileSubdirectoryName),
+ WTFMove(webSQLDatabaseDirectory),
+ WTFMove(*webSQLDatabaseDirectoryExtensionHandle),
+ WTFMove(mediaCacheDirectory),
+ WTFMove(*mediaCacheDirectoryExtensionHandle),
+ WTFMove(mediaKeyStorageDirectory),
+ WTFMove(*mediaKeyStorageDirectoryExtensionHandle),
+ WTFMove(_javascript_ConfigurationDirectory),
+ WTFMove(*_javascript_ConfigurationDirectoryExtensionHandle),
+ resourceLoadStatisticsEnabled
+ };
}
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (249817 => 249818)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-09-12 22:46:20 UTC (rev 249818)
@@ -841,9 +841,7 @@
ASSERT(m_prewarmedProcess->isPrewarmed());
m_prewarmedProcess->markIsNoLongerInPrewarmedPool();
-
m_prewarmedProcess->setWebsiteDataStore(websiteDataStore);
- sendWebProcessDataStoreParameters(*m_prewarmedProcess, websiteDataStore);
return std::exchange(m_prewarmedProcess, nullptr);
}
@@ -871,50 +869,71 @@
}
#endif
-void WebProcessPool::sendWebProcessDataStoreParameters(WebProcessProxy& process, WebsiteDataStore& websiteDataStore)
+WebProcessDataStoreParameters WebProcessPool::webProcessDataStoreParameters(WebProcessProxy& process, WebsiteDataStore& websiteDataStore)
{
- WebProcessDataStoreParameters parameters;
-
websiteDataStore.resolveDirectoriesIfNecessary();
- 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 = websiteDataStore.applicationCacheFlatFileSubdirectoryName();
- if (parameters.applicationCacheFlatFileSubdirectoryName.isEmpty())
- parameters.applicationCacheFlatFileSubdirectoryName = m_configuration->applicationCacheFlatFileSubdirectoryName();
+ String applicationCacheDirectory = websiteDataStore.resolvedApplicationCacheDirectory();
+ if (applicationCacheDirectory.isEmpty())
+ applicationCacheDirectory = m_resolvedPaths.applicationCacheDirectory;
- parameters.webSQLDatabaseDirectory = websiteDataStore.resolvedDatabaseDirectory();
- if (parameters.webSQLDatabaseDirectory.isEmpty())
- parameters.webSQLDatabaseDirectory = m_resolvedPaths.webSQLDatabaseDirectory;
- if (!parameters.webSQLDatabaseDirectory.isEmpty())
- SandboxExtension::createHandleWithoutResolvingPath(parameters.webSQLDatabaseDirectory, SandboxExtension::Type::ReadWrite, parameters.webSQLDatabaseDirectoryExtensionHandle);
+ SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;
+ if (!applicationCacheDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(applicationCacheDirectory, SandboxExtension::Type::ReadWrite, applicationCacheDirectoryExtensionHandle);
- parameters.mediaCacheDirectory = websiteDataStore.resolvedMediaCacheDirectory();
- if (parameters.mediaCacheDirectory.isEmpty())
- parameters.mediaCacheDirectory = m_resolvedPaths.mediaCacheDirectory;
- if (!parameters.mediaCacheDirectory.isEmpty())
- SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaCacheDirectoryExtensionHandle);
+ String applicationCacheFlatFileSubdirectoryName = websiteDataStore.applicationCacheFlatFileSubdirectoryName();
+ if (applicationCacheFlatFileSubdirectoryName.isEmpty())
+ applicationCacheFlatFileSubdirectoryName = m_configuration->applicationCacheFlatFileSubdirectoryName();
- parameters.mediaKeyStorageDirectory = websiteDataStore.resolvedMediaKeysDirectory();
- if (parameters.mediaKeyStorageDirectory.isEmpty())
- parameters.mediaKeyStorageDirectory = m_resolvedPaths.mediaKeyStorageDirectory;
- if (!parameters.mediaKeyStorageDirectory.isEmpty())
- SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeyStorageDirectoryExtensionHandle);
+ String webSQLDatabaseDirectory = websiteDataStore.resolvedDatabaseDirectory();
+ if (webSQLDatabaseDirectory.isEmpty())
+ webSQLDatabaseDirectory = m_resolvedPaths.webSQLDatabaseDirectory;
-
+ SandboxExtension::Handle webSQLDatabaseDirectoryExtensionHandle;
+ if (!webSQLDatabaseDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(webSQLDatabaseDirectory, SandboxExtension::Type::ReadWrite, webSQLDatabaseDirectoryExtensionHandle);
+
+ String mediaCacheDirectory = websiteDataStore.resolvedMediaCacheDirectory();
+ if (mediaCacheDirectory.isEmpty())
+ mediaCacheDirectory = m_resolvedPaths.mediaCacheDirectory;
+
+ SandboxExtension::Handle mediaCacheDirectoryExtensionHandle;
+ if (!mediaCacheDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(mediaCacheDirectory, SandboxExtension::Type::ReadWrite, mediaCacheDirectoryExtensionHandle);
+
+ String mediaKeyStorageDirectory = websiteDataStore.resolvedMediaKeysDirectory();
+ if (mediaKeyStorageDirectory.isEmpty())
+ mediaKeyStorageDirectory = m_resolvedPaths.mediaKeyStorageDirectory;
+
+ SandboxExtension::Handle mediaKeyStorageDirectoryExtensionHandle;
+ if (!mediaKeyStorageDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, mediaKeyStorageDirectoryExtensionHandle);
+
+ String _javascript_ConfigurationDirectory;
if (!m_javaScriptConfigurationDirectory.isEmpty())
- parameters._javascript_ConfigurationDirectory = m_javaScriptConfigurationDirectory;
+ _javascript_ConfigurationDirectory = m_javaScriptConfigurationDirectory;
else if (_javascript_ConfigurationFileEnabled())
- parameters._javascript_ConfigurationDirectory = websiteDataStore.resolvedJavaScriptConfigurationDirectory();
- if (!parameters._javascript_ConfigurationDirectory.isEmpty())
- SandboxExtension::createHandleWithoutResolvingPath(parameters._javascript_ConfigurationDirectory, SandboxExtension::Type::ReadWrite, parameters._javascript_ConfigurationDirectoryExtensionHandle);
+ _javascript_ConfigurationDirectory = websiteDataStore.resolvedJavaScriptConfigurationDirectory();
- parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled();
+ SandboxExtension::Handle _javascript_ConfigurationDirectoryExtensionHandle;
+ if (!_javascript_ConfigurationDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(_javascript_ConfigurationDirectory, SandboxExtension::Type::ReadWrite, _javascript_ConfigurationDirectoryExtensionHandle);
- process.send(Messages::WebProcess::SetWebsiteDataStoreParameters(parameters), 0);
+ return WebProcessDataStoreParameters {
+ websiteDataStore.sessionID(),
+ WTFMove(applicationCacheDirectory),
+ WTFMove(applicationCacheDirectoryExtensionHandle),
+ WTFMove(applicationCacheFlatFileSubdirectoryName),
+ WTFMove(webSQLDatabaseDirectory),
+ WTFMove(webSQLDatabaseDirectoryExtensionHandle),
+ WTFMove(mediaCacheDirectory),
+ WTFMove(mediaCacheDirectoryExtensionHandle),
+ WTFMove(mediaKeyStorageDirectory),
+ WTFMove(mediaKeyStorageDirectoryExtensionHandle),
+ WTFMove(_javascript_ConfigurationDirectory),
+ WTFMove(_javascript_ConfigurationDirectoryExtensionHandle),
+ websiteDataStore.resourceLoadStatisticsEnabled()
+ };
}
void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
@@ -1012,6 +1031,9 @@
if (!injectedBundleInitializationUserData)
injectedBundleInitializationUserData = m_injectedBundleInitializationUserData;
parameters.initializationUserData = UserData(process.transformObjectsToHandles(injectedBundleInitializationUserData.get()));
+
+ if (websiteDataStore)
+ parameters.websiteDataStoreParameters = webProcessDataStoreParameters(process, *websiteDataStore);
process.send(Messages::WebProcess::InitializeWebProcess(parameters), 0);
@@ -1019,9 +1041,6 @@
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);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (249817 => 249818)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-09-12 22:46:20 UTC (rev 249818)
@@ -528,6 +528,8 @@
void setJavaScriptConfigurationDirectory(String&& directory) { m_javaScriptConfigurationDirectory = directory; }
const String& _javascript_ConfigurationDirectory() const { return m_javaScriptConfigurationDirectory; }
+ WebProcessDataStoreParameters webProcessDataStoreParameters(WebProcessProxy&, WebsiteDataStore&);
+
private:
void platformInitialize();
@@ -540,7 +542,6 @@
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&);
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (249817 => 249818)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-09-12 22:46:20 UTC (rev 249818)
@@ -228,6 +228,7 @@
ASSERT(!m_websiteDataStore);
m_websiteDataStore = &dataStore;
updateRegistrationWithDataStore();
+ send(Messages::WebProcess::SetWebsiteDataStoreParameters(processPool().webProcessDataStoreParameters(*this, dataStore)), 0);
}
void WebProcessProxy::updateRegistrationWithDataStore()
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (249817 => 249818)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-09-12 22:46:20 UTC (rev 249818)
@@ -275,6 +275,9 @@
ASSERT(m_pageMap.isEmpty());
+ if (parameters.websiteDataStoreParameters)
+ setWebsiteDataStoreParameters(WTFMove(*parameters.websiteDataStoreParameters));
+
WebCore::setPresentingApplicationPID(parameters.presentingApplicationPID);
#if OS(LINUX)
@@ -436,6 +439,9 @@
void WebProcess::setWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters)
{
+ ASSERT(!m_sessionID);
+ m_sessionID = parameters.sessionID;
+
auto& databaseManager = DatabaseManager::singleton();
databaseManager.initialize(parameters.webSQLDatabaseDirectory);
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (249817 => 249818)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2019-09-12 22:12:25 UTC (rev 249817)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2019-09-12 22:46:20 UTC (rev 249818)
@@ -161,6 +161,10 @@
WebPage* focusedWebPage() const;
InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); }
+
+ // Prewarmed WebProcesses do not have an associated sessionID yet, which is why this is an optional.
+ // By the time the WebProcess gets a WebPage, it is guaranteed to have a sessionID.
+ const Optional<PAL::SessionID>& sessionID() const { return m_sessionID; }
#if PLATFORM(COCOA)
const WTF::MachSendRight& compositingRenderServerPort() const { return m_compositingRenderServerPort; }
@@ -570,6 +574,7 @@
#endif
HashMap<StorageAreaIdentifier, StorageAreaMap*> m_storageAreaMaps;
+ Optional<PAL::SessionID> m_sessionID;
};
} // namespace WebKit