Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (185735 => 185736)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2015-06-19 05:48:24 UTC (rev 185735)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2015-06-19 05:59:43 UTC (rev 185736)
@@ -140,12 +140,9 @@
WebProcessPool::WebProcessPool(API::ProcessPoolConfiguration& configuration)
: m_configuration(configuration.copy())
- , m_processModel(m_configuration->processModel())
- , m_webProcessCountLimit(!m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount())
, m_haveInitialEmptyProcess(false)
, m_processWithPageCache(0)
, m_defaultPageGroup(WebPageGroup::createNonNull())
- , m_injectedBundlePath(m_configuration->injectedBundlePath())
, m_downloadClient(std::make_unique<API::DownloadClient>())
, m_historyClient(std::make_unique<API::LegacyContextHistoryClient>())
, m_visitedLinkProvider(VisitedLinkProvider::create())
@@ -153,23 +150,16 @@
, m_plugInAutoStartProvider(this)
, m_alwaysUsesComplexTextCodePath(false)
, m_shouldUseFontSmoothing(true)
- , m_cacheModel(m_configuration->cacheModel())
- , m_diskCacheSizeOverride(m_configuration->diskCacheSizeOverride())
, m_memorySamplerEnabled(false)
, m_memorySamplerInterval(1400.0)
, m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::create(legacyWebsiteDataStoreConfiguration(m_configuration)) : nullptr)
#if USE(SOUP)
, m_initialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain)
#endif
- , m_applicationCacheDirectory(configuration.applicationCacheDirectory())
- , m_indexedDBDatabaseDirectory(configuration.indexedDBDatabaseDirectory())
- , m_mediaKeysStorageDirectory(configuration.mediaKeysStorageDirectory())
- , m_webSQLDatabaseDirectory(configuration.webSQLDatabaseDirectory())
, m_shouldUseTestingNetworkSession(false)
, m_processTerminationEnabled(true)
#if ENABLE(NETWORK_PROCESS)
, m_canHandleHTTPSServerTrustEvaluation(true)
- , m_usesNetworkProcess(m_configuration->useNetworkProcess())
#endif
#if USE(SOUP)
, m_ignoreTLSErrors(true)
@@ -304,7 +294,7 @@
if (processModel != ProcessModelSharedSecondaryProcess && !m_messagesToInjectedBundlePostedToEmptyContext.isEmpty())
CRASH();
- m_processModel = processModel;
+ m_configuration->setProcessModel(processModel);
}
void WebProcessPool::setMaximumNumberOfProcesses(unsigned maximumNumberOfProcesses)
@@ -313,24 +303,21 @@
if (!m_processes.isEmpty())
CRASH();
- if (maximumNumberOfProcesses == 0)
- m_webProcessCountLimit = UINT_MAX;
- else
- m_webProcessCountLimit = maximumNumberOfProcesses;
+ m_configuration->setMaximumProcessCount(maximumNumberOfProcesses);
}
IPC::Connection* WebProcessPool::networkingProcessConnection()
{
- switch (m_processModel) {
+ switch (processModel()) {
case ProcessModelSharedSecondaryProcess:
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess)
+ if (usesNetworkProcess())
return m_networkProcess->connection();
#endif
return m_processes[0]->connection();
case ProcessModelMultipleSecondaryProcesses:
#if ENABLE(NETWORK_PROCESS)
- ASSERT(m_usesNetworkProcess);
+ ASSERT(usesNetworkProcess());
return m_networkProcess->connection();
#else
break;
@@ -349,7 +336,7 @@
{
sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged(userPreferredLanguages()));
#if USE(SOUP) && ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess && m_networkProcess)
+ if (usesNetworkProcess() && m_networkProcess)
m_networkProcess->send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0);
#endif
}
@@ -367,7 +354,7 @@
void WebProcessPool::setUsesNetworkProcess(bool usesNetworkProcess)
{
#if ENABLE(NETWORK_PROCESS)
- m_usesNetworkProcess = usesNetworkProcess;
+ m_configuration->setUseNetworkProcess(usesNetworkProcess);
#else
UNUSED_PARAM(usesNetworkProcess);
#endif
@@ -376,7 +363,7 @@
bool WebProcessPool::usesNetworkProcess() const
{
#if ENABLE(NETWORK_PROCESS)
- return m_usesNetworkProcess;
+ return m_configuration->useNetworkProcess();
#else
return false;
#endif
@@ -394,8 +381,8 @@
parameters.privateBrowsingEnabled = WebPreferences::anyPagesAreUsingPrivateBrowsing();
- parameters.cacheModel = m_cacheModel;
- parameters.diskCacheSizeOverride = m_diskCacheSizeOverride;
+ parameters.cacheModel = cacheModel();
+ parameters.diskCacheSizeOverride = m_configuration->diskCacheSizeOverride();
parameters.canHandleHTTPSServerTrustEvaluation = m_canHandleHTTPSServerTrustEvaluation;
parameters.diskCacheDirectory = m_configuration->diskCacheDirectory();
@@ -470,13 +457,13 @@
m_databaseProcess = DatabaseProcessProxy::create(this);
- ASSERT(!m_indexedDBDatabaseDirectory.isEmpty());
+ ASSERT(!m_configuration->indexedDBDatabaseDirectory().isEmpty());
// *********
// IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)
// *********
DatabaseProcessCreationParameters parameters;
- parameters.indexedDatabaseDirectory = m_indexedDBDatabaseDirectory;
+ parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();
SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
@@ -571,7 +558,7 @@
WebProcessProxy& WebProcessPool::ensureSharedWebProcess()
{
- ASSERT(m_processModel == ProcessModelSharedSecondaryProcess);
+ ASSERT(processModel() == ProcessModelSharedSecondaryProcess);
if (m_processes.isEmpty())
createNewWebProcess();
return *m_processes[0];
@@ -580,7 +567,7 @@
WebProcessProxy& WebProcessPool::createNewWebProcess()
{
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess)
+ if (usesNetworkProcess())
ensureNetworkProcess();
#endif
@@ -592,11 +579,11 @@
if (!parameters.injectedBundlePath.isEmpty())
SandboxExtension::createHandle(parameters.injectedBundlePath, SandboxExtension::ReadOnly, parameters.injectedBundlePathExtensionHandle);
- parameters.applicationCacheDirectory = m_applicationCacheDirectory;
+ parameters.applicationCacheDirectory = m_configuration->applicationCacheDirectory();
if (!parameters.applicationCacheDirectory.isEmpty())
SandboxExtension::createHandleForReadWriteDirectory(parameters.applicationCacheDirectory, parameters.applicationCacheDirectoryExtensionHandle);
- parameters.webSQLDatabaseDirectory = m_webSQLDatabaseDirectory;
+ parameters.webSQLDatabaseDirectory = m_configuration->webSQLDatabaseDirectory();
if (!parameters.webSQLDatabaseDirectory.isEmpty())
SandboxExtension::createHandleForReadWriteDirectory(parameters.webSQLDatabaseDirectory, parameters.webSQLDatabaseDirectoryExtensionHandle);
@@ -618,13 +605,13 @@
SandboxExtension::createHandleForReadWriteDirectory(containerTemporaryDirectory, parameters.containerTemporaryDirectoryExtensionHandle);
#endif
- parameters.mediaKeyStorageDirectory = m_mediaKeysStorageDirectory;
+ parameters.mediaKeyStorageDirectory = m_configuration->mediaKeysStorageDirectory();
if (!parameters.mediaKeyStorageDirectory.isEmpty())
SandboxExtension::createHandleForReadWriteDirectory(parameters.mediaKeyStorageDirectory, parameters.mediaKeyStorageDirectoryExtensionHandle);
parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession;
- parameters.cacheModel = m_cacheModel;
+ parameters.cacheModel = cacheModel();
parameters.languages = userPreferredLanguages();
copyToVector(m_schemesToRegisterAsEmptyDocument, parameters.urlSchemesRegisteredAsEmptyDocument);
@@ -646,7 +633,7 @@
// iconDatabasePath is non-empty by default, but m_iconDatabase isn't enabled in UI process unless setDatabasePath is called explicitly.
parameters.iconDatabaseEnabled = !iconDatabasePath().isEmpty();
- parameters.terminationTimeout = (m_processModel == ProcessModelSharedSecondaryProcess) ? sharedSecondaryProcessShutdownTimeout : 0;
+ parameters.terminationTimeout = (processModel() == ProcessModelSharedSecondaryProcess) ? sharedSecondaryProcessShutdownTimeout : 0;
parameters.textCheckerState = TextChecker::state();
@@ -660,7 +647,7 @@
#endif
#if ENABLE(NETWORK_PROCESS)
- parameters.usesNetworkProcess = m_usesNetworkProcess;
+ parameters.usesNetworkProcess = usesNetworkProcess();
#endif
parameters.plugInAutoStartOriginHashes = m_plugInAutoStartProvider.autoStartOriginHashesCopy();
@@ -706,7 +693,7 @@
m_processes.append(process.ptr());
- if (m_processModel == ProcessModelSharedSecondaryProcess) {
+ if (processModel() == ProcessModelSharedSecondaryProcess) {
for (size_t i = 0; i != m_messagesToInjectedBundlePostedToEmptyContext.size(); ++i) {
auto& messageNameAndBody = m_messagesToInjectedBundlePostedToEmptyContext[i];
@@ -731,7 +718,7 @@
return;
}
- if (m_processes.size() >= m_webProcessCountLimit)
+ if (m_processes.size() >= maximumNumberOfProcesses())
return;
createNewWebProcess();
@@ -795,7 +782,7 @@
// FIXME (Multi-WebProcess): <rdar://problem/12239765> Some of the invalidation calls below are still necessary in multi-process mode, but they should only affect data structures pertaining to the process being disconnected.
// Clearing everything causes assertion failures, so it's less trouble to skip that for now.
- if (m_processModel != ProcessModelSharedSecondaryProcess) {
+ if (processModel() != ProcessModelSharedSecondaryProcess) {
RefPtr<WebProcessProxy> protect(process);
if (m_processWithPageCache == process)
m_processWithPageCache = 0;
@@ -822,7 +809,7 @@
WebProcessProxy& WebProcessPool::createNewWebProcessRespectingProcessCountLimit()
{
- if (m_processes.size() < m_webProcessCountLimit)
+ if (m_processes.size() < maximumNumberOfProcesses())
return createNewWebProcess();
// Choose the process with fewest pages.
@@ -848,7 +835,7 @@
}
RefPtr<WebProcessProxy> process;
- if (m_processModel == ProcessModelSharedSecondaryProcess) {
+ if (processModel() == ProcessModelSharedSecondaryProcess) {
process = &ensureSharedWebProcess();
} else {
if (m_haveInitialEmptyProcess) {
@@ -903,7 +890,7 @@
void WebProcessPool::postMessageToInjectedBundle(const String& messageName, API::Object* messageBody)
{
if (m_processes.isEmpty()) {
- if (m_processModel == ProcessModelSharedSecondaryProcess)
+ if (processModel() == ProcessModelSharedSecondaryProcess)
m_messagesToInjectedBundlePostedToEmptyContext.append(std::make_pair(messageName, messageBody));
return;
}
@@ -986,7 +973,7 @@
{
#if ENABLE(NETWORK_PROCESS)
m_canHandleHTTPSServerTrustEvaluation = value;
- if (m_usesNetworkProcess && m_networkProcess) {
+ if (usesNetworkProcess() && m_networkProcess) {
m_networkProcess->send(Messages::NetworkProcess::SetCanHandleHTTPSServerTrustEvaluation(value), 0);
return;
}
@@ -1057,12 +1044,12 @@
void WebProcessPool::setCacheModel(CacheModel cacheModel)
{
- m_cacheModel = cacheModel;
- sendToAllProcesses(Messages::WebProcess::SetCacheModel(m_cacheModel));
+ m_configuration->setCacheModel(cacheModel);
+ sendToAllProcesses(Messages::WebProcess::SetCacheModel(cacheModel));
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess && m_networkProcess)
- m_networkProcess->send(Messages::NetworkProcess::SetCacheModel(m_cacheModel), 0);
+ if (usesNetworkProcess() && m_networkProcess)
+ m_networkProcess->send(Messages::NetworkProcess::SetCacheModel(cacheModel), 0);
#endif
}
@@ -1194,7 +1181,7 @@
void WebProcessPool::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
{
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess && m_networkProcess) {
+ if (usesNetworkProcess() && m_networkProcess) {
m_networkProcess->send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0);
return;
}
@@ -1249,7 +1236,7 @@
void WebProcessPool::requestWebContentStatistics(StatisticsRequest* request)
{
- if (m_processModel == ProcessModelSharedSecondaryProcess) {
+ if (processModel() == ProcessModelSharedSecondaryProcess) {
if (m_processes.isEmpty())
return;
@@ -1266,7 +1253,7 @@
{
bool networkProcessUnavailable;
#if ENABLE(NETWORK_PROCESS)
- networkProcessUnavailable = !m_usesNetworkProcess || !m_networkProcess;
+ networkProcessUnavailable = !usesNetworkProcess() || !m_networkProcess;
#else
networkProcessUnavailable = true;
#endif
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (185735 => 185736)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-06-19 05:48:24 UTC (rev 185735)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-06-19 05:59:43 UTC (rev 185736)
@@ -28,6 +28,7 @@
#include "APIDictionary.h"
#include "APIObject.h"
+#include "APIProcessPoolConfiguration.h"
#include "APIWebsiteDataStore.h"
#include "DownloadProxyMap.h"
#include "GenericCallback.h"
@@ -71,7 +72,6 @@
namespace API {
class DownloadClient;
class LegacyContextHistoryClient;
-class ProcessPoolConfiguration;
}
namespace WebKit {
@@ -139,10 +139,10 @@
void setDownloadClient(std::unique_ptr<API::DownloadClient>);
void setProcessModel(ProcessModel); // Can only be called when there are no processes running.
- ProcessModel processModel() const { return m_processModel; }
+ ProcessModel processModel() const { return m_configuration->processModel(); }
void setMaximumNumberOfProcesses(unsigned); // Can only be called when there are no processes running.
- unsigned maximumNumberOfProcesses() const { return m_webProcessCountLimit; }
+ unsigned maximumNumberOfProcesses() const { return !m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount(); }
const Vector<RefPtr<WebProcessProxy>>& processes() const { return m_processes; }
@@ -169,7 +169,7 @@
PassRefPtr<WebPageProxy> createWebPage(PageClient&, WebPageConfiguration);
- const String& injectedBundlePath() const { return m_injectedBundlePath; }
+ const String& injectedBundlePath() const { return m_configuration->injectedBundlePath(); }
DownloadProxy* download(WebPageProxy* initiatingPage, const WebCore::ResourceRequest&);
DownloadProxy* resumeDownload(const API::Data* resumeData, const String& path);
@@ -212,7 +212,7 @@
VisitedLinkProvider& visitedLinkProvider() { return m_visitedLinkProvider.get(); }
void setCacheModel(CacheModel);
- CacheModel cacheModel() const { return m_cacheModel; }
+ CacheModel cacheModel() const { return m_configuration->cacheModel(); }
void setDefaultRequestTimeoutInterval(double);
@@ -423,9 +423,6 @@
IPC::MessageReceiverMap m_messageReceiverMap;
- ProcessModel m_processModel;
- unsigned m_webProcessCountLimit; // The limit has no effect when process model is ProcessModelSharedSecondaryProcess.
-
Vector<RefPtr<WebProcessProxy>> m_processes;
bool m_haveInitialEmptyProcess;
@@ -434,7 +431,6 @@
Ref<WebPageGroup> m_defaultPageGroup;
RefPtr<API::Object> m_injectedBundleInitializationUserData;
- String m_injectedBundlePath;
WebContextInjectedBundleClient m_injectedBundleClient;
WebContextClient m_client;
@@ -471,9 +467,6 @@
// The client should use initialization messages instead, so that a restarted process would get the same state.
Vector<std::pair<String, RefPtr<API::Object>>> m_messagesToInjectedBundlePostedToEmptyContext;
- CacheModel m_cacheModel;
- uint64_t m_diskCacheSizeOverride;
-
bool m_memorySamplerEnabled;
double m_memorySamplerInterval;
@@ -499,18 +492,12 @@
String m_overrideIconDatabasePath;
String m_overrideCookieStorageDirectory;
- String m_applicationCacheDirectory;
- String m_indexedDBDatabaseDirectory;
- String m_mediaKeysStorageDirectory;
- String m_webSQLDatabaseDirectory;
-
bool m_shouldUseTestingNetworkSession;
bool m_processTerminationEnabled;
#if ENABLE(NETWORK_PROCESS)
bool m_canHandleHTTPSServerTrustEvaluation;
- bool m_usesNetworkProcess;
RefPtr<NetworkProcessProxy> m_networkProcess;
#endif
@@ -547,10 +534,10 @@
template<typename T>
void WebProcessPool::sendToNetworkingProcess(T&& message)
{
- switch (m_processModel) {
+ switch (processModel()) {
case ProcessModelSharedSecondaryProcess:
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess) {
+ if (usesNetworkProcess()) {
if (m_networkProcess && m_networkProcess->canSendMessage())
m_networkProcess->send(std::forward<T>(message), 0);
return;
@@ -574,10 +561,10 @@
template<typename T>
void WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary(T&& message)
{
- switch (m_processModel) {
+ switch (processModel()) {
case ProcessModelSharedSecondaryProcess:
#if ENABLE(NETWORK_PROCESS)
- if (m_usesNetworkProcess) {
+ if (usesNetworkProcess()) {
ensureNetworkProcess();
m_networkProcess->send(std::forward<T>(message), 0);
return;
@@ -624,7 +611,7 @@
void WebProcessPool::sendToAllProcessesRelaunchingThemIfNecessary(const T& message)
{
// FIXME (Multi-WebProcess): WebProcessPool doesn't track processes that have exited, so it cannot relaunch these. Perhaps this functionality won't be needed in this mode.
- if (m_processModel == ProcessModelSharedSecondaryProcess)
+ if (processModel() == ProcessModelSharedSecondaryProcess)
ensureSharedWebProcess();
sendToAllProcesses(message);
}
@@ -632,7 +619,7 @@
template<typename T>
void WebProcessPool::sendToOneProcess(T&& message)
{
- if (m_processModel == ProcessModelSharedSecondaryProcess)
+ if (processModel() == ProcessModelSharedSecondaryProcess)
ensureSharedWebProcess();
bool messageSent = false;
@@ -646,7 +633,7 @@
}
}
- if (!messageSent && m_processModel == ProcessModelMultipleSecondaryProcesses) {
+ if (!messageSent && processModel() == ProcessModelMultipleSecondaryProcesses) {
warmInitialProcess();
RefPtr<WebProcessProxy> process = m_processes.last();
if (process->canSendMessage())