⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 267608 in webkit


Ignore:
Timestamp:
Sep 25, 2020, 4:53:44 PM (6 years ago)
Author:
achristensen@apple.com
Message:

Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
https://bugs.webkit.org/show_bug.cgi?id=216041

Reviewed by Brady Eidson.

Source/WebKit:

This patch moves the things on WebProcessPool associated with NetworkProcessProxy ownership and moves them
to WebsiteDataStore. It's pretty mechanical, but it reaches its fingers into a lot of things. Some comments
on interesting parts are below.

Why am I doing this? I'm glad you asked.

WKWebView had a fundamental cookie problem before this change. It had a WKWebsiteDataStore that could point to a cookie store on disk
that could be used in multiple network processes at the same time. This led to problems with cookies being received over the network
in those different processes being unable to be shared until they were written to disk, something that does not happen immediately, especially
on iOS. This problem is even worse with session cookies, which should be kept in memory and never be written to disk. Those processes
did not use shared memory to share the cookies. They just didn't share them, which led to cookie incorrectness. This was unfortunately
the default configuration if you call [[WKWebView alloc] init] more than once, which many developers do. There was also occasional cookie
corruption and loss from multiple processes writing cookies to the same file. All these problems can be worked around by doing what Safari does:
manually setting the WKProcessPool of all WKWebViewConfigurations to the same process pool to only use one network process. This is not intuitive
or well documented, and even though I have spent the majority of WWDC labs for the last 3 years telling developers to do it, most developers do not.
The default behavior should not lead to cookie incorrectness, corruption, or loss. This accomplishes that.

A bigger problem that can't really be worked around well is what we were doing in our WKHTTPCookieStore API. Many developers call setCookie:completionHandler:
to "log in" the user by setting a cookie, then in the completion handler, they open a WKWebView to their page and expect the cookie to be sent. Before this
change, we would not know which process pool to set the cookie in so we would guess. If there were no process pools, we would start writing to disk and hope
it writes fast enough. We can't wait for it to complete because it causes hangs like rdar://problem/66961066. This solution allows to start the network
process of that WebsiteDataStore and set the cookie in that process. We now know that is the only process this WebsiteDataStore will ever use. Now, users
will be able to actually be logged in all the time in such apps.

  • NetworkProcess/Cookies/WebCookieManager.cpp:

(WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
(WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):

  • NetworkProcess/Cookies/WebCookieManager.h:
  • NetworkProcess/Cookies/WebCookieManager.messages.in:
  • NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:

(WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

  • NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:

(WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

  • NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:

(WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::initializeNetworkProcess):
(WebKit::NetworkProcess::ensureSession):
(WebKit::NetworkProcess::storageSession const):
(WebKit::NetworkProcess::forEachNetworkStorageSession):
(WebKit::NetworkProcess::defaultStorageSession const): Deleted.

  • NetworkProcess/NetworkProcess.h:
  • NetworkProcess/NetworkProcessCreationParameters.cpp:

(WebKit::NetworkProcessCreationParameters::encode const):
(WebKit::NetworkProcessCreationParameters::decode):

  • NetworkProcess/NetworkProcessCreationParameters.h:
  • NetworkProcess/WebStorage/LocalStorageDatabase.cpp:

(WebKit::LocalStorageDatabase::close):

  • NetworkProcess/cocoa/NetworkProcessCocoa.mm:

(WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
(WebKit::saveCookies):
(WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.

  • NetworkProcess/curl/NetworkProcessCurl.cpp:

(WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.

  • NetworkProcess/mac/RemoteNetworkingContext.mm:

(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):

  • NetworkProcess/soup/NetworkProcessSoup.cpp:

(WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.

  • Platform/IPC/Attachment.h:
  • Shared/WebsiteDataStoreParameters.cpp:

(WebKit::WebsiteDataStoreParameters::encode const):
(WebKit::WebsiteDataStoreParameters::decode):

  • Shared/WebsiteDataStoreParameters.h:
  • UIProcess/API/APIHTTPCookieStore.cpp:

(API::HTTPCookieStore::HTTPCookieStore):
(API::HTTPCookieStore::~HTTPCookieStore):
(API::HTTPCookieStore::cookies):
(API::HTTPCookieStore::cookiesForURL):
(API::HTTPCookieStore::setCookies):
(API::HTTPCookieStore::deleteCookie):
(API::HTTPCookieStore::deleteAllCookies):
(API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
(API::HTTPCookieStore::registerObserver):
(API::HTTPCookieStore::cookieManagerDestroyed):
(API::HTTPCookieStore::registerForNewProcessPoolNotifications): Deleted.
(API::HTTPCookieStore::unregisterForNewProcessPoolNotifications): Deleted.

  • UIProcess/API/APIHTTPCookieStore.h:
  • UIProcess/API/C/WKContext.cpp:

(WKContextSetUseSeparateServiceWorkerProcess):
(WKContextSetPrimaryWebsiteDataStore):
(WKContextGetCookieManager): Deleted.
(WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting): Deleted.
(WKContextTerminateNetworkProcess): Deleted.
(WKContextGetNetworkProcessIdentifier): Deleted.

  • UIProcess/API/C/WKContext.h:
  • UIProcess/API/C/WKContextPrivate.h:
  • UIProcess/API/C/WKPage.cpp:

(WKPageGetWebsiteDataStore):

  • UIProcess/API/C/WKPage.h:
  • UIProcess/API/C/WKWebsiteDataStoreRef.cpp:

(WKWebsiteDataStoreTerminateNetworkProcess):
(WKWebsiteDataStoreGetNetworkProcessIdentifier):

  • UIProcess/API/C/WKWebsiteDataStoreRef.h:
  • UIProcess/API/Cocoa/WKProcessPool.mm:

(-[WKProcessPool _setUseSeparateServiceWorkerProcess:]):
(-[WKProcessPool _terminateNetworkProcess]): Deleted.
(-[WKProcessPool _sendNetworkProcessWillSuspendImminently]): Deleted.
(-[WKProcessPool _sendNetworkProcessPrepareToSuspend:]): Deleted.
(-[WKProcessPool _sendNetworkProcessDidResume]): Deleted.
(-[WKProcessPool _networkProcessIdentifier]): Deleted.
(-[WKProcessPool _makeNextNetworkProcessLaunchFailForTesting]): Deleted.
(-[WKProcessPool _synthesizeAppIsBackground:]): Deleted.
(-[WKProcessPool _setAllowsAnySSLCertificateForServiceWorker:]): Deleted.
(-[WKProcessPool _networkProcessHasEntitlementForTesting:]): Deleted.

  • UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
  • UIProcess/API/Cocoa/WKWebsiteDataStore.mm:

(-[WKWebsiteDataStore _networkProcessHasEntitlementForTesting:]):
(-[WKWebsiteDataStore _terminateNetworkProcess]):
(-[WKWebsiteDataStore _sendNetworkProcessPrepareToSuspend:]):
(-[WKWebsiteDataStore _sendNetworkProcessWillSuspendImminently]):
(-[WKWebsiteDataStore _sendNetworkProcessDidResume]):
(-[WKWebsiteDataStore _synthesizeAppIsBackground:]):
(-[WKWebsiteDataStore _networkProcessIdentifier]):
(+[WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting]):

  • UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
  • UIProcess/API/glib/WebKitCookieManager.cpp:

(_WebKitCookieManagerPrivate::cookieManager const):
(_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
(webkitCookieManagerCreate):
(webkit_cookie_manager_set_persistent_storage):
(webkit_cookie_manager_set_accept_policy):
(webkit_cookie_manager_get_accept_policy):
(webkit_cookie_manager_add_cookie):
(webkit_cookie_manager_get_cookies):
(webkit_cookie_manager_delete_cookie):

  • UIProcess/API/glib/WebKitWebContext.cpp:

(webkitWebContextConstructed):
(webkit_web_context_prefetch_dns):

  • UIProcess/Automation/WebAutomationSession.cpp:

(WebKit::WebAutomationSession::addSingleCookie):
(WebKit::WebAutomationSession::deleteAllCookies):

  • UIProcess/AuxiliaryProcessProxy.h:
  • UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h:
  • UIProcess/Cocoa/WebProcessPoolCocoa.mm:

(WebKit::WebProcessPool::updateProcessSuppressionState):
(WebKit::WebProcessPool::platformInitialize):
(WebKit::WebProcessPool::platformInitializeNetworkProcess):
(WebKit::WebProcessPool::networkProcessHasEntitlementForTesting): Deleted.
(WebKit::WebProcessPool::xpcEndpointMessage const): Deleted.
(WebKit::WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess): Deleted.

  • UIProcess/Downloads/DownloadProxy.cpp:

(WebKit::DownloadProxy::cancel):
(WebKit::DownloadProxy::publishProgress):
(WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
(WebKit::DownloadProxy::willSendRequest):
(WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):

  • UIProcess/Downloads/DownloadProxyMap.cpp:

(WebKit::DownloadProxyMap::DownloadProxyMap):
(WebKit::DownloadProxyMap::applicationDidEnterBackground):
(WebKit::DownloadProxyMap::applicationWillEnterForeground):
(WebKit::DownloadProxyMap::createDownloadProxy):
(WebKit::DownloadProxyMap::downloadFinished):
(WebKit::DownloadProxyMap::invalidate):

  • UIProcess/Downloads/DownloadProxyMap.h:
  • UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp:

(WebKit::LegacyCustomProtocolManagerProxy::startLoading):
(WebKit::LegacyCustomProtocolManagerProxy::stopLoading):
(WebKit::LegacyCustomProtocolManagerProxy::invalidate):

  • UIProcess/Network/NetworkProcessProxy.cpp:

(WebKit::NetworkProcessProxy::allNetworkProcesses):
(WebKit::defaultProcess):
(WebKit::NetworkProcessProxy::defaultNetworkProcess):
(WebKit::NetworkProcessProxy::terminate):
(WebKit::NetworkProcessProxy::didTerminate):
(WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
(WebKit::anyProcessPoolAlwaysRunsAtBackgroundPriority):
(WebKit::anyProcessPoolShouldTakeUIBackgroundAssertion):
(WebKit::NetworkProcessProxy::NetworkProcessProxy):
(WebKit::NetworkProcessProxy::~NetworkProcessProxy):
(WebKit::NetworkProcessProxy::getLaunchOptions):
(WebKit::NetworkProcessProxy::createDownloadProxy):
(WebKit::NetworkProcessProxy::networkProcessCrashed):
(WebKit::NetworkProcessProxy::didReceiveMessage):
(WebKit::NetworkProcessProxy::didClose):
(WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
(WebKit::NetworkProcessProxy::didFinishLaunching):
(WebKit::NetworkProcessProxy::setDomainsWithUserInteraction):
(WebKit::NetworkProcessProxy::addSession):
(WebKit::NetworkProcessProxy::removeSession):
(WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):
(WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
(WebKit::anyProcessPoolHasForegroundWebProcesses):
(WebKit::anyProcessPoolHasBackgroundWebProcesses):
(WebKit::NetworkProcessProxy::updateProcessAssertion):
(WebKit::NetworkProcessProxy::hasSession const): Deleted.

  • UIProcess/Network/NetworkProcessProxy.h:
  • UIProcess/Network/NetworkProcessProxyCocoa.mm:

(WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const):

  • UIProcess/WebCookieManagerProxy.cpp:

(WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
(WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
(WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
(WebKit::WebCookieManagerProxy::deleteCookiesForHostnames):
(WebKit::WebCookieManagerProxy::deleteAllCookies):
(WebKit::WebCookieManagerProxy::deleteCookie):
(WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
(WebKit::WebCookieManagerProxy::setCookies):
(WebKit::WebCookieManagerProxy::getAllCookies):
(WebKit::WebCookieManagerProxy::getCookies):
(WebKit::WebCookieManagerProxy::startObservingCookieChanges):
(WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
(WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::supplementName): Deleted.
(WebKit::WebCookieManagerProxy::create): Deleted.
(WebKit::WebCookieManagerProxy::processPoolDestroyed): Deleted.
(WebKit::WebCookieManagerProxy::processDidClose): Deleted.
(WebKit::WebCookieManagerProxy::refWebContextSupplement): Deleted.
(WebKit::WebCookieManagerProxy::derefWebContextSupplement): Deleted.

  • UIProcess/WebCookieManagerProxy.h:

(WebKit::WebCookieManagerProxy::create):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::setControlledByAutomation):
(WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess):
(WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):
(WebKit::WebPageProxy::preconnectTo):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::logFrameNavigation):
(WebKit::WebPageProxy::dumpAdClickAttribution):
(WebKit::WebPageProxy::clearAdClickAttribution):
(WebKit::WebPageProxy::setAdClickAttributionOverrideTimerForTesting):
(WebKit::WebPageProxy::setAdClickAttributionConversionURLForTesting):
(WebKit::WebPageProxy::markAdClickAttributionsAsExpiredForTesting):

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::urlSchemesWithCustomProtocolHandlers):
(WebKit::WebProcessPool::WebProcessPool):
(WebKit::WebProcessPool::~WebProcessPool):
(WebKit::WebProcessPool::languageChanged):
(WebKit::WebProcessPool::sendMemoryPressureEvent):
(WebKit::WebProcessPool::networkProcessCrashed):
(WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
(WebKit::WebProcessPool::removeFromServiceWorkerProcesses):
(WebKit::WebProcessPool::tryTakePrewarmedProcess):
(WebKit::WebProcessPool::initializeNewWebProcess):
(WebKit::WebProcessPool::processDidFinishLaunching):
(WebKit::WebProcessPool::createWebPage):
(WebKit::WebProcessPool::updateServiceWorkerUserAgent):
(WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
(WebKit::WebProcessPool::download):
(WebKit::WebProcessPool::resumeDownload):
(WebKit::WebProcessPool::registerURLSchemeAsSecure):
(WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
(WebKit::WebProcessPool::registerURLSchemeAsLocal):
(WebKit::WebProcessPool::registerURLSchemeAsNoAccess):
(WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers):
(WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
(WebKit::WebProcessPool::setCacheModel):
(WebKit::WebProcessPool::setCacheModelSynchronouslyForTesting):
(WebKit::WebProcessPool::createDownloadProxy):
(WebKit::WebProcessPool::terminateServiceWorkers):
(WebKit::WebProcessPool::serviceWorkerProcesses):
(WebKit::WebProcessPool::updateProcessAssertions):
(WebKit::WebProcessPool::isServiceWorkerPageID const):
(WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess):
(WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const):
(WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const):
(WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient): Deleted.
(WebKit::WebProcessPool::networkingProcessConnection): Deleted.
(WebKit::WebProcessPool::ensureNetworkProcess): Deleted.
There seems to be a lot of code removal here, but most of it was duplicate code with
WebsiteDataStore::parameters which is used instead. That which was not duplicate was
moved to NetworkProcessProxy::sendCreationParametersToNewProcess. This was the hardest part of this patch.
(WebKit::WebProcessPool::getNetworkProcessConnection): Deleted.
(WebKit::WebProcessPool::networkProcessIdentifier): Deleted.
(WebKit::WebProcessPool::synthesizeAppIsBackground): Deleted.
(WebKit::WebProcessPool::sendSyncToNetworkingProcess): Deleted.
(WebKit::WebProcessPool::clearCachedCredentials): Deleted.
(WebKit::WebProcessPool::terminateNetworkProcess): Deleted.
(WebKit::WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting): Deleted.
(WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting): Deleted.
(WebKit::WebProcessPool::sendNetworkProcessDidResume): Deleted.
(WebKit::WebProcessPool::flushCookies): Deleted.
(WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer): Deleted.

  • UIProcess/WebProcessPool.h:

(WebKit::WebProcessPool::sendToNetworkingProcess): Deleted.
(WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary): Deleted.

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::setWebsiteDataStore):
(WebKit::WebProcessProxy::getNetworkProcessConnection):
(WebKit::WebProcessProxy::didFinishLaunching):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
(WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess):
(WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses):

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::forEachWebsiteDataStore):
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::registerWithSessionIDMap):
(WebKit::WebsiteDataStore::existingDataStoreForSessionID):
(WebKit::WebsiteDataStore::networkProcess):
(WebKit::WebsiteDataStore::networkProcess const):
(WebKit::WebsiteDataStore::fetchDataAndApply):
(WebKit::WebsiteDataStore::removeData):
(WebKit::WebsiteDataStore::setServiceWorkerTimeoutForTesting):
(WebKit::WebsiteDataStore::resetServiceWorkerTimeoutForTesting):
(WebKit::WebsiteDataStore::setMaxStatisticsEntries):
(WebKit::WebsiteDataStore::setPruneEntriesDownTo):
(WebKit::WebsiteDataStore::setGrandfatheringTime):
(WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
(WebKit::WebsiteDataStore::dumpResourceLoadStatistics):
(WebKit::WebsiteDataStore::isPrevalentResource):
(WebKit::WebsiteDataStore::isGrandfathered):
(WebKit::WebsiteDataStore::setPrevalentResource):
(WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
(WebKit::WebsiteDataStore::isVeryPrevalentResource):
(WebKit::WebsiteDataStore::setVeryPrevalentResource):
(WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
(WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain):
(WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
(WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain):
(WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
(WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
(WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
(WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
(WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
(WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
(WebKit::WebsiteDataStore::clearPrevalentResource):
(WebKit::WebsiteDataStore::resetParametersToDefaultValues):
(WebKit::WebsiteDataStore::submitTelemetry):
(WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
(WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
(WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
(WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
(WebKit::WebsiteDataStore::statisticsDatabaseHasAllTables):
(WebKit::WebsiteDataStore::setLastSeen):
(WebKit::WebsiteDataStore::domainIDExistsInDatabase):
(WebKit::WebsiteDataStore::mergeStatisticForTesting):
(WebKit::WebsiteDataStore::insertExpiredStatisticForTesting):
(WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
(WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
(WebKit::WebsiteDataStore::getAllStorageAccessEntries):
(WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
(WebKit::WebsiteDataStore::logUserInteraction):
(WebKit::WebsiteDataStore::hasHadUserInteraction):
(WebKit::WebsiteDataStore::isRelationshipOnlyInDatabaseOnce):
(WebKit::WebsiteDataStore::clearUserInteraction):
(WebKit::WebsiteDataStore::setGrandfathered):
(WebKit::WebsiteDataStore::setUseITPDatabase):
(WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting):
(WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting):
(WebKit::WebsiteDataStore::deleteCookiesForTesting):
(WebKit::WebsiteDataStore::hasLocalStorageForTesting const):
(WebKit::WebsiteDataStore::hasIsolatedSessionForTesting const):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting):
(WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsToSameSiteStrictCookiesForTesting):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyHostCNAMEDomainForTesting):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsThirdPartyCNAMEDomainForTesting):
(WebKit::WebsiteDataStore::syncLocalStorage):
(WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
(WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
(WebKit::WebsiteDataStore::processPools const):
(WebKit::WebsiteDataStore::allowSpecificHTTPSCertificateForHost):
(WebKit::WebsiteDataStore::getNetworkProcessConnection):
(WebKit::WebsiteDataStore::networkProcessCrashed):
(WebKit::WebsiteDataStore::terminateNetworkProcess):
(WebKit::WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting):
(WebKit::WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting):
(WebKit::WebsiteDataStore::sendNetworkProcessDidResume):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
(WebKit::WebsiteDataStore::setStatisticsTestingCallback):
(WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
(WebKit::WebsiteDataStore::isResourceLoadStatisticsEphemeral const):
(WebKit::WebsiteDataStore::setAdClickAttributionDebugMode):
(WebKit::WebsiteDataStore::flushCookies):
(WebKit::WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket):
(WebKit::WebsiteDataStore::clearCachedCredentials):
(WebKit::WebsiteDataStore::parameters):
(WebKit::WebsiteDataStore::getLocalStorageDetails):
(WebKit::WebsiteDataStore::resetQuota):
(WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
(WebKit::WebsiteDataStore::renameOriginInWebsiteData):
(WebKit::WebsiteDataStore::hasAppBoundSession const):
(WebKit::WebsiteDataStore::clearAppBoundSession):
(WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized):
(WebKit::WebsiteDataStore::setAppBoundDomainsForITP):
(WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess):
(WebKit::WebsiteDataStore::clearBundleIdentifierInNetworkProcess):
(WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting):
(WebKit::WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting):
(WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap): Deleted.
(WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID): Deleted.
(WebKit::WebsiteDataStore::processPoolForCookieStorageOperations): Deleted.
(WebKit::WebsiteDataStore::isAssociatedProcessPool const): Deleted.
(WebKit::WebsiteDataStore::pendingCookies const): Deleted.
(WebKit::WebsiteDataStore::addPendingCookie): Deleted.
(WebKit::WebsiteDataStore::removePendingCookie): Deleted.
(WebKit::WebsiteDataStore::clearPendingCookies): Deleted.
(WebKit::WebsiteDataStore::didCreateNetworkProcess): Deleted.

  • UIProcess/WebsiteData/WebsiteDataStore.h:
  • UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:

(WebKit::WebsiteDataStore::setNetworkProxySettings):

  • UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:

(WebKit::WebsiteDataStore::platformSetNetworkParameters):
(WebKit::WebsiteDataStore::setPersistentCredentialStorageEnabled):

  • UIProcess/glib/WebProcessProxyGLib.cpp:

(WebKit::WebProcessProxy::platformGetLaunchOptions):

  • UIProcess/soup/WebCookieManagerProxySoup.cpp:

(WebKit::WebCookieManagerProxy::setCookiePersistentStorage):

  • UIProcess/soup/WebProcessPoolSoup.cpp:

(WebKit::WebProcessPool::platformInitializeNetworkProcess):
(WebKit::WebProcessPool::setIgnoreTLSErrors):
(WebKit::WebProcessPool::setNetworkProxySettings):

  • WebProcess/Network/NetworkProcessConnectionInfo.h:

Tools:

Most changes to tests are just calling a function on the WKWebsiteDataStore instead of the WKProcessPool
because we want to do something with the network process and it has a new owner.
Exceptions are noted inline.

  • TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:

(TestWebKitAPI::TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

(TestWebKitAPI::downloadAtRate):

  • TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:

(checkRecoveryAfterCrash):

  • TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
  • TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:

(TEST):
This test was making a WKWebsiteDataStore, getting its resource load statistics directory,
putting things in that directory, then starting the network process and making sure everything
works when initializing the network process. Now, network process initialization happens when a
WKWebsiteDataStore is instantiated, so we need to put things there before instantiating a WKWebsiteDataStore.

  • TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

Before this change, each WKProcessPool had its own network process, which holds the service worker registry
for the WebsiteDataStores used with that process pool. Now, the network process still needs to have a service
worker registry in it, but when we receive a message from it looking for a web process to run the service
worker, we go arbitrarily to the first process pool that has a process we can use. This logic is in
WebProcessPool::establishWorkerContextConnectionToNetworkProcess. Because we use the first process pool each
time, setting the custom user agent to two different things in two different process pools causes only one
to be used. This is not a problem in practice, though, because the only application that uses the SPI to
set a service worker's custom user agent is Safari, which only has one process pool. This test still verifies
that a user ageint is correctly sent.
Similarly, the tests that count service worker processes either have different results or need to be run with
one process pool per parent process. To keep the results the same, I separated the tests into different
TEST(ServiceWorkers, ...) macros which are run in separate parent processes.
The test RestoreFromDiskNonDefaultStore needs to use the same data store for both WKWebViews now because otherwise
there was a race condition in the startup of a new network process that wasn't there before because we were using the
same process pool and therefore the same network process. I added spinning the run loop and sleeping to be able to
reproduce the race condition failure and I use the same WKWebsiteDataStore to use the same network process, which was
the intent of using the same WKProcessPool before. The test still tests that the registration is re-used when we are
not using the default data store.

  • TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
  • TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:

(-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
(-[CheckSessionCookieUIDelegate waitForMessage]):
(-[CheckSessionCookieUIDelegate alertCookieHTML]):
(TEST):
This is the whole point of me doing this.
I took a test that was flaky only on iOS (because of different NSHTTPCookieStorage syncing behavior) and made
it flaky nowhere (fingers crossed!) and added a test that correctly handles session cookies like we could not
before this change.
I also re-used some test infrastructure and made it stop using process-global static variables for test state.

  • TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:

(runWebsiteDataStoreCustomPaths):
(TEST):

  • TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm:

(-[CloseWhileStartingProtocol startLoading]):
(TestWebKitAPI::runTest):

  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::resetStateToConsistentValues):
(WTR::TestController::findAndDumpWebKitProcessIdentifiers):
(WTR::TestController::networkProcessDidCrash):
(WTR::TestController::terminateNetworkProcess):
(WTR::TestController::platformAdjustContext):
WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting is not needed, so I removed it.
WKContextSetPrimaryWebsiteDataStore isn't needed any more because WKContextRef (WebProcessPool) doesn't
own a network process any more, so it doesn't care which is the default WebsiteDataStore.
In fact, the "default" WebsiteDataStore isn't really important in the network process any more.

Location:
trunk
Files:
87 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r267602 r267608  
     12020-09-25  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
     4        https://bugs.webkit.org/show_bug.cgi?id=216041
     5
     6        Reviewed by Brady Eidson.
     7
     8        This patch moves the things on WebProcessPool associated with NetworkProcessProxy ownership and moves them
     9        to WebsiteDataStore.  It's pretty mechanical, but it reaches its fingers into a lot of things.  Some comments
     10        on interesting parts are below.
     11
     12        Why am I doing this?  I'm glad you asked.
     13
     14        WKWebView had a fundamental cookie problem before this change.  It had a WKWebsiteDataStore that could point to a cookie store on disk
     15        that could be used in multiple network processes at the same time.  This led to problems with cookies being received over the network
     16        in those different processes being unable to be shared until they were written to disk, something that does not happen immediately, especially
     17        on iOS.  This problem is even worse with session cookies, which should be kept in memory and never be written to disk.  Those processes
     18        did not use shared memory to share the cookies.  They just didn't share them, which led to cookie incorrectness.  This was unfortunately
     19        the default configuration if you call [[WKWebView alloc] init] more than once, which many developers do.  There was also occasional cookie
     20        corruption and loss from multiple processes writing cookies to the same file.  All these problems can be worked around by doing what Safari does:
     21        manually setting the WKProcessPool of all WKWebViewConfigurations to the same process pool to only use one network process.  This is not intuitive
     22        or well documented, and even though I have spent the majority of WWDC labs for the last 3 years telling developers to do it, most developers do not.
     23        The default behavior should not lead to cookie incorrectness, corruption, or loss.  This accomplishes that.
     24
     25        A bigger problem that can't really be worked around well is what we were doing in our WKHTTPCookieStore API.  Many developers call setCookie:completionHandler:
     26        to "log in" the user by setting a cookie, then in the completion handler, they open a WKWebView to their page and expect the cookie to be sent.  Before this
     27        change, we would not know which process pool to set the cookie in so we would guess.  If there were no process pools, we would start writing to disk and hope
     28        it writes fast enough.  We can't wait for it to complete because it causes hangs like rdar://problem/66961066.  This solution allows to start the network
     29        process of that WebsiteDataStore and set the cookie in that process.  We now know that is the only process this WebsiteDataStore will ever use.  Now, users
     30        will be able to actually be logged in all the time in such apps.
     31
     32        * NetworkProcess/Cookies/WebCookieManager.cpp:
     33        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
     34        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
     35        * NetworkProcess/Cookies/WebCookieManager.h:
     36        * NetworkProcess/Cookies/WebCookieManager.messages.in:
     37        * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:
     38        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     39        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
     40        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     41        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
     42        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     43        * NetworkProcess/NetworkProcess.cpp:
     44        (WebKit::NetworkProcess::initializeNetworkProcess):
     45        (WebKit::NetworkProcess::ensureSession):
     46        (WebKit::NetworkProcess::storageSession const):
     47        (WebKit::NetworkProcess::forEachNetworkStorageSession):
     48        (WebKit::NetworkProcess::defaultStorageSession const): Deleted.
     49        * NetworkProcess/NetworkProcess.h:
     50        * NetworkProcess/NetworkProcessCreationParameters.cpp:
     51        (WebKit::NetworkProcessCreationParameters::encode const):
     52        (WebKit::NetworkProcessCreationParameters::decode):
     53        * NetworkProcess/NetworkProcessCreationParameters.h:
     54        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
     55        (WebKit::LocalStorageDatabase::close):
     56        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
     57        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
     58        (WebKit::saveCookies):
     59        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     60        * NetworkProcess/curl/NetworkProcessCurl.cpp:
     61        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     62        * NetworkProcess/mac/RemoteNetworkingContext.mm:
     63        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
     64        * NetworkProcess/soup/NetworkProcessSoup.cpp:
     65        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     66        * Platform/IPC/Attachment.h:
     67        * Shared/WebsiteDataStoreParameters.cpp:
     68        (WebKit::WebsiteDataStoreParameters::encode const):
     69        (WebKit::WebsiteDataStoreParameters::decode):
     70        * Shared/WebsiteDataStoreParameters.h:
     71        * UIProcess/API/APIHTTPCookieStore.cpp:
     72        (API::HTTPCookieStore::HTTPCookieStore):
     73        (API::HTTPCookieStore::~HTTPCookieStore):
     74        (API::HTTPCookieStore::cookies):
     75        (API::HTTPCookieStore::cookiesForURL):
     76        (API::HTTPCookieStore::setCookies):
     77        (API::HTTPCookieStore::deleteCookie):
     78        (API::HTTPCookieStore::deleteAllCookies):
     79        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
     80        (API::HTTPCookieStore::registerObserver):
     81        (API::HTTPCookieStore::cookieManagerDestroyed):
     82        (API::HTTPCookieStore::registerForNewProcessPoolNotifications): Deleted.
     83        (API::HTTPCookieStore::unregisterForNewProcessPoolNotifications): Deleted.
     84        * UIProcess/API/APIHTTPCookieStore.h:
     85        * UIProcess/API/C/WKContext.cpp:
     86        (WKContextSetUseSeparateServiceWorkerProcess):
     87        (WKContextSetPrimaryWebsiteDataStore):
     88        (WKContextGetCookieManager): Deleted.
     89        (WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting): Deleted.
     90        (WKContextTerminateNetworkProcess): Deleted.
     91        (WKContextGetNetworkProcessIdentifier): Deleted.
     92        * UIProcess/API/C/WKContext.h:
     93        * UIProcess/API/C/WKContextPrivate.h:
     94        * UIProcess/API/C/WKPage.cpp:
     95        (WKPageGetWebsiteDataStore):
     96        * UIProcess/API/C/WKPage.h:
     97        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
     98        (WKWebsiteDataStoreTerminateNetworkProcess):
     99        (WKWebsiteDataStoreGetNetworkProcessIdentifier):
     100        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
     101        * UIProcess/API/Cocoa/WKProcessPool.mm:
     102        (-[WKProcessPool _setUseSeparateServiceWorkerProcess:]):
     103        (-[WKProcessPool _terminateNetworkProcess]): Deleted.
     104        (-[WKProcessPool _sendNetworkProcessWillSuspendImminently]): Deleted.
     105        (-[WKProcessPool _sendNetworkProcessPrepareToSuspend:]): Deleted.
     106        (-[WKProcessPool _sendNetworkProcessDidResume]): Deleted.
     107        (-[WKProcessPool _networkProcessIdentifier]): Deleted.
     108        (-[WKProcessPool _makeNextNetworkProcessLaunchFailForTesting]): Deleted.
     109        (-[WKProcessPool _synthesizeAppIsBackground:]): Deleted.
     110        (-[WKProcessPool _setAllowsAnySSLCertificateForServiceWorker:]): Deleted.
     111        (-[WKProcessPool _networkProcessHasEntitlementForTesting:]): Deleted.
     112        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     113        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     114        (-[WKWebsiteDataStore _networkProcessHasEntitlementForTesting:]):
     115        (-[WKWebsiteDataStore _terminateNetworkProcess]):
     116        (-[WKWebsiteDataStore _sendNetworkProcessPrepareToSuspend:]):
     117        (-[WKWebsiteDataStore _sendNetworkProcessWillSuspendImminently]):
     118        (-[WKWebsiteDataStore _sendNetworkProcessDidResume]):
     119        (-[WKWebsiteDataStore _synthesizeAppIsBackground:]):
     120        (-[WKWebsiteDataStore _networkProcessIdentifier]):
     121        (+[WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting]):
     122        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
     123        * UIProcess/API/glib/WebKitCookieManager.cpp:
     124        (_WebKitCookieManagerPrivate::cookieManager const):
     125        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
     126        (webkitCookieManagerCreate):
     127        (webkit_cookie_manager_set_persistent_storage):
     128        (webkit_cookie_manager_set_accept_policy):
     129        (webkit_cookie_manager_get_accept_policy):
     130        (webkit_cookie_manager_add_cookie):
     131        (webkit_cookie_manager_get_cookies):
     132        (webkit_cookie_manager_delete_cookie):
     133        * UIProcess/API/glib/WebKitWebContext.cpp:
     134        (webkitWebContextConstructed):
     135        (webkit_web_context_prefetch_dns):
     136        * UIProcess/Automation/WebAutomationSession.cpp:
     137        (WebKit::WebAutomationSession::addSingleCookie):
     138        (WebKit::WebAutomationSession::deleteAllCookies):
     139        * UIProcess/AuxiliaryProcessProxy.h:
     140        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h:
     141        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
     142        (WebKit::WebProcessPool::updateProcessSuppressionState):
     143        (WebKit::WebProcessPool::platformInitialize):
     144        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     145        (WebKit::WebProcessPool::networkProcessHasEntitlementForTesting): Deleted.
     146        (WebKit::WebProcessPool::xpcEndpointMessage const): Deleted.
     147        (WebKit::WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess): Deleted.
     148        * UIProcess/Downloads/DownloadProxy.cpp:
     149        (WebKit::DownloadProxy::cancel):
     150        (WebKit::DownloadProxy::publishProgress):
     151        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
     152        (WebKit::DownloadProxy::willSendRequest):
     153        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
     154        * UIProcess/Downloads/DownloadProxyMap.cpp:
     155        (WebKit::DownloadProxyMap::DownloadProxyMap):
     156        (WebKit::DownloadProxyMap::applicationDidEnterBackground):
     157        (WebKit::DownloadProxyMap::applicationWillEnterForeground):
     158        (WebKit::DownloadProxyMap::createDownloadProxy):
     159        (WebKit::DownloadProxyMap::downloadFinished):
     160        (WebKit::DownloadProxyMap::invalidate):
     161        * UIProcess/Downloads/DownloadProxyMap.h:
     162        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp:
     163        (WebKit::LegacyCustomProtocolManagerProxy::startLoading):
     164        (WebKit::LegacyCustomProtocolManagerProxy::stopLoading):
     165        (WebKit::LegacyCustomProtocolManagerProxy::invalidate):
     166        * UIProcess/Network/NetworkProcessProxy.cpp:
     167        (WebKit::NetworkProcessProxy::allNetworkProcesses):
     168        (WebKit::defaultProcess):
     169        (WebKit::NetworkProcessProxy::defaultNetworkProcess):
     170        (WebKit::NetworkProcessProxy::terminate):
     171        (WebKit::NetworkProcessProxy::didTerminate):
     172        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
     173        (WebKit::anyProcessPoolAlwaysRunsAtBackgroundPriority):
     174        (WebKit::anyProcessPoolShouldTakeUIBackgroundAssertion):
     175        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
     176        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
     177        (WebKit::NetworkProcessProxy::getLaunchOptions):
     178        (WebKit::NetworkProcessProxy::createDownloadProxy):
     179        (WebKit::NetworkProcessProxy::networkProcessCrashed):
     180        (WebKit::NetworkProcessProxy::didReceiveMessage):
     181        (WebKit::NetworkProcessProxy::didClose):
     182        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
     183        (WebKit::NetworkProcessProxy::didFinishLaunching):
     184        (WebKit::NetworkProcessProxy::setDomainsWithUserInteraction):
     185        (WebKit::NetworkProcessProxy::addSession):
     186        (WebKit::NetworkProcessProxy::removeSession):
     187        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):
     188        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
     189        (WebKit::anyProcessPoolHasForegroundWebProcesses):
     190        (WebKit::anyProcessPoolHasBackgroundWebProcesses):
     191        (WebKit::NetworkProcessProxy::updateProcessAssertion):
     192        (WebKit::NetworkProcessProxy::hasSession const): Deleted.
     193        * UIProcess/Network/NetworkProcessProxy.h:
     194        * UIProcess/Network/NetworkProcessProxyCocoa.mm:
     195        (WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const):
     196        * UIProcess/WebCookieManagerProxy.cpp:
     197        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
     198        (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
     199        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
     200        (WebKit::WebCookieManagerProxy::deleteCookiesForHostnames):
     201        (WebKit::WebCookieManagerProxy::deleteAllCookies):
     202        (WebKit::WebCookieManagerProxy::deleteCookie):
     203        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
     204        (WebKit::WebCookieManagerProxy::setCookies):
     205        (WebKit::WebCookieManagerProxy::getAllCookies):
     206        (WebKit::WebCookieManagerProxy::getCookies):
     207        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
     208        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
     209        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
     210        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
     211        (WebKit::WebCookieManagerProxy::supplementName): Deleted.
     212        (WebKit::WebCookieManagerProxy::create): Deleted.
     213        (WebKit::WebCookieManagerProxy::processPoolDestroyed): Deleted.
     214        (WebKit::WebCookieManagerProxy::processDidClose): Deleted.
     215        (WebKit::WebCookieManagerProxy::refWebContextSupplement): Deleted.
     216        (WebKit::WebCookieManagerProxy::derefWebContextSupplement): Deleted.
     217        * UIProcess/WebCookieManagerProxy.h:
     218        (WebKit::WebCookieManagerProxy::create):
     219        * UIProcess/WebPageProxy.cpp:
     220        (WebKit::WebPageProxy::setControlledByAutomation):
     221        (WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess):
     222        (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):
     223        (WebKit::WebPageProxy::preconnectTo):
     224        (WebKit::WebPageProxy::didCommitLoadForFrame):
     225        (WebKit::WebPageProxy::logFrameNavigation):
     226        (WebKit::WebPageProxy::dumpAdClickAttribution):
     227        (WebKit::WebPageProxy::clearAdClickAttribution):
     228        (WebKit::WebPageProxy::setAdClickAttributionOverrideTimerForTesting):
     229        (WebKit::WebPageProxy::setAdClickAttributionConversionURLForTesting):
     230        (WebKit::WebPageProxy::markAdClickAttributionsAsExpiredForTesting):
     231        * UIProcess/WebProcessPool.cpp:
     232        (WebKit::WebProcessPool::urlSchemesWithCustomProtocolHandlers):
     233        (WebKit::WebProcessPool::WebProcessPool):
     234        (WebKit::WebProcessPool::~WebProcessPool):
     235        (WebKit::WebProcessPool::languageChanged):
     236        (WebKit::WebProcessPool::sendMemoryPressureEvent):
     237        (WebKit::WebProcessPool::networkProcessCrashed):
     238        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
     239        (WebKit::WebProcessPool::removeFromServiceWorkerProcesses):
     240        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
     241        (WebKit::WebProcessPool::initializeNewWebProcess):
     242        (WebKit::WebProcessPool::processDidFinishLaunching):
     243        (WebKit::WebProcessPool::createWebPage):
     244        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
     245        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
     246        (WebKit::WebProcessPool::download):
     247        (WebKit::WebProcessPool::resumeDownload):
     248        (WebKit::WebProcessPool::registerURLSchemeAsSecure):
     249        (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
     250        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
     251        (WebKit::WebProcessPool::registerURLSchemeAsNoAccess):
     252        (WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers):
     253        (WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
     254        (WebKit::WebProcessPool::setCacheModel):
     255        (WebKit::WebProcessPool::setCacheModelSynchronouslyForTesting):
     256        (WebKit::WebProcessPool::createDownloadProxy):
     257        (WebKit::WebProcessPool::terminateServiceWorkers):
     258        (WebKit::WebProcessPool::serviceWorkerProcesses):
     259        (WebKit::WebProcessPool::updateProcessAssertions):
     260        (WebKit::WebProcessPool::isServiceWorkerPageID const):
     261        (WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess):
     262        (WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const):
     263        (WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const):
     264        (WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient): Deleted.
     265        (WebKit::WebProcessPool::networkingProcessConnection): Deleted.
     266        (WebKit::WebProcessPool::ensureNetworkProcess): Deleted.
     267        There seems to be a lot of code removal here, but most of it was duplicate code with
     268        WebsiteDataStore::parameters which is used instead.  That which was not duplicate was
     269        moved to NetworkProcessProxy::sendCreationParametersToNewProcess.  This was the hardest part of this patch.
     270        (WebKit::WebProcessPool::getNetworkProcessConnection): Deleted.
     271        (WebKit::WebProcessPool::networkProcessIdentifier): Deleted.
     272        (WebKit::WebProcessPool::synthesizeAppIsBackground): Deleted.
     273        (WebKit::WebProcessPool::sendSyncToNetworkingProcess): Deleted.
     274        (WebKit::WebProcessPool::clearCachedCredentials): Deleted.
     275        (WebKit::WebProcessPool::terminateNetworkProcess): Deleted.
     276        (WebKit::WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting): Deleted.
     277        (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting): Deleted.
     278        (WebKit::WebProcessPool::sendNetworkProcessDidResume): Deleted.
     279        (WebKit::WebProcessPool::flushCookies): Deleted.
     280        (WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer): Deleted.
     281        * UIProcess/WebProcessPool.h:
     282        (WebKit::WebProcessPool::sendToNetworkingProcess): Deleted.
     283        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary): Deleted.
     284        * UIProcess/WebProcessProxy.cpp:
     285        (WebKit::WebProcessProxy::setWebsiteDataStore):
     286        (WebKit::WebProcessProxy::getNetworkProcessConnection):
     287        (WebKit::WebProcessProxy::didFinishLaunching):
     288        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     289        (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
     290        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess):
     291        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses):
     292        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     293        (WebKit::WebsiteDataStore::forEachWebsiteDataStore):
     294        (WebKit::WebsiteDataStore::WebsiteDataStore):
     295        (WebKit::WebsiteDataStore::~WebsiteDataStore):
     296        (WebKit::WebsiteDataStore::registerWithSessionIDMap):
     297        (WebKit::WebsiteDataStore::existingDataStoreForSessionID):
     298        (WebKit::WebsiteDataStore::networkProcess):
     299        (WebKit::WebsiteDataStore::networkProcess const):
     300        (WebKit::WebsiteDataStore::fetchDataAndApply):
     301        (WebKit::WebsiteDataStore::removeData):
     302        (WebKit::WebsiteDataStore::setServiceWorkerTimeoutForTesting):
     303        (WebKit::WebsiteDataStore::resetServiceWorkerTimeoutForTesting):
     304        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
     305        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
     306        (WebKit::WebsiteDataStore::setGrandfatheringTime):
     307        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
     308        (WebKit::WebsiteDataStore::dumpResourceLoadStatistics):
     309        (WebKit::WebsiteDataStore::isPrevalentResource):
     310        (WebKit::WebsiteDataStore::isGrandfathered):
     311        (WebKit::WebsiteDataStore::setPrevalentResource):
     312        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
     313        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
     314        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
     315        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
     316        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain):
     317        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
     318        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain):
     319        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
     320        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
     321        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
     322        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
     323        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
     324        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
     325        (WebKit::WebsiteDataStore::clearPrevalentResource):
     326        (WebKit::WebsiteDataStore::resetParametersToDefaultValues):
     327        (WebKit::WebsiteDataStore::submitTelemetry):
     328        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
     329        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
     330        (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
     331        (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
     332        (WebKit::WebsiteDataStore::statisticsDatabaseHasAllTables):
     333        (WebKit::WebsiteDataStore::setLastSeen):
     334        (WebKit::WebsiteDataStore::domainIDExistsInDatabase):
     335        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
     336        (WebKit::WebsiteDataStore::insertExpiredStatisticForTesting):
     337        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
     338        (WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
     339        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
     340        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
     341        (WebKit::WebsiteDataStore::logUserInteraction):
     342        (WebKit::WebsiteDataStore::hasHadUserInteraction):
     343        (WebKit::WebsiteDataStore::isRelationshipOnlyInDatabaseOnce):
     344        (WebKit::WebsiteDataStore::clearUserInteraction):
     345        (WebKit::WebsiteDataStore::setGrandfathered):
     346        (WebKit::WebsiteDataStore::setUseITPDatabase):
     347        (WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting):
     348        (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting):
     349        (WebKit::WebsiteDataStore::deleteCookiesForTesting):
     350        (WebKit::WebsiteDataStore::hasLocalStorageForTesting const):
     351        (WebKit::WebsiteDataStore::hasIsolatedSessionForTesting const):
     352        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting):
     353        (WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode):
     354        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting):
     355        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
     356        (WebKit::WebsiteDataStore::setResourceLoadStatisticsToSameSiteStrictCookiesForTesting):
     357        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyHostCNAMEDomainForTesting):
     358        (WebKit::WebsiteDataStore::setResourceLoadStatisticsThirdPartyCNAMEDomainForTesting):
     359        (WebKit::WebsiteDataStore::syncLocalStorage):
     360        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
     361        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
     362        (WebKit::WebsiteDataStore::processPools const):
     363        (WebKit::WebsiteDataStore::allowSpecificHTTPSCertificateForHost):
     364        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
     365        (WebKit::WebsiteDataStore::networkProcessCrashed):
     366        (WebKit::WebsiteDataStore::terminateNetworkProcess):
     367        (WebKit::WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting):
     368        (WebKit::WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting):
     369        (WebKit::WebsiteDataStore::sendNetworkProcessDidResume):
     370        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
     371        (WebKit::WebsiteDataStore::setStatisticsTestingCallback):
     372        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
     373        (WebKit::WebsiteDataStore::isResourceLoadStatisticsEphemeral const):
     374        (WebKit::WebsiteDataStore::setAdClickAttributionDebugMode):
     375        (WebKit::WebsiteDataStore::flushCookies):
     376        (WebKit::WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket):
     377        (WebKit::WebsiteDataStore::clearCachedCredentials):
     378        (WebKit::WebsiteDataStore::parameters):
     379        (WebKit::WebsiteDataStore::getLocalStorageDetails):
     380        (WebKit::WebsiteDataStore::resetQuota):
     381        (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
     382        (WebKit::WebsiteDataStore::renameOriginInWebsiteData):
     383        (WebKit::WebsiteDataStore::hasAppBoundSession const):
     384        (WebKit::WebsiteDataStore::clearAppBoundSession):
     385        (WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized):
     386        (WebKit::WebsiteDataStore::setAppBoundDomainsForITP):
     387        (WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess):
     388        (WebKit::WebsiteDataStore::clearBundleIdentifierInNetworkProcess):
     389        (WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting):
     390        (WebKit::WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting):
     391        (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap): Deleted.
     392        (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID): Deleted.
     393        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations): Deleted.
     394        (WebKit::WebsiteDataStore::isAssociatedProcessPool const): Deleted.
     395        (WebKit::WebsiteDataStore::pendingCookies const): Deleted.
     396        (WebKit::WebsiteDataStore::addPendingCookie): Deleted.
     397        (WebKit::WebsiteDataStore::removePendingCookie): Deleted.
     398        (WebKit::WebsiteDataStore::clearPendingCookies): Deleted.
     399        (WebKit::WebsiteDataStore::didCreateNetworkProcess): Deleted.
     400        * UIProcess/WebsiteData/WebsiteDataStore.h:
     401        * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:
     402        (WebKit::WebsiteDataStore::setNetworkProxySettings):
     403        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
     404        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
     405        (WebKit::WebsiteDataStore::setPersistentCredentialStorageEnabled):
     406        * UIProcess/glib/WebProcessProxyGLib.cpp:
     407        (WebKit::WebProcessProxy::platformGetLaunchOptions):
     408        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
     409        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage):
     410        * UIProcess/soup/WebProcessPoolSoup.cpp:
     411        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     412        (WebKit::WebProcessPool::setIgnoreTLSErrors):
     413        (WebKit::WebProcessPool::setNetworkProxySettings):
     414        * WebProcess/Network/NetworkProcessConnectionInfo.h:
     415
    14162020-09-24  Dean Jackson  <dino@apple.com>
    2417
  • trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp

    r254931 r267608  
    3333#include <WebCore/Cookie.h>
    3434#include <WebCore/CookieStorage.h>
     35#include <WebCore/HTTPCookieAcceptPolicy.h>
    3536#include <WebCore/NetworkStorageSession.h>
    3637#include <wtf/MainThread.h>
     
    144145void WebCookieManager::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)
    145146{
    146     platformSetHTTPCookieAcceptPolicy(policy);
    147     m_process.cookieAcceptPolicyChanged(policy);
    148 
    149     completionHandler();
     147    platformSetHTTPCookieAcceptPolicy(policy, [policy, process = makeRef(m_process), completionHandler = WTFMove(completionHandler)] () mutable {
     148        process->cookieAcceptPolicyChanged(policy);
     149        completionHandler();
     150    });
    150151}
    151152
    152 void WebCookieManager::getHTTPCookieAcceptPolicy(CompletionHandler<void(HTTPCookieAcceptPolicy)>&& completionHandler)
     153void WebCookieManager::getHTTPCookieAcceptPolicy(PAL::SessionID sessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& completionHandler)
    153154{
    154     completionHandler(m_process.defaultStorageSession().cookieAcceptPolicy());
     155    if (auto* storageSession = m_process.storageSession(sessionID))
     156        completionHandler(storageSession->cookieAcceptPolicy());
     157    else
     158        completionHandler(HTTPCookieAcceptPolicy::Never);
    155159}
    156160
  • trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h

    r254931 r267608  
    3737#include "SoupCookiePersistentStorageType.h"
    3838#endif
     39
     40OBJC_CLASS NSHTTPCookieStorage;
    3941
    4042namespace WebCore {
     
    8082    void getCookies(PAL::SessionID, const URL&, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&&);
    8183
    82     void platformSetHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy);
    83     void getHTTPCookieAcceptPolicy(CompletionHandler<void(WebCore::HTTPCookieAcceptPolicy)>&&);
     84    void platformSetHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy, CompletionHandler<void()>&&);
     85    void getHTTPCookieAcceptPolicy(PAL::SessionID, CompletionHandler<void(WebCore::HTTPCookieAcceptPolicy)>&&);
    8486
    8587    void startObservingCookieChanges(PAL::SessionID);
     
    8991};
    9092
     93#if PLATFORM(COCOA)
     94void saveCookies(NSHTTPCookieStorage *, CompletionHandler<void()>&&);
     95#endif
     96
    9197} // namespace WebKit
  • trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in

    r254931 r267608  
    3737
    3838    void SetHTTPCookieAcceptPolicy(enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) -> () Async
    39     void GetHTTPCookieAcceptPolicy() -> (enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) Async
     39    void GetHTTPCookieAcceptPolicy(PAL::SessionID sessionID) -> (enum:uint8_t WebCore::HTTPCookieAcceptPolicy policy) Async
    4040   
    4141    void StartObservingCookieChanges(PAL::SessionID sessionID)
  • trunk/Source/WebKit/NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp

    r257078 r267608  
    3535using namespace WebCore;
    3636
    37 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
     37void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)
    3838{
    3939    CookieAcceptPolicy curlPolicy = CookieAcceptPolicy::OnlyFromMainDocumentDomain;
     
    5656        networkStorageSession.setCookieAcceptPolicy(curlPolicy);
    5757    });
     58    completionHandler();
    5859}
    5960
  • trunk/Source/WebKit/NetworkProcess/Cookies/mac/WebCookieManagerMac.mm

    r254931 r267608  
    3232#import <WebCore/NetworkStorageSession.h>
    3333#import <pal/spi/cf/CFNetworkSPI.h>
     34#import <wtf/CallbackAggregator.h>
    3435#import <wtf/ProcessPrivilege.h>
    3536
     
    5455}
    5556
    56 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
     57void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)
    5758{
    5859    ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
    5960
     61    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    6062    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:static_cast<NSHTTPCookieAcceptPolicy>(policy)];
     63    saveCookies([NSHTTPCookieStorage sharedHTTPCookieStorage], [callbackAggregator] { });
    6164
    6265    m_process.forEachNetworkStorageSession([&] (const auto& networkStorageSession) {
    6366        if (auto cookieStorage = networkStorageSession.cookieStorage())
    6467            CFHTTPCookieStorageSetCookieAcceptPolicy(cookieStorage.get(), toCFHTTPCookieStorageAcceptPolicy(policy));
     68        if (auto *storage = networkStorageSession.nsCookieStorage())
     69            saveCookies(storage, [callbackAggregator] { });
    6570    });
    6671}
  • trunk/Source/WebKit/NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp

    r263964 r267608  
    3838using namespace WebCore;
    3939
    40 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
     40void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)
    4141{
    4242    m_process.forEachNetworkStorageSession([policy] (auto& session) {
    4343        session.setCookieAcceptPolicy(policy);
    4444    });
     45    completionHandler();
    4546}
    4647
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r267123 r267608  
    174174
    175175#if USE(SOUP)
     176    // FIXME: Do not use the default session ID.
    176177    DNSResolveQueueSoup::setGlobalDefaultSoupSessionAccessor([this]() -> SoupSession* {
    177178        return static_cast<NetworkSessionSoup&>(*networkSession(PAL::SessionID::defaultSessionID())).soupSession();
     
    348349    setAdClickAttributionDebugMode(parameters.enableAdClickAttributionDebugMode);
    349350
    350     SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsParameters.directoryExtensionHandle);
    351 
    352     auto sessionID = parameters.defaultDataStoreParameters.networkSessionParameters.sessionID;
    353     setSession(sessionID, NetworkSession::create(*this, WTFMove(parameters.defaultDataStoreParameters.networkSessionParameters)));
    354 
    355     SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);
    356     addSessionStorageQuotaManager(sessionID, parameters.defaultDataStoreParameters.perOriginStorageQuota, parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota, parameters.defaultDataStoreParameters.cacheStorageDirectory, parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);
    357 
    358 #if ENABLE(INDEXED_DATABASE)
    359     addIndexedDatabaseSession(sessionID, parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);
    360 #endif
    361 
    362 #if ENABLE(SERVICE_WORKER)
    363     bool serviceWorkerProcessTerminationDelayEnabled = true;
    364     addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    365 #endif
    366 
    367     m_storageManagerSet->add(sessionID, parameters.defaultDataStoreParameters.localStorageDirectory, parameters.defaultDataStoreParameters.localStorageDirectoryExtensionHandle);
    368 
    369     auto* defaultSession = networkSession(PAL::SessionID::defaultSessionID());
    370     auto* defaultStorageSession = defaultSession->networkStorageSession();
    371     for (const auto& cookie : parameters.defaultDataStoreParameters.pendingCookies)
    372         defaultStorageSession->setCookie(cookie);
    373 
    374351    for (auto& supplement : m_supplements.values())
    375352        supplement->initialize(parameters);
     
    506483#endif
    507484{
    508     ASSERT(sessionID != PAL::SessionID::defaultSessionID());
    509 
    510485    auto addResult = m_networkStorageSessions.add(sessionID, nullptr);
    511486    if (!addResult.isNewEntry)
     
    522497    if (sessionID.isEphemeral())
    523498        storageSession = adoptCF(createPrivateStorageSession(cfIdentifier.get()));
    524     else
     499    else if (sessionID != PAL::SessionID::defaultSessionID())
    525500        storageSession = WebCore::NetworkStorageSession::createCFStorageSessionForIdentifier(cfIdentifier.get());
    526501
     
    545520WebCore::NetworkStorageSession* NetworkProcess::storageSession(const PAL::SessionID& sessionID) const
    546521{
    547     if (sessionID == PAL::SessionID::defaultSessionID())
    548         return &defaultStorageSession();
    549522    return m_networkStorageSessions.get(sessionID);
    550523}
    551524
    552 WebCore::NetworkStorageSession& NetworkProcess::defaultStorageSession() const
    553 {
    554     if (!m_defaultNetworkStorageSession)
    555         m_defaultNetworkStorageSession = platformCreateDefaultStorageSession();
    556     return *m_defaultNetworkStorageSession;
    557 }
    558 
    559525void NetworkProcess::forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>& functor)
    560526{
    561     functor(defaultStorageSession());
    562527    for (auto& storageSession : m_networkStorageSessions.values())
    563528        functor(*storageSession);
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r267534 r267608  
    171171    void forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>&);
    172172    WebCore::NetworkStorageSession* storageSession(const PAL::SessionID&) const;
    173     WebCore::NetworkStorageSession& defaultStorageSession() const;
    174173    std::unique_ptr<WebCore::NetworkStorageSession> newTestingSession(const PAL::SessionID&);
    175174#if PLATFORM(COCOA)
     
    376375private:
    377376    void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&);
    378     std::unique_ptr<WebCore::NetworkStorageSession> platformCreateDefaultStorageSession() const;
    379377
    380378    void didReceiveNetworkProcessMessage(IPC::Connection&, IPC::Decoder&);
     
    545543    HashMap<PAL::SessionID, std::unique_ptr<NetworkSession>> m_networkSessions;
    546544    HashMap<PAL::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>> m_networkStorageSessions;
    547     mutable std::unique_ptr<WebCore::NetworkStorageSession> m_defaultNetworkStorageSession;
    548545
    549546    RefPtr<StorageManagerSet> m_storageManagerSet;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp

    r267534 r267608  
    5656    IPC::encode(encoder, networkATSContext.get());
    5757#endif
    58     encoder << defaultDataStoreParameters;
    5958#if USE(SOUP)
    6059    encoder << cookieAcceptPolicy;
     
    6766    encoder << urlSchemesRegisteredAsNoAccess;
    6867
    69 #if ENABLE(SERVICE_WORKER)
    70     encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << shouldDisableServiceWorkerProcessTerminationDelay;
    71 #endif
    7268    encoder << shouldEnableITPDatabase;
    7369    encoder << enableAdClickAttributionDebugMode;
     
    115111#endif
    116112
    117     Optional<WebsiteDataStoreParameters> defaultDataStoreParameters;
    118     decoder >> defaultDataStoreParameters;
    119     if (!defaultDataStoreParameters)
    120         return false;
    121     result.defaultDataStoreParameters = WTFMove(*defaultDataStoreParameters);
    122 
    123113#if USE(SOUP)
    124114    if (!decoder.decode(result.cookieAcceptPolicy))
     
    137127        return false;
    138128
    139 #if ENABLE(SERVICE_WORKER)
    140     if (!decoder.decode(result.serviceWorkerRegistrationDirectory))
    141         return false;
    142    
    143     Optional<SandboxExtension::Handle> serviceWorkerRegistrationDirectoryExtensionHandle;
    144     decoder >> serviceWorkerRegistrationDirectoryExtensionHandle;
    145     if (!serviceWorkerRegistrationDirectoryExtensionHandle)
    146         return false;
    147     result.serviceWorkerRegistrationDirectoryExtensionHandle = WTFMove(*serviceWorkerRegistrationDirectoryExtensionHandle);
    148 
    149     if (!decoder.decode(result.shouldDisableServiceWorkerProcessTerminationDelay))
    150         return false;
    151 #endif
    152 
    153129    if (!decoder.decode(result.shouldEnableITPDatabase))
    154130        return false;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h

    r267534 r267608  
    2828#include "CacheModel.h"
    2929#include "SandboxExtension.h"
    30 #include "WebsiteDataStoreParameters.h"
    3130#include <WebCore/Cookie.h>
    3231#include <wtf/ProcessID.h>
     
    7170#endif
    7271
    73     WebsiteDataStoreParameters defaultDataStoreParameters;
    74    
    7572#if USE(SOUP)
    7673    WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy { WebCore::HTTPCookieAcceptPolicy::AlwaysAccept };
     
    8380    Vector<String> urlSchemesRegisteredAsNoAccess;
    8481
    85 #if ENABLE(SERVICE_WORKER)
    86     String serviceWorkerRegistrationDirectory;
    87     SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle;
    88     bool shouldDisableServiceWorkerProcessTerminationDelay { false };
    89 #endif
    9082    bool shouldEnableITPDatabase { false };
    9183    bool enableAdClickAttributionDebugMode { false };
  • trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp

    r257537 r267608  
    215215void LocalStorageDatabase::close()
    216216{
    217     ASSERT(!m_isClosed);
     217    if (m_isClosed)
     218        return;
    218219    m_isClosed = true;
    219220
  • trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm

    r267150 r267608  
    3434#import "NetworkSessionCocoa.h"
    3535#import "SandboxExtension.h"
     36#import "WebCookieManager.h"
    3637#import <WebCore/NetworkStorageSession.h>
    3738#import <WebCore/PublicSuffix.h>
     
    7980    SandboxExtension::consumePermanently(parameters.containerCachesDirectoryExtensionHandle);
    8081    SandboxExtension::consumePermanently(parameters.parentBundleDirectoryExtensionHandle);
    81 #if ENABLE(INDEXED_DATABASE)
    82     SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.indexedDatabaseTempBlobDirectoryExtensionHandle);
    83 #endif
    8482#endif
    8583
     
    104102    auto urlCache(adoptNS([[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]));
    105103    [NSURLCache setSharedURLCache:urlCache.get()];
    106 }
    107 
    108 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const
    109 {
    110     return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());
    111104}
    112105
     
    222215}
    223216
    224 static void saveCookies(NSHTTPCookieStorage *cookieStorage, CompletionHandler<void()>&& completionHandler)
     217void saveCookies(NSHTTPCookieStorage *cookieStorage, CompletionHandler<void()>&& completionHandler)
    225218{
    226219    ASSERT(RunLoop::isMain());
  • trunk/Source/WebKit/NetworkProcess/curl/NetworkProcessCurl.cpp

    r261305 r267608  
    4040}
    4141
    42 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const
    43 {
    44     return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());
    45 }
    46 
    4742void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host)
    4843{
  • trunk/Source/WebKit/NetworkProcess/mac/RemoteNetworkingContext.mm

    r250458 r267608  
    5656
    5757    RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage;
    58     if (!sessionID.isEphemeral() && !parameters.uiProcessCookieStorageIdentifier.isEmpty())
     58    if (!sessionID.isEphemeral() && !parameters.uiProcessCookieStorageIdentifier.isEmpty() && parameters.networkSessionParameters.sessionID != PAL::SessionID::defaultSessionID())
    5959        uiProcessCookieStorage = cookieStorageFromIdentifyingData(parameters.uiProcessCookieStorageIdentifier);
    6060
    6161    networkProcess.ensureSession(sessionID, parameters.networkSessionParameters.shouldUseTestingNetworkSession, makeString(base, '.', sessionID.toUInt64()), WTFMove(uiProcessCookieStorage));
    62 
    63     auto* session = networkProcess.storageSession(sessionID);
    64     for (const auto& cookie : parameters.pendingCookies)
    65         session->setCookie(cookie);
    6662
    6763    networkProcess.setSession(sessionID, NetworkSession::create(networkProcess, WTFMove(parameters.networkSessionParameters)));
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessMainSoup.cpp

    r255067 r267608  
    4040    void platformFinalize() override
    4141    {
     42        // FIXME: Is this still needed? We should probably destroy all existing sessions at this point instead.
    4243        // Needed to destroy the SoupSession and SoupCookieJar, e.g. to avoid
    4344        // leaking SQLite temporary journaling files.
  • trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp

    r267534 r267608  
    136136}
    137137
    138 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const
    139 {
    140     return makeUnique<WebCore::NetworkStorageSession>(PAL::SessionID::defaultSessionID());
    141 }
    142 
    143138void NetworkProcess::setIgnoreTLSErrors(PAL::SessionID sessionID, bool ignoreTLSErrors)
    144139{
  • trunk/Source/WebKit/Platform/IPC/Attachment.h

    r259940 r267608  
    9696    size_t m_size;
    9797#elif OS(DARWIN)
    98     mach_port_name_t m_port;
    99     mach_msg_type_name_t m_disposition;
     98    mach_port_name_t m_port { 0 };
     99    mach_msg_type_name_t m_disposition { 0 };
    100100#elif OS(WINDOWS)
    101101    HANDLE m_handle { INVALID_HANDLE_VALUE };
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp

    r253025 r267608  
    4141    encoder << uiProcessCookieStorageIdentifier;
    4242    encoder << cookieStoragePathExtensionHandle;
    43     encoder << pendingCookies;
    4443
    4544#if ENABLE(INDEXED_DATABASE)
    4645    encoder << indexedDatabaseDirectory << indexedDatabaseDirectoryExtensionHandle;
    47 #if PLATFORM(IOS_FAMILY)
    48     encoder << indexedDatabaseTempBlobDirectoryExtensionHandle;
    49 #endif
    5046#endif
    5147
     
    8480    parameters.cookieStoragePathExtensionHandle = WTFMove(*cookieStoragePathExtensionHandle);
    8581
    86     Optional<Vector<WebCore::Cookie>> pendingCookies;
    87     decoder >> pendingCookies;
    88     if (!pendingCookies)
    89         return WTF::nullopt;
    90     parameters.pendingCookies = WTFMove(*pendingCookies);
    91 
    9282#if ENABLE(INDEXED_DATABASE)
    9383    Optional<String> indexedDatabaseDirectory;
     
    10292        return WTF::nullopt;
    10393    parameters.indexedDatabaseDirectoryExtensionHandle = WTFMove(*indexedDatabaseDirectoryExtensionHandle);
    104 
    105 #if PLATFORM(IOS_FAMILY)
    106     Optional<SandboxExtension::Handle> indexedDatabaseTempBlobDirectoryExtensionHandle;
    107     decoder >> indexedDatabaseTempBlobDirectoryExtensionHandle;
    108     if (!indexedDatabaseTempBlobDirectoryExtensionHandle)
    109         return WTF::nullopt;
    110     parameters.indexedDatabaseTempBlobDirectoryExtensionHandle = WTFMove(*indexedDatabaseTempBlobDirectoryExtensionHandle);
    111 #endif
    11294#endif
    11395
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h

    r253025 r267608  
    5252    Vector<uint8_t> uiProcessCookieStorageIdentifier;
    5353    SandboxExtension::Handle cookieStoragePathExtensionHandle;
    54     Vector<WebCore::Cookie> pendingCookies;
    5554    NetworkSessionCreationParameters networkSessionParameters;
    5655
     
    5857    String indexedDatabaseDirectory;
    5958    SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle;
    60 #if PLATFORM(IOS_FAMILY)
    61     SandboxExtension::Handle indexedDatabaseTempBlobDirectoryExtensionHandle;
    62 #endif
    6359#endif
    6460
  • trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp

    r267042 r267608  
    4747    : m_owningDataStore(websiteDataStore)
    4848{
    49     if (!m_owningDataStore->processPoolForCookieStorageOperations())
    50         registerForNewProcessPoolNotifications();
    5149}
    5250
     
    5654    ASSERT(!m_observedCookieManagerProxy);
    5755    ASSERT(!m_cookieManagerProxyObserver);
    58 
    59     unregisterForNewProcessPoolNotifications();
    6056}
    6157
     
    8278void HTTPCookieStore::cookies(CompletionHandler<void(const Vector<WebCore::Cookie>&)>&& completionHandler)
    8379{
    84     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    85     if (!pool) {
    86         Vector<WebCore::Cookie> allCookies;
    87         if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID())
    88             allCookies = getAllDefaultUIProcessCookieStoreCookies();
    89         allCookies.appendVector(m_owningDataStore->pendingCookies());
    90 
    91         RunLoop::main().dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler), allCookies] () mutable {
    92             filterAppBoundCookies(allCookies, WTFMove(completionHandler));
    93         });
    94         return;
    95     }
    96 
    97     auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    98     cookieManager->getAllCookies(m_owningDataStore->sessionID(), [this, protectedThis = makeRef(*this), pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)] (const Vector<WebCore::Cookie>& cookies) mutable {
     80    auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     81    cookieManager.getAllCookies(m_owningDataStore->sessionID(), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (const Vector<WebCore::Cookie>& cookies) mutable {
    9982        filterAppBoundCookies(cookies, WTFMove(completionHandler));
    10083    });
     
    10386void HTTPCookieStore::cookiesForURL(WTF::URL&& url, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&& completionHandler)
    10487{
    105     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    106     if (!pool)
    107         return completionHandler({ });
    108 
    109     auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    110     cookieManager->getCookies(m_owningDataStore->sessionID(), url, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (Vector<WebCore::Cookie>&& cookies) mutable {
     88    auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     89    cookieManager.getCookies(m_owningDataStore->sessionID(), url, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (Vector<WebCore::Cookie>&& cookies) mutable {
    11190        filterAppBoundCookies(cookies, WTFMove(completionHandler));
    11291    });
     
    11695{
    11796    filterAppBoundCookies(cookies, [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (auto&& appBoundCookies) mutable {
    118         auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    119         if (!pool) {
    120             for (auto& cookie : appBoundCookies) {
    121                 // FIXME: pendingCookies used for defaultSession because session cookies cannot be propagated to Network Process with uiProcessCookieStorageIdentifier.
    122                 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session)
    123                     setCookieInDefaultUIProcessCookieStore(cookie);
    124                 else
    125                     m_owningDataStore->addPendingCookie(cookie);
    126             }
    127 
    128             RunLoop::main().dispatch(WTFMove(completionHandler));
    129             return;
    130         }
    131 
    132         auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    133         cookieManager->setCookies(m_owningDataStore->sessionID(), appBoundCookies, [pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)] () mutable {
    134             completionHandler();
    135         });
     97        auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     98        cookieManager.setCookies(m_owningDataStore->sessionID(), appBoundCookies, WTFMove(completionHandler));
    13699    });
    137100}
     
    139102void HTTPCookieStore::deleteCookie(const WebCore::Cookie& cookie, CompletionHandler<void()>&& completionHandler)
    140103{
    141     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    142     if (!pool) {
    143         if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID() && !cookie.session)
    144             deleteCookieFromDefaultUIProcessCookieStore(cookie);
    145         else
    146             m_owningDataStore->removePendingCookie(cookie);
    147 
    148         RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler)] () mutable {
    149             completionHandler();
    150         });
    151         return;
    152     }
    153 
    154     auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    155     cookieManager->deleteCookie(m_owningDataStore->sessionID(), cookie, [pool = WTFMove(pool), completionHandler = WTFMove(completionHandler)]() mutable {
    156         completionHandler();
    157     });
     104    auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     105    cookieManager.deleteCookie(m_owningDataStore->sessionID(), cookie, WTFMove(completionHandler));
    158106}
    159107
    160108void HTTPCookieStore::deleteAllCookies(CompletionHandler<void()>&& completionHandler)
    161109{
    162     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    163     if (!pool) {
    164         if (!m_owningDataStore->sessionID().isEphemeral())
    165             deleteCookiesInDefaultUIProcessCookieStore();
    166         RunLoop::main().dispatch(WTFMove(completionHandler));
    167         return;
    168     }
    169 
    170     auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    171     cookieManager->deleteAllCookies(m_owningDataStore->sessionID());
     110    auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     111    cookieManager.deleteAllCookies(m_owningDataStore->sessionID());
    172112    // FIXME: The CompletionHandler should be passed to WebCookieManagerProxy::deleteAllCookies.
    173113    RunLoop::main().dispatch(WTFMove(completionHandler));
     
    176116void HTTPCookieStore::setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)
    177117{
    178     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    179     if (!pool) {
    180         if (!m_owningDataStore->sessionID().isEphemeral())
    181             setHTTPCookieAcceptPolicyInDefaultUIProcessCookieStore(policy);
    182         RunLoop::main().dispatch(WTFMove(completionHandler));
    183         return;
    184     }
    185 
    186     auto* cookieManager = pool->supplement<WebKit::WebCookieManagerProxy>();
    187     cookieManager->setHTTPCookieAcceptPolicy(m_owningDataStore->sessionID(), policy, [completionHandler = WTFMove(completionHandler)] () mutable {
    188         completionHandler();
    189     });
     118    auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
     119    cookieManager.setHTTPCookieAcceptPolicy(m_owningDataStore->sessionID(), policy, WTFMove(completionHandler));
    190120}
    191121
     
    228158    m_cookieManagerProxyObserver = makeUnique<APIWebCookieManagerProxyObserver>(*this);
    229159
    230     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    231 
    232     if (!pool) {
    233         ASSERT(!m_observingUIProcessCookies);
    234 
    235         // Listen for cookie notifications in the UIProcess in the meantime.
    236         startObservingChangesToDefaultUIProcessCookieStore([this] () {
    237             cookiesDidChange();
    238         });
    239 
    240         m_observingUIProcessCookies = true;
    241         return;
    242     }
    243 
    244     m_observedCookieManagerProxy = pool->supplement<WebKit::WebCookieManagerProxy>();
     160    m_observedCookieManagerProxy = &m_owningDataStore->networkProcess().cookieManager();
    245161    m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver);
    246162}
     
    277193{
    278194    m_observedCookieManagerProxy->unregisterObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver);
    279     m_observedCookieManagerProxy = nullptr;
    280 
    281     auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
    282 
    283     if (!pool)
    284         return;
    285 
    286     m_observedCookieManagerProxy = pool->supplement<WebKit::WebCookieManagerProxy>();
     195    m_observedCookieManagerProxy = &m_owningDataStore->networkProcess().cookieManager();
    287196    m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver);
    288 }
    289 
    290 void HTTPCookieStore::registerForNewProcessPoolNotifications()
    291 {
    292     ASSERT(!m_processPoolCreationListenerIdentifier);
    293 
    294     m_processPoolCreationListenerIdentifier = WebProcessPool::registerProcessPoolCreationListener([this](WebProcessPool& newProcessPool) {
    295         if (!m_owningDataStore->isAssociatedProcessPool(newProcessPool))
    296             return;
    297 
    298         // Now that an associated process pool exists, we need to flush the UI process cookie store
    299         // to make sure any changes are reflected within the new process pool.
    300         flushDefaultUIProcessCookieStore();
    301         newProcessPool.ensureNetworkProcess();
    302 
    303         if (m_cookieManagerProxyObserver) {
    304             m_observedCookieManagerProxy = newProcessPool.supplement<WebKit::WebCookieManagerProxy>();
    305             m_observedCookieManagerProxy->registerObserver(m_owningDataStore->sessionID(), *m_cookieManagerProxyObserver);
    306         }
    307         unregisterForNewProcessPoolNotifications();
    308     });
    309 }
    310 
    311 void HTTPCookieStore::unregisterForNewProcessPoolNotifications()
    312 {
    313     if (m_processPoolCreationListenerIdentifier)
    314         WebProcessPool::unregisterProcessPoolCreationListener(m_processPoolCreationListenerIdentifier);
    315 
    316     m_processPoolCreationListenerIdentifier = 0;
    317197}
    318198
  • trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.h

    r267042 r267608  
    8484    HTTPCookieStore(WebKit::WebsiteDataStore&);
    8585
    86     void registerForNewProcessPoolNotifications();
    87     void unregisterForNewProcessPoolNotifications();
    88 
    8986    void flushDefaultUIProcessCookieStore();
    9087    static Vector<WebCore::Cookie> getAllDefaultUIProcessCookieStoreCookies();
  • trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp

    r267155 r267608  
    412412}
    413413
    414 WKCookieManagerRef WKContextGetCookieManager(WKContextRef contextRef)
    415 {
    416     return WebKit::toAPI(WebKit::toImpl(contextRef)->supplement<WebKit::WebCookieManagerProxy>());
    417 }
    418 
    419414WKWebsiteDataStoreRef WKContextGetWebsiteDataStore(WKContextRef)
    420415{
     
    528523}
    529524
    530 void WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(WKContextRef context, bool allows)
    531 {
    532 #if ENABLE(SERVICE_WORKER)
    533     WebKit::toImpl(context)->setAllowsAnySSLCertificateForServiceWorker(allows);
    534 #endif
    535 }
    536 
    537525WKDictionaryRef WKContextCopyPlugInAutoStartOriginHashes(WKContextRef contextRef)
    538526{
     
    576564}
    577565
    578 void WKContextTerminateNetworkProcess(WKContextRef context)
    579 {
    580     WebKit::toImpl(context)->terminateNetworkProcess();
    581 }
    582 
    583566void WKContextTerminateServiceWorkers(WKContextRef context)
    584567{
    585568    WebKit::toImpl(context)->terminateServiceWorkers();
    586 }
    587 
    588 ProcessID WKContextGetNetworkProcessIdentifier(WKContextRef contextRef)
    589 {
    590     return WebKit::toImpl(contextRef)->networkProcessIdentifier();
    591569}
    592570
     
    620598}
    621599
    622 void WKContextSetUseSeparateServiceWorkerProcess(WKContextRef contextRef, bool useSeparateServiceWorkerProcess)
    623 {
    624     WebKit::toImpl(contextRef)->setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess);
    625 }
    626 
    627 void WKContextSetPrimaryWebsiteDataStore(WKContextRef contextRef, WKWebsiteDataStoreRef websiteDataStore)
    628 {
    629     WebKit::toImpl(contextRef)->setPrimaryDataStore(*WebKit::toImpl(websiteDataStore));
    630 }
     600void WKContextSetUseSeparateServiceWorkerProcess(WKContextRef, bool useSeparateServiceWorkerProcess)
     601{
     602    WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess);
     603}
     604
     605void WKContextSetPrimaryWebsiteDataStore(WKContextRef, WKWebsiteDataStoreRef)
     606{
     607}
  • trunk/Source/WebKit/UIProcess/API/C/WKContext.h

    r267122 r267608  
    169169
    170170WK_EXPORT WKApplicationCacheManagerRef WKContextGetApplicationCacheManager(WKContextRef context) WK_C_API_DEPRECATED_WITH_REPLACEMENT(WKWebsiteDataStoreGetDefaultDataStore);
    171 WK_EXPORT WKCookieManagerRef WKContextGetCookieManager(WKContextRef context) WK_C_API_DEPRECATED;
    172171WK_EXPORT WKGeolocationManagerRef WKContextGetGeolocationManager(WKContextRef context);
    173172WK_EXPORT WKIconDatabaseRef WKContextGetIconDatabase(WKContextRef context);
  • trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h

    r267155 r267608  
    8484WK_EXPORT void WKContextSetUsesNetworkProcess(WKContextRef, bool);
    8585
    86 WK_EXPORT void WKContextTerminateNetworkProcess(WKContextRef);
    8786WK_EXPORT void WKContextTerminateServiceWorkers(WKContextRef);
    88 
    89 WK_EXPORT void WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(WKContextRef, bool);
    9087
    9188typedef void (*WKContextInvalidMessageFunction)(WKStringRef messageName);
     
    9794
    9895WK_EXPORT void WKContextPreconnectToServer(WKContextRef context, WKURLRef serverURL) WK_C_API_DEPRECATED;
    99 
    100 WK_EXPORT WKProcessID WKContextGetNetworkProcessIdentifier(WKContextRef context);
    10196
    10297WK_EXPORT void WKContextAddSupportedPlugin(WKContextRef context, WKStringRef domain, WKStringRef name, WKArrayRef mimeTypes, WKArrayRef extensions);
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r267284 r267608  
    399399}
    400400
     401WKWebsiteDataStoreRef WKPageGetWebsiteDataStore(WKPageRef page)
     402{
     403    return toAPI(&toImpl(page)->websiteDataStore());
     404}
     405
    401406WKInspectorRef WKPageGetInspector(WKPageRef pageRef)
    402407{
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.h

    r262734 r267608  
    119119WK_EXPORT uint64_t WKPageGetRenderTreeSize(WKPageRef page);
    120120
     121WK_EXPORT WKWebsiteDataStoreRef WKPageGetWebsiteDataStore(WKPageRef page);
     122
    121123WK_EXPORT WKInspectorRef WKPageGetInspector(WKPageRef page);
    122124
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp

    r267123 r267608  
    2929#include "APIArray.h"
    3030#include "APIHTTPCookieStore.h"
     31#include "NetworkProcessProxy.h"
    3132#include "ShouldGrandfatherStatistics.h"
    3233#include "WKAPICast.h"
     
    7071}
    7172
     73void WKWebsiteDataStoreTerminateNetworkProcess(WKWebsiteDataStoreRef dataStore)
     74{
     75    WebKit::toImpl(dataStore)->terminateNetworkProcess();
     76}
     77
     78WKProcessID WKWebsiteDataStoreGetNetworkProcessIdentifier(WKWebsiteDataStoreRef dataStore)
     79{
     80    return WebKit::toImpl(dataStore)->networkProcess().processIdentifier();
     81}
     82
    7283void WKWebsiteDataStoreRemoveITPDataForDomain(WKWebsiteDataStoreRef dataStoreRef, WKStringRef host, void* context, WKWebsiteDataStoreRemoveITPDataForDomainFunction callback)
    7384{
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h

    r267123 r267608  
    3030#include <WebKit/WKDeprecated.h>
    3131
     32#if defined(WIN32) || defined(_WIN32)
     33typedef int WKProcessID;
     34#else
     35#include <unistd.h>
     36typedef pid_t WKProcessID;
     37#endif
     38
    3239#ifdef __cplusplus
    3340extern "C" {
     
    5057
    5158WK_EXPORT void WKWebsiteDataStoreClearCachedCredentials(WKWebsiteDataStoreRef dataStoreRef);
     59
     60WK_EXPORT void WKWebsiteDataStoreClearCachedCredentials(WKWebsiteDataStoreRef dataStore);
     61WK_EXPORT void WKWebsiteDataStoreTerminateNetworkProcess(WKWebsiteDataStoreRef dataStore);
     62
     63WK_EXPORT WKProcessID WKWebsiteDataStoreGetNetworkProcessIdentifier(WKWebsiteDataStoreRef dataStore);
    5264
    5365WK_EXPORT bool WKWebsiteDataStoreGetResourceLoadStatisticsEnabled(WKWebsiteDataStoreRef dataStoreRef);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

    r267155 r267608  
    407407}
    408408
    409 - (void)_terminateNetworkProcess
    410 {
    411     _processPool->terminateNetworkProcess();
    412 }
    413 
    414 - (void)_sendNetworkProcessWillSuspendImminently
    415 {
    416     _processPool->sendNetworkProcessWillSuspendImminentlyForTesting();
    417 }
    418 
    419 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler
    420 {
    421     _processPool->sendNetworkProcessPrepareToSuspendForTesting([completionHandler = makeBlockPtr(completionHandler)] {
    422         completionHandler();
    423     });
    424 }
    425 
    426 - (void)_sendNetworkProcessDidResume
    427 {
    428     _processPool->sendNetworkProcessDidResume();
    429 }
    430 
    431409- (void)_terminateServiceWorkers
    432410{
     
    436414- (void)_setUseSeparateServiceWorkerProcess:(BOOL)useSeparateServiceWorkerProcess
    437415{
    438     _processPool->setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess);
    439 }
    440 
    441 - (pid_t)_networkProcessIdentifier
    442 {
    443     return _processPool->networkProcessIdentifier();
     416    WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess(useSeparateServiceWorkerProcess);
    444417}
    445418
     
    466439{
    467440    _processPool->setShouldMakeNextWebProcessLaunchFailForTesting(true);
    468 }
    469 
    470 - (void)_makeNextNetworkProcessLaunchFailForTesting
    471 {
    472     _processPool->setShouldMakeNextNetworkProcessLaunchFailForTesting(true);
    473441}
    474442
     
    561529}
    562530
    563 - (void)_synthesizeAppIsBackground:(BOOL)background
    564 {
    565     _processPool->synthesizeAppIsBackground(background);
    566 }
    567 
    568 - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows
    569 {
    570 #if ENABLE(SERVICE_WORKER)
    571     _processPool->setAllowsAnySSLCertificateForServiceWorker(allows);
    572 #endif
    573 }
    574 
    575531#if PLATFORM(IOS_FAMILY)
    576532- (id <_WKGeolocationCoreLocationProvider>)_coreLocationProvider
     
    603559        completionHandler(createNSArray(activePagesOrigins).get());
    604560    });
    605 }
    606 
    607 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement
    608 {
    609     return _processPool->networkProcessHasEntitlementForTesting(entitlement);
    610561}
    611562
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

    r267155 r267608  
    8888
    8989// Test only. Should be called only while no web content processes are running.
    90 - (void)_terminateNetworkProcess WK_API_AVAILABLE(macos(10.15), ios(13.0));
    91 - (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    92 - (void)_sendNetworkProcessWillSuspendImminently WK_API_AVAILABLE(macos(10.15), ios(13.0));
    93 - (void)_sendNetworkProcessDidResume WK_API_AVAILABLE(macos(10.15), ios(13.0));
    9490- (void)_terminateServiceWorkers WK_API_AVAILABLE(macos(10.14), ios(12.0));
    9591
    9692// Test only.
    97 - (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(10.13), ios(11.0));
    9893- (pid_t)_prewarmedProcessIdentifier WK_API_AVAILABLE(macos(10.15), ios(13.0));
    9994
     
    107102- (void)_syncNetworkProcessCookies WK_API_DEPRECATED_WITH_REPLACEMENT("WKHTTPCookieStore._flushCookiesToDiskWithCompletionHandler:", macos(10.13, WK_MAC_TBA), ios(11.0, WK_IOS_TBA));
    108103- (void)_makeNextWebProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0));
    109 - (void)_makeNextNetworkProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0));
    110104- (NSUInteger)_maximumSuspendedPageCount WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
    111105- (NSUInteger)_processCacheCapacity WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
     
    123117
    124118// Test only.
    125 - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
    126119- (void)_getActivePagesOriginsInWebProcessForTesting:(pid_t)pid completionHandler:(void(^)(NSArray<NSString *> *))completionHandler WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
    127 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
    128120- (void)_clearPermanentCredentialsForProtectionSpace:(NSURLProtectionSpace *)protectionSpace WK_API_AVAILABLE(macos(10.15), ios(13.0));
    129121
    130122@property (nonatomic, getter=_isCookieStoragePartitioningEnabled, setter=_setCookieStoragePartitioningEnabled:) BOOL _cookieStoragePartitioningEnabled WK_API_DEPRECATED("Partitioned cookies are no longer supported", macos(10.12.3, 10.14.4), ios(10.3, 12.2));
    131 - (void)_synthesizeAppIsBackground:(BOOL)background WK_API_AVAILABLE(macos(10.15), ios(13.0));
    132123
    133124// Test only.
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm

    r267155 r267608  
    618618}
    619619
     620- (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement
     621{
     622    return _websiteDataStore->networkProcessHasEntitlementForTesting(entitlement);
     623}
     624
    620625- (id <_WKWebsiteDataStoreDelegate>)_delegate
    621626{
     
    669674}
    670675
     676- (void)_terminateNetworkProcess
     677{
     678    _websiteDataStore->terminateNetworkProcess();
     679}
     680
     681- (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler
     682{
     683    _websiteDataStore->sendNetworkProcessPrepareToSuspendForTesting([completionHandler = makeBlockPtr(completionHandler)] {
     684        completionHandler();
     685    });
     686}
     687
     688- (void)_sendNetworkProcessWillSuspendImminently
     689{
     690    _websiteDataStore->sendNetworkProcessWillSuspendImminentlyForTesting();
     691
     692}
     693
     694- (void)_sendNetworkProcessDidResume
     695{
     696    _websiteDataStore->sendNetworkProcessDidResume();
     697}
     698
     699- (void)_synthesizeAppIsBackground:(BOOL)background
     700{
     701    _websiteDataStore->networkProcess().synthesizeAppIsBackground(background);
     702}
     703
     704- (pid_t)_networkProcessIdentifier
     705{
     706    return _websiteDataStore->networkProcess().processIdentifier();
     707}
     708
     709+ (void)_makeNextNetworkProcessLaunchFailForTesting
     710{
     711    WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting();
     712}
     713
    671714@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h

    r267155 r267608  
    8686- (void)_renameOrigin:(NSURL *)oldName to:(NSURL *)newName forDataOfTypes:(NSSet<NSString *> *)dataTypes completionHandler:(void (^)(void))completionHandler;
    8787
     88- (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     89
    8890@property (nullable, nonatomic, weak) id <_WKWebsiteDataStoreDelegate> _delegate WK_API_AVAILABLE(macos(10.15), ios(13.0));
    8991@property (nonatomic, readonly, copy) _WKWebsiteDataStoreConfiguration *_configuration;
     92
     93- (void)_terminateNetworkProcess WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     94- (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     95- (void)_sendNetworkProcessWillSuspendImminently WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     96- (void)_sendNetworkProcessDidResume WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     97- (void)_synthesizeAppIsBackground:(BOOL)background WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     98- (pid_t)_networkProcessIdentifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     99+ (void)_makeNextNetworkProcessLaunchFailForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    90100
    91101@end
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitCookieManager.cpp

    r264156 r267608  
    2222#include "WebKitCookieManager.h"
    2323
     24#include "NetworkProcessProxy.h"
    2425#include "SoupCookiePersistentStorageType.h"
    2526#include "WebCookieManagerProxy.h"
     
    5758
    5859struct _WebKitCookieManagerPrivate {
     60    WebCookieManagerProxy& cookieManager() const
     61    {
     62        ASSERT(dataManager);
     63        return webkitWebsiteDataManagerGetDataStore(dataManager).networkProcess().cookieManager();
     64    }
     65
    5966    PAL::SessionID sessionID() const
    6067    {
     
    6572    ~_WebKitCookieManagerPrivate()
    6673    {
    67         for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(dataManager))
    68             processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(sessionID(), nullptr);
     74        cookieManager().setCookieObserverCallback(sessionID(), nullptr);
    6975    }
    7076
     
    140146    WebKitCookieManager* manager = WEBKIT_COOKIE_MANAGER(g_object_new(WEBKIT_TYPE_COOKIE_MANAGER, nullptr));
    141147    manager->priv->dataManager = dataManager;
    142     for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) {
    143         processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(manager->priv->sessionID(), [manager] {
    144             g_signal_emit(manager, signals[CHANGED], 0);
    145         });
    146     }
     148    manager->priv->cookieManager().setCookieObserverCallback(manager->priv->sessionID(), [manager] {
     149        g_signal_emit(manager, signals[CHANGED], 0);
     150    });
    147151    return manager;
    148152}
     
    174178        return;
    175179
    176     for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager))
    177         processPool->supplement<WebCookieManagerProxy>()->setCookiePersistentStorage(sessionID, String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
     180    manager->priv->cookieManager().setCookiePersistentStorage(sessionID, String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
    178181}
    179182
     
    193196    g_return_if_fail(WEBKIT_IS_COOKIE_MANAGER(manager));
    194197
    195     for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager))
    196         processPool->supplement<WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(manager->priv->sessionID(), toHTTPCookieAcceptPolicy(policy), []() { });
     198    manager->priv->cookieManager().setHTTPCookieAcceptPolicy(manager->priv->sessionID(), toHTTPCookieAcceptPolicy(policy), []() { });
    197199}
    198200
     
    218220    GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData));
    219221
    220     // The policy is the same in all process pools having the same session ID, so just ask any.
    221     const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager);
    222     if (processPools.isEmpty()) {
    223         g_task_return_int(task.get(), WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY);
    224         return;
    225     }
    226 
    227     processPools[0]->supplement<WebCookieManagerProxy>()->getHTTPCookieAcceptPolicy(manager->priv->sessionID(), [task = WTFMove(task)](WebCore::HTTPCookieAcceptPolicy policy) {
     222    manager->priv->cookieManager().getHTTPCookieAcceptPolicy(manager->priv->sessionID(), [task = WTFMove(task)](WebCore::HTTPCookieAcceptPolicy policy) {
    228223        g_task_return_int(task.get(), toWebKitCookieAcceptPolicy(policy));
    229224    });
     
    270265
    271266    GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData));
    272 
    273     // Cookies are read/written from/to the same SQLite database on disk regardless
    274     // of the process we access them from, so just use the first process pool.
    275     const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager);
    276     processPools[0]->supplement<WebCookieManagerProxy>()->setCookies(manager->priv->sessionID(), { WebCore::Cookie(cookie) }, [task = WTFMove(task)]() {
     267    manager->priv->cookieManager().setCookies(manager->priv->sessionID(), { WebCore::Cookie(cookie) }, [task = WTFMove(task)]() {
    277268        g_task_return_boolean(task.get(), TRUE);
    278269    });
     
    321312
    322313    GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData));
    323 
    324     // Cookies are read/written from/to the same SQLite database on disk regardless
    325     // of the process we access them from, so just use the first process pool.
    326     const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager);
    327     processPools[0]->supplement<WebCookieManagerProxy>()->getCookies(manager->priv->sessionID(), URL(URL(), String::fromUTF8(uri)), [task = WTFMove(task)](const Vector<WebCore::Cookie>& cookies) {
     314    manager->priv->cookieManager().getCookies(manager->priv->sessionID(), URL(URL(), String::fromUTF8(uri)), [task = WTFMove(task)](const Vector<WebCore::Cookie>& cookies) {
    328315        GList* cookiesList = nullptr;
    329316        for (auto& cookie : cookies)
     
    379366
    380367    GRefPtr<GTask> task = adoptGRef(g_task_new(manager, cancellable, callback, userData));
    381 
    382     // Cookies are read/written from/to the same SQLite database on disk regardless
    383     // of the process we access them from, so just use the first process pool.
    384     const auto& processPools = webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager);
    385     processPools[0]->supplement<WebCookieManagerProxy>()->deleteCookie(manager->priv->sessionID(), WebCore::Cookie(cookie), [task = WTFMove(task)]() {
     368    manager->priv->cookieManager().deleteCookie(manager->priv->sessionID(), WebCore::Cookie(cookie), [task = WTFMove(task)]() {
    386369        g_task_return_boolean(task.get(), TRUE);
    387370    });
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

    r267534 r267608  
    403403
    404404    priv->processPool = WebProcessPool::create(configuration);
    405     priv->processPool->setPrimaryDataStore(webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()));
    406405    priv->processPool->setUserMessageHandler([webContext](UserMessage&& message, CompletionHandler<void(UserMessage&&)>&& completionHandler) {
    407406        // Sink the floating ref.
     
    411410    });
    412411
    413     webkitWebsiteDataManagerAddProcessPool(priv->websiteDataManager.get(), *priv->processPool);
    414 
    415412    priv->processModel = WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES;
    416413
     
    438435        priv->processPool->setInjectedBundleClient(nullptr);
    439436        priv->processPool->setDownloadClient(makeUniqueRef<API::DownloadClient>());
    440     }
    441 
    442     if (priv->websiteDataManager) {
    443         webkitWebsiteDataManagerRemoveProcessPool(priv->websiteDataManager.get(), *priv->processPool);
    444         priv->websiteDataManager = nullptr;
    445437    }
    446438
     
    15821574    g_return_if_fail(hostname);
    15831575
    1584     if (context->priv->dnsPrefetchedHosts.add(hostname).isNewEntry)
    1585         context->priv->processPool->sendToNetworkingProcess(Messages::NetworkProcess::PrefetchDNS(String::fromUTF8(hostname)));
     1576    auto& websiteDataStore = webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get());
     1577    websiteDataStore.networkProcess().send(Messages::NetworkProcess::PrefetchDNS(String::fromUTF8(hostname)), 0);
    15861578    context->priv->dnsPrefetchHystereris.impulse();
    15871579}
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

    r267534 r267608  
    760760        auto proxySettings = webkitWebsiteDataManagerGetDataStore(contextDataManager).networkProxySettings();
    761761        webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()).setNetworkProxySettings(WTFMove(proxySettings));
    762         webkitWebsiteDataManagerAddProcessPool(priv->websiteDataManager.get(), webkitWebContextGetProcessPool(priv->context.get()));
    763762    }
    764763
     
    946945    }
    947946
    948     if (webView->priv->websiteDataManager) {
    949         webkitWebsiteDataManagerRemoveProcessPool(webView->priv->websiteDataManager.get(), webkitWebContextGetProcessPool(webView->priv->context.get()));
    950         webView->priv->websiteDataManager = nullptr;
    951     }
    952 
    953947    if (webView->priv->currentScriptDialog) {
    954948        webkit_script_dialog_close(webView->priv->currentScriptDialog);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp

    r267534 r267608  
    9696
    9797struct _WebKitWebsiteDataManagerPrivate {
    98     ~_WebKitWebsiteDataManagerPrivate()
    99     {
    100         ASSERT(processPools.isEmpty());
    101     }
    102 
    10398    RefPtr<WebKit::WebsiteDataStore> websiteDataStore;
    10499    GUniquePtr<char> baseDataDirectory;
     
    116111
    117112    GRefPtr<WebKitCookieManager> cookieManager;
    118     Vector<WebProcessPool*> processPools;
    119113};
    120114
     
    495489        if (priv->domCacheDirectory)
    496490            configuration->setCacheStorageDirectory(FileSystem::stringFromFileSystemRepresentation(priv->domCacheDirectory.get()));
    497         priv->websiteDataStore = WebKit::WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::defaultSessionID());
     491        priv->websiteDataStore = WebKit::WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::generatePersistentSessionID());
    498492        priv->websiteDataStore->setIgnoreTLSErrors(priv->tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_IGNORE);
    499493    }
    500494
    501495    return *priv->websiteDataStore;
    502 }
    503 
    504 void webkitWebsiteDataManagerAddProcessPool(WebKitWebsiteDataManager* manager, WebProcessPool& processPool)
    505 {
    506     ASSERT(!manager->priv->processPools.contains(&processPool));
    507     manager->priv->processPools.append(&processPool);
    508 }
    509 
    510 void webkitWebsiteDataManagerRemoveProcessPool(WebKitWebsiteDataManager* manager, WebProcessPool& processPool)
    511 {
    512     ASSERT(manager->priv->processPools.contains(&processPool));
    513     manager->priv->processPools.removeFirst(&processPool);
    514 }
    515 
    516 const Vector<WebProcessPool*>& webkitWebsiteDataManagerGetProcessPools(WebKitWebsiteDataManager* manager)
    517 {
    518     return manager->priv->processPools;
    519496}
    520497
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManagerPrivate.h

    r250169 r267608  
    2020#pragma once
    2121
    22 #include "WebProcessPool.h"
    2322#include "WebsiteDataStore.h"
    2423
    2524WebKit::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager*);
    26 void webkitWebsiteDataManagerAddProcessPool(WebKitWebsiteDataManager*, WebKit::WebProcessPool&);
    27 void webkitWebsiteDataManagerRemoveProcessPool(WebKitWebsiteDataManager*, WebKit::WebProcessPool&);
    28 const Vector<WebKit::WebProcessPool*>& webkitWebsiteDataManagerGetProcessPools(WebKitWebsiteDataManager*);
    29 
  • trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp

    r267545 r267608  
    13931393    cookie.httpOnly = *httpOnly;
    13941394
    1395     WebCookieManagerProxy* cookieManager = m_processPool->supplement<WebCookieManagerProxy>();
    1396     cookieManager->setCookies(page->websiteDataStore().sessionID(), { cookie }, [callback]() {
     1395    WebCookieManagerProxy& cookieManager = page->websiteDataStore().networkProcess().cookieManager();
     1396    cookieManager.setCookies(page->websiteDataStore().sessionID(), { cookie }, [callback]() {
    13971397        callback->sendSuccess();
    13981398    });
     
    14101410    String host = activeURL.host().toString();
    14111411
    1412     WebCookieManagerProxy* cookieManager = m_processPool->supplement<WebCookieManagerProxy>();
    1413     cookieManager->deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) });
     1412    WebCookieManagerProxy& cookieManager = page->websiteDataStore().networkProcess().cookieManager();
     1413    cookieManager.deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) });
    14141414
    14151415    return { };
  • trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h

    r261288 r267608  
    4949
    5050    void connect();
    51     void terminate();
     51    virtual void terminate();
    5252
    5353    virtual ProcessThrottler& throttler() = 0;
  • trunk/Source/WebKit/UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h

    r260191 r267608  
    4242
    4343class LegacyCustomProtocolManagerClient final : public API::CustomProtocolManagerClient {
    44 private:
     44public:
    4545    void startLoading(LegacyCustomProtocolManagerProxy&, LegacyCustomProtocolID, const WebCore::ResourceRequest&) final;
    4646    void stopLoading(LegacyCustomProtocolManagerProxy&, LegacyCustomProtocolID) final;
    4747    void invalidate(LegacyCustomProtocolManagerProxy&) final;
    48 
     48private:
    4949    HashMap<LegacyCustomProtocolID, RetainPtr<WKCustomProtocolLoader>> m_loaderMap;
    5050};
  • trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm

    r267516 r267608  
    135135void WebProcessPool::updateProcessSuppressionState()
    136136{
    137     if (m_networkProcess)
    138         m_networkProcess->setProcessSuppressionEnabled(processSuppressionEnabled());
     137    WebsiteDataStore::forEachWebsiteDataStore([enabled = processSuppressionEnabled()] (WebsiteDataStore& dataStore) {
     138        dataStore.networkProcess().setProcessSuppressionEnabled(enabled);
     139    });
    139140
    140141#if ENABLE(NETSCAPE_PLUGIN_API)
     
    166167    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"WebKitSuppressMemoryPressureHandler"])
    167168        installMemoryPressureHandler();
    168 
    169     setLegacyCustomProtocolManagerClient(makeUnique<LegacyCustomProtocolManagerClient>());
    170169
    171170#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
     
    496495    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    497496
    498     {
    499         bool isSafari = false;
    500         bool isMiniBrowser = false;
    501 #if PLATFORM(IOS_FAMILY)
    502         isSafari = WebCore::IOSApplication::isMobileSafari();
    503         isMiniBrowser = WebCore::IOSApplication::isMiniBrowser();
    504 #elif PLATFORM(MAC)
    505         isSafari = WebCore::MacApplication::isSafari();
    506         isMiniBrowser = WebCore::MacApplication::isMiniBrowser();
    507 #endif
    508         if (isSafari || isMiniBrowser) {
    509             parameters.defaultDataStoreParameters.networkSessionParameters.httpProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPProxyDefaultsKey]);
    510             parameters.defaultDataStoreParameters.networkSessionParameters.httpsProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPSProxyDefaultsKey]);
    511         }
    512     }
    513 
    514497    parameters.networkATSContext = adoptCF(_CFNetworkCopyATSContext());
    515498
     
    525508    if (databaseEnabledValue)
    526509        parameters.shouldEnableITPDatabase = databaseEnabledValue.boolValue;
    527     else
    528         parameters.shouldEnableITPDatabase = m_defaultPageGroup->preferences().isITPDatabaseEnabled();
    529510
    530511    parameters.enableAdClickAttributionDebugMode = [defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::adClickAttributionDebugModeEnabledKey().createCFString().get()]];
    531 
    532     parameters.defaultDataStoreParameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission();
    533512}
    534513
     
    607586{
    608587    return !m_userObservablePageCounter.value() && !m_processSuppressionDisabledForPageCounter.value();
    609 }
    610 
    611 bool WebProcessPool::networkProcessHasEntitlementForTesting(const String& entitlement)
    612 {
    613     return WTF::hasEntitlement(ensureNetworkProcess().connection()->xpcConnection(), entitlement.utf8().data());
    614588}
    615589
     
    950924#endif
    951925
    952 OSObjectPtr<xpc_object_t> WebProcessPool::xpcEndpointMessage() const
    953 {
    954     return m_endpointMessage;
    955 }
    956 
    957 void WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess(OSObjectPtr<xpc_object_t> endpointMessage)
    958 {
    959     m_endpointMessage = endpointMessage;
    960 
    961     for (auto process : m_processes) {
    962         if (process->state() != AuxiliaryProcessProxy::State::Running)
    963             continue;
    964         if (!process->connection())
    965             continue;
    966         auto connection = process->connection()->xpcConnection();
    967         xpc_connection_send_message(connection, endpointMessage.get());
    968     }
    969 }
    970 
    971926} // namespace WebKit
  • trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp

    r261898 r267608  
    7676        return;
    7777
    78     if (NetworkProcessProxy* networkProcess = m_processPool->networkProcess())
    79         networkProcess->send(Messages::NetworkProcess::CancelDownload(m_downloadID), 0);
     78    if (m_dataStore)
     79        m_dataStore->networkProcess().send(Messages::NetworkProcess::CancelDownload(m_downloadID), 0);
    8080}
    8181
     
    104104void DownloadProxy::publishProgress(const URL& URL)
    105105{
    106     if (!m_processPool)
    107         return;
    108 
    109     if (auto* networkProcess = m_processPool->networkProcess()) {
    110         SandboxExtension::Handle handle;
    111         bool createdSandboxExtension = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite, handle);
    112         ASSERT_UNUSED(createdSandboxExtension, createdSandboxExtension);
    113         networkProcess->send(Messages::NetworkProcess::PublishDownloadProgress(m_downloadID, URL, handle), 0);
    114     }
     106    if (!m_dataStore)
     107        return;
     108
     109    SandboxExtension::Handle handle;
     110    bool createdSandboxExtension = SandboxExtension::createHandle(URL.fileSystemPath(), SandboxExtension::Type::ReadWrite, handle);
     111    ASSERT_UNUSED(createdSandboxExtension, createdSandboxExtension);
     112    m_dataStore->networkProcess().send(Messages::NetworkProcess::PublishDownloadProgress(m_downloadID, URL, handle), 0);
    115113}
    116114#endif // PLATFORM(COCOA)
     
    132130void DownloadProxy::didReceiveAuthenticationChallenge(AuthenticationChallenge&& authenticationChallenge, uint64_t challengeID)
    133131{
    134     if (!m_processPool)
    135         return;
    136 
    137     auto authenticationChallengeProxy = AuthenticationChallengeProxy::create(WTFMove(authenticationChallenge), challengeID, makeRef(*m_processPool->networkingProcessConnection()), nullptr);
    138 
     132    if (!m_processPool || !m_dataStore)
     133        return;
     134
     135    auto authenticationChallengeProxy = AuthenticationChallengeProxy::create(WTFMove(authenticationChallenge), challengeID, makeRef(*m_dataStore->networkProcess().connection()), nullptr);
    139136    m_processPool->downloadClient().didReceiveAuthenticationChallenge(*this, authenticationChallengeProxy.get());
    140137}
     
    147144    m_processPool->downloadClient().willSendRequest(*this, WTFMove(proposedRequest), redirectResponse, [this, protectedThis = makeRef(*this)](ResourceRequest&& newRequest) {
    148145        m_redirectChain.append(newRequest.url());
    149 
    150         if (!protectedThis->m_processPool)
     146        if (!protectedThis->m_dataStore)
    151147            return;
    152 
    153         auto* networkProcessProxy = protectedThis->m_processPool->networkProcess();
    154         if (!networkProcessProxy)
    155             return;
    156 
    157         networkProcessProxy->send(Messages::NetworkProcess::ContinueWillSendRequest(protectedThis->m_downloadID, newRequest), 0);
     148        auto& networkProcessProxy = protectedThis->m_dataStore->networkProcess();
     149        networkProcessProxy.send(Messages::NetworkProcess::ContinueWillSendRequest(protectedThis->m_downloadID, newRequest), 0);
    158150    });
    159151}
     
    180172        return;
    181173   
    182     m_processPool->downloadClient().decideDestinationWithSuggestedFilename(*this, ResourceResponseBase::sanitizeSuggestedFilename(suggestedFilename), [this, protectedThis = makeRef(*this), downloadID = downloadID] (AllowOverwrite allowOverwrite, String destination) {
     174    m_processPool->downloadClient().decideDestinationWithSuggestedFilename(*this, ResourceResponseBase::sanitizeSuggestedFilename(suggestedFilename), [this, protectedThis = makeRef(*this), downloadID] (AllowOverwrite allowOverwrite, String destination) {
    183175        SandboxExtension::Handle sandboxExtensionHandle;
    184176        if (!destination.isNull())
    185177            SandboxExtension::createHandle(destination, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle);
    186178
    187         if (!m_processPool)
     179        if (!m_dataStore)
    188180            return;
    189 
    190         if (auto* networkProcess = m_processPool->networkProcess())
    191             networkProcess->send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite == AllowOverwrite::Yes), 0);
     181        m_dataStore->networkProcess().send(Messages::NetworkProcess::ContinueDecidePendingDownloadDestination(downloadID, destination, sandboxExtensionHandle, allowOverwrite == AllowOverwrite::Yes), 0);
    192182    });
    193183}
  • trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp

    r259540 r267608  
    4545
    4646DownloadProxyMap::DownloadProxyMap(NetworkProcessProxy& process)
    47     : m_process(makeWeakPtr(process))
     47    : m_process(process)
    4848#if PLATFORM(COCOA)
    4949    , m_shouldTakeAssertion(WTF::processHasEntitlement("com.apple.multitasking.systemappassertions"))
     
    7171void DownloadProxyMap::applicationDidEnterBackground()
    7272{
    73     if (m_process)
    74         m_process->send(Messages::NetworkProcess::ApplicationDidEnterBackground(), 0);
     73    m_process.send(Messages::NetworkProcess::ApplicationDidEnterBackground(), 0);
    7574}
    7675
    7776void DownloadProxyMap::applicationWillEnterForeground()
    7877{
    79     if (m_process)
    80         m_process->send(Messages::NetworkProcess::ApplicationWillEnterForeground(), 0);
     78    m_process.send(Messages::NetworkProcess::ApplicationWillEnterForeground(), 0);
    8179}
    8280
     
    9391
    9492        ASSERT(!m_downloadNetworkingAssertion);
    95         RELEASE_ASSERT(m_process);
    96         m_downloadNetworkingAssertion = makeUnique<ProcessAssertion>(m_process->processIdentifier(), "WebKit downloads"_s, ProcessAssertionType::UnboundedNetworking);
     93        m_downloadNetworkingAssertion = makeUnique<ProcessAssertion>(m_process.processIdentifier(), "WebKit downloads"_s, ProcessAssertionType::UnboundedNetworking);
    9794
    9895        RELEASE_LOG(ProcessSuspension, "UIProcess took 'WebKit downloads' assertions for UIProcess and NetworkProcess");
    9996    }
    10097
    101     m_process->addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID().downloadID(), downloadProxy.get());
     98    m_process.addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID().downloadID(), downloadProxy.get());
    10299
    103100    return downloadProxy;
     
    110107    RELEASE_LOG(Loading, "Removing download %" PRIu64 " from UIProcess DownloadProxyMap", downloadID.downloadID());
    111108
    112     // The DownloadProxy may be holding the last reference to the process pool.
    113     auto protectedProcessPool = makeRefPtr(m_process->processPool());
    114 
    115109    ASSERT(m_downloads.contains(downloadID));
    116110
    117     m_process->removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadID.downloadID());
     111    m_process.removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadID.downloadID());
    118112    downloadProxy.invalidate();
    119113    m_downloads.remove(downloadID);
     
    134128        download->processDidClose();
    135129        download->invalidate();
    136         m_process->removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), download->downloadID().downloadID());
     130        m_process.removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), download->downloadID().downloadID());
    137131    }
    138132
     
    141135    m_downloadNetworkingAssertion = nullptr;
    142136    RELEASE_LOG(ProcessSuspension, "UIProcess DownloadProxyMap invalidated - Released 'WebKit downloads' assertions for UIProcess and NetworkProcess");
    143 
    144     m_process = nullptr;
    145137}
    146138
  • trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h

    r255899 r267608  
    7272    void platformDestroy();
    7373
    74     WeakPtr<NetworkProcessProxy> m_process;
     74    NetworkProcessProxy& m_process;
    7575    HashMap<DownloadID, RefPtr<DownloadProxy>> m_downloads;
    7676
  • trunk/Source/WebKit/UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp

    r260191 r267608  
    4545void LegacyCustomProtocolManagerProxy::startLoading(LegacyCustomProtocolID customProtocolID, const WebCore::ResourceRequest& request)
    4646{
    47     m_networkProcessProxy.processPool().customProtocolManagerClient().startLoading(*this, customProtocolID, request);
     47    m_networkProcessProxy.customProtocolManagerClient().startLoading(*this, customProtocolID, request);
    4848}
    4949
    5050void LegacyCustomProtocolManagerProxy::stopLoading(LegacyCustomProtocolID customProtocolID)
    5151{
    52     m_networkProcessProxy.processPool().customProtocolManagerClient().stopLoading(*this, customProtocolID);
     52    m_networkProcessProxy.customProtocolManagerClient().stopLoading(*this, customProtocolID);
    5353}
    5454
    5555void LegacyCustomProtocolManagerProxy::invalidate()
    5656{
    57     m_networkProcessProxy.processPool().customProtocolManagerClient().invalidate(*this);
     57    m_networkProcessProxy.customProtocolManagerClient().invalidate(*this);
    5858}
    5959
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp

    r267042 r267608  
    2828
    2929#include "APIContentRuleList.h"
     30#include "APICustomProtocolManagerClient.h"
    3031#include "AuthenticationChallengeProxy.h"
    3132#include "AuthenticationManager.h"
     
    3637#include "LegacyCustomProtocolManagerProxyMessages.h"
    3738#endif
     39#include "LegacyGlobalSettings.h"
    3840#include "Logging.h"
    3941#include "NetworkContentRuleListManagerMessages.h"
     
    4951#include "StorageAccessStatus.h"
    5052#include "WebCompiledContentRuleList.h"
     53#include "WebCookieManagerProxy.h"
    5154#include "WebPageMessages.h"
    5255#include "WebPageProxy.h"
     
    5962#include "WebsiteData.h"
    6063#include "WebsiteDataStoreClient.h"
     64#include "WebsiteDataStoreParameters.h"
    6165#include <WebCore/ClientOrigin.h>
    6266#include <WebCore/RegistrableDomain.h>
     67#include <wtf/CallbackAggregator.h>
    6368#include <wtf/CompletionHandler.h>
    6469
     
    7176#endif
    7277
     78#if PLATFORM(COCOA)
     79#include "LegacyCustomProtocolManagerClient.h"
     80#endif
     81
    7382#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, connection())
    7483
     
    7685using namespace WebCore;
    7786
    78 NetworkProcessProxy::NetworkProcessProxy(WebProcessPool& processPool)
    79     : AuxiliaryProcessProxy(processPool.alwaysRunsAtBackgroundPriority())
    80     , m_processPool(processPool)
     87static HashSet<NetworkProcessProxy*>& networkProcessesSet()
     88{
     89    RELEASE_ASSERT(RunLoop::isMain());
     90    static NeverDestroyed<HashSet<NetworkProcessProxy*>> set;
     91    return set;
     92}
     93
     94Vector<Ref<NetworkProcessProxy>> NetworkProcessProxy::allNetworkProcesses()
     95{
     96    Vector<Ref<NetworkProcessProxy>> processes;
     97    processes.reserveInitialCapacity(networkProcessesSet().size());
     98    for (auto* networkProcess : networkProcessesSet())
     99        processes.uncheckedAppend(*networkProcess);
     100    return processes;
     101}
     102
     103static RefPtr<NetworkProcessProxy>& defaultProcess()
     104{
     105    static NeverDestroyed<RefPtr<NetworkProcessProxy>> process;
     106    return process.get();
     107}
     108
     109Ref<NetworkProcessProxy> NetworkProcessProxy::defaultNetworkProcess()
     110{
     111    if (!defaultProcess())
     112        defaultProcess() = NetworkProcessProxy::create();
     113    return *defaultProcess();
     114}
     115
     116void NetworkProcessProxy::terminate()
     117{
     118    AuxiliaryProcessProxy::terminate();
     119    if (auto* connection = this->connection())
     120        connection->invalidate();
     121    didTerminate();
     122}
     123
     124void NetworkProcessProxy::didTerminate()
     125{
     126    if (this == defaultProcess().get())
     127        defaultProcess() = nullptr;
     128}
     129
     130void NetworkProcessProxy::sendCreationParametersToNewProcess()
     131{
     132    ASSERT(RunLoop::isMain());
     133
     134    // FIXME: This is a temporary workaround for apps using WebKit API on non-main threads.
     135    // We should remove this once we enforce threading violation check on our APIs.
     136    // https://bugs.webkit.org/show_bug.cgi?id=200246.
     137    if (!RunLoop::isMain()) {
     138        callOnMainRunLoopAndWait([this] {
     139            sendCreationParametersToNewProcess();
     140        });
     141    }
     142
     143    NetworkProcessCreationParameters parameters;
     144    parameters.urlSchemesRegisteredAsSecure = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsSecure());
     145    parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsBypassingContentSecurityPolicy());
     146    parameters.urlSchemesRegisteredAsLocal = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsLocal());
     147    parameters.urlSchemesRegisteredAsNoAccess = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsNoAccess());
     148    parameters.cacheModel = LegacyGlobalSettings::singleton().cacheModel();
     149    for (auto& scheme : WebProcessPool::urlSchemesWithCustomProtocolHandlers())
     150        parameters.urlSchemesRegisteredForCustomProtocols.append(scheme);
     151#if PLATFORM(IOS_FAMILY)
     152    if (String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory(); !cookieStorageDirectory.isEmpty())
     153        SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle);
     154    if (String containerCachesDirectory = WebProcessPool::networkingCachesDirectory(); !containerCachesDirectory.isEmpty())
     155        SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory, parameters.containerCachesDirectoryExtensionHandle);
     156    if (String parentBundleDirectory = WebProcessPool::parentBundleDirectory(); !parentBundleDirectory.isEmpty())
     157        SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle);
     158#endif
     159    WebProcessPool::platformInitializeNetworkProcess(parameters);
     160    send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);
     161}
     162
     163static bool anyProcessPoolAlwaysRunsAtBackgroundPriority()
     164{
     165    for (auto* processPool : WebProcessPool::allProcessPools()) {
     166        if (processPool->alwaysRunsAtBackgroundPriority())
     167            return true;
     168    }
     169    return false;
     170}
     171
     172static bool anyProcessPoolShouldTakeUIBackgroundAssertion()
     173{
     174    for (auto* processPool : WebProcessPool::allProcessPools()) {
     175        if (processPool->shouldTakeUIBackgroundAssertion())
     176            return true;
     177    }
     178    return false;
     179}
     180
     181NetworkProcessProxy::NetworkProcessProxy()
     182    : AuxiliaryProcessProxy(anyProcessPoolAlwaysRunsAtBackgroundPriority())
    81183#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
     184    , m_customProtocolManagerClient(makeUniqueRef<LegacyCustomProtocolManagerClient>())
    82185    , m_customProtocolManagerProxy(*this)
    83 #endif
    84     , m_throttler(*this, processPool.shouldTakeUIBackgroundAssertion())
     186#else
     187    , m_customProtocolManagerClient(makeUniqueRef<API::CustomProtocolManagerClient>())
     188#endif
     189    , m_throttler(*this, anyProcessPoolShouldTakeUIBackgroundAssertion())
     190    , m_cookieManager(WebCookieManagerProxy::create(*this))
    85191{
    86192    connect();
     193    sendCreationParametersToNewProcess();
     194    updateProcessAssertion();
     195    networkProcessesSet().add(this);
    87196}
    88197
     
    99208    if (m_downloadProxyMap)
    100209        m_downloadProxyMap->invalidate();
     210    networkProcessesSet().remove(this);
    101211}
    102212
     
    106216    AuxiliaryProcessProxy::getLaunchOptions(launchOptions);
    107217
    108     if (processPool().shouldMakeNextNetworkProcessLaunchFailForTesting()) {
    109         processPool().setShouldMakeNextNetworkProcessLaunchFailForTesting(false);
     218    if (WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting())
    110219        launchOptions.shouldMakeProcessLaunchFailForTesting = true;
    111     }
    112 
    113 #if PLATFORM(PLAYSTATION)
    114     launchOptions.processPath = m_processPool.networkProcessPath();
    115     launchOptions.userId = m_processPool.userId();
    116 #endif
    117220}
    118221
     
    167270}
    168271
    169 DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage)
     272DownloadProxy& NetworkProcessProxy::createDownloadProxy(WebsiteDataStore& dataStore, WebProcessPool& processPool, const ResourceRequest& resourceRequest, const FrameInfoData& frameInfo, WebPageProxy* originatingPage)
    170273{
    171274    if (!m_downloadProxyMap)
    172275        m_downloadProxyMap = makeUnique<DownloadProxyMap>(*this);
    173276
    174     return m_downloadProxyMap->createDownloadProxy(dataStore, m_processPool, resourceRequest, frameInfo, originatingPage);
     277    return m_downloadProxyMap->createDownloadProxy(dataStore, processPool, resourceRequest, frameInfo, originatingPage);
    175278}
    176279
     
    238341    clearCallbackStates();
    239342
    240     // Tell the network process manager to forget about this network process proxy. This will cause us to be deleted.
    241     m_processPool.networkProcessCrashed(*this);
     343    Ref<NetworkProcessProxy> protectedThis(*this);
     344    for (auto* processPool : WebProcessPool::allProcessPools())
     345        processPool->networkProcessCrashed(*this);
     346    for (auto& websiteDataStore : m_websiteDataStores)
     347        websiteDataStore.networkProcessCrashed(*this);
    242348}
    243349
     
    259365        return;
    260366
    261     if (m_processPool.dispatchMessage(connection, decoder))
    262         return;
    263 
    264367    didReceiveNetworkProcessProxyMessage(connection, decoder);
    265368}
     
    275378void NetworkProcessProxy::didClose(IPC::Connection&)
    276379{
    277     auto protectedProcessPool = makeRef(m_processPool);
    278 
    279380    if (m_downloadProxyMap)
    280381        m_downloadProxyMap->invalidate();
     
    332433    }
    333434
    334     if (!topOrigin || !m_processPool.isServiceWorkerPageID(pageID)) {
    335         processAuthenticationChallenge(sessionID, WTFMove(authenticationChallenge));
    336         return;
    337     }
    338 
    339435    WebPageProxy::forMostVisibleWebPageIfAny(sessionID, *topOrigin, [this, weakThis = makeWeakPtr(this), sessionID, authenticationChallenge = WTFMove(authenticationChallenge), negotiatedLegacyTLS](auto* page) mutable {
    340436        if (!weakThis)
     
    393489        return;
    394490    }
    395 
    396 #if PLATFORM(COCOA)
    397     if (m_processPool.processSuppressionEnabled())
    398         setProcessSuppressionEnabled(true);
    399 #endif
    400491   
    401492#if PLATFORM(IOS_FAMILY)
     
    12061297void NetworkProcessProxy::setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&& domains)
    12071298{
    1208     processPool().setDomainsWithUserInteraction(WTFMove(domains));
     1299    for (auto* processPool : WebProcessPool::allProcessPools())
     1300        processPool->setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain> { domains });
    12091301}
    12101302#endif // ENABLE(RESOURCE_LOAD_STATISTICS)
     
    12531345}
    12541346
    1255 void NetworkProcessProxy::addSession(Ref<WebsiteDataStore>&& store)
    1256 {
    1257     m_sessionIDs.add(store->sessionID());
     1347void NetworkProcessProxy::addSession(WebsiteDataStore& store)
     1348{
     1349    m_websiteDataStores.add(store);
    12581350
    12591351    if (canSendMessage())
    1260         send(Messages::NetworkProcess::AddWebsiteDataStore { store->parameters() }, 0);
    1261     auto sessionID = store->sessionID();
     1352        send(Messages::NetworkProcess::AddWebsiteDataStore { store.parameters() }, 0);
     1353    auto sessionID = store.sessionID();
    12621354    if (!sessionID.isEphemeral()) {
    12631355#if ENABLE(INDEXED_DATABASE)
    1264         createSymLinkForFileUpgrade(store->resolvedIndexedDatabaseDirectory());
    1265 #endif
    1266     }
    1267 }
    1268 
    1269 bool NetworkProcessProxy::hasSession(PAL::SessionID sessionID) const
    1270 {
    1271     return m_sessionIDs.contains(sessionID);
    1272 }
    1273 
    1274 void NetworkProcessProxy::removeSession(PAL::SessionID sessionID)
    1275 {
    1276     m_sessionIDs.remove(sessionID);
     1356        createSymLinkForFileUpgrade(store.resolvedIndexedDatabaseDirectory());
     1357#endif
     1358    }
     1359}
     1360
     1361void NetworkProcessProxy::removeSession(WebsiteDataStore& websiteDataStore)
     1362{
     1363    m_websiteDataStores.remove(websiteDataStore);
    12771364
    12781365    if (canSendMessage())
    1279         send(Messages::NetworkProcess::DestroySession { sessionID }, 0);
     1366        send(Messages::NetworkProcess::DestroySession { websiteDataStore.sessionID() }, 0);
    12801367}
    12811368
    12821369WebsiteDataStore* NetworkProcessProxy::websiteDataStoreFromSessionID(PAL::SessionID sessionID)
    12831370{
    1284     if (sessionID == PAL::SessionID::defaultSessionID()) {
    1285         if (!WebsiteDataStore::defaultDataStoreExists()) {
    1286             auto* websiteDataStore = m_processPool.websiteDataStore();
    1287             if (websiteDataStore && websiteDataStore->sessionID() == sessionID)
    1288                 return websiteDataStore;
    1289         }
    1290 
    1291         return WebsiteDataStore::defaultDataStore().ptr();
    1292     }
    1293     return WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID);
     1371    return WebsiteDataStore::existingDataStoreForSessionID(sessionID);
    12941372}
    12951373
     
    13381416void NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
    13391417{
    1340     m_processPool.establishWorkerContextConnectionToNetworkProcess(*this, WTFMove(registrableDomain), sessionID, WTFMove(completionHandler));
     1418    WebProcessPool::establishWorkerContextConnectionToNetworkProcess(*this, RegistrableDomain {registrableDomain}, sessionID, WTFMove(completionHandler));
    13411419}
    13421420
     
    15011579}
    15021580
     1581static bool anyProcessPoolHasForegroundWebProcesses()
     1582{
     1583    for (auto* processPool : WebProcessPool::allProcessPools()) {
     1584        if (processPool->hasForegroundWebProcesses())
     1585            return true;
     1586    }
     1587    return false;
     1588}
     1589
     1590static bool anyProcessPoolHasBackgroundWebProcesses()
     1591{
     1592    for (auto* processPool : WebProcessPool::allProcessPools()) {
     1593        if (processPool->hasBackgroundWebProcesses())
     1594            return true;
     1595    }
     1596    return false;
     1597}
     1598
    15031599void NetworkProcessProxy::updateProcessAssertion()
    15041600{
    1505     if (processPool().hasForegroundWebProcesses()) {
     1601    if (anyProcessPoolHasForegroundWebProcesses()) {
    15061602        if (!ProcessThrottler::isValidForegroundActivity(m_activityFromWebProcesses)) {
    15071603            m_activityFromWebProcesses = throttler().foregroundActivity("Networking for foreground view(s)"_s);
     
    15101606        return;
    15111607    }
    1512     if (processPool().hasBackgroundWebProcesses()) {
     1608    if (anyProcessPoolHasBackgroundWebProcesses()) {
    15131609        if (!ProcessThrottler::isValidBackgroundActivity(m_activityFromWebProcesses)) {
    15141610            m_activityFromWebProcesses = throttler().backgroundActivity("Networking for background view(s)"_s);
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h

    r267042 r267608  
    4747#if PLATFORM(COCOA)
    4848#include "XPCEventHandler.h"
     49#include <wtf/OSObjectPtr.h>
    4950#endif
    5051
    5152namespace IPC {
    5253class FormDataReference;
     54}
     55
     56namespace API {
     57class CustomProtocolManagerClient;
    5358}
    5459
     
    7479class DownloadProxy;
    7580class DownloadProxyMap;
     81class WebCookieManagerProxy;
    7682class WebPageProxy;
    77 class WebProcessPool;
    7883class WebUserContentControllerProxy;
    7984
     
    8792struct ResourceLoadInfo;
    8893struct WebsiteData;
    89 
    90 class NetworkProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<NetworkProcessProxy> {
     94struct WebsiteDataStoreParameters;
     95
     96class NetworkProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<NetworkProcessProxy>, public RefCounted<NetworkProcessProxy> {
    9197    WTF_MAKE_FAST_ALLOCATED;
    9298public:
     
    103109    using OpenerDomain = WebCore::RegistrableDomain;
    104110
    105     explicit NetworkProcessProxy(WebProcessPool&);
     111    static Ref<NetworkProcessProxy> defaultNetworkProcess();
     112    static Ref<NetworkProcessProxy> create() { return adoptRef(*new NetworkProcessProxy); }
    106113    ~NetworkProcessProxy();
    107114
     115    static Vector<Ref<NetworkProcessProxy>> allNetworkProcesses();
     116   
     117    void terminate() final;
     118    void didTerminate();
     119
    108120    void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
    109121
    110     DownloadProxy& createDownloadProxy(WebsiteDataStore&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage);
     122    DownloadProxy& createDownloadProxy(WebsiteDataStore&, WebProcessPool&, const WebCore::ResourceRequest&, const FrameInfoData&, WebPageProxy* originatingPage);
    111123
    112124    void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CompletionHandler<void(WebsiteData)>&&);
     
    207219    void updateProcessAssertion();
    208220
    209     WebProcessPool& processPool() { return m_processPool; }
    210 
    211221#if ENABLE(CONTENT_EXTENSIONS)
    212222    void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&);
    213223#endif
    214224
    215     void addSession(Ref<WebsiteDataStore>&&);
    216     bool hasSession(PAL::SessionID) const;
    217     void removeSession(PAL::SessionID);
     225    void addSession(WebsiteDataStore&);
     226    void removeSession(WebsiteDataStore&);
    218227   
    219228#if ENABLE(INDEXED_DATABASE)
     
    230239    void unregisterSchemeForLegacyCustomProtocol(const String&);
    231240
     241    void networkProcessCrashed();
     242   
    232243    void resetQuota(PAL::SessionID, CompletionHandler<void()>&&);
    233244
     
    249260    void clearBundleIdentifier(CompletionHandler<void()>&&);
    250261
     262    WebCookieManagerProxy& cookieManager() { return m_cookieManager.get(); }
     263
     264    API::CustomProtocolManagerClient& customProtocolManagerClient() { return m_customProtocolManagerClient.get(); }
     265
     266#if PLATFORM(COCOA)
     267    xpc_object_t xpcEndpointMessage() const { return m_endpointMessage.get(); }
     268#endif
     269
    251270private:
     271    explicit NetworkProcessProxy();
     272
     273    void sendCreationParametersToNewProcess();
     274
    252275    // AuxiliaryProcessProxy
    253276    ASCIILiteral processName() const final { return "Networking"_s; }
     
    257280    void processWillShutDown(IPC::Connection&) override;
    258281
    259     void networkProcessCrashed();
    260282    void clearCallbackStates();
    261283
     
    313335    void processAuthenticationChallenge(PAL::SessionID, Ref<AuthenticationChallengeProxy>&&);
    314336
    315     WebProcessPool& m_processPool;
    316 
    317337    HashMap<CallbackID, CompletionHandler<void(WebsiteData)>> m_pendingFetchWebsiteDataCallbacks;
    318338    HashMap<CallbackID, CompletionHandler<void()>> m_pendingDeleteWebsiteDataCallbacks;
     
    320340
    321341    std::unique_ptr<DownloadProxyMap> m_downloadProxyMap;
     342
     343    UniqueRef<API::CustomProtocolManagerClient> m_customProtocolManagerClient;
    322344#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
    323345    LegacyCustomProtocolManagerProxy m_customProtocolManagerProxy;
    324346#endif
     347
    325348    ProcessThrottler m_throttler;
    326349    std::unique_ptr<ProcessThrottler::BackgroundActivity> m_activityForHoldingLockedFiles;
     
    348371        WeakPtr<NetworkProcessProxy> m_networkProcess;
    349372    };
    350 #endif
    351 
    352     HashSet<PAL::SessionID> m_sessionIDs;
     373    OSObjectPtr<xpc_object_t> m_endpointMessage;
     374#endif
     375
     376    WeakHashSet<WebsiteDataStore> m_websiteDataStores;
     377    Ref<WebCookieManagerProxy> m_cookieManager;
    353378};
    354379
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxyCocoa.mm

    r264199 r267608  
    5252        return false;
    5353
    54     if (messageName == LaunchServicesDatabaseXPCConstants::xpcLaunchServicesDatabaseXPCEndpointMessageName)
    55         m_networkProcess->processPool().sendNetworkProcessXPCEndpointToWebProcess(event);
     54    if (messageName == LaunchServicesDatabaseXPCConstants::xpcLaunchServicesDatabaseXPCEndpointMessageName) {
     55        m_networkProcess->m_endpointMessage = event;
     56        for (auto& dataStore : m_networkProcess->m_websiteDataStores)
     57            dataStore.sendNetworkProcessXPCEndpointToAllWebProcesses();
     58    }
    5659
    5760    return true;
  • trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp

    r266951 r267608  
    3030#include "APISecurityOrigin.h"
    3131#include "NetworkProcessMessages.h"
     32#include "NetworkProcessProxy.h"
    3233#include "OptionalCallbackID.h"
    3334#include "WebCookieManagerMessages.h"
     
    4041using namespace WebCore;
    4142
    42 const char* WebCookieManagerProxy::supplementName()
    43 {
    44     return "WebCookieManagerProxy";
    45 }
    46 
    47 Ref<WebCookieManagerProxy> WebCookieManagerProxy::create(WebProcessPool* processPool)
    48 {
    49     return adoptRef(*new WebCookieManagerProxy(processPool));
    50 }
    51 
    52 WebCookieManagerProxy::WebCookieManagerProxy(WebProcessPool* processPool)
    53     : WebContextSupplement(processPool)
    54 {
    55     WebContextSupplement::processPool()->addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this);
     43WebCookieManagerProxy::WebCookieManagerProxy(NetworkProcessProxy& networkProcess)
     44    : m_networkProcess(makeWeakPtr(networkProcess))
     45{
     46    networkProcess.addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this);
    5647}
    5748
    5849WebCookieManagerProxy::~WebCookieManagerProxy()
    5950{
     51    if (m_networkProcess)
     52        m_networkProcess->removeMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName());
    6053    ASSERT(m_cookieObservers.isEmpty());
    6154}
     
    6659}
    6760
    68 // WebContextSupplement
    69 
    70 void WebCookieManagerProxy::processPoolDestroyed()
    71 {
    72     Vector<Observer*> observers;
    73     for (auto& observerSet : m_cookieObservers.values()) {
    74         for (auto* observer : observerSet)
    75             observers.append(observer);
    76     }
    77 
    78     for (auto* observer : observers)
    79         observer->managerDestroyed();
    80 
    81     ASSERT(m_cookieObservers.isEmpty());
    82 }
    83 
    84 void WebCookieManagerProxy::processDidClose(WebProcessProxy*)
    85 {
    86 }
    87 
    88 void WebCookieManagerProxy::processDidClose(NetworkProcessProxy*)
    89 {
    90 }
    91 
    92 void WebCookieManagerProxy::refWebContextSupplement()
    93 {
    94     API::Object::ref();
    95 }
    96 
    97 void WebCookieManagerProxy::derefWebContextSupplement()
    98 {
    99     API::Object::deref();
    100 }
    101 
    10261void WebCookieManagerProxy::getHostnamesWithCookies(PAL::SessionID sessionID, CompletionHandler<void(Vector<String>&&)>&& callbackFunction)
    10362{
    104     auto& networkProcess = processPool()->ensureNetworkProcess();
    105     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), WTFMove(callbackFunction));
     63    if (m_networkProcess)
     64        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), WTFMove(callbackFunction));
     65    else
     66        callbackFunction({ });
    10667}
    10768
    10869void WebCookieManagerProxy::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames)
    10970{
    110     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames));
     71    if (m_networkProcess)
     72        m_networkProcess->send(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames), 0);
    11173}
    11274
    11375void WebCookieManagerProxy::deleteAllCookies(PAL::SessionID sessionID)
    11476{
    115     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookies(sessionID));
     77    if (m_networkProcess)
     78        m_networkProcess->send(Messages::WebCookieManager::DeleteAllCookies(sessionID), 0);
    11679}
    11780
    11881void WebCookieManagerProxy::deleteCookie(PAL::SessionID sessionID, const Cookie& cookie, CompletionHandler<void()>&& callbackFunction)
    11982{
    120     auto& networkProcess = processPool()->ensureNetworkProcess();
    121     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), [callbackFunction = WTFMove(callbackFunction)]() mutable {
    122         callbackFunction();
    123     });
     83    if (m_networkProcess)
     84        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), WTFMove(callbackFunction));
     85    else
     86        callbackFunction();
    12487}
    12588
    12689void WebCookieManagerProxy::deleteAllCookiesModifiedSince(PAL::SessionID sessionID, WallTime time, CompletionHandler<void()>&& callbackFunction)
    12790{
    128     auto& networkProcess = processPool()->ensureNetworkProcess();
    129     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), WTFMove(callbackFunction));
     91    if (m_networkProcess)
     92        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), WTFMove(callbackFunction));
     93    else
     94        callbackFunction();
    13095}
    13196
    13297void WebCookieManagerProxy::setCookies(PAL::SessionID sessionID, const Vector<Cookie>& cookies, CompletionHandler<void()>&& callbackFunction)
    13398{
    134     auto& networkProcess = processPool()->ensureNetworkProcess();
    135     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), WTFMove(callbackFunction));
     99    if (m_networkProcess)
     100        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), WTFMove(callbackFunction));
     101    else
     102        callbackFunction();
    136103}
    137104
    138105void WebCookieManagerProxy::setCookies(PAL::SessionID sessionID, const Vector<Cookie>& cookies, const URL& url, const URL& mainDocumentURL, CompletionHandler<void()>&& callbackFunction)
    139106{
    140     auto& networkProcess = processPool()->ensureNetworkProcess();
    141     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), WTFMove(callbackFunction));
     107    if (m_networkProcess)
     108        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), WTFMove(callbackFunction));
     109    else
     110        callbackFunction();
    142111}
    143112
    144113void WebCookieManagerProxy::getAllCookies(PAL::SessionID sessionID, CompletionHandler<void(Vector<Cookie>&&)>&& callbackFunction)
    145114{
    146     auto& networkProcess = processPool()->ensureNetworkProcess();
    147     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), WTFMove(callbackFunction));
     115    if (m_networkProcess)
     116        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), WTFMove(callbackFunction));
     117    else
     118        callbackFunction({ });
    148119}
    149120
    150121void WebCookieManagerProxy::getCookies(PAL::SessionID sessionID, const URL& url, CompletionHandler<void(Vector<Cookie>&&)>&& callbackFunction)
    151122{
    152     auto& networkProcess = processPool()->ensureNetworkProcess();
    153     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), WTFMove(callbackFunction));
     123    if (m_networkProcess)
     124        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), WTFMove(callbackFunction));
     125    else
     126        callbackFunction({ });
    154127}
    155128
    156129void WebCookieManagerProxy::startObservingCookieChanges(PAL::SessionID sessionID)
    157130{
    158     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges(sessionID));
     131    if (m_networkProcess)
     132        m_networkProcess->send(Messages::WebCookieManager::StartObservingCookieChanges(sessionID), 0);
    159133}
    160134
    161135void WebCookieManagerProxy::stopObservingCookieChanges(PAL::SessionID sessionID)
    162136{
    163     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges(sessionID));
     137    if (m_networkProcess)
     138        m_networkProcess->send(Messages::WebCookieManager::StopObservingCookieChanges(sessionID), 0);
    164139}
    165140
     
    212187void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(PAL::SessionID, HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& callbackFunction)
    213188{
    214 #if USE(SOUP)
    215     processPool()->setInitialHTTPCookieAcceptPolicy(policy);
    216 #endif
    217 
    218     auto& networkProcess = processPool()->ensureNetworkProcess();
    219     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), WTFMove(callbackFunction));
    220 }
    221 
    222 void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(PAL::SessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& callbackFunction)
    223 {
    224     auto& networkProcess = processPool()->ensureNetworkProcess();
    225     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(), WTFMove(callbackFunction));
     189    if (m_networkProcess)
     190        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), WTFMove(callbackFunction));
     191    else
     192        callbackFunction();
     193}
     194
     195void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(PAL::SessionID sessionID, CompletionHandler<void(HTTPCookieAcceptPolicy)>&& callbackFunction)
     196{
     197    if (m_networkProcess)
     198        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(sessionID), WTFMove(callbackFunction));
     199    else
     200        callbackFunction(HTTPCookieAcceptPolicy::Never);
    226201}
    227202
  • trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h

    r254931 r267608  
    5757typedef GenericCallback<const Vector<WebCore::Cookie>&> GetCookiesCallback;
    5858
    59 class WebCookieManagerProxy : public API::ObjectImpl<API::Object::Type::CookieManager>, public WebContextSupplement, private IPC::MessageReceiver {
     59class WebCookieManagerProxy : public API::ObjectImpl<API::Object::Type::CookieManager>, private IPC::MessageReceiver {
    6060public:
    61     static const char* supplementName();
    62 
    63     static Ref<WebCookieManagerProxy> create(WebProcessPool*);
     61    static Ref<WebCookieManagerProxy> create(NetworkProcessProxy& networkProcess) { return adoptRef(*new WebCookieManagerProxy(networkProcess)); }
    6462    virtual ~WebCookieManagerProxy();
    6563
     
    105103
    106104private:
    107     WebCookieManagerProxy(WebProcessPool*);
     105    WebCookieManagerProxy(NetworkProcessProxy&);
    108106
    109107    void cookiesDidChange(PAL::SessionID);
    110 
    111     // WebContextSupplement
    112     void processPoolDestroyed() override;
    113     void processDidClose(WebProcessProxy*) override;
    114     void processDidClose(NetworkProcessProxy*) override;
    115     void refWebContextSupplement() override;
    116     void derefWebContextSupplement() override;
    117108
    118109    // IPC::MessageReceiver
     
    126117    HashMap<PAL::SessionID, HashSet<Observer*>> m_cookieObservers;
    127118
     119    WeakPtr<NetworkProcessProxy> m_networkProcess;
    128120    WebCookieManagerProxyClient m_client;
    129121
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r267599 r267608  
    17471747
    17481748    send(Messages::WebPage::SetControlledByAutomation(controlled));
    1749     m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::SetSessionIsControlledByAutomation(m_websiteDataStore->sessionID(), m_controlledByAutomation));
     1749    websiteDataStore().networkProcess().send(Messages::NetworkProcess::SetSessionIsControlledByAutomation(m_websiteDataStore->sessionID(), m_controlledByAutomation), 0);
    17501750}
    17511751
     
    32083208{
    32093209#if ENABLE(APP_BOUND_DOMAINS) && !PLATFORM(MACCATALYST)
    3210     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    3211         if (!networkProcess->canSendMessage())
    3212             return;
    3213         networkProcess->send(Messages::NetworkProcess::DisableServiceWorkerEntitlement(), 0);
    3214     }
     3210    websiteDataStore().networkProcess().send(Messages::NetworkProcess::DisableServiceWorkerEntitlement(), 0);
    32153211#endif
    32163212}
     
    32213217    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    32223218    sendWithAsyncReply(Messages::WebPage::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { });
    3223     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    3224         if (!networkProcess->canSendMessage()) {
    3225             completionHandler();
    3226             return;
    3227         }
    3228         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { });
    3229     }
     3219    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::ClearServiceWorkerEntitlementOverride(), [callbackAggregator] { });
    32303220#else
    32313221    completionHandler();
     
    44214411
    44224412    auto storedCredentialsPolicy = m_canUseCredentialStorage ? WebCore::StoredCredentialsPolicy::Use : WebCore::StoredCredentialsPolicy::DoNotUse;
    4423     m_process->processPool().ensureNetworkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent(), storedCredentialsPolicy, isNavigatingToAppBoundDomain());
     4413    websiteDataStore().networkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent(), storedCredentialsPolicy, isNavigatingToAppBoundDomain());
    44244414}
    44254415
     
    47174707            URL requesterURL { URL(), requesterOrigin.toString() };
    47184708            if (!currentDomain.matches(requesterURL))
    4719                 m_process->processPool().didCommitCrossSiteLoadWithDataTransfer(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, navigationDataTransfer, m_identifier, m_webPageID);
     4709                m_websiteDataStore->networkProcess().didCommitCrossSiteLoadWithDataTransfer(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, navigationDataTransfer, m_identifier, m_webPageID);
    47204710        }
    47214711#endif
     
    47554745        if (auto& adClickAttribution = navigation->adClickAttribution()) {
    47564746            if (adClickAttribution->destination().matches(frame->url()))
    4757                 m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::StoreAdClickAttribution(m_websiteDataStore->sessionID(), *adClickAttribution));
     4747                websiteDataStore().networkProcess().send(Messages::NetworkProcess::StoreAdClickAttribution(m_websiteDataStore->sessionID(), *adClickAttribution), 0);
    47584748        }
    47594749    }
     
    53695359        return;
    53705360
    5371     m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::LogFrameNavigation(m_websiteDataStore->sessionID(), RegistrableDomain { targetURL }, RegistrableDomain { pageURL }, RegistrableDomain { sourceURL }, isRedirect, frame.isMainFrame(), MonotonicTime::now() - m_didFinishDocumentLoadForMainFrameTimestamp, wasPotentiallyInitiatedByUser));
     5361    websiteDataStore().networkProcess().send(Messages::NetworkProcess::LogFrameNavigation(m_websiteDataStore->sessionID(), RegistrableDomain { targetURL }, RegistrableDomain { pageURL }, RegistrableDomain { sourceURL }, isRedirect, frame.isMainFrame(), MonotonicTime::now() - m_didFinishDocumentLoadForMainFrameTimestamp, wasPotentiallyInitiatedByUser), 0);
    53725362}
    53735363#endif
     
    99949984void WebPageProxy::dumpAdClickAttribution(CompletionHandler<void(const String&)>&& completionHandler)
    99959985{
    9996     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    9997         if (!networkProcess->canSendMessage()) {
    9998             completionHandler(emptyString());
    9999             return;
    10000         }
    10001         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::DumpAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    10002     }
     9986    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::DumpAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    100039987}
    100049988
    100059989void WebPageProxy::clearAdClickAttribution(CompletionHandler<void()>&& completionHandler)
    100069990{
    10007     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    10008         if (!networkProcess->canSendMessage()) {
    10009             completionHandler();
    10010             return;
    10011         }
    10012         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::ClearAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    10013     } else
    10014         completionHandler();
     9991    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::ClearAdClickAttribution(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    100159992}
    100169993
    100179994void WebPageProxy::setAdClickAttributionOverrideTimerForTesting(bool value, CompletionHandler<void()>&& completionHandler)
    100189995{
    10019     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    10020         if (!networkProcess->canSendMessage()) {
    10021             completionHandler();
    10022             return;
    10023         }
    10024         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionOverrideTimerForTesting(m_websiteDataStore->sessionID(), value), WTFMove(completionHandler));
    10025     }
     9996    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionOverrideTimerForTesting(m_websiteDataStore->sessionID(), value), WTFMove(completionHandler));
    100269997}
    100279998
    100289999void WebPageProxy::setAdClickAttributionConversionURLForTesting(const URL& url, CompletionHandler<void()>&& completionHandler)
    1002910000{
    10030     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    10031         if (!networkProcess->canSendMessage()) {
    10032             completionHandler();
    10033             return;
    10034         }
    10035         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(m_websiteDataStore->sessionID(), url), WTFMove(completionHandler));
    10036     }
     10001    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SetAdClickAttributionConversionURLForTesting(m_websiteDataStore->sessionID(), url), WTFMove(completionHandler));
    1003710002}
    1003810003
    1003910004void WebPageProxy::markAdClickAttributionsAsExpiredForTesting(CompletionHandler<void()>&& completionHandler)
    1004010005{
    10041     if (auto* networkProcess = m_process->processPool().networkProcess()) {
    10042         if (!networkProcess->canSendMessage()) {
    10043             completionHandler();
    10044             return;
    10045         }
    10046         networkProcess->sendWithAsyncReply(Messages::NetworkProcess::MarkAdClickAttributionsAsExpiredForTesting(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    10047     }
     10006    websiteDataStore().networkProcess().sendWithAsyncReply(Messages::NetworkProcess::MarkAdClickAttributionsAsExpiredForTesting(m_websiteDataStore->sessionID()), WTFMove(completionHandler));
    1004810007}
    1004910008
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r267226 r267608  
    4646#include "LogInitialization.h"
    4747#include "Logging.h"
    48 #include "NetworkProcessConnectionInfo.h"
    4948#include "NetworkProcessCreationParameters.h"
    5049#include "NetworkProcessMessages.h"
     
    144143
    145144#define WEBPROCESSPOOL_RELEASE_LOG(channel, fmt, ...) RELEASE_LOG(channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__)
     145#define WEBPROCESSPOOL_RELEASE_LOG_STATIC(channel, fmt, ...) RELEASE_LOG(channel, "WebProcessPool::" fmt, ##__VA_ARGS__)
    146146#define WEBPROCESSPOOL_RELEASE_LOG_ERROR(channel, fmt, ...) RELEASE_LOG_ERROR(channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__)
    147147#define WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED(channel, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), channel, "%p - WebProcessPool::" fmt, this, ##__VA_ARGS__)
     148#define WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(channel, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), channel, "WebProcessPool::" fmt, ##__VA_ARGS__)
    148149
    149150namespace WebKit {
     
    233234}
    234235
     236Vector<String> WebProcessPool::urlSchemesWithCustomProtocolHandlers()
     237{
     238    return copyToVector(globalURLSchemesWithCustomProtocolHandlers());
     239}
     240
    235241WebProcessPool::WebProcessPool(API::ProcessPoolConfiguration& configuration)
    236242    : m_configuration(configuration.copy())
     
    240246    , m_downloadClient(makeUniqueRef<API::DownloadClient>())
    241247    , m_historyClient(makeUnique<API::LegacyContextHistoryClient>())
    242     , m_customProtocolManagerClient(makeUnique<API::CustomProtocolManagerClient>())
    243248    , m_visitedLinkStore(VisitedLinkStore::create())
    244249#if PLATFORM(MAC)
     
    268273    });
    269274
    270     if (!m_websiteDataStore && WebKit::WebsiteDataStore::defaultDataStoreExists())
    271         m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore();
    272 
    273275    for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes())
    274276        m_schemesToRegisterAsAlwaysRevalidated.add(scheme);
     
    286288
    287289    // NOTE: These sub-objects must be initialized after m_messageReceiverMap..
    288     addSupplement<WebCookieManagerProxy>();
    289290    addSupplement<WebGeolocationManagerProxy>();
    290291    addSupplement<WebNotificationManagerProxy>();
     
    343344#endif
    344345
    345     if (m_networkProcess)
    346         m_networkProcess->shutDownProcess();
    347 
    348346#if ENABLE(GAMEPAD)
    349347    if (!m_processesUsingGamepads.isEmpty())
     
    403401}
    404402
    405 void WebProcessPool::setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&& customProtocolManagerClient)
    406 {
    407 #if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
    408     if (!customProtocolManagerClient)
    409         m_customProtocolManagerClient = makeUnique<API::CustomProtocolManagerClient>();
    410     else
    411         m_customProtocolManagerClient = WTFMove(customProtocolManagerClient);
    412 #endif
    413 }
    414 
    415403void WebProcessPool::setCustomWebContentServiceBundleIdentifier(const String& customWebContentServiceBundleIdentifier)
    416404{
     
    422410}
    423411
    424 IPC::Connection* WebProcessPool::networkingProcessConnection()
    425 {
    426     return m_networkProcess->connection();
    427 }
    428 
    429412void WebProcessPool::languageChanged(void* context)
    430413{
     
    436419    sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged());
    437420#if USE(SOUP)
    438     if (m_networkProcess)
    439         m_networkProcess->send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0);
     421    WebsiteDataStore::defaultDataStore()->networkProcess().send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0);
    440422#endif
    441423}
     
    450432{
    451433    sendToAllProcesses(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical));
    452     sendToNetworkingProcess(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical));
     434    for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses())
     435        networkProcess->send(Messages::AuxiliaryProcess::DidReceiveMemoryPressureEvent(isCritical), 0);
    453436#if ENABLE(NETSCAPE_PLUGIN_API)
    454437    PluginProcessManager::singleton().sendMemoryPressureEvent(isCritical);
     
    475458}
    476459
    477 NetworkProcessProxy& WebProcessPool::ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore)
    478 {
    479     ASSERT(RunLoop::isMain());
    480    
    481     // FIXME: This is a temporary workaround for apps using WebKit API on non-main threads.
    482     // We should remove this once we enforce threading violation check on our APIs.
    483     // https://bugs.webkit.org/show_bug.cgi?id=200246.
    484     if (!RunLoop::isMain()) {
    485         callOnMainRunLoopAndWait([this, protectedThis = makeRef(*this)] {
    486             ensureNetworkProcess();
    487         });
    488         return *m_networkProcess;
    489     }
    490 
    491     if (m_networkProcess) {
    492         if (withWebsiteDataStore) {
    493             m_networkProcess->addSession(makeRef(*withWebsiteDataStore));
    494             withWebsiteDataStore->clearPendingCookies();
    495         }
    496         return *m_networkProcess;
    497     }
    498 
    499     auto networkProcess = makeUnique<NetworkProcessProxy>(*this);
    500 
    501     NetworkProcessCreationParameters parameters;
    502 
    503     if (m_websiteDataStore) {
    504         parameters.defaultDataStoreParameters.pendingCookies = copyToVector(m_websiteDataStore->pendingCookies());
    505         m_websiteDataStore->clearPendingCookies();
    506 #if PLATFORM(COCOA)
    507         parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationBundleIdentifier = m_websiteDataStore->configuration().sourceApplicationBundleIdentifier();
    508         parameters.defaultDataStoreParameters.networkSessionParameters.sourceApplicationSecondaryIdentifier = m_websiteDataStore->configuration().sourceApplicationSecondaryIdentifier();
    509 #endif
    510     }
    511 
    512     parameters.cacheModel = LegacyGlobalSettings::singleton().cacheModel();
    513 
    514     for (auto& scheme : globalURLSchemesWithCustomProtocolHandlers())
    515         parameters.urlSchemesRegisteredForCustomProtocols.append(scheme);
    516 
    517 #if PLATFORM(IOS_FAMILY)
    518     String cookieStorageDirectory = WebProcessPool::cookieStorageDirectory();
    519     if (!cookieStorageDirectory.isEmpty())
    520         SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle);
    521 
    522     String containerCachesDirectory = WebProcessPool::networkingCachesDirectory();
    523     if (!containerCachesDirectory.isEmpty())
    524         SandboxExtension::createHandleForReadWriteDirectory(containerCachesDirectory, parameters.containerCachesDirectoryExtensionHandle);
    525 
    526     String parentBundleDirectory = WebProcessPool::parentBundleDirectory();
    527     if (!parentBundleDirectory.isEmpty())
    528         SandboxExtension::createHandle(parentBundleDirectory, SandboxExtension::Type::ReadOnly, parameters.parentBundleDirectoryExtensionHandle);
    529 
    530 #if ENABLE(INDEXED_DATABASE)
    531     SandboxExtension::createHandleForTemporaryFile(emptyString(), SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.indexedDatabaseTempBlobDirectoryExtensionHandle);
    532 #endif
    533 #endif
    534 
    535     parameters.urlSchemesRegisteredAsSecure = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsSecure());
    536     parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsBypassingContentSecurityPolicy());
    537     parameters.urlSchemesRegisteredAsLocal = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsLocal());
    538     parameters.urlSchemesRegisteredAsNoAccess = copyToVector(LegacyGlobalSettings::singleton().schemesToRegisterAsNoAccess());
    539 
    540 #if ENABLE(INDEXED_DATABASE)
    541     // *********
    542     // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)
    543     // *********
    544     if (m_websiteDataStore)
    545         parameters.defaultDataStoreParameters.indexedDatabaseDirectory = m_websiteDataStore->resolvedIndexedDatabaseDirectory();
    546     else if (WebKit::WebsiteDataStore::defaultDataStoreExists())
    547         parameters.defaultDataStoreParameters.indexedDatabaseDirectory = WebKit::WebsiteDataStore::defaultDataStore()->parameters().indexedDatabaseDirectory;
    548    
    549     if (!parameters.defaultDataStoreParameters.indexedDatabaseDirectory.isEmpty()) {
    550         SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);
    551         networkProcess->createSymLinkForFileUpgrade(parameters.defaultDataStoreParameters.indexedDatabaseDirectory);
    552     }
    553 #endif
    554 
    555 #if ENABLE(SERVICE_WORKER)
    556     if (m_websiteDataStore)
    557         parameters.serviceWorkerRegistrationDirectory = m_websiteDataStore->resolvedServiceWorkerRegistrationDirectory();
    558     if (!parameters.serviceWorkerRegistrationDirectory)
    559         parameters.serviceWorkerRegistrationDirectory =  WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory();
    560     SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    561 #endif
    562 
    563     auto localStorageDirectory = m_websiteDataStore ? m_websiteDataStore->resolvedLocalStorageDirectory() : nullString();
    564     if (!localStorageDirectory)
    565         localStorageDirectory = WebKit::WebsiteDataStore::defaultLocalStorageDirectory();
    566     parameters.defaultDataStoreParameters.localStorageDirectory = localStorageDirectory;
    567     SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, parameters.defaultDataStoreParameters.localStorageDirectoryExtensionHandle);
    568 
    569     auto cacheStorageDirectory = m_websiteDataStore ? m_websiteDataStore->cacheStorageDirectory() : nullString();
    570     if (!cacheStorageDirectory.isEmpty()) {
    571         SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory, parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);
    572         parameters.defaultDataStoreParameters.cacheStorageDirectory = WTFMove(cacheStorageDirectory);
    573     }
    574 
    575     String resourceLoadStatisticsDirectory;
    576     SandboxExtension::Handle resourceLoadStatisticsDirectoryExtensionHandle;
    577     if (m_websiteDataStore)
    578         resourceLoadStatisticsDirectory = m_websiteDataStore->resolvedResourceLoadStatisticsDirectory();
    579     else if (WebKit::WebsiteDataStore::defaultDataStoreExists())
    580         resourceLoadStatisticsDirectory = WebKit::WebsiteDataStore::defaultDataStore()->parameters().networkSessionParameters.resourceLoadStatisticsParameters.directory;
    581    
    582     if (!resourceLoadStatisticsDirectory.isEmpty())
    583         SandboxExtension::createHandleForReadWriteDirectory(resourceLoadStatisticsDirectory, resourceLoadStatisticsDirectoryExtensionHandle);
    584 
    585     bool enableResourceLoadStatistics = false;
    586     bool enableResourceLoadStatisticsLogTestingEvent = false;
    587     bool shouldIncludeLocalhost = true;
    588     bool enableResourceLoadStatisticsDebugMode = false;
    589 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    590     WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode = WebCore::ThirdPartyCookieBlockingMode::All;
    591     WebCore::SameSiteStrictEnforcementEnabled sameSiteStrictEnforcementEnabled = WebCore::SameSiteStrictEnforcementEnabled::No;
    592 #endif
    593     WebCore::FirstPartyWebsiteDataRemovalMode firstPartyWebsiteDataRemovalMode = WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies;
    594     WebCore::RegistrableDomain standaloneApplicationDomain;
    595     HashSet<WebCore::RegistrableDomain> appBoundDomains;
    596     WebCore::RegistrableDomain manualPrevalentResource;
    597 
    598 #if PLATFORM(COCOA)
    599     m_tccPreferenceEnabled = doesAppHaveITPEnabled();
    600     if (withWebsiteDataStore && !withWebsiteDataStore->isItpStateExplicitlySet()) {
    601         enableResourceLoadStatistics = m_tccPreferenceEnabled;
    602         withWebsiteDataStore->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);
    603     } else if (m_websiteDataStore && !m_websiteDataStore->isItpStateExplicitlySet()) {
    604         enableResourceLoadStatistics = m_tccPreferenceEnabled;
    605         m_websiteDataStore->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);
    606     } else if (WebsiteDataStore::defaultDataStoreExists() && !WebsiteDataStore::defaultDataStore()->isItpStateExplicitlySet()) {
    607         enableResourceLoadStatistics = m_tccPreferenceEnabled;
    608         WebsiteDataStore::defaultDataStore()->setResourceLoadStatisticsEnabled(enableResourceLoadStatistics);
    609     } else
    610         enableResourceLoadStatistics = m_tccPreferenceEnabled;
    611 #endif
    612 
    613     if (withWebsiteDataStore) {
    614         enableResourceLoadStatistics = withWebsiteDataStore->resourceLoadStatisticsEnabled();
    615 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    616         enableResourceLoadStatisticsLogTestingEvent = withWebsiteDataStore->hasStatisticsTestingCallback();
    617 #endif
    618         if (enableResourceLoadStatistics) {
    619             auto networkSessionParameters = withWebsiteDataStore->parameters().networkSessionParameters;
    620             shouldIncludeLocalhost = networkSessionParameters.resourceLoadStatisticsParameters.shouldIncludeLocalhost;
    621             enableResourceLoadStatisticsDebugMode = networkSessionParameters.resourceLoadStatisticsParameters.enableDebugMode;
    622 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    623             thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode;
    624             sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled;
    625 #endif
    626             firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode;
    627             standaloneApplicationDomain = networkSessionParameters.resourceLoadStatisticsParameters.standaloneApplicationDomain;
    628             appBoundDomains = networkSessionParameters.resourceLoadStatisticsParameters.appBoundDomains;
    629             manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsParameters.manualPrevalentResource;
    630         }
    631 
    632         parameters.defaultDataStoreParameters.perOriginStorageQuota = withWebsiteDataStore->perOriginStorageQuota();
    633         parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota = withWebsiteDataStore->perThirdPartyOriginStorageQuota();
    634        
    635         const auto& networkCacheDirectory = withWebsiteDataStore->resolvedNetworkCacheDirectory();
    636         if (!networkCacheDirectory.isNull()) {
    637             parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;
    638             SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);
    639         }
    640 
    641         const auto& hstsStorageDirectory = withWebsiteDataStore->resolvedHSTSStorageDirectory();
    642         if (!hstsStorageDirectory.isNull()) {
    643             parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;
    644             SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);
    645         }
    646     } else if (m_websiteDataStore) {
    647         enableResourceLoadStatistics = m_websiteDataStore->resourceLoadStatisticsEnabled();
    648 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    649         enableResourceLoadStatisticsLogTestingEvent = m_websiteDataStore->hasStatisticsTestingCallback();
    650 #endif
    651         if (enableResourceLoadStatistics) {
    652             auto networkSessionParameters = m_websiteDataStore->parameters().networkSessionParameters;
    653             shouldIncludeLocalhost = networkSessionParameters.resourceLoadStatisticsParameters.shouldIncludeLocalhost;
    654             enableResourceLoadStatisticsDebugMode = networkSessionParameters.resourceLoadStatisticsParameters.enableDebugMode;
    655 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    656             thirdPartyCookieBlockingMode = networkSessionParameters.resourceLoadStatisticsParameters.thirdPartyCookieBlockingMode;
    657             sameSiteStrictEnforcementEnabled = networkSessionParameters.resourceLoadStatisticsParameters.sameSiteStrictEnforcementEnabled;
    658 #endif
    659             firstPartyWebsiteDataRemovalMode = networkSessionParameters.resourceLoadStatisticsParameters.firstPartyWebsiteDataRemovalMode;
    660             standaloneApplicationDomain = networkSessionParameters.resourceLoadStatisticsParameters.standaloneApplicationDomain;
    661             appBoundDomains = networkSessionParameters.resourceLoadStatisticsParameters.appBoundDomains;
    662             manualPrevalentResource = networkSessionParameters.resourceLoadStatisticsParameters.manualPrevalentResource;
    663         }
    664 
    665         parameters.defaultDataStoreParameters.perOriginStorageQuota = m_websiteDataStore->perOriginStorageQuota();
    666         parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota = m_websiteDataStore->perThirdPartyOriginStorageQuota();
    667 
    668         const auto& networkCacheDirectory = m_websiteDataStore->resolvedNetworkCacheDirectory();
    669         if (!networkCacheDirectory.isNull()) {
    670             parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;
    671             SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);
    672         }
    673 
    674         const auto& hstsStorageDirectory = m_websiteDataStore->resolvedHSTSStorageDirectory();
    675         if (!hstsStorageDirectory.isNull()) {
    676             parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;
    677             SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);
    678         }
    679     } else {
    680         if (WebsiteDataStore::defaultDataStoreExists())
    681             enableResourceLoadStatistics = WebsiteDataStore::defaultDataStore()->resourceLoadStatisticsEnabled();
    682         auto networkCacheDirectory = WebsiteDataStore::defaultNetworkCacheDirectory();
    683         parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;
    684         SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);
    685     }
    686 
    687 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
    688     if (WebsiteDataStore::http3Enabled()) {
    689         parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory = WebsiteDataStore::defaultAlternativeServicesDirectory();
    690         if (!parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory.isEmpty())
    691             SandboxExtension::createHandleForReadWriteDirectory(parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectory, parameters.defaultDataStoreParameters.networkSessionParameters.alternativeServiceDirectoryExtensionHandle);
    692         parameters.defaultDataStoreParameters.networkSessionParameters.http3Enabled = true;
    693     }
    694 #endif
    695     bool isItpStateExplicitlySet = false;
    696     parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsParameters = ResourceLoadStatisticsParameters {
    697         WTFMove(resourceLoadStatisticsDirectory),
    698         WTFMove(resourceLoadStatisticsDirectoryExtensionHandle),
    699         enableResourceLoadStatistics,
    700         isItpStateExplicitlySet,
    701         enableResourceLoadStatisticsLogTestingEvent,
    702         shouldIncludeLocalhost,
    703         enableResourceLoadStatisticsDebugMode,
    704 #if ENABLE(RESOURCE_LOAD_STATISTICS)
    705         thirdPartyCookieBlockingMode,
    706         sameSiteStrictEnforcementEnabled,
    707 #endif
    708         firstPartyWebsiteDataRemovalMode,
    709         standaloneApplicationDomain,
    710         appBoundDomains,
    711         manualPrevalentResource,
    712     };
    713 
    714     // Add any platform specific parameters
    715     platformInitializeNetworkProcess(parameters);
    716 
    717     // Initialize the network process.
    718     networkProcess->send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);
    719 
    720 #if PLATFORM(COCOA)
    721     networkProcess->send(Messages::NetworkProcess::SetQOS(networkProcessLatencyQOS(), networkProcessThroughputQOS()), 0);
    722 #endif
    723 
    724     networkProcess->updateProcessAssertion();
    725 
    726     if (withWebsiteDataStore) {
    727         networkProcess->addSession(makeRef(*withWebsiteDataStore));
    728         withWebsiteDataStore->clearPendingCookies();
    729     }
    730 
    731     // Make sure the network process knows about all the sessions that have been registered before it started.
    732     for (auto& sessionID : m_sessionToPageIDsMap.keys()) {
    733         if (auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID))
    734             networkProcess->addSession(*websiteDataStore);
    735     }
    736 
    737     m_networkProcess = WTFMove(networkProcess);
    738     return *m_networkProcess;
    739 }
    740 
    741460void WebProcessPool::networkProcessCrashed(NetworkProcessProxy& networkProcessProxy)
    742461{
    743     ASSERT(m_networkProcess);
    744     ASSERT(&networkProcessProxy == m_networkProcess.get());
    745 
    746462    for (auto& supplement : m_supplements.values())
    747463        supplement->processDidClose(&networkProcessProxy);
     
    752468        m_automationSession->terminate();
    753469
    754     // Leave the process proxy around during client call, so that the client could query the process identifier.
    755     m_networkProcess = nullptr;
    756 
    757470    terminateServiceWorkers();
    758471}
     
    763476    m_client.serviceWorkerProcessDidCrash(this, proxy.processIdentifier());
    764477#endif
    765 }
    766 
    767 void WebProcessPool::getNetworkProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply)
    768 {
    769     ensureNetworkProcess();
    770     m_networkProcess->getNetworkProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
    771         if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
    772             WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "getNetworkProcessConnection: Failed first attempt, retrying");
    773             ensureNetworkProcess();
    774             m_networkProcess->getNetworkProcessConnection(*webProcessProxy, WTFMove(reply));
    775             return;
    776         }
    777         reply(connectionInfo);
    778     });
    779478}
    780479
     
    802501#endif
    803502
     503bool WebProcessPool::s_useSeparateServiceWorkerProcess = false;
     504
    804505#if ENABLE(SERVICE_WORKER)
    805506void WebProcessPool::establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy& proxy, RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
    806507{
    807     ASSERT_UNUSED(proxy, &proxy == m_networkProcess.get());
    808 
    809     auto* websiteDataStore = WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID);
    810 
    811     if (!websiteDataStore) {
    812         if (!m_websiteDataStore)
    813             m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore().ptr();
    814         websiteDataStore = m_websiteDataStore.get();
    815     }
     508    auto* websiteDataStore = WebsiteDataStore::existingDataStoreForSessionID(sessionID);
     509    if (!websiteDataStore)
     510        websiteDataStore = WebsiteDataStore::defaultDataStore().ptr();
     511    if (!processPools().size())
     512        static NeverDestroyed<Ref<WebProcessPool>> serviceWorkerProcessPool(WebProcessPool::create(API::ProcessPoolConfiguration::create().get()));
     513
     514    // Arbitrarily choose the first process pool to host the service worker process.
     515    auto* processPool = processPools()[0];
     516    ASSERT(processPool);
    816517
    817518    WebProcessProxy* serviceWorkerProcessProxy { nullptr };
    818     if (!m_useSeparateServiceWorkerProcess) {
    819         for (auto& process : m_processes) {
    820             if (process == m_prewarmedProcess || process->isDummyProcessProxy())
     519
     520    if (!s_useSeparateServiceWorkerProcess) {
     521        for (auto& process : processPool->m_processes) {
     522            if (process == processPool->m_prewarmedProcess || process->isDummyProcessProxy())
    821523                continue;
    822524            if (&process->websiteDataStore() != websiteDataStore)
     
    826528
    827529            serviceWorkerProcessProxy = process.get();
    828             serviceWorkerProcessProxy->enableServiceWorkers(userContentControllerIdentifierForServiceWorkers());
    829 
    830             WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess reusing an existing web process (process=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());
     530            serviceWorkerProcessProxy->enableServiceWorkers(processPool->userContentControllerIdentifierForServiceWorkers());
     531
     532            WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess reusing an existing web process (process=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());
    831533            break;
    832534        }
     
    834536
    835537    if (!serviceWorkerProcessProxy) {
    836         auto newProcessProxy = WebProcessProxy::createForServiceWorkers(*this, WTFMove(registrableDomain), *websiteDataStore);
     538        auto newProcessProxy = WebProcessProxy::createForServiceWorkers(*processPool, WTFMove(registrableDomain), *websiteDataStore);
    837539        serviceWorkerProcessProxy = newProcessProxy.ptr();
    838540
    839         WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess creating a new service worker process (proces=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());
    840 
    841         initializeNewWebProcess(newProcessProxy, websiteDataStore);
    842         m_processes.append(WTFMove(newProcessProxy));
    843     }
    844 
    845     ASSERT(!m_serviceWorkerProcesses.contains(*serviceWorkerProcessProxy));
    846     m_serviceWorkerProcesses.add(*serviceWorkerProcessProxy);
    847 
    848     serviceWorkerProcessProxy->establishServiceWorkerContext(m_serviceWorkerPreferences ? m_serviceWorkerPreferences.value() : m_defaultPageGroup->preferences().store(), WTFMove(completionHandler));
    849     if (!m_serviceWorkerUserAgent.isNull())
    850         serviceWorkerProcessProxy->setServiceWorkerUserAgent(m_serviceWorkerUserAgent);
     541        WEBPROCESSPOOL_RELEASE_LOG_IF_ALLOWED_STATIC(ServiceWorker, "establishWorkerContextConnectionToNetworkProcess creating a new service worker process (proces=%p, PID=%d)", serviceWorkerProcessProxy, serviceWorkerProcessProxy->processIdentifier());
     542
     543        processPool->initializeNewWebProcess(newProcessProxy, websiteDataStore);
     544        processPool->m_processes.append(WTFMove(newProcessProxy));
     545    }
     546
     547    ASSERT(!serviceWorkerProcesses().contains(*serviceWorkerProcessProxy));
     548    serviceWorkerProcesses().add(*serviceWorkerProcessProxy);
     549
     550    serviceWorkerProcessProxy->establishServiceWorkerContext(processPool->m_serviceWorkerPreferences ? processPool->m_serviceWorkerPreferences.value() : processPool->m_defaultPageGroup->preferences().store(), WTFMove(completionHandler));
     551    if (!processPool->m_serviceWorkerUserAgent.isNull())
     552        serviceWorkerProcessProxy->setServiceWorkerUserAgent(processPool->m_serviceWorkerUserAgent);
    851553}
    852554
    853555void WebProcessPool::removeFromServiceWorkerProcesses(WebProcessProxy& process)
    854556{
    855     ASSERT(m_serviceWorkerProcesses.contains(process));
    856     m_serviceWorkerProcesses.remove(process);
     557    ASSERT(serviceWorkerProcesses().contains(process));
     558    serviceWorkerProcesses().remove(process);
    857559}
    858560#endif
     
    923625    // In platforms using Bubblewrap for sandboxing, prewarmed process is launched using the WebProcessPool primary WebsiteDataStore,
    924626    // so we don't use it in case of using a different WebsiteDataStore.
    925     if (m_sandboxEnabled && m_websiteDataStore && m_websiteDataStore.get() != &websiteDataStore)
     627    if (m_sandboxEnabled)
    926628        return nullptr;
    927629#endif
     
    1033735    });
    1034736
    1035     ensureNetworkProcess();
    1036 
    1037737    WebProcessCreationParameters parameters;
    1038738
     
    1199899
    1200900    m_connectionClient.didCreateConnection(this, process->webConnection());
    1201 
    1202     if (m_websiteDataStore)
    1203         m_websiteDataStore->didCreateNetworkProcess();
    1204901}
    1205902
     
    1296993        // We try to avoid creating the default data store as long as possible.
    1297994        // But if there is an attempt to create a web page without any specified data store, then we have to create it.
    1298         if (!m_websiteDataStore)
    1299             m_websiteDataStore = WebKit::WebsiteDataStore::defaultDataStore().ptr();
    1300 
    1301         pageConfiguration->setWebsiteDataStore(m_websiteDataStore.get());
     995        pageConfiguration->setWebsiteDataStore(WebKit::WebsiteDataStore::defaultDataStore().ptr());
    1302996    }
    1303997
     
    13301024    if (!m_serviceWorkerPreferences) {
    13311025        m_serviceWorkerPreferences = page->preferencesStore();
    1332         for (auto& serviceWorkerProcess : m_serviceWorkerProcesses)
     1026        for (auto& serviceWorkerProcess : serviceWorkerProcesses())
    13331027            serviceWorkerProcess.updateServiceWorkerPreferencesStore(*m_serviceWorkerPreferences);
    13341028    }
     
    13571051        return;
    13581052    m_serviceWorkerUserAgent = userAgent;
    1359     for (auto& serviceWorkerProcess : m_serviceWorkerProcesses)
     1053    for (auto& serviceWorkerProcess : serviceWorkerProcesses())
    13601054        serviceWorkerProcess.setServiceWorkerUserAgent(m_serviceWorkerUserAgent);
    13611055}
     
    13661060    auto result = m_sessionToPageIDsMap.add(dataStore.sessionID(), HashSet<WebPageProxyIdentifier>()).iterator->value.add(pageID);
    13671061    ASSERT_UNUSED(result, result.isNewEntry);
    1368 
    1369     auto sessionID = dataStore.sessionID();
    1370     if (sessionID != PAL::SessionID::defaultSessionID()) {
    1371         ASSERT(!sessionID.isEphemeral() || dataStore.parameters().networkSessionParameters.sessionID == sessionID);
    1372         if (m_networkProcess) {
    1373             m_networkProcess->addSession(makeRef(dataStore));
    1374             dataStore.clearPendingCookies();
    1375         }
    1376     }
    13771062}
    13781063
     
    14021087{
    14031088    auto& downloadProxy = createDownloadProxy(dataStore, request, initiatingPage, { });
    1404     PAL::SessionID sessionID = dataStore.sessionID();
    14051089
    14061090    Optional<NavigatingToAppBoundDomain> isAppBound = NavigatingToAppBoundDomain::No;
     
    14121096    }
    14131097
    1414     if (networkProcess()) {
    1415         ResourceRequest updatedRequest(request);
    1416         // Request's firstPartyForCookies will be used as Original URL of the download request.
    1417         // We set the value to top level document's URL.
    1418         if (initiatingPage) {
    1419             URL initiatingPageURL = URL { URL { }, initiatingPage->pageLoadState().url() };
    1420             updatedRequest.setFirstPartyForCookies(initiatingPageURL);
    1421             updatedRequest.setIsSameSite(areRegistrableDomainsEqual(initiatingPageURL, request.url()));
    1422             if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
    1423                 updatedRequest.setHTTPUserAgent(initiatingPage->userAgentForURL(request.url()));
    1424         } else {
    1425             updatedRequest.setFirstPartyForCookies(URL());
    1426             updatedRequest.setIsSameSite(false);
    1427             if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
    1428                 updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent());
    1429         }
    1430         updatedRequest.setIsTopSite(false);
    1431         networkProcess()->send(Messages::NetworkProcess::DownloadRequest(sessionID, downloadProxy.downloadID(), updatedRequest, isAppBound, suggestedFilename), 0);
    1432         return downloadProxy;
    1433     }
     1098    ResourceRequest updatedRequest(request);
     1099    // Request's firstPartyForCookies will be used as Original URL of the download request.
     1100    // We set the value to top level document's URL.
     1101    if (initiatingPage) {
     1102        URL initiatingPageURL = URL { URL { }, initiatingPage->pageLoadState().url() };
     1103        updatedRequest.setFirstPartyForCookies(initiatingPageURL);
     1104        updatedRequest.setIsSameSite(areRegistrableDomainsEqual(initiatingPageURL, request.url()));
     1105        if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
     1106            updatedRequest.setHTTPUserAgent(initiatingPage->userAgentForURL(request.url()));
     1107    } else {
     1108        updatedRequest.setFirstPartyForCookies(URL());
     1109        updatedRequest.setIsSameSite(false);
     1110        if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
     1111            updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent());
     1112    }
     1113    updatedRequest.setIsTopSite(false);
     1114    dataStore.networkProcess().send(Messages::NetworkProcess::DownloadRequest(dataStore.sessionID(), downloadProxy.downloadID(), updatedRequest, isAppBound, suggestedFilename), 0);
    14341115
    14351116    return downloadProxy;
     
    14391120{
    14401121    auto& downloadProxy = createDownloadProxy(dataStore, ResourceRequest(), initiatingPage, { });
    1441     PAL::SessionID sessionID = dataStore.sessionID();
    14421122
    14431123    SandboxExtension::Handle sandboxExtensionHandle;
     
    14451125        SandboxExtension::createHandle(path, SandboxExtension::Type::ReadWrite, sandboxExtensionHandle);
    14461126
    1447     if (networkProcess()) {
    1448         networkProcess()->send(Messages::NetworkProcess::ResumeDownload(sessionID, downloadProxy.downloadID(), resumeData.dataReference(), path, sandboxExtensionHandle), 0);
    1449         return downloadProxy;
    1450     }
    1451 
     1127    dataStore.networkProcess().send(Messages::NetworkProcess::ResumeDownload(dataStore.sessionID(), downloadProxy.downloadID(), resumeData.dataReference(), path, sandboxExtensionHandle), 0);
    14521128    return downloadProxy;
    14531129}
     
    15181194#endif // ENABLE(NETSCAPE_PLUGIN_API)
    15191195
    1520 ProcessID WebProcessPool::networkProcessIdentifier()
    1521 {
    1522     return m_networkProcess ? m_networkProcess->processIdentifier() : 0;
    1523 }
    1524 
    15251196ProcessID WebProcessPool::prewarmedProcessIdentifier()
    15261197{
     
    15591230    LegacyGlobalSettings::singleton().registerURLSchemeAsSecure(urlScheme);
    15601231    sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsSecure(urlScheme));
    1561     sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsSecure(urlScheme));
     1232    WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) {
     1233        dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsSecure(urlScheme), 0);
     1234    });
    15621235}
    15631236
     
    15661239    LegacyGlobalSettings::singleton().registerURLSchemeAsBypassingContentSecurityPolicy(urlScheme);
    15671240    sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme));
    1568     sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme));
     1241    WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) {
     1242        dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsBypassingContentSecurityPolicy(urlScheme), 0);
     1243    });
    15691244}
    15701245
     
    15791254    LegacyGlobalSettings::singleton().registerURLSchemeAsLocal(urlScheme);
    15801255    sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsLocal(urlScheme));
    1581     sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsLocal(urlScheme));
     1256    WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) {
     1257        dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsLocal(urlScheme), 0);
     1258    });
    15821259}
    15831260
     
    15861263    LegacyGlobalSettings::singleton().registerURLSchemeAsNoAccess(urlScheme);
    15871264    sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsNoAccess(urlScheme));
    1588     sendToNetworkingProcess(Messages::NetworkProcess::RegisterURLSchemeAsNoAccess(urlScheme));
     1265    WebsiteDataStore::forEachWebsiteDataStore([urlScheme] (WebsiteDataStore& dataStore) {
     1266        dataStore.networkProcess().send(Messages::NetworkProcess::RegisterURLSchemeAsNoAccess(urlScheme), 0);
     1267    });
    15891268}
    15901269
     
    16071286
    16081287    globalURLSchemesWithCustomProtocolHandlers().add(urlScheme);
    1609     for (auto* processPool : allProcessPools()) {
    1610         if (auto* networkProcess = processPool->networkProcess())
    1611             networkProcess->registerSchemeForLegacyCustomProtocol(urlScheme);
    1612     }
     1288    for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses())
     1289        networkProcess->registerSchemeForLegacyCustomProtocol(urlScheme);
    16131290}
    16141291
     
    16191296
    16201297    globalURLSchemesWithCustomProtocolHandlers().remove(urlScheme);
    1621     for (auto* processPool : allProcessPools()) {
    1622         if (auto* networkProcess = processPool->networkProcess())
    1623             networkProcess->unregisterSchemeForLegacyCustomProtocol(urlScheme);
    1624     }
     1298    for (auto networkProcess : NetworkProcessProxy::allNetworkProcesses())
     1299        networkProcess->unregisterSchemeForLegacyCustomProtocol(urlScheme);
    16251300}
    16261301
     
    16561331    sendToAllProcesses(Messages::WebProcess::SetCacheModel(cacheModel));
    16571332
    1658     if (m_networkProcess)
    1659         m_networkProcess->send(Messages::NetworkProcess::SetCacheModel(cacheModel), 0);
     1333    WebsiteDataStore::forEachWebsiteDataStore([cacheModel] (WebsiteDataStore& dataStore) {
     1334        dataStore.networkProcess().send(Messages::NetworkProcess::SetCacheModel(cacheModel), 0);
     1335    });
    16601336}
    16611337
     
    16641340    updateBackForwardCacheCapacity();
    16651341
    1666     if (m_networkProcess)
    1667         m_networkProcess->sendSync(Messages::NetworkProcess::SetCacheModelSynchronouslyForTesting(cacheModel), { }, { });
     1342    WebsiteDataStore::forEachWebsiteDataStore([cacheModel] (WebsiteDataStore& dataStore) {
     1343        dataStore.networkProcess().sendSync(Messages::NetworkProcess::SetCacheModelSynchronouslyForTesting(cacheModel), { }, 0);
     1344    });
    16681345}
    16691346
     
    16751352DownloadProxy& WebProcessPool::createDownloadProxy(WebsiteDataStore& dataStore, const ResourceRequest& request, WebPageProxy* originatingPage, const FrameInfoData& frameInfo)
    16761353{
    1677     return ensureNetworkProcess(&dataStore).createDownloadProxy(dataStore, request, frameInfo, originatingPage);
    1678 }
    1679 
    1680 void WebProcessPool::synthesizeAppIsBackground(bool background)
    1681 {
    1682     ensureNetworkProcess().synthesizeAppIsBackground(background);
     1354    return dataStore.networkProcess().createDownloadProxy(dataStore, *this, request, frameInfo, originatingPage);
    16831355}
    16841356
     
    17511423}
    17521424
    1753 template<typename T, typename U>
    1754 void WebProcessPool::sendSyncToNetworkingProcess(T&& message, U&& reply)
    1755 {
    1756     if (m_networkProcess && m_networkProcess->canSendMessage())
    1757         m_networkProcess->sendSync(std::forward<T>(message), std::forward<U>(reply), 0);
    1758 }
    1759 
    1760 void WebProcessPool::clearCachedCredentials(const PAL::SessionID& sessionID)
    1761 {
    1762     if (m_networkProcess)
    1763         m_networkProcess->send(Messages::NetworkProcess::ClearCachedCredentials(sessionID), 0);
    1764 }
    1765 
    1766 void WebProcessPool::terminateNetworkProcess()
    1767 {
    1768     terminateServiceWorkers();
    1769 
    1770     if (!m_networkProcess)
    1771         return;
    1772    
    1773     m_networkProcess->terminate();
    1774     m_networkProcess = nullptr;
    1775 }
    1776 
    17771425void WebProcessPool::terminateAllWebContentProcesses()
    17781426{
     
    17821430}
    17831431
    1784 void WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)
    1785 {
    1786     if (!m_networkProcess)
    1787         return completionHandler();
    1788 
    1789     m_networkProcess->sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler));
    1790 }
    1791 
    1792 void WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting()
    1793 {
    1794     if (m_networkProcess)
    1795         m_networkProcess->sendProcessWillSuspendImminentlyForTesting();
    1796 }
    1797 
    1798 void WebProcessPool::sendNetworkProcessDidResume()
    1799 {
    1800     if (m_networkProcess)
    1801         m_networkProcess->sendProcessDidResume();
    1802 }
    1803 
    18041432void WebProcessPool::terminateServiceWorkers()
    18051433{
    18061434#if ENABLE(SERVICE_WORKER)
    18071435    auto protectedThis = makeRef(*this);
    1808     while (m_serviceWorkerProcesses.computeSize())
    1809         m_serviceWorkerProcesses.begin()->disableServiceWorkers();
    1810 #endif
    1811 }
    1812 
    1813 void WebProcessPool::flushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler)
    1814 {
    1815     ensureNetworkProcess().flushCookies(sessionID, WTFMove(completionHandler));
     1436    while (serviceWorkerProcesses().computeSize())
     1437        serviceWorkerProcesses().begin()->disableServiceWorkers();
     1438#endif
    18161439}
    18171440
     
    20901713}
    20911714
     1715WeakHashSet<WebProcessProxy>& WebProcessPool::serviceWorkerProcesses()
     1716{
     1717    static NeverDestroyed<WeakHashSet<WebProcessProxy>> processes;
     1718    return processes;
     1719}
     1720
    20921721void WebProcessPool::updateProcessAssertions()
    20931722{
    2094     ensureNetworkProcess().updateProcessAssertion();
     1723    WebsiteDataStore::forEachWebsiteDataStore([] (WebsiteDataStore& dataStore) {
     1724        dataStore.networkProcess().updateProcessAssertion();
     1725    });
    20951726#if ENABLE(SERVICE_WORKER)
    20961727    // Check on next run loop since the web process proxy tokens are probably being updated.
    2097     callOnMainRunLoop([this, weakThis = makeWeakPtr(this)] {
    2098         if (!weakThis)
    2099             return;
    2100         for (auto& serviceWorkerProcess : m_serviceWorkerProcesses)
     1728    callOnMainRunLoop([] {
     1729        for (auto& serviceWorkerProcess : serviceWorkerProcesses())
    21011730            serviceWorkerProcess.updateServiceWorkerProcessAssertion();
    21021731    });
     
    21081737#if ENABLE(SERVICE_WORKER)
    21091738    // FIXME: This is inefficient.
    2110     return WTF::anyOf(m_serviceWorkerProcesses, [pageID](auto& process) {
     1739    return WTF::anyOf(serviceWorkerProcesses(), [pageID](auto& process) {
    21111740        return process.hasServiceWorkerPageProxy(pageID);
    21121741    });
     
    23301959
    23311960#if ENABLE(RESOURCE_LOAD_STATISTICS)
    2332 void WebProcessPool::didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, WebPageProxyIdentifier webPageProxyID, PageIdentifier webPageID)
    2333 {
    2334     if (!m_networkProcess)
    2335         return;
    2336 
    2337     m_networkProcess->didCommitCrossSiteLoadWithDataTransfer(sessionID, fromDomain, toDomain, navigationDataTransfer, webPageProxyID, webPageID);
    2338 }
    2339 
    23401961void WebProcessPool::setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&& domains)
    23411962{
     
    23882009void WebProcessPool::setUseSeparateServiceWorkerProcess(bool useSeparateServiceWorkerProcess)
    23892010{
    2390     if (m_useSeparateServiceWorkerProcess == useSeparateServiceWorkerProcess)
     2011    if (s_useSeparateServiceWorkerProcess == useSeparateServiceWorkerProcess)
    23912012        return;
    23922013
    2393     WEBPROCESSPOOL_RELEASE_LOG(ServiceWorker, "setUseSeparateServiceWorkerProcess: (useSeparateServiceWorkerProcess=%d)", useSeparateServiceWorkerProcess);
    2394 
    2395     m_useSeparateServiceWorkerProcess = useSeparateServiceWorkerProcess;
    2396     terminateServiceWorkers();
    2397     terminateNetworkProcess();
     2014    WEBPROCESSPOOL_RELEASE_LOG_STATIC(ServiceWorker, "setUseSeparateServiceWorkerProcess: (useSeparateServiceWorkerProcess=%d)", useSeparateServiceWorkerProcess);
     2015
     2016    s_useSeparateServiceWorkerProcess = useSeparateServiceWorkerProcess;
     2017    for (auto* processPool : WebProcessPool::allProcessPools())
     2018        processPool->terminateServiceWorkers();
    23982019}
    23992020
     
    24012022bool WebProcessPool::hasServiceWorkerForegroundActivityForTesting() const
    24022023{
    2403     return WTF::anyOf(m_serviceWorkerProcesses, [](auto& process) {
     2024    return WTF::anyOf(serviceWorkerProcesses(), [](auto& process) {
    24042025        return process.hasServiceWorkerForegroundActivityForTesting();
    24052026    });
     
    24082029bool WebProcessPool::hasServiceWorkerBackgroundActivityForTesting() const
    24092030{
    2410     return WTF::anyOf(m_serviceWorkerProcesses, [](auto& process) {
     2031    return WTF::anyOf(serviceWorkerProcesses(), [](auto& process) {
    24112032        return process.hasServiceWorkerBackgroundActivityForTesting();
    24122033    });
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r267534 r267608  
    7878namespace API {
    7979class AutomationClient;
    80 class CustomProtocolManagerClient;
    8180class DownloadClient;
    8281class HTTPCookieStore;
     
    177176    void setDownloadClient(UniqueRef<API::DownloadClient>&&);
    178177    void setAutomationClient(std::unique_ptr<API::AutomationClient>&&);
    179     void setLegacyCustomProtocolManagerClient(std::unique_ptr<API::CustomProtocolManagerClient>&&);
    180178
    181179    void setCustomWebContentServiceBundleIdentifier(const String&);
     
    188186    WebProcessProxy* dummyProcessProxy(PAL::SessionID sessionID) const { return m_dummyProcessProxies.get(sessionID).get(); }
    189187
    190     // WebProcess or NetworkProcess as approporiate for current process model. The connection must be non-null.
    191     IPC::Connection* networkingProcessConnection();
    192 
    193188    template<typename T> void sendToAllProcesses(const T& message);
    194189    template<typename T> void sendToAllProcessesForSession(const T& message, PAL::SessionID);
    195190
    196     // Sends the message to WebProcess or NetworkProcess as approporiate for current process model.
    197     template<typename T> void sendToNetworkingProcess(T&& message);
    198     template<typename T, typename U> void sendSyncToNetworkingProcess(T&& message, U&& reply);
    199     template<typename T> void sendToNetworkingProcessRelaunchingIfNecessary(T&& message);
    200 
    201191    void processDidFinishLaunching(WebProcessProxy*);
    202192
     
    205195    // Disconnect the process from the context.
    206196    void disconnectProcess(WebProcessProxy*);
    207 
    208     WebKit::WebsiteDataStore* websiteDataStore() const { return m_websiteDataStore.get(); }
    209     void setPrimaryDataStore(WebKit::WebsiteDataStore& dataStore) { m_websiteDataStore = &dataStore; }
    210197
    211198    Ref<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&);
     
    259246    void clearSupportedPlugins();
    260247
    261     ProcessID networkProcessIdentifier();
    262248    ProcessID prewarmedProcessIdentifier();
    263249    void activePagesOriginsInWebProcessForTesting(ProcessID, CompletionHandler<void(Vector<String>&&)>&&);
    264     bool networkProcessHasEntitlementForTesting(const String&);
    265250
    266251    WebPageGroup& defaultPageGroup() { return m_defaultPageGroup.get(); }
     
    303288    WebContextClient& client() { return m_client; }
    304289
    305     API::CustomProtocolManagerClient& customProtocolManagerClient() const { return *m_customProtocolManagerClient; }
    306 
    307290    struct Statistics {
    308291        unsigned wkViewCount;
     
    320303    void terminateServiceWorkers();
    321304
    322     void flushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);
    323 
    324305    void setShouldMakeNextWebProcessLaunchFailForTesting(bool value) { m_shouldMakeNextWebProcessLaunchFailForTesting = value; }
    325306    bool shouldMakeNextWebProcessLaunchFailForTesting() const { return m_shouldMakeNextWebProcessLaunchFailForTesting; }
    326     void setShouldMakeNextNetworkProcessLaunchFailForTesting(bool value) { m_shouldMakeNextNetworkProcessLaunchFailForTesting = value; }
    327     bool shouldMakeNextNetworkProcessLaunchFailForTesting() const { return m_shouldMakeNextNetworkProcessLaunchFailForTesting; }
    328307
    329308    void reportWebContentCPUTime(Seconds cpuTime, uint64_t activityState);
     
    384363
    385364    // Network Process Management
    386     NetworkProcessProxy& ensureNetworkProcess(WebsiteDataStore* withWebsiteDataStore = nullptr);
    387     NetworkProcessProxy* networkProcess() const { return m_networkProcess.get(); }
    388365    void networkProcessCrashed(NetworkProcessProxy&);
    389 
    390     void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
    391366
    392367    bool isServiceWorkerPageID(WebPageProxyIdentifier) const;
    393368#if ENABLE(SERVICE_WORKER)
    394     void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&);
     369    static void establishWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&);
    395370    void removeFromServiceWorkerProcesses(WebProcessProxy&);
    396     size_t serviceWorkerProxiesCount() const { return m_serviceWorkerProcesses.computeSize(); }
    397     void setAllowsAnySSLCertificateForServiceWorker(bool allows) { m_allowsAnySSLCertificateForServiceWorker = allows; }
    398     bool allowsAnySSLCertificateForServiceWorker() const { return m_allowsAnySSLCertificateForServiceWorker; }
     371    size_t serviceWorkerProxiesCount() const { return serviceWorkerProcesses().computeSize(); }
    399372    void updateServiceWorkerUserAgent(const String& userAgent);
    400373    const Optional<UserContentControllerIdentifier>& userContentControllerIdentifierForServiceWorkers() const { return m_userContentControllerIDForServiceWorker; }
     
    450423    bool shouldTakeUIBackgroundAssertion() const { return m_shouldTakeUIBackgroundAssertion; }
    451424
    452     void synthesizeAppIsBackground(bool background);
    453    
    454425#if ENABLE(GAMEPAD)
    455426    void gamepadConnected(const UIGamepad&, WebCore::EventMakesGamepadsVisible);
     
    489460
    490461#if ENABLE(RESOURCE_LOAD_STATISTICS)
    491     void didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID, const WebCore::RegistrableDomain& fromDomain, const WebCore::RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag>, WebPageProxyIdentifier, WebCore::PageIdentifier);
    492462    void setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&&);
    493463    void seedResourceLoadStatisticsForTesting(const WebCore::RegistrableDomain& firstPartyDomain, const WebCore::RegistrableDomain& thirdPartyDomain, bool shouldScheduleNotification, CompletionHandler<void()>&&);
     
    516486    PlugInAutoStartProvider& plugInAutoStartProvider() { return m_plugInAutoStartProvider; }
    517487
    518     void setUseSeparateServiceWorkerProcess(bool);
    519     bool useSeparateServiceWorkerProcess() const { return m_useSeparateServiceWorkerProcess; }
     488    static void setUseSeparateServiceWorkerProcess(bool);
     489    static bool useSeparateServiceWorkerProcess() { return s_useSeparateServiceWorkerProcess; }
    520490
    521491#if ENABLE(CFPREFS_DIRECT_MODE)
     
    529499#endif
    530500
    531 #if PLATFORM(COCOA)
    532     OSObjectPtr<xpc_object_t> xpcEndpointMessage() const;
    533     void sendNetworkProcessXPCEndpointToWebProcess(OSObjectPtr<xpc_object_t> endpointMessage);
    534 #endif
    535 
    536 private:
    537     void platformInitialize();
    538 
    539     void platformInitializeWebProcess(const WebProcessProxy&, WebProcessCreationParameters&);
    540     void platformInvalidateContext();
    541 
    542     void processForNavigationInternal(WebPageProxy&, const API::Navigation&, Ref<WebProcessProxy>&& sourceProcess, const URL& sourceURL, ProcessSwapRequestedByClient, Ref<WebsiteDataStore>&&, CompletionHandler<void(Ref<WebProcessProxy>&&, SuspendedPageProxy*, const String&)>&&);
    543 
    544     RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&);
    545 
    546     WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
    547     void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
    548 
    549     void platformInitializeNetworkProcess(NetworkProcessCreationParameters&);
    550 
    551     void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody);
    552     void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, CompletionHandler<void(UserData&&)>&&);
    553 
    554 #if ENABLE(GAMEPAD)
    555     void startedUsingGamepads(IPC::Connection&);
    556     void stoppedUsingGamepads(IPC::Connection&);
    557 
    558     void processStoppedUsingGamepads(WebProcessProxy&);
    559 #endif
    560 
    561     void updateProcessAssertions();
    562     void updateAudibleMediaAssertions();
    563 
    564     // IPC::MessageReceiver.
    565     // Implemented in generated WebProcessPoolMessageReceiver.cpp
    566     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
    567     void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override;
    568 
    569     static void languageChanged(void* context);
    570     void languageChanged();
    571 
    572     bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); }
     501    static void platformInitializeNetworkProcess(NetworkProcessCreationParameters&);
     502    static Vector<String> urlSchemesWithCustomProtocolHandlers();
    573503
    574504#if PLATFORM(IOS_FAMILY)
     
    580510#endif
    581511
     512private:
     513    void platformInitialize();
     514
     515    void platformInitializeWebProcess(const WebProcessProxy&, WebProcessCreationParameters&);
     516    void platformInvalidateContext();
     517
     518    void processForNavigationInternal(WebPageProxy&, const API::Navigation&, Ref<WebProcessProxy>&& sourceProcess, const URL& sourceURL, ProcessSwapRequestedByClient, Ref<WebsiteDataStore>&&, CompletionHandler<void(Ref<WebProcessProxy>&&, SuspendedPageProxy*, const String&)>&&);
     519
     520    RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&);
     521
     522    WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
     523    void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No);
     524
     525    void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody);
     526    void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, CompletionHandler<void(UserData&&)>&&);
     527
     528#if ENABLE(GAMEPAD)
     529    void startedUsingGamepads(IPC::Connection&);
     530    void stoppedUsingGamepads(IPC::Connection&);
     531
     532    void processStoppedUsingGamepads(WebProcessProxy&);
     533#endif
     534
     535    void updateProcessAssertions();
     536    void updateAudibleMediaAssertions();
     537
     538    // IPC::MessageReceiver.
     539    // Implemented in generated WebProcessPoolMessageReceiver.cpp
     540    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
     541    void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override;
     542
     543    static void languageChanged(void* context);
     544    void languageChanged();
     545
     546    bool usesSingleWebProcess() const { return m_configuration->usesSingleWebProcess(); }
     547
    582548#if PLATFORM(COCOA)
    583549    void registerNotificationObservers();
     
    621587
    622588#if ENABLE(SERVICE_WORKER)
    623     WeakHashSet<WebProcessProxy> m_serviceWorkerProcesses;
     589    static WeakHashSet<WebProcessProxy>& serviceWorkerProcesses();
    624590    bool m_waitingForWorkerContextProcessConnection { false };
    625     bool m_allowsAnySSLCertificateForServiceWorker { false };
    626591    String m_serviceWorkerUserAgent;
    627592    Optional<WebPreferencesStore> m_serviceWorkerPreferences;
     
    639604    UniqueRef<API::DownloadClient> m_downloadClient;
    640605    std::unique_ptr<API::LegacyContextHistoryClient> m_historyClient;
    641     std::unique_ptr<API::CustomProtocolManagerClient> m_customProtocolManagerClient;
    642606
    643607    RefPtr<WebAutomationSession> m_automationSession;
     
    671635    double m_memorySamplerInterval { 1400.0 };
    672636
    673     RefPtr<WebKit::WebsiteDataStore> m_websiteDataStore;
    674 
    675637    typedef HashMap<const char*, RefPtr<WebContextSupplement>, PtrHash<const char*>> WebContextSupplementMap;
    676638    WebContextSupplementMap m_supplements;
     
    704666    bool m_processTerminationEnabled { true };
    705667
    706     std::unique_ptr<NetworkProcessProxy> m_networkProcess;
    707 
    708668    HashMap<uint64_t, RefPtr<DictionaryCallback>> m_dictionaryCallbacks;
    709669
     
    714674    bool m_shouldTakeUIBackgroundAssertion;
    715675    bool m_shouldMakeNextWebProcessLaunchFailForTesting { false };
    716     bool m_shouldMakeNextNetworkProcessLaunchFailForTesting { false };
    717676    bool m_tccPreferenceEnabled { false };
    718677
     
    806765    bool m_isDelayedWebProcessLaunchDisabled { false };
    807766#endif
    808     bool m_useSeparateServiceWorkerProcess { false };
     767    static bool s_useSeparateServiceWorkerProcess;
    809768
    810769#if ENABLE(RESOURCE_LOAD_STATISTICS)
    811770    HashSet<WebCore::RegistrableDomain> m_domainsWithUserInteraction;
    812771#endif
    813 
    814 #if PLATFORM(COCOA)
    815     OSObjectPtr<xpc_object_t> m_endpointMessage;
    816 #endif
    817772};
    818 
    819 template<typename T>
    820 void WebProcessPool::sendToNetworkingProcess(T&& message)
    821 {
    822     if (m_networkProcess && m_networkProcess->canSendMessage())
    823         m_networkProcess->send(std::forward<T>(message), 0);
    824 }
    825 
    826 template<typename T>
    827 void WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary(T&& message)
    828 {
    829     ensureNetworkProcess();
    830     m_networkProcess->send(std::forward<T>(message), 0);
    831 }
    832773
    833774template<typename T>
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r267250 r267608  
    269269    ASSERT(!m_websiteDataStore);
    270270    m_websiteDataStore = &dataStore;
     271#if PLATFORM(COCOA)
     272    dataStore.sendNetworkProcessXPCEndpointToWebProcess(*this);
     273#endif
    271274    updateRegistrationWithDataStore();
    272275    send(Messages::WebProcess::SetWebsiteDataStoreParameters(processPool().webProcessDataStoreParameters(*this, dataStore)), 0);
     
    739742void WebProcessProxy::getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply&& reply)
    740743{
    741     m_processPool->getNetworkProcessConnection(*this, WTFMove(reply));
     744    websiteDataStore().getNetworkProcessConnection(*this, WTFMove(reply));
    742745}
    743746
     
    956959
    957960#if PLATFORM(COCOA)
    958     auto endpointMessage = processPool().xpcEndpointMessage();
    959     if (endpointMessage)
    960         xpc_connection_send_message(connection()->xpcConnection(), endpointMessage.get());
     961    if (m_websiteDataStore)
     962        m_websiteDataStore->sendNetworkProcessXPCEndpointToWebProcess(*this);
    961963#endif
    962964
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r267344 r267608  
    2929#import "CookieStorageUtilsCF.h"
    3030#import "DefaultWebBrowserChecks.h"
     31#import "NetworkProcessProxy.h"
    3132#import "SandboxUtilities.h"
    3233#import "StorageManager.h"
    3334#import "WebFramePolicyListenerProxy.h"
    3435#import "WebPreferencesKeys.h"
     36#import "WebProcessProxy.h"
    3537#import "WebResourceLoadStatisticsStore.h"
    3638#import "WebsiteDataStoreParameters.h"
     
    4547#import <wtf/ProcessPrivilege.h>
    4648#import <wtf/URL.h>
     49#import <wtf/cocoa/Entitlements.h>
    4750#import <wtf/text/StringBuilder.h>
    4851
     
    563566#endif
    564567
    565 }
     568bool WebsiteDataStore::networkProcessHasEntitlementForTesting(const String& entitlement)
     569{
     570    return WTF::hasEntitlement(networkProcess().connection()->xpcConnection(), entitlement.utf8().data());
     571}
     572
     573void WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess(WebProcessProxy& process)
     574{
     575    if (process.state() != AuxiliaryProcessProxy::State::Running)
     576        return;
     577    auto* connection = process.connection();
     578    if (!connection)
     579        return;
     580    auto message = networkProcess().xpcEndpointMessage();
     581    if (!message)
     582        return;
     583    xpc_connection_send_message(connection->xpcConnection(), message);
     584}
     585
     586void WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses()
     587{
     588    for (auto& process : m_processes)
     589        sendNetworkProcessXPCEndpointToWebProcess(process);
     590}
     591
     592}
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r267155 r267608  
    3333#include "DeviceIdHashSaltStorage.h"
    3434#include "GPUProcessProxy.h"
     35#include "Logging.h"
    3536#include "MockAuthenticatorManager.h"
     37#include "NetworkProcessConnectionInfo.h"
    3638#include "NetworkProcessMessages.h"
    3739#include "ShouldGrandfatherStatistics.h"
    3840#include "StorageAccessStatus.h"
    3941#include "WebBackForwardCache.h"
     42#include "WebCookieManagerProxy.h"
    4043#include "WebKit2Initialize.h"
    4144#include "WebPageProxy.h"
     
    7679#endif
    7780
     81#if PLATFORM(COCOA)
     82#include "DefaultWebBrowserChecks.h"
     83#endif
     84
    7885namespace WebKit {
    7986
     
    8491}
    8592
    86 static HashMap<PAL::SessionID, WebsiteDataStore*>& nonDefaultDataStores()
     93static HashMap<PAL::SessionID, WebsiteDataStore*>& allDataStores()
    8794{
    8895    RELEASE_ASSERT(isUIThread());
    8996    static NeverDestroyed<HashMap<PAL::SessionID, WebsiteDataStore*>> map;
    9097    return map;
     98}
     99
     100void WebsiteDataStore::forEachWebsiteDataStore(Function<void(WebsiteDataStore&)>&& function)
     101{
     102    for (auto* dataStore : allDataStores().values())
     103        function(*dataStore);
    91104}
    92105
     
    116129{
    117130    WTF::setProcessPrivileges(allPrivileges());
    118     maybeRegisterWithSessionIDMap();
     131    registerWithSessionIDMap();
    119132    platformInitialize();
    120133
     
    129142    platformDestroy();
    130143
    131     if (m_sessionID != PAL::SessionID::defaultSessionID()) {
    132         ASSERT(nonDefaultDataStores().get(m_sessionID) == this);
    133         nonDefaultDataStores().remove(m_sessionID);
    134         for (auto& processPool : WebProcessPool::allProcessPools()) {
    135             if (auto* networkProcess = processPool->networkProcess())
    136                 networkProcess->removeSession(m_sessionID);
    137         }
    138     }
     144    ASSERT(allDataStores().get(m_sessionID) == this);
     145    allDataStores().remove(m_sessionID);
     146    networkProcess().removeSession(*this);
    139147#if ENABLE(GPU_PROCESS)
    140         if (auto* gpuProcessProxy = GPUProcessProxy::singletonIfCreated())
    141             gpuProcessProxy->removeSession(m_sessionID);
     148    if (auto* gpuProcessProxy = GPUProcessProxy::singletonIfCreated())
     149        gpuProcessProxy->removeSession(m_sessionID);
    142150#endif
    143151}
     
    152160{
    153161    InitializeWebKit2();
    154 
    155162    auto& store = globalDefaultDataStore();
    156163    if (!store)
     
    170177}
    171178
    172 void WebsiteDataStore::maybeRegisterWithSessionIDMap()
    173 {
    174     if (m_sessionID != PAL::SessionID::defaultSessionID()) {
    175         auto result = nonDefaultDataStores().add(m_sessionID, this);
    176         ASSERT_UNUSED(result, result.isNewEntry);
    177     }
    178 }
    179 
    180 WebsiteDataStore* WebsiteDataStore::existingNonDefaultDataStoreForSessionID(PAL::SessionID sessionID)
    181 {
    182     return sessionID != PAL::SessionID::defaultSessionID() ? nonDefaultDataStores().get(sessionID) : nullptr;
     179void WebsiteDataStore::registerWithSessionIDMap()
     180{
     181    auto result = allDataStores().add(m_sessionID, this);
     182    ASSERT_UNUSED(result, result.isNewEntry);
     183}
     184
     185WebsiteDataStore* WebsiteDataStore::existingDataStoreForSessionID(PAL::SessionID sessionID)
     186{
     187    return allDataStores().get(sessionID);
     188}
     189
     190static Ref<NetworkProcessProxy> networkProcessForSession(PAL::SessionID sessionID)
     191{
     192#if PLATFORM(GTK) || PLATFORM(WPE)
     193    if (sessionID.isEphemeral()) {
     194        // Reuse a previous persistent session network process for ephemeral sessions.
     195        for (auto* dataStore : allDataStores().values()) {
     196            if (dataStore->isPersistent())
     197                return makeRef(dataStore->networkProcess());
     198        }
     199    }
     200    return NetworkProcessProxy::create();
     201#else
     202    UNUSED_PARAM(sessionID);
     203    return NetworkProcessProxy::defaultNetworkProcess();
     204#endif
     205}
     206
     207NetworkProcessProxy& WebsiteDataStore::networkProcess()
     208{
     209    if (!m_networkProcess) {
     210        m_networkProcess = networkProcessForSession(m_sessionID);
     211        m_networkProcess->addSession(*this);
     212    }
     213
     214    return *m_networkProcess;
     215}
     216
     217NetworkProcessProxy& WebsiteDataStore::networkProcess() const
     218{
     219    return const_cast<WebsiteDataStore&>(*this).networkProcess();
    183220}
    184221
     
    194231    ASSERT(!process.provisionalPageCount());
    195232    m_processes.remove(process);
    196 }
    197 
    198 WebProcessPool* WebsiteDataStore::processPoolForCookieStorageOperations()
    199 {
    200     auto pools = processPools(1);
    201     return pools.isEmpty() ? nullptr : pools.begin()->get();
    202233}
    203234
     
    441472
    442473    auto networkProcessAccessType = computeNetworkProcessAccessTypeForDataFetch(dataTypes, !isPersistent());
    443     if (networkProcessAccessType != ProcessAccessType::None) {
    444         auto pools = networkProcessAccessType == ProcessAccessType::Launch ? ensureProcessPools() : processPools();
    445         for (auto& processPool : pools) {
    446             switch (networkProcessAccessType) {
    447             case ProcessAccessType::OnlyIfLaunched:
    448                 if (!processPool->networkProcess())
    449                     continue;
    450                 break;
    451 
    452             case ProcessAccessType::Launch:
    453                 processPool->ensureNetworkProcess(this);
    454                 break;
    455 
    456             case ProcessAccessType::None:
    457                 ASSERT_NOT_REACHED();
    458             }
    459 
     474    switch (networkProcessAccessType) {
     475    case ProcessAccessType::Launch:
     476        networkProcess();
     477        ASSERT(m_networkProcess);
     478        FALLTHROUGH;
     479    case ProcessAccessType::OnlyIfLaunched:
     480        if (m_networkProcess) {
    460481            callbackAggregator->addPendingCallback();
    461             processPool->networkProcess()->fetchWebsiteData(m_sessionID, dataTypes, fetchOptions, [callbackAggregator, processPool](WebsiteData websiteData) {
     482            m_networkProcess->fetchWebsiteData(m_sessionID, dataTypes, fetchOptions, [callbackAggregator](WebsiteData websiteData) {
    462483                callbackAggregator->removePendingCallback(WTFMove(websiteData));
    463484            });
    464485        }
     486        break;
     487    case ProcessAccessType::None:
     488        break;
    465489    }
    466490
     
    725749#endif
    726750    auto networkProcessAccessType = computeNetworkProcessAccessTypeForDataRemoval(dataTypes, !isPersistent());
    727     if (networkProcessAccessType != ProcessAccessType::None) {
    728         auto pools = networkProcessAccessType == ProcessAccessType::Launch ? ensureProcessPools() : processPools();
    729         for (auto& processPool : pools) {
    730             switch (networkProcessAccessType) {
    731             case ProcessAccessType::OnlyIfLaunched:
    732                 if (!processPool->networkProcess())
    733                     continue;
    734                 break;
    735 
    736             case ProcessAccessType::Launch:
    737                 processPool->ensureNetworkProcess(this);
    738                 break;
    739 
    740             case ProcessAccessType::None:
    741                 ASSERT_NOT_REACHED();
    742             }
    743 
     751    switch (networkProcessAccessType) {
     752    case ProcessAccessType::Launch:
     753        networkProcess();
     754        ASSERT(m_networkProcess);
     755        FALLTHROUGH;
     756    case ProcessAccessType::OnlyIfLaunched:
     757        if (m_networkProcess) {
    744758            callbackAggregator->addPendingCallback();
    745             processPool->networkProcess()->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator, processPool] {
     759            m_networkProcess->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] {
    746760                callbackAggregator->removePendingCallback();
    747761            });
     
    750764#endif
    751765        }
     766        break;
     767    case ProcessAccessType::None:
     768        break;
    752769    }
    753770
     
    894911    if (dataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
    895912        if (!didNotifyNetworkProcessToDeleteWebsiteData) {
    896             for (auto& processPool : processPools()) {
    897                 if (auto* process = processPool->networkProcess()) {
    898                     callbackAggregator->addPendingCallback();
    899                     process->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] {
    900                         callbackAggregator->removePendingCallback();
    901                     });
    902                 }
    903             }
     913            networkProcess().deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator] {
     914                callbackAggregator->removePendingCallback();
     915            });
    904916        }
    905917
     
    9951007            switch (networkProcessAccessType) {
    9961008            case ProcessAccessType::OnlyIfLaunched:
    997                 if (!processPool->networkProcess())
    998                     continue;
    9991009                break;
    10001010
    10011011            case ProcessAccessType::Launch:
    1002                 processPool->ensureNetworkProcess(this);
     1012                networkProcess();
    10031013                break;
    10041014
     
    10221032
    10231033            callbackAggregator->addPendingCallback();
    1024             processPool->networkProcess()->deleteWebsiteDataForOrigins(m_sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains, [callbackAggregator, processPool] {
     1034            networkProcess().deleteWebsiteDataForOrigins(m_sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains, [callbackAggregator, processPool] {
    10251035                callbackAggregator->removePendingCallback();
    10261036            });
     
    11811191void WebsiteDataStore::setServiceWorkerTimeoutForTesting(Seconds seconds)
    11821192{
    1183     for (auto& processPool : WebProcessPool::allProcessPools()) {
    1184         if (auto* networkProcess = processPool->networkProcess())
    1185             networkProcess->sendSync(Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting(seconds), Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting::Reply(), 0);
    1186     }
     1193    networkProcess().sendSync(Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting(seconds), Messages::NetworkProcess::SetServiceWorkerFetchTimeoutForTesting::Reply(), 0);
    11871194}
    11881195
    11891196void WebsiteDataStore::resetServiceWorkerTimeoutForTesting()
    11901197{
    1191     for (auto& processPool : WebProcessPool::allProcessPools()) {
    1192         if (auto* networkProcess = processPool->networkProcess())
    1193             networkProcess->sendSync(Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting(), Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting::Reply(), 0);
    1194     }
     1198    networkProcess().sendSync(Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting(), Messages::NetworkProcess::ResetServiceWorkerFetchTimeoutForTesting::Reply(), 0);
    11951199}
    11961200
     
    12021206    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    12031207
    1204     for (auto& processPool : processPools())
    1205         processPool->ensureNetworkProcess().setMaxStatisticsEntries(m_sessionID, maximumEntryCount, [processPool, callbackAggregator] { });
     1208    networkProcess().setMaxStatisticsEntries(m_sessionID, maximumEntryCount, [callbackAggregator] { });
    12061209}
    12071210
     
    12121215    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    12131216
    1214     for (auto& processPool : processPools())
    1215         processPool->ensureNetworkProcess().setPruneEntriesDownTo(m_sessionID, pruneTargetCount, [processPool, callbackAggregator] { });
     1217    networkProcess().setPruneEntriesDownTo(m_sessionID, pruneTargetCount, [callbackAggregator] { });
    12161218}
    12171219
     
    12221224    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    12231225
    1224     for (auto& processPool : processPools())
    1225         processPool->ensureNetworkProcess().setGrandfatheringTime(m_sessionID, seconds, [processPool, callbackAggregator] { });
     1226    networkProcess().setGrandfatheringTime(m_sessionID, seconds, [callbackAggregator] { });
    12261227}
    12271228
     
    12321233    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    12331234
    1234     for (auto& processPool : processPools())
    1235         processPool->ensureNetworkProcess().setMinimumTimeBetweenDataRecordsRemoval(m_sessionID, seconds, [processPool, callbackAggregator] { });
     1235    networkProcess().setMinimumTimeBetweenDataRecordsRemoval(m_sessionID, seconds, [callbackAggregator] { });
    12361236}
    12371237   
     
    12391239{
    12401240    ASSERT(RunLoop::isMain());
    1241 
    1242     for (auto& processPool : processPools()) {
    1243         if (auto* process = processPool->networkProcess()) {
    1244             process->dumpResourceLoadStatistics(m_sessionID, WTFMove(completionHandler));
    1245             break;
    1246         }
    1247     }
     1241    networkProcess().dumpResourceLoadStatistics(m_sessionID, WTFMove(completionHandler));
    12481242}
    12491243
     
    12571251    }
    12581252
    1259     for (auto& processPool : processPools()) {
    1260         if (auto* process = processPool->networkProcess()) {
    1261             process->isPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1262             break;
    1263         }
    1264     }
     1253    networkProcess().isPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    12651254}
    12661255
     
    12741263    }
    12751264
    1276     for (auto& processPool : processPools()) {
    1277         if (auto* process = processPool->networkProcess()) {
    1278             process->isGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1279             break;
    1280         }
    1281     }
     1265    networkProcess().isGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    12821266}
    12831267
     
    12931277    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    12941278
    1295     for (auto& processPool : ensureProcessPools())
    1296         processPool->ensureNetworkProcess().setPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { });
     1279    networkProcess().setPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    12971280}
    12981281
     
    13081291    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    13091292   
    1310     for (auto& processPool : processPools()) {
    1311         if (auto* process = processPool->networkProcess())
    1312             process->setPrevalentResourceForDebugMode(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { });
    1313     }
     1293    networkProcess().setPrevalentResourceForDebugMode(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    13141294}
    13151295
     
    13231303    }
    13241304   
    1325     for (auto& processPool : processPools()) {
    1326         if (auto* process = processPool->networkProcess()) {
    1327             process->isVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1328             break;
    1329         }
    1330     }
     1305    networkProcess().isVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    13311306}
    13321307
     
    13421317    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    13431318   
    1344     for (auto& processPool : processPools()) {
    1345         if (auto* networkProcess = processPool->networkProcess())
    1346             networkProcess->setVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { });
    1347     }
     1319    networkProcess().setVeryPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    13481320}
    13491321
     
    13541326    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    13551327
    1356     for (auto& processPool : processPools())
    1357         processPool->ensureNetworkProcess().setShouldClassifyResourcesBeforeDataRecordsRemoval(m_sessionID, value, [processPool, callbackAggregator] { });
     1328    networkProcess().setShouldClassifyResourcesBeforeDataRecordsRemoval(m_sessionID, value, [callbackAggregator] { });
    13581329}
    13591330
     
    13691340    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    13701341   
    1371     for (auto& processPool : processPools()) {
    1372         if (auto* process = processPool->networkProcess())
    1373             process->setSubframeUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, [processPool, callbackAggregator] { });
    1374     }
     1342    networkProcess().setSubframeUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, [callbackAggregator] { });
    13751343}
    13761344
     
    13791347    ASSERT(RunLoop::isMain());
    13801348
    1381     for (auto& processPool : processPools()) {
    1382         if (auto* process = processPool->networkProcess()) {
    1383             process->isRegisteredAsSubFrameUnder(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler));
    1384             break;
    1385         }
    1386     }
     1349    networkProcess().isRegisteredAsSubFrameUnder(m_sessionID, WebCore::RegistrableDomain { subFrameURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler));
    13871350}
    13881351
     
    13981361    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    13991362   
    1400     for (auto& processPool : processPools()) {
    1401         if (auto* process = processPool->networkProcess())
    1402             process->setSubresourceUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, [processPool, callbackAggregator] { });
    1403     }
     1363    networkProcess().setSubresourceUnderTopFrameDomain(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, [callbackAggregator] { });
    14041364}
    14051365
     
    14081368    ASSERT(RunLoop::isMain());
    14091369   
    1410     for (auto& processPool : processPools()) {
    1411         if (auto* process = processPool->networkProcess()) {
    1412             process->isRegisteredAsSubresourceUnder(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler));
    1413             return;
    1414         }
    1415     }
    1416     completionHandler(false);
     1370    networkProcess().isRegisteredAsSubresourceUnder(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { topFrameURL }, WTFMove(completionHandler));
    14171371}
    14181372
     
    14281382    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    14291383   
    1430     for (auto& processPool : processPools()) {
    1431         if (auto* process = processPool->networkProcess())
    1432             process->setSubresourceUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [processPool, callbackAggregator] { });
    1433     }
     1384    networkProcess().setSubresourceUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [callbackAggregator] { });
    14341385}
    14351386
     
    14431394    }
    14441395
    1445     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1446    
    1447     for (auto& processPool : processPools()) {
    1448         if (auto* process = processPool->networkProcess())
    1449             process->setSubresourceUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, [processPool, callbackAggregator] { });
    1450     }
     1396    networkProcess().setSubresourceUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { subresourceURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, WTFMove(completionHandler));
    14511397}
    14521398
     
    14601406    }
    14611407
    1462     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1463    
    1464     for (auto& processPool : processPools()) {
    1465         if (auto* process = processPool->networkProcess())
    1466             process->setTopFrameUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedTo }, [processPool, callbackAggregator] { });
    1467     }
     1408    networkProcess().setTopFrameUniqueRedirectTo(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler));
    14681409}
    14691410
     
    14771418    }
    14781419
    1479     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1480    
    1481     for (auto& processPool : processPools()) {
    1482         if (auto* process = processPool->networkProcess())
    1483             process->setTopFrameUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, [processPool, callbackAggregator] { });
    1484     }
     1420    networkProcess().setTopFrameUniqueRedirectFrom(m_sessionID, WebCore::RegistrableDomain { topFrameURL }, WebCore::RegistrableDomain { urlRedirectedFrom }, WTFMove(completionHandler));
    14851421}
    14861422
     
    14891425    ASSERT(RunLoop::isMain());
    14901426   
    1491     for (auto& processPool : processPools()) {
    1492         if (auto* process = processPool->networkProcess()) {
    1493             process->isRegisteredAsRedirectingTo(m_sessionID, WebCore::RegistrableDomain { urlRedirectedFrom }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler));
    1494             return;
    1495         }
    1496     }
    1497     completionHandler(false);
     1427    networkProcess().isRegisteredAsRedirectingTo(m_sessionID, WebCore::RegistrableDomain { urlRedirectedFrom }, WebCore::RegistrableDomain { urlRedirectedTo }, WTFMove(completionHandler));
    14981428}
    14991429
     
    15071437    }
    15081438
    1509     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1510 
    1511     for (auto& processPool : processPools()) {
    1512         if (auto* process = processPool->networkProcess())
    1513             process->clearPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, [processPool, callbackAggregator] { });
    1514     }
     1439    networkProcess().clearPrevalentResource(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    15151440}
    15161441
     
    15181443{
    15191444    ASSERT(RunLoop::isMain());
    1520 
    1521     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1522    
    1523     for (auto& processPool : processPools()) {
    1524         if (auto* process = processPool->networkProcess())
    1525             process->resetParametersToDefaultValues(m_sessionID, [processPool, callbackAggregator] { });
    1526     }
     1445    networkProcess().resetParametersToDefaultValues(m_sessionID, WTFMove(completionHandler));
    15271446}
    15281447
     
    15311450    ASSERT(RunLoop::isMain());
    15321451   
    1533     for (auto& processPool : processPools()) {
    1534         if (auto* process = processPool->networkProcess())
    1535             process->submitTelemetry(m_sessionID, [] { });
    1536     }
     1452    networkProcess().submitTelemetry(m_sessionID, [] { });
    15371453}
    15381454
     
    15411457    ASSERT(RunLoop::isMain());
    15421458   
    1543     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1544 
    1545     for (auto& processPool : processPools()) {
    1546         if (auto* process = processPool->networkProcess())
    1547             process->scheduleClearInMemoryAndPersistent(m_sessionID, modifiedSince, shouldGrandfather, [processPool, callbackAggregator] { });
    1548     }
     1459    networkProcess().scheduleClearInMemoryAndPersistent(m_sessionID, modifiedSince, shouldGrandfather, WTFMove(completionHandler));
    15491460}
    15501461
     
    15531464    ASSERT(RunLoop::isMain());
    15541465
    1555     struct CallbackAggregator : RefCounted<CallbackAggregator> {
    1556         CallbackAggregator(CompletionHandler<void(Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&&)>&& completionHandler)
     1466    struct LocalCallbackAggregator : RefCounted<LocalCallbackAggregator> {
     1467        LocalCallbackAggregator(CompletionHandler<void(Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&&)>&& completionHandler)
    15571468            : m_completionHandler(WTFMove(completionHandler))
    15581469        {
     
    15601471        };
    15611472
    1562         ~CallbackAggregator()
     1473        ~LocalCallbackAggregator()
    15631474        {
    15641475            ASSERT(RunLoop::isMain());
     
    15751486        Vector<WebResourceLoadStatisticsStore::ThirdPartyData> m_results;
    15761487    };
    1577 
    1578     RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
    1579 
    1580     for (auto& processPool : ensureProcessPools()) {
    1581         processPool->sendResourceLoadStatisticsDataImmediately([this, protectedThis = makeRef(*this), processPool, callbackAggregator] {
    1582             processPool->ensureNetworkProcess(this).getResourceLoadStatisticsDataSummary(m_sessionID, [callbackAggregator, processPool](Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&& data) {
    1583                 callbackAggregator->addResult(WTFMove(data));
    1584             });
     1488   
     1489    auto localCallbackAggregator = adoptRef(new LocalCallbackAggregator(WTFMove(completionHandler)));
     1490   
     1491    auto wtfCallbackAggregator = WTF::CallbackAggregator::create([this, protectedThis = makeRef(*this), localCallbackAggregator] {
     1492        networkProcess().getResourceLoadStatisticsDataSummary(m_sessionID, [localCallbackAggregator](Vector<WebResourceLoadStatisticsStore::ThirdPartyData>&& data) {
     1493            localCallbackAggregator->addResult(WTFMove(data));
    15851494        });
    1586     }
     1495    });
     1496   
     1497    for (auto* processPool : WebProcessPool::allProcessPools())
     1498        processPool->sendResourceLoadStatisticsDataImmediately([wtfCallbackAggregator] { });
    15871499}
    15881500
     
    15911503    ASSERT(RunLoop::isMain());
    15921504   
    1593     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1594 
    1595     for (auto& processPool : processPools()) {
    1596         if (auto* process = processPool->networkProcess())
    1597             process->scheduleClearInMemoryAndPersistent(m_sessionID, { }, shouldGrandfather, [processPool, callbackAggregator] { });
    1598     }
     1505    networkProcess().scheduleClearInMemoryAndPersistent(m_sessionID, { }, shouldGrandfather, WTFMove(completionHandler));
    15991506}
    16001507
     
    16031510    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16041511
    1605     for (auto& processPool : processPools()) {
    1606         if (auto* process = processPool->networkProcess())
    1607             process->scheduleCookieBlockingUpdate(m_sessionID, [processPool, callbackAggregator] { });
    1608     }
     1512    networkProcess().scheduleCookieBlockingUpdate(m_sessionID, [callbackAggregator] { });
    16091513}
    16101514
     
    16151519    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16161520   
    1617     for (auto& processPool : processPools()) {
    1618         if (auto* process = processPool->networkProcess())
    1619             process->scheduleStatisticsAndDataRecordsProcessing(m_sessionID, [processPool, callbackAggregator] { });
    1620     }
     1521    networkProcess().scheduleStatisticsAndDataRecordsProcessing(m_sessionID, [callbackAggregator] { });
    16211522}
    16221523
     
    16241525{
    16251526    ASSERT(RunLoop::isMain());
    1626 
    1627     for (auto& processPool : processPools()) {
    1628         if (auto* process = processPool->networkProcess()) {
    1629             process->statisticsDatabaseHasAllTables(m_sessionID, WTFMove(completionHandler));
    1630             return;
    1631         }
    1632     }
    1633 
    1634     completionHandler(false);
     1527    networkProcess().statisticsDatabaseHasAllTables(m_sessionID, WTFMove(completionHandler));
    16351528}
    16361529
     
    16441537    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16451538
    1646     for (auto& processPool : processPools()) {
    1647         if (auto* process = processPool->networkProcess())
    1648             process->setLastSeen(m_sessionID, WebCore::RegistrableDomain { url }, seconds, [processPool, callbackAggregator] { });
    1649     }
     1539    networkProcess().setLastSeen(m_sessionID, WebCore::RegistrableDomain { url }, seconds, [callbackAggregator] { });
    16501540}
    16511541
     
    16541544    ASSERT(RunLoop::isMain());
    16551545
    1656     for (auto& processPool : processPools()) {
    1657         if (auto* process = processPool->networkProcess()) {
    1658             process->domainIDExistsInDatabase(m_sessionID, domainID, WTFMove(completionHandler));
    1659             break;
    1660         }
    1661     }
     1546    networkProcess().domainIDExistsInDatabase(m_sessionID, domainID, WTFMove(completionHandler));
    16621547}
    16631548
     
    16711556    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16721557
    1673     for (auto& processPool : processPools()) {
    1674         if (auto* process = processPool->networkProcess())
    1675             process->mergeStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, WebCore::RegistrableDomain { topFrameUrl1 }, WebCore::RegistrableDomain { topFrameUrl2 }, lastSeen, hadUserInteraction, mostRecentUserInteraction, isGrandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved, [processPool, callbackAggregator] { });
    1676     }
     1558    networkProcess().mergeStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, WebCore::RegistrableDomain { topFrameUrl1 }, WebCore::RegistrableDomain { topFrameUrl2 }, lastSeen, hadUserInteraction, mostRecentUserInteraction, isGrandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved, [callbackAggregator] { });
    16771559}
    16781560
     
    16861568    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16871569
    1688     for (auto& processPool : processPools()) {
    1689         if (auto* process = processPool->networkProcess())
    1690             process->insertExpiredStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, hadUserInteraction, isScheduledForAllButCookieDataRemoval, isPrevalent, [processPool, callbackAggregator] { });
    1691     }
     1570    networkProcess().insertExpiredStatisticForTesting(m_sessionID, WebCore::RegistrableDomain { url }, hadUserInteraction, isScheduledForAllButCookieDataRemoval, isPrevalent, [callbackAggregator] { });
    16921571}
    16931572
     
    16961575    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    16971576
    1698     for (auto& processPool : processPools())
    1699         processPool->ensureNetworkProcess().setNotifyPagesWhenDataRecordsWereScanned(m_sessionID, value, [processPool, callbackAggregator] { });
     1577    networkProcess().setNotifyPagesWhenDataRecordsWereScanned(m_sessionID, value, [callbackAggregator] { });
    17001578}
    17011579
     
    17051583    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    17061584   
    1707     for (auto& processPool : processPools())
    1708         processPool->ensureNetworkProcess().setIsRunningResourceLoadStatisticsTest(m_sessionID, value, [processPool, callbackAggregator] { });
     1585    networkProcess().setIsRunningResourceLoadStatisticsTest(m_sessionID, value, [callbackAggregator] { });
    17091586}
    17101587
     
    17171594    }
    17181595
    1719     webPage->process().processPool().ensureNetworkProcess().getAllStorageAccessEntries(m_sessionID, WTFMove(completionHandler));
     1596    networkProcess().getAllStorageAccessEntries(m_sessionID, WTFMove(completionHandler));
    17201597}
    17211598
     
    17251602    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    17261603   
    1727     for (auto& processPool : processPools())
    1728         processPool->ensureNetworkProcess().setTimeToLiveUserInteraction(m_sessionID, seconds, [callbackAggregator] { });
     1604    networkProcess().setTimeToLiveUserInteraction(m_sessionID, seconds, [callbackAggregator] { });
    17291605}
    17301606
     
    17401616    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    17411617
    1742     for (auto& processPool : processPools()) {
    1743         if (auto* process = processPool->networkProcess())
    1744             process->logUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    1745     }
     1618    networkProcess().logUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    17461619}
    17471620
     
    17551628    }
    17561629   
    1757     for (auto& processPool : processPools()) {
    1758         if (auto* process = processPool->networkProcess()) {
    1759             process->hasHadUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1760             return;
    1761         }
    1762     }
    1763     completionHandler(false);
     1630    networkProcess().hasHadUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    17641631}
    17651632
     
    17731640    }
    17741641   
    1775     for (auto& processPool : processPools()) {
    1776         if (auto* process = processPool->networkProcess()) {
    1777             process->isRelationshipOnlyInDatabaseOnce(m_sessionID, WebCore::RegistrableDomain { subUrl }, WebCore::RegistrableDomain { topUrl }, WTFMove(completionHandler));
    1778             return;
    1779         }
    1780     }
    1781     completionHandler(false);
     1642    networkProcess().isRelationshipOnlyInDatabaseOnce(m_sessionID, WebCore::RegistrableDomain { subUrl }, WebCore::RegistrableDomain { topUrl }, WTFMove(completionHandler));
    17821643}
    17831644
     
    17931654    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    17941655
    1795     for (auto& processPool : processPools()) {
    1796         if (auto* process = processPool->networkProcess())
    1797             process->clearUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    1798     }
     1656    networkProcess().clearUserInteraction(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    17991657}
    18001658
     
    18101668    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18111669   
    1812     for (auto& processPool : processPools()) {
    1813         if (auto* process = processPool->networkProcess())
    1814             process->setGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, isGrandfathered, [callbackAggregator] { });
    1815     }
     1670    networkProcess().setGrandfathered(m_sessionID, WebCore::RegistrableDomain { url }, isGrandfathered, [callbackAggregator] { });
    18161671}
    18171672
     
    18221677    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18231678   
    1824     for (auto& processPool : processPools()) {
    1825         if (auto* process = processPool->networkProcess())
    1826             process->setUseITPDatabase(m_sessionID, value, [callbackAggregator] { });
    1827     }
     1679    networkProcess().setUseITPDatabase(m_sessionID, value, [callbackAggregator] { });
    18281680}
    18291681
     
    18341686    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18351687   
    1836     for (auto& processPool : processPools()) {
    1837         if (auto* process = processPool->networkProcess())
    1838             process->setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [processPool, callbackAggregator] { });
    1839     }
     1688    networkProcess().setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [callbackAggregator] { });
    18401689}
    18411690
     
    18441693    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18451694   
    1846     for (auto& processPool : processPools()) {
    1847         if (auto* networkProcess = processPool->networkProcess())
    1848             networkProcess->resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { });
    1849     }
     1695    networkProcess().resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { });
    18501696}
    18511697
     
    18541700    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18551701   
    1856     for (auto& processPool : processPools()) {
    1857         if (auto* networkProcess = processPool->networkProcess())
    1858             networkProcess->deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { });
    1859     }
     1702    networkProcess().deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { });
    18601703}
    18611704
    18621705void WebsiteDataStore::hasLocalStorageForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const
    18631706{
    1864     for (auto& processPool : processPools()) {
    1865         if (auto* networkProcess = processPool->networkProcess()) {
    1866             networkProcess->hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1867             return;
    1868         }
    1869     }
    1870     completionHandler(false);
     1707    networkProcess().hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    18711708}
    18721709
    18731710void WebsiteDataStore::hasIsolatedSessionForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const
    18741711{
    1875     for (auto& processPool : processPools()) {
    1876         if (auto* networkProcess = processPool->networkProcess()) {
    1877             networkProcess->hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1878             return;
    1879         }
    1880     }
    1881     completionHandler(false);
     1712    networkProcess().hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    18821713}
    18831714
     
    18861717    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18871718   
    1888     for (auto& processPool : processPools()) {
    1889         if (auto* networkProcess = processPool->networkProcess())
    1890             networkProcess->setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { });
    1891     }
     1719    networkProcess().setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { });
    18921720}
    18931721
     
    19201748    }
    19211749
    1922     for (auto& processPool : processPools()) {
    1923         if (auto* networkProcess = processPool->networkProcess())
    1924             networkProcess->setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { });
    1925     }
     1750    networkProcess().setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { });
    19261751}
    19271752
     
    19311756
    19321757    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1933     for (auto& processPool : processPools()) {
    1934         if (auto* networkProcess = processPool->networkProcess())
    1935             networkProcess->setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { });
    1936     }
     1758    networkProcess().setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { });
    19371759}
    19381760
     
    19421764    auto mode = enabled ? WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies : WebCore::FirstPartyWebsiteDataRemovalMode::None;
    19431765
    1944     for (auto& processPool : processPools()) {
    1945         if (auto* networkProcess = processPool->networkProcess())
    1946             networkProcess->setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { });
    1947     }
     1766    networkProcess().setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { });
    19481767}
    19491768
     
    19521771    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19531772
    1954     for (auto& processPool : processPools()) {
    1955         if (auto* networkProcess = processPool->networkProcess())
    1956             networkProcess->setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    1957     }
     1773    networkProcess().setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    19581774}
    19591775
     
    19671783    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19681784
    1969     for (auto& processPool : processPools())
    1970         processPool->ensureNetworkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
     1785    networkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
    19711786}
    19721787
     
    19801795    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19811796
    1982     for (auto& processPool : processPools())
    1983         processPool->ensureNetworkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
     1797    networkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
    19841798}
    19851799#endif // ENABLE(RESOURCE_LOAD_STATISTICS)
     
    19871801void WebsiteDataStore::syncLocalStorage(CompletionHandler<void()>&& completionHandler)
    19881802{
    1989     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1990     for (auto& processPool : processPools()) {
    1991         if (auto* networkProcess = processPool->networkProcess())
    1992             networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), [callbackAggregator] { });
    1993     }
     1803    networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), WTFMove(completionHandler));
    19941804}
    19951805
     
    19991809    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    20001810   
    2001     for (auto& processPool : processPools())
    2002         processPool->ensureNetworkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { });
     1811    networkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { });
    20031812#else
    20041813    UNUSED_PARAM(seconds);
     
    20101819{
    20111820#if ENABLE(RESOURCE_LOAD_STATISTICS)
    2012     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2013    
    2014     for (auto& processPool : processPools()) {
    2015         if (auto* networkProcess = processPool->networkProcess())
    2016             networkProcess->resetCacheMaxAgeCapForPrevalentResources(m_sessionID, [callbackAggregator] { });
    2017     }
     1821    networkProcess().resetCacheMaxAgeCapForPrevalentResources(m_sessionID, WTFMove(completionHandler));
    20181822#else
    20191823    completionHandler();
    20201824#endif
    2021 }
    2022 
    2023 bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const
    2024 {
    2025     if (auto* processPoolDataStore = processPool.websiteDataStore())
    2026         return processPoolDataStore == this;
    2027     if (auto* networkProcessProxy = processPool.networkProcess())
    2028         return networkProcessProxy->hasSession(m_sessionID);
    2029     return false;
    20301825}
    20311826
     
    20441839        // Check if we're one of the legacy data stores.
    20451840        for (auto& processPool : WebProcessPool::allProcessPools()) {
    2046             if (!isAssociatedProcessPool(*processPool))
    2047                 continue;
    2048 
    20491841            processPools.add(processPool);
    20501842            if (processPools.size() == limit)
     
    20851877void WebsiteDataStore::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
    20861878{
    2087     for (auto& processPool : processPools())
    2088         processPool->ensureNetworkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0);
     1879    networkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0);
    20891880}
    20901881
     
    21391930        FileSystem::deleteEmptyDirectory(mediaKeyDirectory);
    21401931    }
     1932}
     1933
     1934void WebsiteDataStore::getNetworkProcessConnection(WebProcessProxy& webProcessProxy, CompletionHandler<void(const NetworkProcessConnectionInfo&)>&& reply)
     1935{
     1936    networkProcess().getNetworkProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
     1937        if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
     1938            terminateNetworkProcess();
     1939            RELEASE_LOG_IF(isPersistent(), Process, "getNetworkProcessConnection: Failed first attempt, retrying");
     1940            networkProcess().getNetworkProcessConnection(*webProcessProxy, WTFMove(reply));
     1941            return;
     1942        }
     1943        reply(connectionInfo);
     1944    });
     1945}
     1946
     1947void WebsiteDataStore::networkProcessCrashed(NetworkProcessProxy&)
     1948{
     1949    if (m_networkProcess)
     1950        m_networkProcess->didTerminate();
     1951    m_networkProcess = nullptr;
     1952}
     1953
     1954void WebsiteDataStore::terminateNetworkProcess()
     1955{
     1956    for (auto* processPool : WebProcessPool::allProcessPools())
     1957        processPool->terminateServiceWorkers();
     1958
     1959    if (!m_networkProcess)
     1960        return;
     1961    m_networkProcess->terminate();
     1962    m_networkProcess = nullptr;
     1963}
     1964
     1965void WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)
     1966{
     1967    networkProcess().sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler));
     1968}
     1969
     1970void WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting()
     1971{
     1972    networkProcess().sendProcessWillSuspendImminentlyForTesting();
     1973}
     1974
     1975void WebsiteDataStore::sendNetworkProcessDidResume()
     1976{
     1977    networkProcess().sendProcessDidResume();
    21411978}
    21421979
     
    21702007        resolveDirectoriesIfNecessary();
    21712008       
    2172         for (auto& processPool : processPools()) {
    2173             processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true));
     2009        networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true), 0);
     2010        for (auto& processPool : processPools())
    21742011            processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(true), m_sessionID);
    2175         }
    2176         return;
    2177     }
    2178 
    2179     for (auto& processPool : processPools()) {
    2180         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false));
     2012        return;
     2013    }
     2014
     2015    networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false), 0);
     2016    for (auto& processPool : processPools())
    21812017        processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(false), m_sessionID);
    2182     }
    21832018
    21842019    m_resourceLoadStatisticsEnabled = false;
     
    21922027{
    21932028    if (callback) {
    2194         for (auto& processPool : processPools())
    2195             processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true));
     2029        networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true), 0);
    21962030    }
    21972031   
     
    22122046    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    22132047   
    2214     for (auto& processPool : processPools())
    2215         processPool->ensureNetworkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { });
     2048    networkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { });
    22162049#else
    22172050    UNUSED_PARAM(enabled);
     
    22282061    }
    22292062
    2230     for (auto& processPool : processPools()) {
    2231         if (auto* networkProcess = processPool->networkProcess()) {
    2232             networkProcess->isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler));
    2233             return;
    2234         }
    2235     }
    2236 #endif
     2063    networkProcess().isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler));
     2064#else
    22372065    completionHandler(false);
     2066#endif
    22382067}
    22392068
    22402069void WebsiteDataStore::setAdClickAttributionDebugMode(bool enabled)
    22412070{
    2242     for (auto& processPool : processPools())
    2243         processPool->ensureNetworkProcess().setAdClickAttributionDebugMode(enabled);
     2071    networkProcess().setAdClickAttributionDebugMode(enabled);
    22442072}
    22452073
     
    22632091#endif
    22642092
    2265 Vector<WebCore::Cookie> WebsiteDataStore::pendingCookies() const
    2266 {
    2267     return copyToVector(m_pendingCookies);
    2268 }
    2269 
    2270 void WebsiteDataStore::addPendingCookie(const WebCore::Cookie& cookie)
    2271 {
    2272     m_pendingCookies.removeIf([&cookie](auto& pendingCookie) {
    2273         return pendingCookie.isKeyEqual(cookie);
    2274     });
    2275     m_pendingCookies.add(cookie);
    2276 }
    2277 
    2278 void WebsiteDataStore::removePendingCookie(const WebCore::Cookie& cookie)
    2279 {
    2280     m_pendingCookies.remove(cookie);
    2281 }
    2282    
    2283 void WebsiteDataStore::clearPendingCookies()
    2284 {
    2285     m_pendingCookies.clear();
    2286 }
    2287 
    22882093void WebsiteDataStore::flushCookies(CompletionHandler<void()>&& completionHandler)
    22892094{
    2290     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2291     for (auto processPool : WebProcessPool::allProcessPools())
    2292         processPool->flushCookies(sessionID(), [callbackAggregator] { });
     2095    networkProcess().flushCookies(sessionID(), WTFMove(completionHandler));
    22932096}
    22942097
    22952098void WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket(bool allows)
    22962099{
    2297     for (auto processPool : WebProcessPool::allProcessPools()) {
    2298         if (auto* networkProcess = processPool->networkProcess())
    2299             networkProcess->sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0);
    2300     }
     2100    networkProcess().sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0);
    23012101}
    23022102
    23032103void WebsiteDataStore::clearCachedCredentials()
    23042104{
    2305     for (auto processPool : WebProcessPool::allProcessPools())
    2306         processPool->clearCachedCredentials(sessionID());
     2105    networkProcess().send(Messages::NetworkProcess::ClearCachedCredentials(sessionID()), 0);
    23072106}
    23082107
     
    23292128
    23302129    resolveDirectoriesIfNecessary();
    2331 
    2332     parameters.pendingCookies = pendingCookies();
    23332130
    23342131    auto resourceLoadStatisticsDirectory = m_configuration->resourceLoadStatisticsDirectory();
     
    24362233#endif
    24372234    platformSetNetworkParameters(parameters);
    2438 
     2235#if PLATFORM(COCOA)
     2236    parameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission();
     2237#endif
     2238   
    24392239    return parameters;
    24402240}
     
    24662266}
    24672267
    2468 void WebsiteDataStore::didCreateNetworkProcess()
    2469 {
    2470 }
    2471 
    24722268void WebsiteDataStore::getLocalStorageDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler)
    24732269{
     
    24772273    }
    24782274
    2479     for (auto& processPool : ensureProcessPools()) {
    2480         processPool->ensureNetworkProcess(this).getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) {
    2481             completionHandler(WTFMove(details));
    2482         });
    2483         // FIXME: Support fetching from multiple pools.
    2484         break;
    2485     }
    2486     ASSERT(!completionHandler);
     2275    networkProcess().getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) {
     2276        completionHandler(WTFMove(details));
     2277    });
    24872278}
    24882279
     
    24902281{
    24912282    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2492     for (auto& processPool : processPools()) {
    2493         if (auto* process = processPool->networkProcess())
    2494             process->resetQuota(m_sessionID, [callbackAggregator] { });
    2495     }
     2283    networkProcess().resetQuota(m_sessionID, [callbackAggregator] { });
    24962284}
    24972285
     
    25192307    return false;
    25202308}
    2521 #endif
     2309
     2310bool WebsiteDataStore::networkProcessHasEntitlementForTesting(const String&)
     2311{
     2312    return false;
     2313}
     2314#endif // !PLATFORM(COCOA)
    25222315
    25232316#if !USE(GLIB)
     
    25312324void WebsiteDataStore::renameOriginInWebsiteData(URL&& oldName, URL&& newName, OptionSet<WebsiteDataType> dataTypes, CompletionHandler<void()>&& completionHandler)
    25322325{
    2533     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2534     for (auto& processPool : WebProcessPool::allProcessPools()) {
    2535         if (auto* networkProcess = processPool->networkProcess()) {
    2536             networkProcess->addSession(*this);
    2537             networkProcess->renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, [callbackAggregator] { });
    2538         }
    2539     }
     2326    networkProcess().renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, WTFMove(completionHandler));
    25402327}
    25412328
     
    25432330void WebsiteDataStore::hasAppBoundSession(CompletionHandler<void(bool)>&& completionHandler) const
    25442331{
    2545     for (auto& processPool : processPools()) {
    2546         if (auto* networkProcess = processPool->networkProcess()) {
    2547             networkProcess->hasAppBoundSession(m_sessionID, WTFMove(completionHandler));
    2548             return;
    2549         }
    2550     }
    2551     completionHandler(false);
     2332    networkProcess().hasAppBoundSession(m_sessionID, WTFMove(completionHandler));
    25522333}
    25532334
    25542335void WebsiteDataStore::clearAppBoundSession(CompletionHandler<void()>&& completionHandler)
    25552336{
    2556     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2557 
    2558     for (auto& processPool : processPools()) {
    2559         if (auto* networkProcess = processPool->networkProcess())
    2560             networkProcess->clearAppBoundSession(m_sessionID, [processPool, callbackAggregator] { });
    2561     }
     2337    networkProcess().clearAppBoundSession(m_sessionID, WTFMove(completionHandler));
    25622338}
    25632339
     
    25812357    propagateAppBoundDomains(globalDefaultDataStore().get(), *appBoundDomains);
    25822358
    2583     for (auto* store : nonDefaultDataStores().values())
     2359    for (auto* store : allDataStores().values())
    25842360        propagateAppBoundDomains(store, *appBoundDomains);
    25852361}
     
    25892365    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    25902366
    2591     for (auto& processPool : processPools()) {
    2592         if (auto* networkProcess = processPool->networkProcess())
    2593             networkProcess->setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { });
    2594     }
     2367    networkProcess().setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { });
    25952368}
    25962369#endif
     
    26002373    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    26012374
    2602     for (auto& processPool : processPools())
    2603         processPool->ensureNetworkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { });
     2375    networkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { });
    26042376}
    26052377
     
    26082380    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    26092381
    2610     for (auto& processPool : processPools())
    2611         processPool->ensureNetworkProcess().clearBundleIdentifier([callbackAggregator] { });
    2612 }
    2613 
    2614 }
     2382    networkProcess().clearBundleIdentifier([callbackAggregator] { });
     2383}
     2384
     2385static bool nextNetworkProcessLaunchShouldFailForTesting { false };
     2386
     2387void WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting()
     2388{
     2389    nextNetworkProcessLaunchShouldFailForTesting = true;
     2390}
     2391
     2392bool WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting()
     2393{
     2394    return std::exchange(nextNetworkProcessLaunchShouldFailForTesting, false);
     2395}
     2396
     2397}
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r267534 r267608  
    5454#if PLATFORM(COCOA)
    5555#include <pal/spi/cf/CFNetworkSPI.h>
     56#include <wtf/OSObjectPtr.h>
     57#include <wtf/spi/darwin/XPCSPI.h>
    5658#endif
    5759
     
    8082class SecKeyProxyStore;
    8183class DeviceIdHashSaltStorage;
     84class NetworkProcessProxy;
    8285class SOAuthorizationCoordinator;
    8386class WebCertificateInfo;
     
    8992enum class WebsiteDataFetchOption : uint8_t;
    9093enum class WebsiteDataType : uint32_t;
     94
     95struct NetworkProcessConnectionInfo;
    9196struct WebsiteDataRecord;
    9297struct WebsiteDataStoreParameters;
     
    114119    ~WebsiteDataStore();
    115120
    116     static WebsiteDataStore* existingNonDefaultDataStoreForSessionID(PAL::SessionID);
     121    static void forEachWebsiteDataStore(Function<void(WebsiteDataStore&)>&&);
     122   
     123    NetworkProcessProxy& networkProcess() const;
     124    NetworkProcessProxy& networkProcess();
     125
     126    static WebsiteDataStore* existingDataStoreForSessionID(PAL::SessionID);
    117127
    118128    bool isPersistent() const { return !m_sessionID.isEphemeral(); }
     
    123133   
    124134    const WeakHashSet<WebProcessProxy>& processes() const { return m_processes; }
     135
     136    void getNetworkProcessConnection(WebProcessProxy&, CompletionHandler<void(const NetworkProcessConnectionInfo&)>&&);
     137    void terminateNetworkProcess();
     138    void sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&&);
     139    void sendNetworkProcessWillSuspendImminentlyForTesting();
     140    void sendNetworkProcessDidResume();
     141    void networkProcessCrashed(NetworkProcessProxy&);
     142    static void makeNextNetworkProcessLaunchFailForTesting();
     143    static bool shouldMakeNextNetworkProcessLaunchFailForTesting();
    125144
    126145    bool resourceLoadStatisticsEnabled() const;
     
    240259    DeviceIdHashSaltStorage& deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); }
    241260
    242     WebProcessPool* processPoolForCookieStorageOperations();
    243     bool isAssociatedProcessPool(WebProcessPool&) const;
    244 
    245261    WebsiteDataStoreParameters parameters();
    246262
    247     Vector<WebCore::Cookie> pendingCookies() const;
    248     void addPendingCookie(const WebCore::Cookie&);
    249     void removePendingCookie(const WebCore::Cookie&);
    250     void clearPendingCookies();
    251263    void flushCookies(CompletionHandler<void()>&&);
    252264    void clearCachedCredentials();
     
    255267
    256268    void dispatchOnQueue(Function<void()>&&);
     269
     270#if PLATFORM(COCOA)
     271    void sendNetworkProcessXPCEndpointToWebProcess(WebProcessProxy&);
     272    void sendNetworkProcessXPCEndpointToAllWebProcesses();
     273#endif
    257274
    258275#if USE(CURL)
     
    281298#endif
    282299
    283     void didCreateNetworkProcess();
    284 
    285300    const WebsiteDataStoreConfiguration& configuration() { return m_configuration.get(); }
    286301
     
    291306
    292307    void renameOriginInWebsiteData(URL&&, URL&&, OptionSet<WebsiteDataType>, CompletionHandler<void()>&&);
     308
     309    bool networkProcessHasEntitlementForTesting(const String&);
    293310
    294311#if ENABLE(DEVICE_ORIENTATION)
     
    368385    static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
    369386
    370     void maybeRegisterWithSessionIDMap();
     387    void registerWithSessionIDMap();
    371388
    372389#if ENABLE(APP_BOUND_DOMAINS)
     
    408425#endif
    409426
    410     HashSet<WebCore::Cookie> m_pendingCookies;
    411    
    412427    WeakHashSet<WebProcessProxy> m_processes;
    413428
     
    430445
    431446    RefPtr<API::HTTPCookieStore> m_cookieStore;
     447    RefPtr<NetworkProcessProxy> m_networkProcess;
    432448
    433449#if HAVE(APP_SSO)
  • trunk/Source/WebKit/UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp

    r251361 r267608  
    4343    m_proxySettings = WTFMove(proxySettings);
    4444
    45     for (auto& processPool : processPools())
    46         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_proxySettings));
     45    networkProcess().send(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_proxySettings), 0);
    4746}
    4847
  • trunk/Source/WebKit/UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp

    r267560 r267608  
    4343    networkSessionParameters.proxySettings = m_networkProxySettings;
    4444
    45     if (auto* processPool = processPoolForCookieStorageOperations())
    46         processPool->supplement<WebCookieManagerProxy>()->getCookiePersistentStorage(m_sessionID, networkSessionParameters.cookiePersistentStoragePath, networkSessionParameters.cookiePersistentStorageType);
     45    networkProcess().cookieManager().getCookiePersistentStorage(m_sessionID, networkSessionParameters.cookiePersistentStoragePath, networkSessionParameters.cookiePersistentStorageType);
    4746}
    4847
     
    5655
    5756    m_persistentCredentialStorageEnabled = enabled;
    58     for (auto& processPool : processPools())
    59         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetPersistentCredentialStorageEnabled(m_sessionID, m_persistentCredentialStorageEnabled));
     57    networkProcess().send(Messages::NetworkProcess::SetPersistentCredentialStorageEnabled(m_sessionID, m_persistentCredentialStorageEnabled), 0);
    6058}
    6159
     
    6664
    6765    m_ignoreTLSErrors = ignoreTLSErrors;
    68     for (auto& processPool : processPools())
    69         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetIgnoreTLSErrors(m_sessionID, m_ignoreTLSErrors));
     66    networkProcess().send(Messages::NetworkProcess::SetIgnoreTLSErrors(m_sessionID, m_ignoreTLSErrors), 0);
    7067}
    7168
     
    7370{
    7471    m_networkProxySettings = WTFMove(settings);
    75     for (auto& processPool : processPools())
    76         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_networkProxySettings));
     72    networkProcess().send(Messages::NetworkProcess::SetNetworkProxySettings(m_sessionID, m_networkProxySettings), 0);
    7773}
    7874
  • trunk/Source/WebKit/UIProcess/glib/WebProcessProxyGLib.cpp

    r251181 r267608  
    4545            // Prewarmed processes don't have a WebsiteDataStore yet, so use the primary WebsiteDataStore from the WebProcessPool.
    4646            // The process won't be used if current WebsiteDataStore is different than the WebProcessPool primary one.
    47             dataStore = m_processPool->websiteDataStore();
     47            dataStore = WebsiteDataStore::defaultDataStore().ptr();
    4848        }
    4949
  • trunk/Source/WebKit/UIProcess/soup/WebCookieManagerProxySoup.cpp

    r240858 r267608  
    2727#include "WebCookieManagerProxy.h"
    2828
     29#include "NetworkProcessProxy.h"
    2930#include "WebCookieManagerMessages.h"
    3031#include "WebProcessPool.h"
     
    3435void WebCookieManagerProxy::setCookiePersistentStorage(PAL::SessionID sessionID, const String& storagePath, SoupCookiePersistentStorageType storageType)
    3536{
    36     m_cookiePersistentStorageMap.set(sessionID, std::make_pair(storagePath, storageType));
    37     processPool()->sendToNetworkingProcess(Messages::WebCookieManager::SetCookiePersistentStorage(sessionID, storagePath, storageType));
     37    if (m_networkProcess)
     38        m_networkProcess->send(Messages::WebCookieManager::SetCookiePersistentStorage(sessionID, storagePath, storageType), 0);
    3839}
    3940
  • trunk/Source/WebKit/UIProcess/soup/WebProcessPoolSoup.cpp

    r267534 r267608  
    3838void WebProcessPool::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters)
    3939{
    40     NetworkSessionCreationParameters& defaultSessionParameters = parameters.defaultDataStoreParameters.networkSessionParameters;
    41     supplement<WebCookieManagerProxy>()->getCookiePersistentStorage(defaultSessionParameters.sessionID, defaultSessionParameters.cookiePersistentStoragePath, defaultSessionParameters.cookiePersistentStorageType);
    42     if (m_websiteDataStore) {
    43         defaultSessionParameters.persistentCredentialStorageEnabled = m_websiteDataStore->persistentCredentialStorageEnabled();
    44         defaultSessionParameters.ignoreTLSErrors = m_websiteDataStore->ignoreTLSErrors();
    45         defaultSessionParameters.proxySettings = m_websiteDataStore->networkProxySettings();
    46     }
    47 
    48     parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;
    4940    parameters.languages = userPreferredLanguages();
    5041    parameters.shouldEnableITPDatabase = true;
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnectionInfo.h

    r262994 r267608  
    2626#pragma once
    2727
     28#include "Connection.h"
    2829#include <WebCore/HTTPCookieAcceptPolicy.h>
    2930
  • trunk/Tools/ChangeLog

    r267598 r267608  
     12020-09-25  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
     4        https://bugs.webkit.org/show_bug.cgi?id=216041
     5
     6        Reviewed by Brady Eidson.
     7
     8        Most changes to tests are just calling a function on the WKWebsiteDataStore instead of the WKProcessPool
     9        because we want to do something with the network process and it has a new owner.
     10        Exceptions are noted inline.
     11
     12        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
     13        (TestWebKitAPI::TEST):
     14        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
     15        (TestWebKitAPI::downloadAtRate):
     16        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm:
     17        (TEST):
     18        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
     19        (TEST):
     20        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
     21        (TEST):
     22        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:
     23        (TEST):
     24        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
     25        (TEST):
     26        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
     27        (TEST):
     28        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
     29        (TEST):
     30        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:
     31        (TEST):
     32        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
     33        (TEST):
     34        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
     35        (TEST):
     36        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
     37        (TEST):
     38        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
     39        (checkRecoveryAfterCrash):
     40        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
     41        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
     42        (TEST):
     43        This test was making a WKWebsiteDataStore, getting its resource load statistics directory,
     44        putting things in that directory, then starting the network process and making sure everything
     45        works when initializing the network process.  Now, network process initialization happens when a
     46        WKWebsiteDataStore is instantiated, so we need to put things there before instantiating a WKWebsiteDataStore.
     47        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
     48        Before this change, each WKProcessPool had its own network process, which holds the service worker registry
     49        for the WebsiteDataStores used with that process pool.  Now, the network process still needs to have a service
     50        worker registry in it, but when we receive a message from it looking for a web process to run the service
     51        worker, we go arbitrarily to the first process pool that has a process we can use.  This logic is in
     52        WebProcessPool::establishWorkerContextConnectionToNetworkProcess.  Because we use the first process pool each
     53        time, setting the custom user agent to two different things in two different process pools causes only one
     54        to be used.  This is not a problem in practice, though, because the only application that uses the SPI to
     55        set a service worker's custom user agent is Safari, which only has one process pool.  This test still verifies
     56        that a user ageint is correctly sent.
     57        Similarly, the tests that count service worker processes either have different results or need to be run with
     58        one process pool per parent process.  To keep the results the same, I separated the tests into different
     59        TEST(ServiceWorkers, ...) macros which are run in separate parent processes.
     60        The test RestoreFromDiskNonDefaultStore needs to use the same data store for both WKWebViews now because otherwise
     61        there was a race condition in the startup of a new network process that wasn't there before because we were using the
     62        same process pool and therefore the same network process.  I added spinning the run loop and sleeping to be able to
     63        reproduce the race condition failure and I use the same WKWebsiteDataStore to use the same network process, which was
     64        the intent of using the same WKProcessPool before.  The test still tests that the registration is re-used when we are
     65        not using the default data store.
     66        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
     67        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
     68        (-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
     69        (-[CheckSessionCookieUIDelegate waitForMessage]):
     70        (-[CheckSessionCookieUIDelegate alertCookieHTML]):
     71        (TEST):
     72        This is the whole point of me doing this.
     73        I took a test that was flaky only on iOS (because of different NSHTTPCookieStorage syncing behavior) and made
     74        it flaky nowhere (fingers crossed!) and added a test that correctly handles session cookies like we could not
     75        before this change.
     76        I also re-used some test infrastructure and made it stop using process-global static variables for test state.
     77        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
     78        (TEST):
     79        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
     80        (runWebsiteDataStoreCustomPaths):
     81        (TEST):
     82        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm:
     83        (-[CloseWhileStartingProtocol startLoading]):
     84        (TestWebKitAPI::runTest):
     85        * WebKitTestRunner/TestController.cpp:
     86        (WTR::TestController::resetStateToConsistentValues):
     87        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
     88        (WTR::TestController::networkProcessDidCrash):
     89        (WTR::TestController::terminateNetworkProcess):
     90        (WTR::TestController::platformAdjustContext):
     91        WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting is not needed, so I removed it.
     92        WKContextSetPrimaryWebsiteDataStore isn't needed any more because WKContextRef (WebProcessPool) doesn't
     93        own a network process any more, so it doesn't care which is the default WebsiteDataStore.
     94        In fact, the "default" WebsiteDataStore isn't really important in the network process any more.
     95
    1962020-09-25  Matt Lewis  <jlewis3@apple.com>
    297
  • trunk/Tools/TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm

    r243094 r267608  
    3333#import <WebKit/WKProcessPoolPrivate.h>
    3434#import <WebKit/WKWebViewPrivate.h>
     35#import <WebKit/WKWebsiteDataStorePrivate.h>
    3536#import <WebKit/WebKit.h>
    3637#import <wtf/RetainPtr.h>
     
    8889    EXPECT_NE(webView1PID, webView2PID);
    8990
    90     pid_t initialNetworkProcessIdentififer = [processPool.get() _networkProcessIdentifier];
     91    pid_t initialNetworkProcessIdentififer = [configuration.get().websiteDataStore _networkProcessIdentifier];
    9192    EXPECT_NE(initialNetworkProcessIdentififer, 0);
    9293    kill(initialNetworkProcessIdentififer, SIGKILL);
     
    9798    [webView1.get() _test_waitForDidFinishNavigation];
    9899
    99     pid_t relaunchedNetworkProcessIdentifier = [processPool.get() _networkProcessIdentifier];
     100    pid_t relaunchedNetworkProcessIdentifier = [configuration.get().websiteDataStore _networkProcessIdentifier];
    100101    EXPECT_NE(initialNetworkProcessIdentififer, relaunchedNetworkProcessIdentifier);
    101102    EXPECT_FALSE(networkProcessCrashed);
     
    147148    // Constucting a WebView starts a network process so terminate this one. The page load below will then request a network process and we
    148149    // make this new network process launch crash on startup.
    149     [processPool _terminateNetworkProcess];
    150     [processPool _makeNextNetworkProcessLaunchFailForTesting];
     150    [WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting];
     151    [configuration.get().websiteDataStore _terminateNetworkProcess];
    151152
    152153    auto delegate = adoptNS([[MonitorWebContentCrashNavigationDelegate alloc] init]);
     
    159160    EXPECT_FALSE(webProcessCrashed);
    160161    EXPECT_GT([webView _webProcessIdentifier], 0);
    161     EXPECT_GT([processPool.get() _networkProcessIdentifier], 0);
     162    EXPECT_GT([configuration.get().websiteDataStore _networkProcessIdentifier], 0);
    162163}
    163164
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm

    r266150 r267608  
    890890    Util::run(&receivedData);
    891891    // Start the DownloadMonitor's timer.
    892     [[webView configuration].processPool _synthesizeAppIsBackground:YES];
     892    [[webView configuration].websiteDataStore _synthesizeAppIsBackground:YES];
    893893    if (returnToForeground == AppReturnsToForeground::Yes)
    894         [[webView configuration].processPool _synthesizeAppIsBackground:NO];
     894        [[webView configuration].websiteDataStore _synthesizeAppIsBackground:NO];
    895895    didCancel = false;
    896896    Util::run(&didCancel);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm

    r261141 r267608  
    3232#import <WebKit/WKUserContentControllerPrivate.h>
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
     34#import <WebKit/WKWebsiteDataStorePrivate.h>
    3435#import <WebKit/WebKit.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
     
    8788    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    8889
    89     [configuration.get().processPool _terminateNetworkProcess];
     90    [configuration.get().websiteDataStore _terminateNetworkProcess];
    9091
    9192    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm

    r257614 r267608  
    3131#import <WebKit/WKUserContentControllerPrivate.h>
    3232#import <WebKit/WKWebViewConfigurationPrivate.h>
     33#import <WebKit/WKWebsiteDataStorePrivate.h>
    3334#import <WebKit/WebKit.h>
    3435#import <WebKit/_WKProcessPoolConfiguration.h>
     
    5859    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    5960
    60     [configuration.get().processPool _terminateNetworkProcess];
     61    [configuration.get().websiteDataStore _terminateNetworkProcess];
    6162
    6263    // Copy the inconsistent database files to the database directory
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm

    r257614 r267608  
    3232#import <WebKit/WKUserContentControllerPrivate.h>
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
     34#import <WebKit/WKWebsiteDataStorePrivate.h>
    3435#import <WebKit/WebKit.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
     
    5960    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    6061
    61     [configuration.get().processPool _terminateNetworkProcess];
     62    [configuration.get().websiteDataStore _terminateNetworkProcess];
    6263
    6364    // Copy the inconsistent database files to the database directory
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm

    r257614 r267608  
    3232#import <WebKit/WKUserContentControllerPrivate.h>
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
     34#import <WebKit/WKWebsiteDataStorePrivate.h>
    3435#import <WebKit/WebKit.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
     
    5859    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    5960
    60     [configuration.get().processPool _terminateNetworkProcess];
     61    [configuration.get().websiteDataStore _terminateNetworkProcess];
    6162
    6263    // Copy database files with old ObjectStoreInfo schema to the database directory.
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm

    r242339 r267608  
    3232#import <WebKit/WKUserContentControllerPrivate.h>
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
     34#import <WebKit/WKWebsiteDataStorePrivate.h>
    3435#import <WebKit/WebKit.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
     
    9394        if (!killedDBProcess && openRequestUpgradeNeeded) {
    9495            killedDBProcess = true;
    95             [configuration.get().processPool _terminateNetworkProcess];
     96            [configuration.get().websiteDataStore _terminateNetworkProcess];
    9697        }
    9798    }
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm

    r242339 r267608  
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
    3434#import <WebKit/WKWebViewPrivate.h>
     35#import <WebKit/WKWebsiteDataStorePrivate.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
    3637#import <WebKit/_WKUserStyleSheet.h>
     
    7071    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    7172
    72     [configuration.get().processPool _terminateNetworkProcess];
     73    [configuration.get().websiteDataStore _terminateNetworkProcess];
    7374
    7475    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm

    r264790 r267608  
    7979
    8080    // Terminate the network process
    81     [configuration.get().processPool _terminateNetworkProcess];
     81    [configuration.get().websiteDataStore _terminateNetworkProcess];
    8282
    8383    // Make a new web view to finish the test
     
    269269    webView = nil;
    270270    secondWebView = nil;
    271     [configuration.get().processPool _terminateNetworkProcess];
     271    [configuration.get().websiteDataStore _terminateNetworkProcess];
    272272
    273273    // Third-party IDB storage is stored in the memory of network process.
     
    386386    webView = nil;
    387387    secondWebView = nil;
    388     [configuration.get().processPool _terminateNetworkProcess];
     388    [configuration.get().websiteDataStore _terminateNetworkProcess];
    389389
    390390    auto thirdWebView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm

    r266244 r267608  
    3333#import <WebKit/WKUserContentControllerPrivate.h>
    3434#import <WebKit/WKWebViewConfigurationPrivate.h>
     35#import <WebKit/WKWebsiteDataStorePrivate.h>
    3536#import <WebKit/WebKit.h>
    3637#import <WebKit/_WKProcessPoolConfiguration.h>
     
    8990    runTestAndCheckResult(@"Continue");
    9091
    91     [configuration.get().processPool _sendNetworkProcessWillSuspendImminently];
    92     [configuration.get().processPool _sendNetworkProcessDidResume];
     92    [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently];
     93    [configuration.get().websiteDataStore _sendNetworkProcessDidResume];
    9394
    9495    runTestAndCheckResult(@"Expected Abort For Suspension");
     
    159160    runTestAndCheckResult(@"database is created");
    160161
    161     [configuration.get().processPool _sendNetworkProcessWillSuspendImminently];
    162     [configuration.get().processPool _sendNetworkProcessDidResume];
     162    [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently];
     163    [configuration.get().websiteDataStore _sendNetworkProcessDidResume];
    163164
    164165    runTestAndCheckResult(@"transaction is completed");
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm

    r257614 r267608  
    9696    // Terminate network process to keep WAL on disk.
    9797    webView = nil;
    98     [configuration.get().processPool _terminateNetworkProcess];
     98    [configuration.get().websiteDataStore _terminateNetworkProcess];
    9999
    100100    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:walFilePath.get().path]);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm

    r249625 r267608  
    3232#import <WebKit/WKWebViewConfigurationPrivate.h>
    3333#import <WebKit/WKWebpagePreferencesPrivate.h>
     34#import <WebKit/WKWebsiteDataStorePrivate.h>
    3435#import <WebKit/WebKit.h>
    3536#import <WebKit/_WKProcessPoolConfiguration.h>
     
    110111    EXPECT_WK_STREQ(@"session:storage", [lastScriptMessage body]);
    111112
    112     [configuration.get().processPool _terminateNetworkProcess];
     113    [configuration.get().websiteDataStore _terminateNetworkProcess];
    113114
    114115    receivedScriptMessage = false;
     
    163164    EXPECT_WK_STREQ(@"value", [lastScriptMessage body]);
    164165
    165     [processPool.get() _sendNetworkProcessWillSuspendImminently];
     166    [configuration.get().websiteDataStore _sendNetworkProcessWillSuspendImminently];
    166167
    167168    readyToContinue = false;
     
    178179    TestWebKitAPI::Util::run(&readyToContinue);
    179180   
    180     [processPool.get() _sendNetworkProcessDidResume];
     181    [configuration.get().websiteDataStore _sendNetworkProcessDidResume];
    181182
    182183    receivedScriptMessage = false;
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm

    r266150 r267608  
    2929#import "TestWKWebView.h"
    3030#import "Utilities.h"
    31 #import <WebKit/WKProcessPoolPrivate.h>
     31#import <WebKit/WKWebsiteDataStorePrivate.h>
    3232#import <wtf/BlockPtr.h>
    3333#import <wtf/RetainPtr.h>
     
    3838    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:[[[WKWebViewConfiguration alloc] init] autorelease]]);
    3939    [webView synchronouslyLoadTestPageNamed:@"simple"];
    40     WKProcessPool *pool = [webView configuration].processPool;
    41     bool hasEntitlement = [pool _networkProcessHasEntitlementForTesting:@"com.apple.rootless.storage.WebKitNetworkingSandbox"];
     40    WKWebsiteDataStore *store = [webView configuration].websiteDataStore;
     41    bool hasEntitlement = [store _networkProcessHasEntitlementForTesting:@"com.apple.rootless.storage.WebKitNetworkingSandbox"];
    4242#if PLATFORM(MAC) && USE(APPLE_INTERNAL_SDK)
    4343    EXPECT_TRUE(hasEntitlement);
     
    4545    EXPECT_FALSE(hasEntitlement);
    4646#endif
    47     EXPECT_FALSE([pool _networkProcessHasEntitlementForTesting:@"test failure case"]);
     47    EXPECT_FALSE([store _networkProcessHasEntitlementForTesting:@"test failure case"]);
    4848}
    4949
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm

    r260366 r267608  
    7373    done = false;
    7474
    75     [[webView configuration].processPool _terminateNetworkProcess];
     75    [[webView configuration].websiteDataStore _terminateNetworkProcess];
    7676    [webView loadRequest:[NSURLRequest requestWithURL:simple2]];
    7777    TestWebKitAPI::Util::run(&done);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm

    r267563 r267608  
    53865386    TestWebKitAPI::Util::spinRunLoop(1);
    53875387
    5388     [processPool _terminateNetworkProcess];
     5388    [webViewConfiguration.get().websiteDataStore _terminateNetworkProcess];
    53895389
    53905390    auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm

    r265916 r267608  
    720720    TestWebKitAPI::Util::spinRunLoop(1);
    721721
    722     [configuration.get().processPool _terminateNetworkProcess];
     722    [configuration.get().websiteDataStore _terminateNetworkProcess];
    723723
    724724    auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    753753    TestWebKitAPI::Util::spinRunLoop(1);
    754754
    755     [configuration.get().processPool _terminateNetworkProcess];
     755    [configuration.get().websiteDataStore _terminateNetworkProcess];
    756756
    757757    auto webView3 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    15591559TEST(ResourceLoadStatistics, CanAccessDataSummaryWithNoProcessPool)
    15601560{
     1561    NSURL *itpRootURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"CanAccessDataSummaryWithNoProcessPoolTest"] isDirectory:YES];
    15611562    auto defaultFileManager = [NSFileManager defaultManager];
    1562     _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease];
    1563     auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
    1564     NSURL *itpRootURL = [[dataStore _configuration] _resourceLoadStatisticsDirectory];
    15651563    NSURL *fileURL = [itpRootURL URLByAppendingPathComponent:@"observations.db"];
    15661564    [defaultFileManager removeItemAtPath:itpRootURL.path error:nil];
     
    15731571    [defaultFileManager copyItemAtPath:newFileURL.path toPath:fileURL.path error:nil];
    15741572    EXPECT_TRUE([defaultFileManager fileExistsAtPath:fileURL.path]);
     1573
     1574    _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease];
     1575    dataStoreConfiguration._resourceLoadStatisticsDirectory = itpRootURL;
     1576    auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
    15751577    [dataStore _setResourceLoadStatisticsEnabled:YES];
    15761578
     
    16341636
    16351637    doneFlag = false;
    1636     [sharedProcessPool _sendNetworkProcessPrepareToSuspend:^{
    1637         doneFlag = true;
    1638     }];
    1639     TestWebKitAPI::Util::run(&doneFlag);
    1640 
    1641     [sharedProcessPool _sendNetworkProcessDidResume];
     1638    [dataStore1 _sendNetworkProcessPrepareToSuspend:^{
     1639        doneFlag = true;
     1640    }];
     1641    TestWebKitAPI::Util::run(&doneFlag);
     1642
     1643    [dataStore1 _sendNetworkProcessDidResume];
    16421644}
    16431645
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

    r266150 r267608  
    559559    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    560560
    561     messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Bar Custom UserAgent"]);
     561    messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Foo Custom UserAgent"]);
    562562    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    563563
     
    633633    TestWebKitAPI::Util::run(&done);
    634634    done = false;
    635 
    636     [WKWebsiteDataStore _deleteDefaultDataStoreForTesting];
    637635
    638636    ServiceWorkerTCPServer server({
     
    983981    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    984982    setConfigurationInjectedBundlePath(configuration.get());
     983    RetainPtr<WKProcessPool> originalProcessPool = configuration.get().processPool;
    985984
    986985    done = false;
     
    10361035
    10371036    // Make sure that loading the simple page did not start the service worker process.
    1038     EXPECT_EQ(0u, webView.get().configuration.processPool._serviceWorkerProcessCount);
     1037    EXPECT_EQ(1u, webView.get().configuration.processPool._serviceWorkerProcessCount);
    10391038
    10401039    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]);
     
    10441043    done = false;
    10451044
    1046     // Make sure that loading this page did start the service worker process.
    10471045    EXPECT_EQ(1u, webView.get().configuration.processPool._serviceWorkerProcessCount);
    1048 
     1046    EXPECT_EQ(1u, originalProcessPool.get()._serviceWorkerProcessCount);
    10491047    [[configuration websiteDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    10501048        done = true;
     
    16191617}
    16201618
    1621 TEST(ServiceWorkers, OutOfAndInProcessServiceWorker)
     1619TEST(ServiceWorkers, OutOfProcessServiceWorker)
    16221620{
    16231621    bool useSeparateServiceWorkerProcess = true;
     
    16251623
    16261624    EXPECT_EQ(1u, launchServiceWorkerProcess(!useSeparateServiceWorkerProcess, !firstLoadAboutBlank));
    1627     EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, !firstLoadAboutBlank));
    1628 }
    1629 
    1630 TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughServiceWorker)
     1625}
     1626
     1627TEST(ServiceWorkers, InProcessServiceWorker)
    16311628{
    16321629    bool useSeparateServiceWorkerProcess = true;
    16331630    bool firstLoadAboutBlank = true;
    16341631
     1632    EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, !firstLoadAboutBlank));
     1633}
     1634
     1635TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughOutOfProcessServiceWorker)
     1636{
     1637    bool useSeparateServiceWorkerProcess = true;
     1638    bool firstLoadAboutBlank = true;
     1639
    16351640    EXPECT_EQ(1u, launchServiceWorkerProcess(!useSeparateServiceWorkerProcess, firstLoadAboutBlank));
     1641}
     1642
     1643TEST(ServiceWorkers, LoadAboutBlankBeforeNavigatingThroughInProcessServiceWorker)
     1644{
     1645    bool useSeparateServiceWorkerProcess = true;
     1646    bool firstLoadAboutBlank = true;
     1647
    16361648    EXPECT_EQ(2u, launchServiceWorkerProcess(useSeparateServiceWorkerProcess, firstLoadAboutBlank));
    16371649}
     
    18481860    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]);
    18491861
    1850     // We protect the process pool so that it outlives the WebsiteDataStore.
    18511862    RetainPtr<WKProcessPool> protectedProcessPool;
     1863    RetainPtr<WKWebsiteDataStore> protectedWebsiteDataStore;
    18521864
    18531865    ServiceWorkerTCPServer server({
     
    18721884        auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    18731885        protectedProcessPool = webView.get().configuration.processPool;
     1886        protectedWebsiteDataStore = webView.get().configuration.websiteDataStore;
    18741887
    18751888        [webView loadRequest:server.request()];
     
    18811894    }
    18821895
     1896    // Make us more likely to lose any races with service worker initialization.
     1897    TestWebKitAPI::Util::spinRunLoop(10);
     1898    usleep(10000);
     1899    TestWebKitAPI::Util::spinRunLoop(10);
     1900
    18831901    @autoreleasepool {
    18841902        auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    18851903
    1886         auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);
    1887         websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath;
    1888         auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
    1889         configuration.get().websiteDataStore = nonDefaultDataStore.get();
     1904        configuration.get().websiteDataStore = protectedWebsiteDataStore.get();
    18901905
    18911906        auto messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration already has an active worker"]);
     
    19451960    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]);
    19461961
    1947     [ webView.get().configuration.processPool _sendNetworkProcessWillSuspendImminently];
     1962    [webView.get().configuration.websiteDataStore _sendNetworkProcessWillSuspendImminently];
    19481963
    19491964    EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:swDBPath.path]);
    19501965
    1951     [ webView.get().configuration.processPool _sendNetworkProcessDidResume];
     1966    [webView.get().configuration.websiteDataStore _sendNetworkProcessDidResume];
    19521967
    19531968    [webView loadRequest:server.request()];
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm

    r261765 r267608  
    480480@end
    481481
    482 // FIXME: on iOS, UI process should be using the same cookie file as the network process for default session.
    483 #if PLATFORM(MAC)
    484482enum class ShouldEnableProcessPrewarming { No, Yes };
    485483void runWKHTTPCookieStoreWithoutProcessPool(ShouldEnableProcessPrewarming shouldEnableProcessPrewarming)
     
    590588}
    591589
    592 #endif // PLATFORM(MAC)
    593 
    594590@interface CheckSessionCookieUIDelegate : NSObject <WKUIDelegate>
     591- (NSString *)alertCookieHTML;
     592- (NSString *)waitForMessage;
    595593@end
    596594
    597 @implementation CheckSessionCookieUIDelegate
     595@implementation CheckSessionCookieUIDelegate {
     596    RetainPtr<NSString> _message;
     597}
     598
    598599- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
    599600{
    600     EXPECT_STREQ("SessionCookieName=CookieValue", message.UTF8String);
     601    _message = message;
    601602    finished = true;
    602603    completionHandler();
    603604}
     605
     606- (NSString *)waitForMessage
     607{
     608    while (!_message)
     609        TestWebKitAPI::Util::spinRunLoop();
     610    return _message.autorelease();
     611}
     612
     613- (NSString *)alertCookieHTML
     614{
     615    return @"<script>var cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i ++) { cookies[i] = cookies[i].trim(); } cookies.sort(); alert(cookies.join('; '));</script>";
     616}
     617
    604618@end
     619
     620TEST(WebKit, WKHTTPCookieStoreMultipleViews)
     621{
     622    TestWKWebView *webView1 = [[TestWKWebView new] autorelease];
     623    [webView1 synchronouslyLoadHTMLString:@"start network process"];
     624
     625    NSHTTPCookie *sessionCookie = [NSHTTPCookie cookieWithProperties:@{
     626        NSHTTPCookiePath: @"/",
     627        NSHTTPCookieName: @"SessionCookieName",
     628        NSHTTPCookieValue: @"CookieValue",
     629        NSHTTPCookieDomain: @"127.0.0.1",
     630    }];
     631
     632    __block bool setCookieDone = false;
     633    [webView1.configuration.websiteDataStore.httpCookieStore setCookie:sessionCookie completionHandler:^{
     634        setCookieDone = true;
     635    }];
     636    TestWebKitAPI::Util::run(&setCookieDone);
     637
     638    auto delegate = adoptNS([CheckSessionCookieUIDelegate new]);
     639    [webView1 setUIDelegate:delegate.get()];
     640
     641    [webView1 loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
     642    EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue");
     643
     644    TestWKWebView *webView2 = [[TestWKWebView new] autorelease];
     645    [webView2 setUIDelegate:delegate.get()];
     646    [webView2 loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
     647    EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue");
     648}
    605649
    606650TEST(WKHTTPCookieStore, WithoutProcessPoolEphemeralSession)
     
    628672    finished = false;
    629673   
    630     NSString *alertCookieHTML = @"<script>var cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i ++) { cookies[i] = cookies[i].trim(); } cookies.sort(); alert(cookies.join('; '));</script>";
    631     [webView loadHTMLString:alertCookieHTML baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
    632     TestWebKitAPI::Util::run(&finished);
     674    [webView loadHTMLString:[delegate alertCookieHTML] baseURL:[NSURL URLWithString:@"http://127.0.0.1"]];
     675    EXPECT_WK_STREQ([delegate waitForMessage], "SessionCookieName=CookieValue");
    633676}
    634677
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm

    r242339 r267608  
    3636#import <WebKit/WKWebViewConfigurationPrivate.h>
    3737#import <WebKit/WKWebViewPrivate.h>
     38#import <WebKit/WKWebsiteDataStorePrivate.h>
    3839#import <WebKit/WebKit.h>
    3940#import <wtf/RetainPtr.h>
     
    153154    runUntilTasksInFlight(2);
    154155
    155     [webView1.get().configuration.processPool _terminateNetworkProcess];
     156    [webView1.get().configuration.websiteDataStore _terminateNetworkProcess];
    156157
    157158    runUntilTasksInFlight(0);
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm

    r267042 r267608  
    245245    // in newly fired up NetworkProcesses, verify that the fetch and delete APIs work as expected.
    246246
    247     [processPool _terminateNetworkProcess];
     247    [dataStore _terminateNetworkProcess];
    248248    auto newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
    249249
     
    256256    TestWebKitAPI::Util::run(&receivedScriptMessage);
    257257
    258     [processPool _terminateNetworkProcess];
     258    [dataStore _terminateNetworkProcess];
    259259    newCustomDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
    260260
     
    386386        // Terminate the network process while a query is pending.
    387387        auto* allProcessPools = [WKProcessPool _allProcessPoolsForTesting];
    388         ASSERT_EQ(1U, [allProcessPools count]);
    389         auto* processPool = allProcessPools[0];
    390         while (![processPool _networkProcessIdentifier])
     388        ASSERT_EQ(0U, [allProcessPools count]);
     389        while (![dataStore _networkProcessIdentifier])
    391390            TestWebKitAPI::Util::sleep(0.01);
    392         kill([processPool _networkProcessIdentifier], SIGKILL);
     391        kill([dataStore _networkProcessIdentifier], SIGKILL);
    393392        allProcessPools = nil;
    394393        dataStore = nil;
     
    466465    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:key];
    467466
    468     TestWKWebView *webView2 = [[[TestWKWebView alloc] init] autorelease];
     467    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration new] autorelease];
     468    configuration.websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:[[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]] autorelease];
     469    TestWKWebView *webView2 = [[[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration] autorelease];
    469470    [webView2 synchronouslyLoadHTMLString:@"start auxiliary processes" baseURL:nil];
    470471
     
    540541    TestWebKitAPI::Util::spinRunLoop(1);
    541542
    542     [webViewConfiguration.get().processPool _terminateNetworkProcess];
     543    [webViewConfiguration.get().websiteDataStore _terminateNetworkProcess];
    543544
    544545    request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"simple2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     
    858859
    859860    done = true;
    860     [[webView configuration].processPool _terminateNetworkProcess];
     861    [[webView configuration].websiteDataStore _terminateNetworkProcess];
    861862
    862863    [fileManager removeItemAtPath:path error:&error];
  • trunk/Tools/TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm

    r242339 r267608  
    3535#import <WebKit/WKContextPrivate.h>
    3636#import <WebKit/WKProcessGroupPrivate.h>
     37#import <WebKit/WKViewPrivate.h>
     38#import <WebKit/WKWebsiteDataStoreRef.h>
    3739#import <wtf/RetainPtr.h>
    3840
     
    7274    return processGroup;
    7375}
     76
     77static RetainPtr<WKView> wkView;
    7478
    7579@interface CloseWhileStartingProtocol : TestProtocol
     
    9094        WKContextSetClient([processGroup() _contextRef], &client.base);
    9195
    92         kill(WKContextGetNetworkProcessIdentifier([processGroup() _contextRef]), SIGKILL);
     96        kill(WKWebsiteDataStoreGetNetworkProcessIdentifier(WKPageGetWebsiteDataStore([wkView pageRef])), SIGKILL);
    9397        [self.client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSCocoaErrorDomain code:0 userInfo:nil]];
    9498    });
     
    143147{
    144148    RetainPtr<WKBrowsingContextGroup> browsingContextGroup = adoptNS([[WKBrowsingContextGroup alloc] initWithIdentifier:@"TestIdentifier"]);
    145     RetainPtr<WKView> wkView = adoptNS([[WKView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) processGroup:processGroup() browsingContextGroup:browsingContextGroup.get()]);
     149    wkView = adoptNS([[WKView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) processGroup:processGroup() browsingContextGroup:browsingContextGroup.get()]);
    146150    RetainPtr<CustomProtocolsLoadDelegate> loadDelegate = adoptNS([[CustomProtocolsLoadDelegate alloc] init]);
    147151    [wkView browsingContextController].loadDelegate = loadDelegate.get();
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r267479 r267608  
    10631063    resetQuota();
    10641064
    1065     WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(platformContext(), true);
    1066 
    10671065    WKContextClearCurrentModifierStateForTesting(TestController::singleton().context());
    10681066
     
    12391237        WKPageGetProcessIdentifier(TestController::singleton().mainWebView()->page()), '\n',
    12401238        TestController::networkProcessName(), ": ",
    1241         WKContextGetNetworkProcessIdentifier(m_context.get()), '\n'));
     1239        WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore()), '\n'));
    12421240#else
    12431241    dumpResponse("\n"_s);
     
    22992297void TestController::networkProcessDidCrash()
    23002298{
    2301     pid_t pid = WKContextGetNetworkProcessIdentifier(m_context.get());
     2299    pid_t pid = WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore());
    23022300    fprintf(stderr, "#CRASHED - %s (pid %ld)\n", networkProcessName(), static_cast<long>(pid));
    23032301    exit(1);
     
    31383136void TestController::terminateNetworkProcess()
    31393137{
    3140     WKContextTerminateNetworkProcess(platformContext());
     3138    WKWebsiteDataStoreTerminateNetworkProcess(websiteDataStore());
    31413139}
    31423140
     
    31693167}
    31703168
    3171 WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef contextConfiguration)
    3172 {
    3173     WKContextSetPrimaryWebsiteDataStore(context, defaultWebsiteDataStore());
     3169WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef)
     3170{
    31743171    return context;
    31753172}
Note: See TracChangeset for help on using the changeset viewer.