Changeset 267763 in webkit


Ignore:
Timestamp:
Sep 29, 2020, 2:43:46 PM (5 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:
88 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r267762 r267763  
    1 2020-09-29  Tim Horton  <timothy_horton@apple.com>
    2 
    3         Enable the Web Share Level 2 feature wherever Web Share is enabled
    4         https://bugs.webkit.org/show_bug.cgi?id=217105
    5 
    6         Reviewed by Beth Dakin.
    7 
    8         No new tests; there are already tests that enable this.
    9 
    10         * Shared/WebPreferencesExperimental.yaml:
    11 
    12 2020-09-29  Aditya Keerthi  <akeerthi@apple.com>
    13 
    14         [macCatalyst] Focus rings are not painted
    15         https://bugs.webkit.org/show_bug.cgi?id=217073
    16         <rdar://problem/46794111>
    17 
    18         Reviewed by Darin Adler.
    19 
    20         * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
    21         (WebKit::WebProcessPool::platformInitializeWebProcess):
    22 
    23         Ensure that a default focus ring color is specified on macCatalyst.
    24 
    2512020-09-29  Alex Christensen  <achristensen@webkit.org>
    26 
    27         Remove plist-based ResourceLoadStatistics storage, which has been replaced by database-based storage
    28         https://bugs.webkit.org/show_bug.cgi?id=217063
    29 
    30         Reviewed by John Wilander.
    31 
    32         * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
    33         * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
    34         (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage): Deleted.
    35         (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded): Deleted.
    36         (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately): Deleted.
    37         * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
    38         * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp: Removed.
    39         * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h: Removed.
    40         * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
    41         (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
    42         (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
    43         * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
    44         * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
    45         (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
    46         (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
    47         (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
    48         (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):
    49         (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
    50         (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore): Deleted.
    51         * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
    52         * NetworkProcess/NetworkProcess.cpp:
    53         (WebKit::NetworkProcess::didClose):
    54         (WebKit::NetworkProcess::initializeNetworkProcess):
    55         (WebKit::NetworkProcess::setUseITPDatabase): Deleted.
    56         * NetworkProcess/NetworkProcess.h:
    57         (WebKit::NetworkProcess::isITPDatabaseEnabled const): Deleted.
    58         * NetworkProcess/NetworkProcess.messages.in:
    59         * NetworkProcess/NetworkProcessCreationParameters.cpp:
    60         (WebKit::NetworkProcessCreationParameters::encode const):
    61         (WebKit::NetworkProcessCreationParameters::decode):
    62         * NetworkProcess/NetworkProcessCreationParameters.h:
    63         * NetworkProcess/NetworkSession.cpp:
    64         (WebKit::NetworkSession::destroyResourceLoadStatistics):
    65         (WebKit::NetworkSession::flushAndDestroyPersistentStore): Deleted.
    66         * NetworkProcess/NetworkSession.h:
    67         * Shared/WebPreferencesInternal.yaml:
    68         * Sources.txt:
    69         * SourcesCocoa.txt:
    70         * UIProcess/API/C/WKPreferences.cpp:
    71         (WKPreferencesSetIsITPDatabaseEnabled): Deleted.
    72         (WKPreferencesGetIsITPDatabaseEnabled): Deleted.
    73         * UIProcess/API/C/WKPreferencesRef.h:
    74         * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
    75         (WKWebsiteDataStoreStatisticsResetToConsistentState):
    76         (WKWebsiteDataStoreSetUseITPDatabase): Deleted.
    77         * UIProcess/API/C/WKWebsiteDataStoreRef.h:
    78         * UIProcess/API/Cocoa/WKPreferences.mm:
    79         (-[WKPreferences _isITPDatabaseEnabled]): Deleted.
    80         * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
    81         * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
    82         (-[WKWebsiteDataStore _setUseITPDatabase:completionHandler:]): Deleted.
    83         * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
    84         * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
    85         (WebKit::WebProcessPool::platformInitializeNetworkProcess):
    86         * UIProcess/Network/NetworkProcessProxy.cpp:
    87         (WebKit::NetworkProcessProxy::setUseITPDatabase): Deleted.
    88         * UIProcess/Network/NetworkProcessProxy.h:
    89         * UIProcess/WebsiteData/WebsiteDataStore.cpp:
    90         (WebKit::WebsiteDataStore::setUseITPDatabase): Deleted.
    91         * UIProcess/WebsiteData/WebsiteDataStore.h:
    92         * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm: Removed.
    93         * WebKit.xcodeproj/project.pbxproj:
    94 
    95 2020-09-29  Chris Dumez  <cdumez@apple.com>
    96 
    97         Add stubs for AudioWorklet
    98         https://bugs.webkit.org/show_bug.cgi?id=217059
    99 
    100         Reviewed by Eric Carlson.
    101 
    102         Add experimental feature flag for AudioWorklet API.
    103 
    104         * Shared/WebPreferencesExperimental.yaml:
    105 
    106 2020-09-29  Per Arne Vollan  <pvollan@apple.com>
    107 
    108         [macOS] Deny access to 'com.apple.awdd' in the WebContent sandbox
    109         https://bugs.webkit.org/show_bug.cgi?id=216975
    110 
    111         Reviewed by Darin Adler.
    112 
    113         This has already been done on iOS in <https://trac.webkit.org/changeset/254376>, and should be done on macOS as well.
    114 
    115         * WebProcess/com.apple.WebProcess.sb.in:
    116 
    117 2020-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>
    118 
    119         [GTK] Stop using the default website data store for the inspector
    120         https://bugs.webkit.org/show_bug.cgi?id=217034
    121 
    122         Reviewed by Michael Catanzaro.
    123 
    124         The GTK should never use the default website data store. Use a dedicated website data store for the inspector
    125         with its own configuration to store persistent data.
    126 
    127         * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
    128         (WebKit::inspectorWebsiteDataStore):
    129         (WebKit::WebInspectorProxy::platformCreateFrontendPage):
    130 
    131 2020-09-28  Peng Liu  <peng.liu6@apple.com>
    132 
    133         [Media in GPU Process] Use VideoLayerManager to manage layers of MediaPlayerPrivateRemote
    134         https://bugs.webkit.org/show_bug.cgi?id=216995
    135 
    136         Reviewed by Eric Carlson.
    137 
    138         This patch removes the remote hosting layer in the GPU process for video fullscreen and
    139         picture-in-picture. We don't need to keep a layer in the GPU process for video fullscreen
    140         and picture-in-picture because no rendering will be done for that layer. We don't need
    141         EnterFullscreen, ExitFullscreen and SetVideoFullscreenFrameFenced IPC messages after removing
    142         the layer because the RemoteMediaPlayerPrivateRemote in the web process can deal with
    143         the video presentation mode change.
    144 
    145         * GPUProcess/media/RemoteMediaPlayerProxy.h:
    146         * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
    147         * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
    148         (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
    149         (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.
    150         (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.
    151         (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenFrameFenced): Deleted.
    152         Remove unused IPC messages after removing the remote hosting layer for video fullscreen
    153         and picture-in-picture.
    154 
    155         * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp:
    156         (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
    157         (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.
    158         (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.
    159         Ditto.
    160 
    161         * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
    162         (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
    163         (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote):
    164         (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
    165         Remove the code related to the remote hosting layer for video fullscreen and picture-in-picture.
    166         (WebKit::MediaPlayerPrivateRemote::platformLayer const):
    167         (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer):
    168         Use VideoLayerManager to manage the layer.
    169         (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Ditto.
    170         (WebKit::MediaPlayerPrivateRemote::requiresTextTrackRepresentation const): Ditto.
    171         (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Ditto.
    172         (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Ditto.
    173         (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrameFenced): Deleted.
    174         * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
    175         Need to move the Logger up in the data members so that other members can use it
    176         in the constructor, e.g., VideoLayerManager.
    177 
    178         * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
    179         (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
    180         (WebKit::MediaPlayerPrivateRemote::createVideoFullscreenLayer):
    181         (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Deleted.
    182         (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Deleted.
    183         (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Deleted.
    184         Simplify the implementation by managing layers with VideoLayerManager.
    185 
    186 2020-09-28  Eric Carlson  <eric.carlson@apple.com>
    187 
    188         [GPUP] Out-of-band TextTracks
    189         https://bugs.webkit.org/show_bug.cgi?id=217062
    190         <rdar://problem/68739969>
    191 
    192         Reviewed by Jer Noble.
    193 
    194         * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
    195         (WebKit::RemoteMediaPlayerProxy::outOfBandTrackSources):
    196         * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
    197         (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
    198         (WebKit::RemoteMediaPlayerProxyConfiguration::decode):
    199         * Scripts/webkit/messages.py:
    200         * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
    201         (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
    202         * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
    203 
    204 2020-09-28  Devin Rousso  <drousso@apple.com>
    205 
    206         [iOS] unable to airplay directly loaded fullscreen video
    207         https://bugs.webkit.org/show_bug.cgi?id=216858
    208         <rdar://problem/68746321>
    209 
    210         Reviewed by Eric Carlson.
    211 
    212         It's possible that `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` is queried before a
    213         "real" `MediaPlayerPrivate` (i.e. not `NullMediaPlayerPrivate`) is initialized through one
    214         of the registered `MediaPlayerFactory` "engine"s. It's further possible that the value
    215         returned by `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` will change as the new
    216         "real" `MediaPlayerPrivate` may have different logic. In this case, the `MediaPlayer`
    217         doesn't update its client (and therefore nothing "up" the tree, including the client's
    218         clients) with the new `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` value, meaning
    219         that the old value will still be used.
    220 
    221         Add piping such that when the `MediaPlayerFactory` "engine" changes, the `MediaPlayer`
    222         notifies its client (which is further piped "up" the tree to the client's clients) which
    223         eventually causes `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` to be re-evaluated.
    224 
    225         * WebProcess/WebCoreSupport/WebChromeClient.h:
    226         * WebProcess/WebCoreSupport/WebChromeClient.cpp:
    227         (WebKit::WebChromeClient::playbackControlsMediaEngineChanged): Added.
    228         * WebProcess/cocoa/PlaybackSessionManager.h:
    229         * WebProcess/cocoa/PlaybackSessionManager.mm:
    230         (WebKit::PlaybackSessionManager::mediaEngineChanged): Added.
    231 
    232         * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
    233         * UIProcess/API/Cocoa/WKWebViewTesting.mm:
    234         (-[WKWebView _wirelessVideoPlaybackDisabled]): Added.
    235         * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
    236         * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
    237         (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabled): Added.
    238         Create additional functions for piping data to tests.
    239 
    240 2020-09-28  Youenn Fablet  <youenn@apple.com>
    241 
    242         Make sure our calls to AVCaptureDevice requestAccessForMediaType do processing on the main thread
    243         https://bugs.webkit.org/show_bug.cgi?id=216974
    244 
    245         Reviewed by Darin Adler.
    246 
    247         The completion handler to [AVCaptureDeviceClass requestAccessForMediaType:] may sometimes be called in a background thread on iOS.
    248         Make sure to hop to the main thread if that is the case.
    249         Also make sure to ref/weakref lambda captured variables.
    250 
    251         * UIProcess/Cocoa/UIDelegate.h:
    252         * UIProcess/Cocoa/UIDelegate.mm:
    253         (WebKit::requestAccessForMediaType):
    254         (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
    255 
    256 2020-09-27  Lauro Moura  <lmoura@igalia.com>
    257 
    258         REGRESSION(r267688) [GTK] Many compositing timeouts
    259         https://bugs.webkit.org/show_bug.cgi?id=217044
    260 
    261         Reviewed by Darin Adler.
    262 
    263         Especulative fix by adding missing finalize step to
    264         updateRendering (or calling isolatedUpdateRendering).
    265 
    266         Covered by existing tests.
    267 
    268         * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
    269         (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
    270         Call finalizeUpdateRendering.
    271         (WebKit::DrawingAreaCoordinatedGraphics::display): Ditto.
    272         * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
    273         (WebKit::LayerTreeHost::flushAndRenderLayers): Call
    274         isolatedUpdateRendering instead of updateRendering on the corePage().
    275 
    276 2020-09-25  Simon Fraser  <simon.fraser@apple.com>
    277 
    278         WebKitLegacy should call Page::finalizeRenderingUpdate()
    279         https://bugs.webkit.org/show_bug.cgi?id=216958
    280 
    281         Reviewed by Tim Horton.
    282        
    283         dynamicViewportSizeUpdate() needs to call isolatedUpdateRendering() because it isn't followed
    284         by a finalizeRenderingUpdate().
    285 
    286         * WebProcess/WebPage/ios/WebPageIOS.mm:
    287         (WebKit::WebPage::dynamicViewportSizeUpdate):
    288 
    289 2020-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>
    290 
    291         [SOUP] WebSocket: cookies set in request don't appear in the inspector
    292         https://bugs.webkit.org/show_bug.cgi?id=217012
    293 
    294         Reviewed by Michael Catanzaro.
    295 
    296         Cookies are set by libsoup and we are notifying about the handshake being sent before the cookie header is added
    297         to the request.
    298 
    299         * NetworkProcess/soup/WebSocketTaskSoup.cpp:
    300         (WebKit::WebSocketTask::WebSocketTask): Connect to SoupMessage::starting to notify the web process the handshake
    301         request has been sent.
    302 
    303 2020-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>
    304 
    305         [SOUP] Do not set site for cookies twice in case of redirection
    306         https://bugs.webkit.org/show_bug.cgi?id=217010
    307 
    308         Reviewed by Michael Catanzaro.
    309 
    310         ResourceRequest::updateSoupMessage() already fills the same site information, but we are duplicating the code in
    311         NetworkDataTaskSoup::continueHTTPRedirection().
    312 
    313         * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
    314         (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Do not set same site information here, it will be done
    315         again in NetworkDataTaskSoup::createRequest().
    316 
    317 2020-09-25  Hoa Dinh  <dvh@apple.com>
    318 
    319         Add -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:] to provide a way to allow app link
    320         https://bugs.webkit.org/show_bug.cgi?id=216977
    321 
    322         Reviewed by Alex Christensen.
    323 
    324         The method -[WKWebView _loadRequest:shouldOpenExternalURLs:] would only allow opening external or not.
    325         It wasn't providing the ability to allow external URL but not app links.
    326         This patch adds -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]. The parameters value for
    327         shouldOpenExternalURLsPolicy has the same meaning than WebCore::ShouldOpenExternalURLsPolicy.
    328 
    329         * UIProcess/API/Cocoa/WKWebView.mm:
    330         (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]):
    331         * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added enum _WKShouldOpenExternalURLsPolicy,
    332 
    333 2020-09-25  Alex Christensen  <achristensen@webkit.org>
    334 
    335         Unreviewed, reverting r267608.
    336 
    337         Caused API test failures
    338 
    339         Reverted changeset:
    340 
    341         "Move NetworkProcessProxy ownership from WebProcessPool to
    342         WebsiteDataStore"
    343         https://bugs.webkit.org/show_bug.cgi?id=216041
    344         https://trac.webkit.org/changeset/267608
    345 
    346 2020-09-25  Tim Horton  <timothy_horton@apple.com>
    347 
    348         Crunchyroll playback controls do not work on iPad with trackpad
    349         https://bugs.webkit.org/show_bug.cgi?id=217000
    350         <rdar://problem/66362029>
    351 
    352         Reviewed by Wenson Hsieh.
    353 
    354         * UIProcess/ios/WKContentViewInteraction.mm:
    355         (applicationIsKnownToIgnoreMouseEvents):
    356         Add it to the list.
    357 
    358 2020-09-25  Alex Christensen  <achristensen@webkit.org>
    3592
    3603        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
     
    771414        * WebProcess/Network/NetworkProcessConnectionInfo.h:
    772415
     4162020-09-29  Tim Horton  <timothy_horton@apple.com>
     417
     418        Enable the Web Share Level 2 feature wherever Web Share is enabled
     419        https://bugs.webkit.org/show_bug.cgi?id=217105
     420
     421        Reviewed by Beth Dakin.
     422
     423        No new tests; there are already tests that enable this.
     424
     425        * Shared/WebPreferencesExperimental.yaml:
     426
     4272020-09-29  Aditya Keerthi  <akeerthi@apple.com>
     428
     429        [macCatalyst] Focus rings are not painted
     430        https://bugs.webkit.org/show_bug.cgi?id=217073
     431        <rdar://problem/46794111>
     432
     433        Reviewed by Darin Adler.
     434
     435        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
     436        (WebKit::WebProcessPool::platformInitializeWebProcess):
     437
     438        Ensure that a default focus ring color is specified on macCatalyst.
     439
     4402020-09-29  Alex Christensen  <achristensen@webkit.org>
     441
     442        Remove plist-based ResourceLoadStatistics storage, which has been replaced by database-based storage
     443        https://bugs.webkit.org/show_bug.cgi?id=217063
     444
     445        Reviewed by John Wilander.
     446
     447        * NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
     448        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
     449        (WebKit::ResourceLoadStatisticsMemoryStore::setPersistentStorage): Deleted.
     450        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageIfNeeded): Deleted.
     451        (WebKit::ResourceLoadStatisticsMemoryStore::syncStorageImmediately): Deleted.
     452        * NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
     453        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.cpp: Removed.
     454        * NetworkProcess/Classifier/ResourceLoadStatisticsPersistentStorage.h: Removed.
     455        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
     456        (WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords):
     457        (WebKit::ResourceLoadStatisticsStore::grandfatherExistingWebsiteData):
     458        * NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
     459        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
     460        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
     461        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
     462        (WebKit::WebResourceLoadStatisticsStore::didDestroyNetworkSession):
     463        (WebKit::WebResourceLoadStatisticsStore::populateMemoryStoreFromDisk):
     464        (WebKit::WebResourceLoadStatisticsStore::scheduleClearInMemoryAndPersistent):
     465        (WebKit::WebResourceLoadStatisticsStore::flushAndDestroyPersistentStore): Deleted.
     466        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
     467        * NetworkProcess/NetworkProcess.cpp:
     468        (WebKit::NetworkProcess::didClose):
     469        (WebKit::NetworkProcess::initializeNetworkProcess):
     470        (WebKit::NetworkProcess::setUseITPDatabase): Deleted.
     471        * NetworkProcess/NetworkProcess.h:
     472        (WebKit::NetworkProcess::isITPDatabaseEnabled const): Deleted.
     473        * NetworkProcess/NetworkProcess.messages.in:
     474        * NetworkProcess/NetworkProcessCreationParameters.cpp:
     475        (WebKit::NetworkProcessCreationParameters::encode const):
     476        (WebKit::NetworkProcessCreationParameters::decode):
     477        * NetworkProcess/NetworkProcessCreationParameters.h:
     478        * NetworkProcess/NetworkSession.cpp:
     479        (WebKit::NetworkSession::destroyResourceLoadStatistics):
     480        (WebKit::NetworkSession::flushAndDestroyPersistentStore): Deleted.
     481        * NetworkProcess/NetworkSession.h:
     482        * Shared/WebPreferencesInternal.yaml:
     483        * Sources.txt:
     484        * SourcesCocoa.txt:
     485        * UIProcess/API/C/WKPreferences.cpp:
     486        (WKPreferencesSetIsITPDatabaseEnabled): Deleted.
     487        (WKPreferencesGetIsITPDatabaseEnabled): Deleted.
     488        * UIProcess/API/C/WKPreferencesRef.h:
     489        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
     490        (WKWebsiteDataStoreStatisticsResetToConsistentState):
     491        (WKWebsiteDataStoreSetUseITPDatabase): Deleted.
     492        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
     493        * UIProcess/API/Cocoa/WKPreferences.mm:
     494        (-[WKPreferences _isITPDatabaseEnabled]): Deleted.
     495        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
     496        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     497        (-[WKWebsiteDataStore _setUseITPDatabase:completionHandler:]): Deleted.
     498        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
     499        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
     500        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     501        * UIProcess/Network/NetworkProcessProxy.cpp:
     502        (WebKit::NetworkProcessProxy::setUseITPDatabase): Deleted.
     503        * UIProcess/Network/NetworkProcessProxy.h:
     504        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     505        (WebKit::WebsiteDataStore::setUseITPDatabase): Deleted.
     506        * UIProcess/WebsiteData/WebsiteDataStore.h:
     507        * UIProcess/ios/ResourceLoadStatisticsPersistentStorageIOS.mm: Removed.
     508        * WebKit.xcodeproj/project.pbxproj:
     509
     5102020-09-29  Chris Dumez  <cdumez@apple.com>
     511
     512        Add stubs for AudioWorklet
     513        https://bugs.webkit.org/show_bug.cgi?id=217059
     514
     515        Reviewed by Eric Carlson.
     516
     517        Add experimental feature flag for AudioWorklet API.
     518
     519        * Shared/WebPreferencesExperimental.yaml:
     520
     5212020-09-29  Per Arne Vollan  <pvollan@apple.com>
     522
     523        [macOS] Deny access to 'com.apple.awdd' in the WebContent sandbox
     524        https://bugs.webkit.org/show_bug.cgi?id=216975
     525
     526        Reviewed by Darin Adler.
     527
     528        This has already been done on iOS in <https://trac.webkit.org/changeset/254376>, and should be done on macOS as well.
     529
     530        * WebProcess/com.apple.WebProcess.sb.in:
     531
     5322020-09-29  Carlos Garcia Campos  <cgarcia@igalia.com>
     533
     534        [GTK] Stop using the default website data store for the inspector
     535        https://bugs.webkit.org/show_bug.cgi?id=217034
     536
     537        Reviewed by Michael Catanzaro.
     538
     539        The GTK should never use the default website data store. Use a dedicated website data store for the inspector
     540        with its own configuration to store persistent data.
     541
     542        * UIProcess/Inspector/gtk/WebInspectorProxyGtk.cpp:
     543        (WebKit::inspectorWebsiteDataStore):
     544        (WebKit::WebInspectorProxy::platformCreateFrontendPage):
     545
     5462020-09-28  Peng Liu  <peng.liu6@apple.com>
     547
     548        [Media in GPU Process] Use VideoLayerManager to manage layers of MediaPlayerPrivateRemote
     549        https://bugs.webkit.org/show_bug.cgi?id=216995
     550
     551        Reviewed by Eric Carlson.
     552
     553        This patch removes the remote hosting layer in the GPU process for video fullscreen and
     554        picture-in-picture. We don't need to keep a layer in the GPU process for video fullscreen
     555        and picture-in-picture because no rendering will be done for that layer. We don't need
     556        EnterFullscreen, ExitFullscreen and SetVideoFullscreenFrameFenced IPC messages after removing
     557        the layer because the RemoteMediaPlayerPrivateRemote in the web process can deal with
     558        the video presentation mode change.
     559
     560        * GPUProcess/media/RemoteMediaPlayerProxy.h:
     561        * GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
     562        * GPUProcess/media/cocoa/RemoteMediaPlayerProxyCocoa.mm:
     563        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
     564        (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.
     565        (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.
     566        (WebKit::RemoteMediaPlayerProxy::setVideoFullscreenFrameFenced): Deleted.
     567        Remove unused IPC messages after removing the remote hosting layer for video fullscreen
     568        and picture-in-picture.
     569
     570        * GPUProcess/media/gstreamer/RemoteMediaPlayerProxyGStreamer.cpp:
     571        (WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
     572        (WebKit::RemoteMediaPlayerProxy::enterFullscreen): Deleted.
     573        (WebKit::RemoteMediaPlayerProxy::exitFullscreen): Deleted.
     574        Ditto.
     575
     576        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     577        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
     578        (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote):
     579        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
     580        Remove the code related to the remote hosting layer for video fullscreen and picture-in-picture.
     581        (WebKit::MediaPlayerPrivateRemote::platformLayer const):
     582        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenLayer):
     583        Use VideoLayerManager to manage the layer.
     584        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Ditto.
     585        (WebKit::MediaPlayerPrivateRemote::requiresTextTrackRepresentation const): Ditto.
     586        (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Ditto.
     587        (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Ditto.
     588        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrameFenced): Deleted.
     589        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     590        Need to move the Logger up in the data members so that other members can use it
     591        in the constructor, e.g., VideoLayerManager.
     592
     593        * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
     594        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote):
     595        (WebKit::MediaPlayerPrivateRemote::createVideoFullscreenLayer):
     596        (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenFrame): Deleted.
     597        (WebKit::MediaPlayerPrivateRemote::setTextTrackRepresentation): Deleted.
     598        (WebKit::MediaPlayerPrivateRemote::syncTextTrackBounds): Deleted.
     599        Simplify the implementation by managing layers with VideoLayerManager.
     600
     6012020-09-28  Eric Carlson  <eric.carlson@apple.com>
     602
     603        [GPUP] Out-of-band TextTracks
     604        https://bugs.webkit.org/show_bug.cgi?id=217062
     605        <rdar://problem/68739969>
     606
     607        Reviewed by Jer Noble.
     608
     609        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
     610        (WebKit::RemoteMediaPlayerProxy::outOfBandTrackSources):
     611        * GPUProcess/media/RemoteMediaPlayerProxyConfiguration.h:
     612        (WebKit::RemoteMediaPlayerProxyConfiguration::encode const):
     613        (WebKit::RemoteMediaPlayerProxyConfiguration::decode):
     614        * Scripts/webkit/messages.py:
     615        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
     616        (WebKit::RemoteMediaPlayerManager::createRemoteMediaPlayer):
     617        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
     618
     6192020-09-28  Devin Rousso  <drousso@apple.com>
     620
     621        [iOS] unable to airplay directly loaded fullscreen video
     622        https://bugs.webkit.org/show_bug.cgi?id=216858
     623        <rdar://problem/68746321>
     624
     625        Reviewed by Eric Carlson.
     626
     627        It's possible that `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` is queried before a
     628        "real" `MediaPlayerPrivate` (i.e. not `NullMediaPlayerPrivate`) is initialized through one
     629        of the registered `MediaPlayerFactory` "engine"s. It's further possible that the value
     630        returned by `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` will change as the new
     631        "real" `MediaPlayerPrivate` may have different logic. In this case, the `MediaPlayer`
     632        doesn't update its client (and therefore nothing "up" the tree, including the client's
     633        clients) with the new `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` value, meaning
     634        that the old value will still be used.
     635
     636        Add piping such that when the `MediaPlayerFactory` "engine" changes, the `MediaPlayer`
     637        notifies its client (which is further piped "up" the tree to the client's clients) which
     638        eventually causes `MediaPlayerPrivate::wirelessVideoPlaybackDisabled` to be re-evaluated.
     639
     640        * WebProcess/WebCoreSupport/WebChromeClient.h:
     641        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     642        (WebKit::WebChromeClient::playbackControlsMediaEngineChanged): Added.
     643        * WebProcess/cocoa/PlaybackSessionManager.h:
     644        * WebProcess/cocoa/PlaybackSessionManager.mm:
     645        (WebKit::PlaybackSessionManager::mediaEngineChanged): Added.
     646
     647        * UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
     648        * UIProcess/API/Cocoa/WKWebViewTesting.mm:
     649        (-[WKWebView _wirelessVideoPlaybackDisabled]): Added.
     650        * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
     651        * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
     652        (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabled): Added.
     653        Create additional functions for piping data to tests.
     654
     6552020-09-28  Youenn Fablet  <youenn@apple.com>
     656
     657        Make sure our calls to AVCaptureDevice requestAccessForMediaType do processing on the main thread
     658        https://bugs.webkit.org/show_bug.cgi?id=216974
     659
     660        Reviewed by Darin Adler.
     661
     662        The completion handler to [AVCaptureDeviceClass requestAccessForMediaType:] may sometimes be called in a background thread on iOS.
     663        Make sure to hop to the main thread if that is the case.
     664        Also make sure to ref/weakref lambda captured variables.
     665
     666        * UIProcess/Cocoa/UIDelegate.h:
     667        * UIProcess/Cocoa/UIDelegate.mm:
     668        (WebKit::requestAccessForMediaType):
     669        (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest):
     670
     6712020-09-27  Lauro Moura  <lmoura@igalia.com>
     672
     673        REGRESSION(r267688) [GTK] Many compositing timeouts
     674        https://bugs.webkit.org/show_bug.cgi?id=217044
     675
     676        Reviewed by Darin Adler.
     677
     678        Especulative fix by adding missing finalize step to
     679        updateRendering (or calling isolatedUpdateRendering).
     680
     681        Covered by existing tests.
     682
     683        * WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
     684        (WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
     685        Call finalizeUpdateRendering.
     686        (WebKit::DrawingAreaCoordinatedGraphics::display): Ditto.
     687        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeHostTextureMapper.cpp:
     688        (WebKit::LayerTreeHost::flushAndRenderLayers): Call
     689        isolatedUpdateRendering instead of updateRendering on the corePage().
     690
     6912020-09-25  Simon Fraser  <simon.fraser@apple.com>
     692
     693        WebKitLegacy should call Page::finalizeRenderingUpdate()
     694        https://bugs.webkit.org/show_bug.cgi?id=216958
     695
     696        Reviewed by Tim Horton.
     697       
     698        dynamicViewportSizeUpdate() needs to call isolatedUpdateRendering() because it isn't followed
     699        by a finalizeRenderingUpdate().
     700
     701        * WebProcess/WebPage/ios/WebPageIOS.mm:
     702        (WebKit::WebPage::dynamicViewportSizeUpdate):
     703
     7042020-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>
     705
     706        [SOUP] WebSocket: cookies set in request don't appear in the inspector
     707        https://bugs.webkit.org/show_bug.cgi?id=217012
     708
     709        Reviewed by Michael Catanzaro.
     710
     711        Cookies are set by libsoup and we are notifying about the handshake being sent before the cookie header is added
     712        to the request.
     713
     714        * NetworkProcess/soup/WebSocketTaskSoup.cpp:
     715        (WebKit::WebSocketTask::WebSocketTask): Connect to SoupMessage::starting to notify the web process the handshake
     716        request has been sent.
     717
     7182020-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>
     719
     720        [SOUP] Do not set site for cookies twice in case of redirection
     721        https://bugs.webkit.org/show_bug.cgi?id=217010
     722
     723        Reviewed by Michael Catanzaro.
     724
     725        ResourceRequest::updateSoupMessage() already fills the same site information, but we are duplicating the code in
     726        NetworkDataTaskSoup::continueHTTPRedirection().
     727
     728        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
     729        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection): Do not set same site information here, it will be done
     730        again in NetworkDataTaskSoup::createRequest().
     731
     7322020-09-25  Hoa Dinh  <dvh@apple.com>
     733
     734        Add -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:] to provide a way to allow app link
     735        https://bugs.webkit.org/show_bug.cgi?id=216977
     736
     737        Reviewed by Alex Christensen.
     738
     739        The method -[WKWebView _loadRequest:shouldOpenExternalURLs:] would only allow opening external or not.
     740        It wasn't providing the ability to allow external URL but not app links.
     741        This patch adds -[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]. The parameters value for
     742        shouldOpenExternalURLsPolicy has the same meaning than WebCore::ShouldOpenExternalURLsPolicy.
     743
     744        * UIProcess/API/Cocoa/WKWebView.mm:
     745        (-[WKWebView _loadRequest:shouldOpenExternalURLsPolicy:]):
     746        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added enum _WKShouldOpenExternalURLsPolicy,
     747
     7482020-09-25  Alex Christensen  <achristensen@webkit.org>
     749
     750        Unreviewed, reverting r267608.
     751
     752        Caused API test failures
     753
     754        Reverted changeset:
     755
     756        "Move NetworkProcessProxy ownership from WebProcessPool to
     757        WebsiteDataStore"
     758        https://bugs.webkit.org/show_bug.cgi?id=216041
     759        https://trac.webkit.org/changeset/267608
     760
     7612020-09-25  Tim Horton  <timothy_horton@apple.com>
     762
     763        Crunchyroll playback controls do not work on iPad with trackpad
     764        https://bugs.webkit.org/show_bug.cgi?id=217000
     765        <rdar://problem/66362029>
     766
     767        Reviewed by Wenson Hsieh.
     768
     769        * UIProcess/ios/WKContentViewInteraction.mm:
     770        (applicationIsKnownToIgnoreMouseEvents):
     771        Add it to the list.
     772
     7732020-09-25  Alex Christensen  <achristensen@webkit.org>
     774
     775        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
     776        https://bugs.webkit.org/show_bug.cgi?id=216041
     777
     778        Reviewed by Brady Eidson.
     779
     780        This patch moves the things on WebProcessPool associated with NetworkProcessProxy ownership and moves them
     781        to WebsiteDataStore.  It's pretty mechanical, but it reaches its fingers into a lot of things.  Some comments
     782        on interesting parts are below.
     783
     784        Why am I doing this?  I'm glad you asked.
     785
     786        WKWebView had a fundamental cookie problem before this change.  It had a WKWebsiteDataStore that could point to a cookie store on disk
     787        that could be used in multiple network processes at the same time.  This led to problems with cookies being received over the network
     788        in those different processes being unable to be shared until they were written to disk, something that does not happen immediately, especially
     789        on iOS.  This problem is even worse with session cookies, which should be kept in memory and never be written to disk.  Those processes
     790        did not use shared memory to share the cookies.  They just didn't share them, which led to cookie incorrectness.  This was unfortunately
     791        the default configuration if you call [[WKWebView alloc] init] more than once, which many developers do.  There was also occasional cookie
     792        corruption and loss from multiple processes writing cookies to the same file.  All these problems can be worked around by doing what Safari does:
     793        manually setting the WKProcessPool of all WKWebViewConfigurations to the same process pool to only use one network process.  This is not intuitive
     794        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.
     795        The default behavior should not lead to cookie incorrectness, corruption, or loss.  This accomplishes that.
     796
     797        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:
     798        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
     799        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
     800        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
     801        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
     802        will be able to actually be logged in all the time in such apps.
     803
     804        * NetworkProcess/Cookies/WebCookieManager.cpp:
     805        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
     806        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
     807        * NetworkProcess/Cookies/WebCookieManager.h:
     808        * NetworkProcess/Cookies/WebCookieManager.messages.in:
     809        * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp:
     810        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     811        * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm:
     812        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     813        * NetworkProcess/Cookies/soup/WebCookieManagerSoup.cpp:
     814        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
     815        * NetworkProcess/NetworkProcess.cpp:
     816        (WebKit::NetworkProcess::initializeNetworkProcess):
     817        (WebKit::NetworkProcess::ensureSession):
     818        (WebKit::NetworkProcess::storageSession const):
     819        (WebKit::NetworkProcess::forEachNetworkStorageSession):
     820        (WebKit::NetworkProcess::defaultStorageSession const): Deleted.
     821        * NetworkProcess/NetworkProcess.h:
     822        * NetworkProcess/NetworkProcessCreationParameters.cpp:
     823        (WebKit::NetworkProcessCreationParameters::encode const):
     824        (WebKit::NetworkProcessCreationParameters::decode):
     825        * NetworkProcess/NetworkProcessCreationParameters.h:
     826        * NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
     827        (WebKit::LocalStorageDatabase::close):
     828        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
     829        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
     830        (WebKit::saveCookies):
     831        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     832        * NetworkProcess/curl/NetworkProcessCurl.cpp:
     833        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     834        * NetworkProcess/mac/RemoteNetworkingContext.mm:
     835        (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
     836        * NetworkProcess/soup/NetworkProcessSoup.cpp:
     837        (WebKit::NetworkProcess::platformCreateDefaultStorageSession const): Deleted.
     838        * Platform/IPC/Attachment.h:
     839        * Shared/WebsiteDataStoreParameters.cpp:
     840        (WebKit::WebsiteDataStoreParameters::encode const):
     841        (WebKit::WebsiteDataStoreParameters::decode):
     842        * Shared/WebsiteDataStoreParameters.h:
     843        * UIProcess/API/APIHTTPCookieStore.cpp:
     844        (API::HTTPCookieStore::HTTPCookieStore):
     845        (API::HTTPCookieStore::~HTTPCookieStore):
     846        (API::HTTPCookieStore::cookies):
     847        (API::HTTPCookieStore::cookiesForURL):
     848        (API::HTTPCookieStore::setCookies):
     849        (API::HTTPCookieStore::deleteCookie):
     850        (API::HTTPCookieStore::deleteAllCookies):
     851        (API::HTTPCookieStore::setHTTPCookieAcceptPolicy):
     852        (API::HTTPCookieStore::registerObserver):
     853        (API::HTTPCookieStore::cookieManagerDestroyed):
     854        (API::HTTPCookieStore::registerForNewProcessPoolNotifications): Deleted.
     855        (API::HTTPCookieStore::unregisterForNewProcessPoolNotifications): Deleted.
     856        * UIProcess/API/APIHTTPCookieStore.h:
     857        * UIProcess/API/C/WKContext.cpp:
     858        (WKContextSetUseSeparateServiceWorkerProcess):
     859        (WKContextSetPrimaryWebsiteDataStore):
     860        (WKContextGetCookieManager): Deleted.
     861        (WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting): Deleted.
     862        (WKContextTerminateNetworkProcess): Deleted.
     863        (WKContextGetNetworkProcessIdentifier): Deleted.
     864        * UIProcess/API/C/WKContext.h:
     865        * UIProcess/API/C/WKContextPrivate.h:
     866        * UIProcess/API/C/WKPage.cpp:
     867        (WKPageGetWebsiteDataStore):
     868        * UIProcess/API/C/WKPage.h:
     869        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
     870        (WKWebsiteDataStoreTerminateNetworkProcess):
     871        (WKWebsiteDataStoreGetNetworkProcessIdentifier):
     872        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
     873        * UIProcess/API/Cocoa/WKProcessPool.mm:
     874        (-[WKProcessPool _setUseSeparateServiceWorkerProcess:]):
     875        (-[WKProcessPool _terminateNetworkProcess]): Deleted.
     876        (-[WKProcessPool _sendNetworkProcessWillSuspendImminently]): Deleted.
     877        (-[WKProcessPool _sendNetworkProcessPrepareToSuspend:]): Deleted.
     878        (-[WKProcessPool _sendNetworkProcessDidResume]): Deleted.
     879        (-[WKProcessPool _networkProcessIdentifier]): Deleted.
     880        (-[WKProcessPool _makeNextNetworkProcessLaunchFailForTesting]): Deleted.
     881        (-[WKProcessPool _synthesizeAppIsBackground:]): Deleted.
     882        (-[WKProcessPool _setAllowsAnySSLCertificateForServiceWorker:]): Deleted.
     883        (-[WKProcessPool _networkProcessHasEntitlementForTesting:]): Deleted.
     884        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     885        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
     886        (-[WKWebsiteDataStore _networkProcessHasEntitlementForTesting:]):
     887        (-[WKWebsiteDataStore _terminateNetworkProcess]):
     888        (-[WKWebsiteDataStore _sendNetworkProcessPrepareToSuspend:]):
     889        (-[WKWebsiteDataStore _sendNetworkProcessWillSuspendImminently]):
     890        (-[WKWebsiteDataStore _sendNetworkProcessDidResume]):
     891        (-[WKWebsiteDataStore _synthesizeAppIsBackground:]):
     892        (-[WKWebsiteDataStore _networkProcessIdentifier]):
     893        (+[WKWebsiteDataStore _makeNextNetworkProcessLaunchFailForTesting]):
     894        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
     895        * UIProcess/API/glib/WebKitCookieManager.cpp:
     896        (_WebKitCookieManagerPrivate::cookieManager const):
     897        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
     898        (webkitCookieManagerCreate):
     899        (webkit_cookie_manager_set_persistent_storage):
     900        (webkit_cookie_manager_set_accept_policy):
     901        (webkit_cookie_manager_get_accept_policy):
     902        (webkit_cookie_manager_add_cookie):
     903        (webkit_cookie_manager_get_cookies):
     904        (webkit_cookie_manager_delete_cookie):
     905        * UIProcess/API/glib/WebKitWebContext.cpp:
     906        (webkitWebContextConstructed):
     907        (webkit_web_context_prefetch_dns):
     908        * UIProcess/Automation/WebAutomationSession.cpp:
     909        (WebKit::WebAutomationSession::addSingleCookie):
     910        (WebKit::WebAutomationSession::deleteAllCookies):
     911        * UIProcess/AuxiliaryProcessProxy.h:
     912        * UIProcess/Cocoa/LegacyCustomProtocolManagerClient.h:
     913        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
     914        (WebKit::WebProcessPool::updateProcessSuppressionState):
     915        (WebKit::WebProcessPool::platformInitialize):
     916        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     917        (WebKit::WebProcessPool::networkProcessHasEntitlementForTesting): Deleted.
     918        (WebKit::WebProcessPool::xpcEndpointMessage const): Deleted.
     919        (WebKit::WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess): Deleted.
     920        * UIProcess/Downloads/DownloadProxy.cpp:
     921        (WebKit::DownloadProxy::cancel):
     922        (WebKit::DownloadProxy::publishProgress):
     923        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
     924        (WebKit::DownloadProxy::willSendRequest):
     925        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
     926        * UIProcess/Downloads/DownloadProxyMap.cpp:
     927        (WebKit::DownloadProxyMap::DownloadProxyMap):
     928        (WebKit::DownloadProxyMap::applicationDidEnterBackground):
     929        (WebKit::DownloadProxyMap::applicationWillEnterForeground):
     930        (WebKit::DownloadProxyMap::createDownloadProxy):
     931        (WebKit::DownloadProxyMap::downloadFinished):
     932        (WebKit::DownloadProxyMap::invalidate):
     933        * UIProcess/Downloads/DownloadProxyMap.h:
     934        * UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp:
     935        (WebKit::LegacyCustomProtocolManagerProxy::startLoading):
     936        (WebKit::LegacyCustomProtocolManagerProxy::stopLoading):
     937        (WebKit::LegacyCustomProtocolManagerProxy::invalidate):
     938        * UIProcess/Network/NetworkProcessProxy.cpp:
     939        (WebKit::NetworkProcessProxy::allNetworkProcesses):
     940        (WebKit::defaultProcess):
     941        (WebKit::NetworkProcessProxy::defaultNetworkProcess):
     942        (WebKit::NetworkProcessProxy::terminate):
     943        (WebKit::NetworkProcessProxy::didTerminate):
     944        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
     945        (WebKit::anyProcessPoolAlwaysRunsAtBackgroundPriority):
     946        (WebKit::anyProcessPoolShouldTakeUIBackgroundAssertion):
     947        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
     948        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
     949        (WebKit::NetworkProcessProxy::getLaunchOptions):
     950        (WebKit::NetworkProcessProxy::createDownloadProxy):
     951        (WebKit::NetworkProcessProxy::networkProcessCrashed):
     952        (WebKit::NetworkProcessProxy::didReceiveMessage):
     953        (WebKit::NetworkProcessProxy::didClose):
     954        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
     955        (WebKit::NetworkProcessProxy::didFinishLaunching):
     956        (WebKit::NetworkProcessProxy::setDomainsWithUserInteraction):
     957        (WebKit::NetworkProcessProxy::addSession):
     958        (WebKit::NetworkProcessProxy::removeSession):
     959        (WebKit::NetworkProcessProxy::websiteDataStoreFromSessionID):
     960        (WebKit::NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess):
     961        (WebKit::anyProcessPoolHasForegroundWebProcesses):
     962        (WebKit::anyProcessPoolHasBackgroundWebProcesses):
     963        (WebKit::NetworkProcessProxy::updateProcessAssertion):
     964        (WebKit::NetworkProcessProxy::hasSession const): Deleted.
     965        * UIProcess/Network/NetworkProcessProxy.h:
     966        * UIProcess/Network/NetworkProcessProxyCocoa.mm:
     967        (WebKit::NetworkProcessProxy::XPCEventHandler::handleXPCEvent const):
     968        * UIProcess/WebCookieManagerProxy.cpp:
     969        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
     970        (WebKit::WebCookieManagerProxy::~WebCookieManagerProxy):
     971        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
     972        (WebKit::WebCookieManagerProxy::deleteCookiesForHostnames):
     973        (WebKit::WebCookieManagerProxy::deleteAllCookies):
     974        (WebKit::WebCookieManagerProxy::deleteCookie):
     975        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
     976        (WebKit::WebCookieManagerProxy::setCookies):
     977        (WebKit::WebCookieManagerProxy::getAllCookies):
     978        (WebKit::WebCookieManagerProxy::getCookies):
     979        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
     980        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
     981        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
     982        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
     983        (WebKit::WebCookieManagerProxy::supplementName): Deleted.
     984        (WebKit::WebCookieManagerProxy::create): Deleted.
     985        (WebKit::WebCookieManagerProxy::processPoolDestroyed): Deleted.
     986        (WebKit::WebCookieManagerProxy::processDidClose): Deleted.
     987        (WebKit::WebCookieManagerProxy::refWebContextSupplement): Deleted.
     988        (WebKit::WebCookieManagerProxy::derefWebContextSupplement): Deleted.
     989        * UIProcess/WebCookieManagerProxy.h:
     990        (WebKit::WebCookieManagerProxy::create):
     991        * UIProcess/WebPageProxy.cpp:
     992        (WebKit::WebPageProxy::setControlledByAutomation):
     993        (WebKit::WebPageProxy::disableServiceWorkerEntitlementInNetworkProcess):
     994        (WebKit::WebPageProxy::clearServiceWorkerEntitlementOverride):
     995        (WebKit::WebPageProxy::preconnectTo):
     996        (WebKit::WebPageProxy::didCommitLoadForFrame):
     997        (WebKit::WebPageProxy::logFrameNavigation):
     998        (WebKit::WebPageProxy::dumpAdClickAttribution):
     999        (WebKit::WebPageProxy::clearAdClickAttribution):
     1000        (WebKit::WebPageProxy::setAdClickAttributionOverrideTimerForTesting):
     1001        (WebKit::WebPageProxy::setAdClickAttributionConversionURLForTesting):
     1002        (WebKit::WebPageProxy::markAdClickAttributionsAsExpiredForTesting):
     1003        * UIProcess/WebProcessPool.cpp:
     1004        (WebKit::WebProcessPool::urlSchemesWithCustomProtocolHandlers):
     1005        (WebKit::WebProcessPool::WebProcessPool):
     1006        (WebKit::WebProcessPool::~WebProcessPool):
     1007        (WebKit::WebProcessPool::languageChanged):
     1008        (WebKit::WebProcessPool::sendMemoryPressureEvent):
     1009        (WebKit::WebProcessPool::networkProcessCrashed):
     1010        (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess):
     1011        (WebKit::WebProcessPool::removeFromServiceWorkerProcesses):
     1012        (WebKit::WebProcessPool::tryTakePrewarmedProcess):
     1013        (WebKit::WebProcessPool::initializeNewWebProcess):
     1014        (WebKit::WebProcessPool::processDidFinishLaunching):
     1015        (WebKit::WebProcessPool::createWebPage):
     1016        (WebKit::WebProcessPool::updateServiceWorkerUserAgent):
     1017        (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore):
     1018        (WebKit::WebProcessPool::download):
     1019        (WebKit::WebProcessPool::resumeDownload):
     1020        (WebKit::WebProcessPool::registerURLSchemeAsSecure):
     1021        (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
     1022        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
     1023        (WebKit::WebProcessPool::registerURLSchemeAsNoAccess):
     1024        (WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers):
     1025        (WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
     1026        (WebKit::WebProcessPool::setCacheModel):
     1027        (WebKit::WebProcessPool::setCacheModelSynchronouslyForTesting):
     1028        (WebKit::WebProcessPool::createDownloadProxy):
     1029        (WebKit::WebProcessPool::terminateServiceWorkers):
     1030        (WebKit::WebProcessPool::serviceWorkerProcesses):
     1031        (WebKit::WebProcessPool::updateProcessAssertions):
     1032        (WebKit::WebProcessPool::isServiceWorkerPageID const):
     1033        (WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess):
     1034        (WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const):
     1035        (WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const):
     1036        (WebKit::WebProcessPool::setLegacyCustomProtocolManagerClient): Deleted.
     1037        (WebKit::WebProcessPool::networkingProcessConnection): Deleted.
     1038        (WebKit::WebProcessPool::ensureNetworkProcess): Deleted.
     1039        There seems to be a lot of code removal here, but most of it was duplicate code with
     1040        WebsiteDataStore::parameters which is used instead.  That which was not duplicate was
     1041        moved to NetworkProcessProxy::sendCreationParametersToNewProcess.  This was the hardest part of this patch.
     1042        (WebKit::WebProcessPool::getNetworkProcessConnection): Deleted.
     1043        (WebKit::WebProcessPool::networkProcessIdentifier): Deleted.
     1044        (WebKit::WebProcessPool::synthesizeAppIsBackground): Deleted.
     1045        (WebKit::WebProcessPool::sendSyncToNetworkingProcess): Deleted.
     1046        (WebKit::WebProcessPool::clearCachedCredentials): Deleted.
     1047        (WebKit::WebProcessPool::terminateNetworkProcess): Deleted.
     1048        (WebKit::WebProcessPool::sendNetworkProcessPrepareToSuspendForTesting): Deleted.
     1049        (WebKit::WebProcessPool::sendNetworkProcessWillSuspendImminentlyForTesting): Deleted.
     1050        (WebKit::WebProcessPool::sendNetworkProcessDidResume): Deleted.
     1051        (WebKit::WebProcessPool::flushCookies): Deleted.
     1052        (WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer): Deleted.
     1053        * UIProcess/WebProcessPool.h:
     1054        (WebKit::WebProcessPool::sendToNetworkingProcess): Deleted.
     1055        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary): Deleted.
     1056        * UIProcess/WebProcessProxy.cpp:
     1057        (WebKit::WebProcessProxy::setWebsiteDataStore):
     1058        (WebKit::WebProcessProxy::getNetworkProcessConnection):
     1059        (WebKit::WebProcessProxy::didFinishLaunching):
     1060        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     1061        (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
     1062        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToWebProcess):
     1063        (WebKit::WebsiteDataStore::sendNetworkProcessXPCEndpointToAllWebProcesses):
     1064        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     1065        (WebKit::WebsiteDataStore::forEachWebsiteDataStore):
     1066        (WebKit::WebsiteDataStore::WebsiteDataStore):
     1067        (WebKit::WebsiteDataStore::~WebsiteDataStore):
     1068        (WebKit::WebsiteDataStore::registerWithSessionIDMap):
     1069        (WebKit::WebsiteDataStore::existingDataStoreForSessionID):
     1070        (WebKit::WebsiteDataStore::networkProcess):
     1071        (WebKit::WebsiteDataStore::networkProcess const):
     1072        (WebKit::WebsiteDataStore::fetchDataAndApply):
     1073        (WebKit::WebsiteDataStore::removeData):
     1074        (WebKit::WebsiteDataStore::setServiceWorkerTimeoutForTesting):
     1075        (WebKit::WebsiteDataStore::resetServiceWorkerTimeoutForTesting):
     1076        (WebKit::WebsiteDataStore::setMaxStatisticsEntries):
     1077        (WebKit::WebsiteDataStore::setPruneEntriesDownTo):
     1078        (WebKit::WebsiteDataStore::setGrandfatheringTime):
     1079        (WebKit::WebsiteDataStore::setMinimumTimeBetweenDataRecordsRemoval):
     1080        (WebKit::WebsiteDataStore::dumpResourceLoadStatistics):
     1081        (WebKit::WebsiteDataStore::isPrevalentResource):
     1082        (WebKit::WebsiteDataStore::isGrandfathered):
     1083        (WebKit::WebsiteDataStore::setPrevalentResource):
     1084        (WebKit::WebsiteDataStore::setPrevalentResourceForDebugMode):
     1085        (WebKit::WebsiteDataStore::isVeryPrevalentResource):
     1086        (WebKit::WebsiteDataStore::setVeryPrevalentResource):
     1087        (WebKit::WebsiteDataStore::setShouldClassifyResourcesBeforeDataRecordsRemoval):
     1088        (WebKit::WebsiteDataStore::setSubframeUnderTopFrameDomain):
     1089        (WebKit::WebsiteDataStore::isRegisteredAsSubFrameUnder):
     1090        (WebKit::WebsiteDataStore::setSubresourceUnderTopFrameDomain):
     1091        (WebKit::WebsiteDataStore::isRegisteredAsSubresourceUnder):
     1092        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectTo):
     1093        (WebKit::WebsiteDataStore::setSubresourceUniqueRedirectFrom):
     1094        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectTo):
     1095        (WebKit::WebsiteDataStore::setTopFrameUniqueRedirectFrom):
     1096        (WebKit::WebsiteDataStore::isRegisteredAsRedirectingTo):
     1097        (WebKit::WebsiteDataStore::clearPrevalentResource):
     1098        (WebKit::WebsiteDataStore::resetParametersToDefaultValues):
     1099        (WebKit::WebsiteDataStore::submitTelemetry):
     1100        (WebKit::WebsiteDataStore::scheduleClearInMemoryAndPersistent):
     1101        (WebKit::WebsiteDataStore::getResourceLoadStatisticsDataSummary):
     1102        (WebKit::WebsiteDataStore::scheduleCookieBlockingUpdate):
     1103        (WebKit::WebsiteDataStore::scheduleStatisticsAndDataRecordsProcessing):
     1104        (WebKit::WebsiteDataStore::statisticsDatabaseHasAllTables):
     1105        (WebKit::WebsiteDataStore::setLastSeen):
     1106        (WebKit::WebsiteDataStore::domainIDExistsInDatabase):
     1107        (WebKit::WebsiteDataStore::mergeStatisticForTesting):
     1108        (WebKit::WebsiteDataStore::insertExpiredStatisticForTesting):
     1109        (WebKit::WebsiteDataStore::setNotifyPagesWhenDataRecordsWereScanned):
     1110        (WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
     1111        (WebKit::WebsiteDataStore::getAllStorageAccessEntries):
     1112        (WebKit::WebsiteDataStore::setTimeToLiveUserInteraction):
     1113        (WebKit::WebsiteDataStore::logUserInteraction):
     1114        (WebKit::WebsiteDataStore::hasHadUserInteraction):
     1115        (WebKit::WebsiteDataStore::isRelationshipOnlyInDatabaseOnce):
     1116        (WebKit::WebsiteDataStore::clearUserInteraction):
     1117        (WebKit::WebsiteDataStore::setGrandfathered):
     1118        (WebKit::WebsiteDataStore::setUseITPDatabase):
     1119        (WebKit::WebsiteDataStore::setCrossSiteLoadWithLinkDecorationForTesting):
     1120        (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting):
     1121        (WebKit::WebsiteDataStore::deleteCookiesForTesting):
     1122        (WebKit::WebsiteDataStore::hasLocalStorageForTesting const):
     1123        (WebKit::WebsiteDataStore::hasIsolatedSessionForTesting const):
     1124        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldDowngradeReferrerForTesting):
     1125        (WebKit::WebsiteDataStore::setThirdPartyCookieBlockingMode):
     1126        (WebKit::WebsiteDataStore::setResourceLoadStatisticsShouldEnbleSameSiteStrictEnforcementForTesting):
     1127        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyWebsiteDataRemovalModeForTesting):
     1128        (WebKit::WebsiteDataStore::setResourceLoadStatisticsToSameSiteStrictCookiesForTesting):
     1129        (WebKit::WebsiteDataStore::setResourceLoadStatisticsFirstPartyHostCNAMEDomainForTesting):
     1130        (WebKit::WebsiteDataStore::setResourceLoadStatisticsThirdPartyCNAMEDomainForTesting):
     1131        (WebKit::WebsiteDataStore::syncLocalStorage):
     1132        (WebKit::WebsiteDataStore::setCacheMaxAgeCapForPrevalentResources):
     1133        (WebKit::WebsiteDataStore::resetCacheMaxAgeCapForPrevalentResources):
     1134        (WebKit::WebsiteDataStore::processPools const):
     1135        (WebKit::WebsiteDataStore::allowSpecificHTTPSCertificateForHost):
     1136        (WebKit::WebsiteDataStore::getNetworkProcessConnection):
     1137        (WebKit::WebsiteDataStore::networkProcessCrashed):
     1138        (WebKit::WebsiteDataStore::terminateNetworkProcess):
     1139        (WebKit::WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting):
     1140        (WebKit::WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting):
     1141        (WebKit::WebsiteDataStore::sendNetworkProcessDidResume):
     1142        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled):
     1143        (WebKit::WebsiteDataStore::setStatisticsTestingCallback):
     1144        (WebKit::WebsiteDataStore::setResourceLoadStatisticsDebugMode):
     1145        (WebKit::WebsiteDataStore::isResourceLoadStatisticsEphemeral const):
     1146        (WebKit::WebsiteDataStore::setAdClickAttributionDebugMode):
     1147        (WebKit::WebsiteDataStore::flushCookies):
     1148        (WebKit::WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket):
     1149        (WebKit::WebsiteDataStore::clearCachedCredentials):
     1150        (WebKit::WebsiteDataStore::parameters):
     1151        (WebKit::WebsiteDataStore::getLocalStorageDetails):
     1152        (WebKit::WebsiteDataStore::resetQuota):
     1153        (WebKit::WebsiteDataStore::networkProcessHasEntitlementForTesting):
     1154        (WebKit::WebsiteDataStore::renameOriginInWebsiteData):
     1155        (WebKit::WebsiteDataStore::hasAppBoundSession const):
     1156        (WebKit::WebsiteDataStore::clearAppBoundSession):
     1157        (WebKit::WebsiteDataStore::forwardAppBoundDomainsToITPIfInitialized):
     1158        (WebKit::WebsiteDataStore::setAppBoundDomainsForITP):
     1159        (WebKit::WebsiteDataStore::updateBundleIdentifierInNetworkProcess):
     1160        (WebKit::WebsiteDataStore::clearBundleIdentifierInNetworkProcess):
     1161        (WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting):
     1162        (WebKit::WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting):
     1163        (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap): Deleted.
     1164        (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID): Deleted.
     1165        (WebKit::WebsiteDataStore::processPoolForCookieStorageOperations): Deleted.
     1166        (WebKit::WebsiteDataStore::isAssociatedProcessPool const): Deleted.
     1167        (WebKit::WebsiteDataStore::pendingCookies const): Deleted.
     1168        (WebKit::WebsiteDataStore::addPendingCookie): Deleted.
     1169        (WebKit::WebsiteDataStore::removePendingCookie): Deleted.
     1170        (WebKit::WebsiteDataStore::clearPendingCookies): Deleted.
     1171        (WebKit::WebsiteDataStore::didCreateNetworkProcess): Deleted.
     1172        * UIProcess/WebsiteData/WebsiteDataStore.h:
     1173        * UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp:
     1174        (WebKit::WebsiteDataStore::setNetworkProxySettings):
     1175        * UIProcess/WebsiteData/soup/WebsiteDataStoreSoup.cpp:
     1176        (WebKit::WebsiteDataStore::platformSetNetworkParameters):
     1177        (WebKit::WebsiteDataStore::setPersistentCredentialStorageEnabled):
     1178        * UIProcess/glib/WebProcessProxyGLib.cpp:
     1179        (WebKit::WebProcessProxy::platformGetLaunchOptions):
     1180        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
     1181        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage):
     1182        * UIProcess/soup/WebProcessPoolSoup.cpp:
     1183        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     1184        (WebKit::WebProcessPool::setIgnoreTLSErrors):
     1185        (WebKit::WebProcessPool::setNetworkProxySettings):
     1186        * WebProcess/Network/NetworkProcessConnectionInfo.h:
     1187
    77311882020-09-24  Dean Jackson  <dino@apple.com>
    7741189
  • trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    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();
     
    339340    setAdClickAttributionDebugMode(parameters.enableAdClickAttributionDebugMode);
    340341
    341     SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsParameters.directoryExtensionHandle);
    342 
    343     auto sessionID = parameters.defaultDataStoreParameters.networkSessionParameters.sessionID;
    344     setSession(sessionID, NetworkSession::create(*this, WTFMove(parameters.defaultDataStoreParameters.networkSessionParameters)));
    345 
    346     SandboxExtension::consumePermanently(parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);
    347     addSessionStorageQuotaManager(sessionID, parameters.defaultDataStoreParameters.perOriginStorageQuota, parameters.defaultDataStoreParameters.perThirdPartyOriginStorageQuota, parameters.defaultDataStoreParameters.cacheStorageDirectory, parameters.defaultDataStoreParameters.cacheStorageDirectoryExtensionHandle);
    348 
    349 #if ENABLE(INDEXED_DATABASE)
    350     addIndexedDatabaseSession(sessionID, parameters.defaultDataStoreParameters.indexedDatabaseDirectory, parameters.defaultDataStoreParameters.indexedDatabaseDirectoryExtensionHandle);
    351 #endif
    352 
    353 #if ENABLE(SERVICE_WORKER)
    354     bool serviceWorkerProcessTerminationDelayEnabled = true;
    355     addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    356 #endif
    357 
    358     m_storageManagerSet->add(sessionID, parameters.defaultDataStoreParameters.localStorageDirectory, parameters.defaultDataStoreParameters.localStorageDirectoryExtensionHandle);
    359 
    360     auto* defaultSession = networkSession(PAL::SessionID::defaultSessionID());
    361     auto* defaultStorageSession = defaultSession->networkStorageSession();
    362     for (const auto& cookie : parameters.defaultDataStoreParameters.pendingCookies)
    363         defaultStorageSession->setCookie(cookie);
    364 
    365342    for (auto& supplement : m_supplements.values())
    366343        supplement->initialize(parameters);
     
    497474#endif
    498475{
    499     ASSERT(sessionID != PAL::SessionID::defaultSessionID());
    500 
    501476    auto addResult = m_networkStorageSessions.add(sessionID, nullptr);
    502477    if (!addResult.isNewEntry)
     
    513488    if (sessionID.isEphemeral())
    514489        storageSession = adoptCF(createPrivateStorageSession(cfIdentifier.get()));
    515     else
     490    else if (sessionID != PAL::SessionID::defaultSessionID())
    516491        storageSession = WebCore::NetworkStorageSession::createCFStorageSessionForIdentifier(cfIdentifier.get());
    517492
     
    536511WebCore::NetworkStorageSession* NetworkProcess::storageSession(const PAL::SessionID& sessionID) const
    537512{
    538     if (sessionID == PAL::SessionID::defaultSessionID())
    539         return &defaultStorageSession();
    540513    return m_networkStorageSessions.get(sessionID);
    541514}
    542515
    543 WebCore::NetworkStorageSession& NetworkProcess::defaultStorageSession() const
    544 {
    545     if (!m_defaultNetworkStorageSession)
    546         m_defaultNetworkStorageSession = platformCreateDefaultStorageSession();
    547     return *m_defaultNetworkStorageSession;
    548 }
    549 
    550516void NetworkProcess::forEachNetworkStorageSession(const Function<void(WebCore::NetworkStorageSession&)>& functor)
    551517{
    552     functor(defaultStorageSession());
    553518    for (auto& storageSession : m_networkStorageSessions.values())
    554519        functor(*storageSession);
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r267750 r267763  
    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)
     
    374373private:
    375374    void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&);
    376     std::unique_ptr<WebCore::NetworkStorageSession> platformCreateDefaultStorageSession() const;
    377375
    378376    void didReceiveNetworkProcessMessage(IPC::Connection&, IPC::Decoder&);
     
    543541    HashMap<PAL::SessionID, std::unique_ptr<NetworkSession>> m_networkSessions;
    544542    HashMap<PAL::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>> m_networkStorageSessions;
    545     mutable std::unique_ptr<WebCore::NetworkStorageSession> m_defaultNetworkStorageSession;
    546543
    547544    RefPtr<StorageManagerSet> m_storageManagerSet;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp

    r267750 r267763  
    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 << enableAdClickAttributionDebugMode;
    7369}
     
    114110#endif
    115111
    116     Optional<WebsiteDataStoreParameters> defaultDataStoreParameters;
    117     decoder >> defaultDataStoreParameters;
    118     if (!defaultDataStoreParameters)
    119         return false;
    120     result.defaultDataStoreParameters = WTFMove(*defaultDataStoreParameters);
    121 
    122112#if USE(SOUP)
    123113    if (!decoder.decode(result.cookieAcceptPolicy))
     
    136126        return false;
    137127
    138 #if ENABLE(SERVICE_WORKER)
    139     if (!decoder.decode(result.serviceWorkerRegistrationDirectory))
    140         return false;
    141    
    142     Optional<SandboxExtension::Handle> serviceWorkerRegistrationDirectoryExtensionHandle;
    143     decoder >> serviceWorkerRegistrationDirectoryExtensionHandle;
    144     if (!serviceWorkerRegistrationDirectoryExtensionHandle)
    145         return false;
    146     result.serviceWorkerRegistrationDirectoryExtensionHandle = WTFMove(*serviceWorkerRegistrationDirectoryExtensionHandle);
    147 
    148     if (!decoder.decode(result.shouldDisableServiceWorkerProcessTerminationDelay))
    149         return false;
    150 #endif
    151 
    152128    if (!decoder.decode(result.enableAdClickAttributionDebugMode))
    153129        return false;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h

    r267750 r267763  
    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 enableAdClickAttributionDebugMode { false };
    9183};
  • trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    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

    r267750 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    607607}
    608608
     609- (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement
     610{
     611    return _websiteDataStore->networkProcessHasEntitlementForTesting(entitlement);
     612}
     613
    609614- (id <_WKWebsiteDataStoreDelegate>)_delegate
    610615{
     
    658663}
    659664
     665- (void)_terminateNetworkProcess
     666{
     667    _websiteDataStore->terminateNetworkProcess();
     668}
     669
     670- (void)_sendNetworkProcessPrepareToSuspend:(void(^)(void))completionHandler
     671{
     672    _websiteDataStore->sendNetworkProcessPrepareToSuspendForTesting([completionHandler = makeBlockPtr(completionHandler)] {
     673        completionHandler();
     674    });
     675}
     676
     677- (void)_sendNetworkProcessWillSuspendImminently
     678{
     679    _websiteDataStore->sendNetworkProcessWillSuspendImminentlyForTesting();
     680
     681}
     682
     683- (void)_sendNetworkProcessDidResume
     684{
     685    _websiteDataStore->sendNetworkProcessDidResume();
     686}
     687
     688- (void)_synthesizeAppIsBackground:(BOOL)background
     689{
     690    _websiteDataStore->networkProcess().synthesizeAppIsBackground(background);
     691}
     692
     693- (pid_t)_networkProcessIdentifier
     694{
     695    return _websiteDataStore->networkProcess().processIdentifier();
     696}
     697
     698+ (void)_makeNextNetworkProcessLaunchFailForTesting
     699{
     700    WebKit::WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting();
     701}
     702
    660703@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h

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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

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

    r267618 r267763  
    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

    r267760 r267763  
    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)
     
    494493    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    495494
    496     {
    497         bool isSafari = false;
    498         bool isMiniBrowser = false;
    499 #if PLATFORM(IOS_FAMILY)
    500         isSafari = WebCore::IOSApplication::isMobileSafari();
    501         isMiniBrowser = WebCore::IOSApplication::isMiniBrowser();
    502 #elif PLATFORM(MAC)
    503         isSafari = WebCore::MacApplication::isSafari();
    504         isMiniBrowser = WebCore::MacApplication::isMiniBrowser();
    505 #endif
    506         if (isSafari || isMiniBrowser) {
    507             parameters.defaultDataStoreParameters.networkSessionParameters.httpProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPProxyDefaultsKey]);
    508             parameters.defaultDataStoreParameters.networkSessionParameters.httpsProxy = URL(URL(), [defaults stringForKey:(NSString *)WebKit2HTTPSProxyDefaultsKey]);
    509         }
    510     }
    511 
    512495    parameters.networkATSContext = adoptCF(_CFNetworkCopyATSContext());
    513496
     
    521504
    522505    parameters.enableAdClickAttributionDebugMode = [defaults boolForKey:[NSString stringWithFormat:@"Experimental%@", WebPreferencesKey::adClickAttributionDebugModeEnabledKey().createCFString().get()]];
    523 
    524     parameters.defaultDataStoreParameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission();
    525506}
    526507
     
    599580{
    600581    return !m_userObservablePageCounter.value() && !m_processSuppressionDisabledForPageCounter.value();
    601 }
    602 
    603 bool WebProcessPool::networkProcessHasEntitlementForTesting(const String& entitlement)
    604 {
    605     return WTF::hasEntitlement(ensureNetworkProcess().connection()->xpcConnection(), entitlement.utf8().data());
    606582}
    607583
     
    942918#endif
    943919
    944 OSObjectPtr<xpc_object_t> WebProcessPool::xpcEndpointMessage() const
    945 {
    946     return m_endpointMessage;
    947 }
    948 
    949 void WebProcessPool::sendNetworkProcessXPCEndpointToWebProcess(OSObjectPtr<xpc_object_t> endpointMessage)
    950 {
    951     m_endpointMessage = endpointMessage;
    952 
    953     for (auto process : m_processes) {
    954         if (process->state() != AuxiliaryProcessProxy::State::Running)
    955             continue;
    956         if (!process->connection())
    957             continue;
    958         auto connection = process->connection()->xpcConnection();
    959         xpc_connection_send_message(connection, endpointMessage.get());
    960     }
    961 }
    962 
    963920} // namespace WebKit
  • trunk/Source/WebKit/UIProcess/Downloads/DownloadProxy.cpp

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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/Inspector/gtk/WebInspectorProxyGtk.cpp

    r267729 r267763  
    156156    configuration->setServiceWorkerRegistrationDirectory(FileSystem::pathByAppendingComponent(baseDataDirectory, "serviceworkers"));
    157157    configuration->setDeviceIdHashSaltsStorageDirectory(FileSystem::pathByAppendingComponent(baseDataDirectory, "deviceidhashsalts"));
    158     return WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::defaultSessionID());
     158    return WebsiteDataStore::create(WTFMove(configuration), PAL::SessionID::generatePersistentSessionID());
    159159}
    160160
     
    176176    auto websiteDataStore = inspectorWebsiteDataStore();
    177177    auto& processPool = inspectorProcessPool(inspectionLevel());
    178     processPool.setPrimaryDataStore(websiteDataStore.get());
    179178
    180179    auto pageConfiguration = API::PageConfiguration::create();
  • trunk/Source/WebKit/UIProcess/Network/CustomProtocols/LegacyCustomProtocolManagerProxy.cpp

    r267618 r267763  
    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

    r267750 r267763  
    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)
     
    11991290void NetworkProcessProxy::setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain>&& domains)
    12001291{
    1201     processPool().setDomainsWithUserInteraction(WTFMove(domains));
     1292    for (auto* processPool : WebProcessPool::allProcessPools())
     1293        processPool->setDomainsWithUserInteraction(HashSet<WebCore::RegistrableDomain> { domains });
    12021294}
    12031295#endif // ENABLE(RESOURCE_LOAD_STATISTICS)
     
    12461338}
    12471339
    1248 void NetworkProcessProxy::addSession(Ref<WebsiteDataStore>&& store)
    1249 {
    1250     m_sessionIDs.add(store->sessionID());
     1340void NetworkProcessProxy::addSession(WebsiteDataStore& store)
     1341{
     1342    m_websiteDataStores.add(store);
    12511343
    12521344    if (canSendMessage())
    1253         send(Messages::NetworkProcess::AddWebsiteDataStore { store->parameters() }, 0);
    1254     auto sessionID = store->sessionID();
     1345        send(Messages::NetworkProcess::AddWebsiteDataStore { store.parameters() }, 0);
     1346    auto sessionID = store.sessionID();
    12551347    if (!sessionID.isEphemeral()) {
    12561348#if ENABLE(INDEXED_DATABASE)
    1257         createSymLinkForFileUpgrade(store->resolvedIndexedDatabaseDirectory());
    1258 #endif
    1259     }
    1260 }
    1261 
    1262 bool NetworkProcessProxy::hasSession(PAL::SessionID sessionID) const
    1263 {
    1264     return m_sessionIDs.contains(sessionID);
    1265 }
    1266 
    1267 void NetworkProcessProxy::removeSession(PAL::SessionID sessionID)
    1268 {
    1269     m_sessionIDs.remove(sessionID);
     1349        createSymLinkForFileUpgrade(store.resolvedIndexedDatabaseDirectory());
     1350#endif
     1351    }
     1352}
     1353
     1354void NetworkProcessProxy::removeSession(WebsiteDataStore& websiteDataStore)
     1355{
     1356    m_websiteDataStores.remove(websiteDataStore);
    12701357
    12711358    if (canSendMessage())
    1272         send(Messages::NetworkProcess::DestroySession { sessionID }, 0);
     1359        send(Messages::NetworkProcess::DestroySession { websiteDataStore.sessionID() }, 0);
    12731360}
    12741361
    12751362WebsiteDataStore* NetworkProcessProxy::websiteDataStoreFromSessionID(PAL::SessionID sessionID)
    12761363{
    1277     if (sessionID == PAL::SessionID::defaultSessionID()) {
    1278         if (!WebsiteDataStore::defaultDataStoreExists()) {
    1279             auto* websiteDataStore = m_processPool.websiteDataStore();
    1280             if (websiteDataStore && websiteDataStore->sessionID() == sessionID)
    1281                 return websiteDataStore;
    1282         }
    1283 
    1284         return WebsiteDataStore::defaultDataStore().ptr();
    1285     }
    1286     return WebsiteDataStore::existingNonDefaultDataStoreForSessionID(sessionID);
     1364    return WebsiteDataStore::existingDataStoreForSessionID(sessionID);
    12871365}
    12881366
     
    13311409void NetworkProcessProxy::establishWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
    13321410{
    1333     m_processPool.establishWorkerContextConnectionToNetworkProcess(*this, WTFMove(registrableDomain), sessionID, WTFMove(completionHandler));
     1411    WebProcessPool::establishWorkerContextConnectionToNetworkProcess(*this, RegistrableDomain {registrableDomain}, sessionID, WTFMove(completionHandler));
    13341412}
    13351413
     
    14941572}
    14951573
     1574static bool anyProcessPoolHasForegroundWebProcesses()
     1575{
     1576    for (auto* processPool : WebProcessPool::allProcessPools()) {
     1577        if (processPool->hasForegroundWebProcesses())
     1578            return true;
     1579    }
     1580    return false;
     1581}
     1582
     1583static bool anyProcessPoolHasBackgroundWebProcesses()
     1584{
     1585    for (auto* processPool : WebProcessPool::allProcessPools()) {
     1586        if (processPool->hasBackgroundWebProcesses())
     1587            return true;
     1588    }
     1589    return false;
     1590}
     1591
    14961592void NetworkProcessProxy::updateProcessAssertion()
    14971593{
    1498     if (processPool().hasForegroundWebProcesses()) {
     1594    if (anyProcessPoolHasForegroundWebProcesses()) {
    14991595        if (!ProcessThrottler::isValidForegroundActivity(m_activityFromWebProcesses)) {
    15001596            m_activityFromWebProcesses = throttler().foregroundActivity("Networking for foreground view(s)"_s);
     
    15031599        return;
    15041600    }
    1505     if (processPool().hasBackgroundWebProcesses()) {
     1601    if (anyProcessPoolHasBackgroundWebProcesses()) {
    15061602        if (!ProcessThrottler::isValidBackgroundActivity(m_activityFromWebProcesses)) {
    15071603            m_activityFromWebProcesses = throttler().backgroundActivity("Networking for background view(s)"_s);
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h

    r267750 r267763  
    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)>&&);
     
    206218    void updateProcessAssertion();
    207219
    208     WebProcessPool& processPool() { return m_processPool; }
    209 
    210220#if ENABLE(CONTENT_EXTENSIONS)
    211221    void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&);
    212222#endif
    213223
    214     void addSession(Ref<WebsiteDataStore>&&);
    215     bool hasSession(PAL::SessionID) const;
    216     void removeSession(PAL::SessionID);
     224    void addSession(WebsiteDataStore&);
     225    void removeSession(WebsiteDataStore&);
    217226   
    218227#if ENABLE(INDEXED_DATABASE)
     
    229238    void unregisterSchemeForLegacyCustomProtocol(const String&);
    230239
     240    void networkProcessCrashed();
     241   
    231242    void resetQuota(PAL::SessionID, CompletionHandler<void()>&&);
    232243
     
    248259    void clearBundleIdentifier(CompletionHandler<void()>&&);
    249260
     261    WebCookieManagerProxy& cookieManager() { return m_cookieManager.get(); }
     262
     263    API::CustomProtocolManagerClient& customProtocolManagerClient() { return m_customProtocolManagerClient.get(); }
     264
     265#if PLATFORM(COCOA)
     266    xpc_object_t xpcEndpointMessage() const { return m_endpointMessage.get(); }
     267#endif
     268
    250269private:
     270    explicit NetworkProcessProxy();
     271
     272    void sendCreationParametersToNewProcess();
     273
    251274    // AuxiliaryProcessProxy
    252275    ASCIILiteral processName() const final { return "Networking"_s; }
     
    256279    void processWillShutDown(IPC::Connection&) override;
    257280
    258     void networkProcessCrashed();
    259281    void clearCallbackStates();
    260282
     
    312334    void processAuthenticationChallenge(PAL::SessionID, Ref<AuthenticationChallengeProxy>&&);
    313335
    314     WebProcessPool& m_processPool;
    315 
    316336    HashMap<CallbackID, CompletionHandler<void(WebsiteData)>> m_pendingFetchWebsiteDataCallbacks;
    317337    HashMap<CallbackID, CompletionHandler<void()>> m_pendingDeleteWebsiteDataCallbacks;
     
    319339
    320340    std::unique_ptr<DownloadProxyMap> m_downloadProxyMap;
     341
     342    UniqueRef<API::CustomProtocolManagerClient> m_customProtocolManagerClient;
    321343#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
    322344    LegacyCustomProtocolManagerProxy m_customProtocolManagerProxy;
    323345#endif
     346
    324347    ProcessThrottler m_throttler;
    325348    std::unique_ptr<ProcessThrottler::BackgroundActivity> m_activityForHoldingLockedFiles;
     
    347370        WeakPtr<NetworkProcessProxy> m_networkProcess;
    348371    };
    349 #endif
    350 
    351     HashSet<PAL::SessionID> m_sessionIDs;
     372    OSObjectPtr<xpc_object_t> m_endpointMessage;
     373#endif
     374
     375    WeakHashSet<WebsiteDataStore> m_websiteDataStores;
     376    Ref<WebCookieManagerProxy> m_cookieManager;
    352377};
    353378
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxyCocoa.mm

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    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->setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [processPool, callbackAggregator] { });
    1827     }
     1679    networkProcess().setCrossSiteLoadWithLinkDecorationForTesting(m_sessionID, WebCore::RegistrableDomain { fromURL }, WebCore::RegistrableDomain { toURL }, [callbackAggregator] { });
    18281680}
    18291681
     
    18321684    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18331685   
    1834     for (auto& processPool : processPools()) {
    1835         if (auto* networkProcess = processPool->networkProcess())
    1836             networkProcess->resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { });
    1837     }
     1686    networkProcess().resetCrossSiteLoadsWithLinkDecorationForTesting(m_sessionID, [callbackAggregator] { });
    18381687}
    18391688
     
    18421691    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18431692   
    1844     for (auto& processPool : processPools()) {
    1845         if (auto* networkProcess = processPool->networkProcess())
    1846             networkProcess->deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { });
    1847     }
     1693    networkProcess().deleteCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, includeHttpOnlyCookies, [callbackAggregator] { });
    18481694}
    18491695
    18501696void WebsiteDataStore::hasLocalStorageForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const
    18511697{
    1852     for (auto& processPool : processPools()) {
    1853         if (auto* networkProcess = processPool->networkProcess()) {
    1854             networkProcess->hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1855             return;
    1856         }
    1857     }
    1858     completionHandler(false);
     1698    networkProcess().hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    18591699}
    18601700
    18611701void WebsiteDataStore::hasIsolatedSessionForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const
    18621702{
    1863     for (auto& processPool : processPools()) {
    1864         if (auto* networkProcess = processPool->networkProcess()) {
    1865             networkProcess->hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    1866             return;
    1867         }
    1868     }
    1869     completionHandler(false);
     1703    networkProcess().hasIsolatedSession(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler));
    18701704}
    18711705
     
    18741708    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    18751709   
    1876     for (auto& processPool : processPools()) {
    1877         if (auto* networkProcess = processPool->networkProcess())
    1878             networkProcess->setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { });
    1879     }
     1710    networkProcess().setShouldDowngradeReferrerForTesting(enabled, [callbackAggregator] { });
    18801711}
    18811712
     
    19081739    }
    19091740
    1910     for (auto& processPool : processPools()) {
    1911         if (auto* networkProcess = processPool->networkProcess())
    1912             networkProcess->setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { });
    1913     }
     1741    networkProcess().setThirdPartyCookieBlockingMode(m_sessionID, blockingMode, [callbackAggregator] { });
    19141742}
    19151743
     
    19191747
    19201748    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1921     for (auto& processPool : processPools()) {
    1922         if (auto* networkProcess = processPool->networkProcess())
    1923             networkProcess->setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { });
    1924     }
     1749    networkProcess().setShouldEnbleSameSiteStrictEnforcementForTesting(m_sessionID, flag, [callbackAggregator] { });
    19251750}
    19261751
     
    19301755    auto mode = enabled ? WebCore::FirstPartyWebsiteDataRemovalMode::AllButCookies : WebCore::FirstPartyWebsiteDataRemovalMode::None;
    19311756
    1932     for (auto& processPool : processPools()) {
    1933         if (auto* networkProcess = processPool->networkProcess())
    1934             networkProcess->setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { });
    1935     }
     1757    networkProcess().setFirstPartyWebsiteDataRemovalModeForTesting(m_sessionID, mode, [callbackAggregator] { });
    19361758}
    19371759
     
    19401762    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19411763
    1942     for (auto& processPool : processPools()) {
    1943         if (auto* networkProcess = processPool->networkProcess())
    1944             networkProcess->setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    1945     }
     1764    networkProcess().setToSameSiteStrictCookiesForTesting(m_sessionID, WebCore::RegistrableDomain { url }, [callbackAggregator] { });
    19461765}
    19471766
     
    19551774    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19561775
    1957     for (auto& processPool : processPools())
    1958         processPool->ensureNetworkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
     1776    networkProcess().setFirstPartyHostCNAMEDomainForTesting(m_sessionID, firstPartyURL.host().toString(), WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
    19591777}
    19601778
     
    19681786    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19691787
    1970     for (auto& processPool : processPools())
    1971         processPool->ensureNetworkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
     1788    networkProcess().setThirdPartyCNAMEDomainForTesting(m_sessionID, WebCore::RegistrableDomain { cnameURL }, [callbackAggregator] { });
    19721789}
    19731790#endif // ENABLE(RESOURCE_LOAD_STATISTICS)
     
    19751792void WebsiteDataStore::syncLocalStorage(CompletionHandler<void()>&& completionHandler)
    19761793{
    1977     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    1978     for (auto& processPool : processPools()) {
    1979         if (auto* networkProcess = processPool->networkProcess())
    1980             networkProcess->sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), [callbackAggregator] { });
    1981     }
     1794    networkProcess().sendWithAsyncReply(Messages::NetworkProcess::SyncLocalStorage(), WTFMove(completionHandler));
    19821795}
    19831796
     
    19871800    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    19881801   
    1989     for (auto& processPool : processPools())
    1990         processPool->ensureNetworkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { });
     1802    networkProcess().setCacheMaxAgeCapForPrevalentResources(m_sessionID, seconds, [callbackAggregator] { });
    19911803#else
    19921804    UNUSED_PARAM(seconds);
     
    19981810{
    19991811#if ENABLE(RESOURCE_LOAD_STATISTICS)
    2000     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2001    
    2002     for (auto& processPool : processPools()) {
    2003         if (auto* networkProcess = processPool->networkProcess())
    2004             networkProcess->resetCacheMaxAgeCapForPrevalentResources(m_sessionID, [callbackAggregator] { });
    2005     }
     1812    networkProcess().resetCacheMaxAgeCapForPrevalentResources(m_sessionID, WTFMove(completionHandler));
    20061813#else
    20071814    completionHandler();
    20081815#endif
    2009 }
    2010 
    2011 bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const
    2012 {
    2013     if (auto* processPoolDataStore = processPool.websiteDataStore())
    2014         return processPoolDataStore == this;
    2015     if (auto* networkProcessProxy = processPool.networkProcess())
    2016         return networkProcessProxy->hasSession(m_sessionID);
    2017     return false;
    20181816}
    20191817
     
    20321830        // Check if we're one of the legacy data stores.
    20331831        for (auto& processPool : WebProcessPool::allProcessPools()) {
    2034             if (!isAssociatedProcessPool(*processPool))
    2035                 continue;
    2036 
    20371832            processPools.add(processPool);
    20381833            if (processPools.size() == limit)
     
    20731868void WebsiteDataStore::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
    20741869{
    2075     for (auto& processPool : processPools())
    2076         processPool->ensureNetworkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0);
     1870    networkProcess().send(Messages::NetworkProcess::AllowSpecificHTTPSCertificateForHost(certificate->certificateInfo(), host), 0);
    20771871}
    20781872
     
    21271921        FileSystem::deleteEmptyDirectory(mediaKeyDirectory);
    21281922    }
     1923}
     1924
     1925void WebsiteDataStore::getNetworkProcessConnection(WebProcessProxy& webProcessProxy, CompletionHandler<void(const NetworkProcessConnectionInfo&)>&& reply)
     1926{
     1927    networkProcess().getNetworkProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
     1928        if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
     1929            terminateNetworkProcess();
     1930            RELEASE_LOG_IF(isPersistent(), Process, "getNetworkProcessConnection: Failed first attempt, retrying");
     1931            networkProcess().getNetworkProcessConnection(*webProcessProxy, WTFMove(reply));
     1932            return;
     1933        }
     1934        reply(connectionInfo);
     1935    });
     1936}
     1937
     1938void WebsiteDataStore::networkProcessCrashed(NetworkProcessProxy&)
     1939{
     1940    if (m_networkProcess)
     1941        m_networkProcess->didTerminate();
     1942    m_networkProcess = nullptr;
     1943}
     1944
     1945void WebsiteDataStore::terminateNetworkProcess()
     1946{
     1947    for (auto* processPool : WebProcessPool::allProcessPools())
     1948        processPool->terminateServiceWorkers();
     1949
     1950    if (!m_networkProcess)
     1951        return;
     1952    m_networkProcess->terminate();
     1953    m_networkProcess = nullptr;
     1954}
     1955
     1956void WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)
     1957{
     1958    networkProcess().sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler));
     1959}
     1960
     1961void WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting()
     1962{
     1963    networkProcess().sendProcessWillSuspendImminentlyForTesting();
     1964}
     1965
     1966void WebsiteDataStore::sendNetworkProcessDidResume()
     1967{
     1968    networkProcess().sendProcessDidResume();
    21291969}
    21301970
     
    21581998        resolveDirectoriesIfNecessary();
    21591999       
    2160         for (auto& processPool : processPools()) {
    2161             processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true));
     2000        networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, true), 0);
     2001        for (auto& processPool : processPools())
    21622002            processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(true), m_sessionID);
    2163         }
    2164         return;
    2165     }
    2166 
    2167     for (auto& processPool : processPools()) {
    2168         processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false));
     2003        return;
     2004    }
     2005
     2006    networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsEnabled(m_sessionID, false), 0);
     2007    for (auto& processPool : processPools())
    21692008        processPool->sendToAllProcessesForSession(Messages::WebProcess::SetResourceLoadStatisticsEnabled(false), m_sessionID);
    2170     }
    21712009
    21722010    m_resourceLoadStatisticsEnabled = false;
     
    21802018{
    21812019    if (callback) {
    2182         for (auto& processPool : processPools())
    2183             processPool->sendToNetworkingProcess(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true));
     2020        networkProcess().send(Messages::NetworkProcess::SetResourceLoadStatisticsLogTestingEvent(true), 0);
    21842021    }
    21852022   
     
    22002037    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    22012038   
    2202     for (auto& processPool : processPools())
    2203         processPool->ensureNetworkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { });
     2039    networkProcess().setResourceLoadStatisticsDebugMode(m_sessionID, enabled, [callbackAggregator] { });
    22042040#else
    22052041    UNUSED_PARAM(enabled);
     
    22162052    }
    22172053
    2218     for (auto& processPool : processPools()) {
    2219         if (auto* networkProcess = processPool->networkProcess()) {
    2220             networkProcess->isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler));
    2221             return;
    2222         }
    2223     }
    2224 #endif
     2054    networkProcess().isResourceLoadStatisticsEphemeral(m_sessionID, WTFMove(completionHandler));
     2055#else
    22252056    completionHandler(false);
     2057#endif
    22262058}
    22272059
    22282060void WebsiteDataStore::setAdClickAttributionDebugMode(bool enabled)
    22292061{
    2230     for (auto& processPool : processPools())
    2231         processPool->ensureNetworkProcess().setAdClickAttributionDebugMode(enabled);
     2062    networkProcess().setAdClickAttributionDebugMode(enabled);
    22322063}
    22332064
     
    22512082#endif
    22522083
    2253 Vector<WebCore::Cookie> WebsiteDataStore::pendingCookies() const
    2254 {
    2255     return copyToVector(m_pendingCookies);
    2256 }
    2257 
    2258 void WebsiteDataStore::addPendingCookie(const WebCore::Cookie& cookie)
    2259 {
    2260     m_pendingCookies.removeIf([&cookie](auto& pendingCookie) {
    2261         return pendingCookie.isKeyEqual(cookie);
    2262     });
    2263     m_pendingCookies.add(cookie);
    2264 }
    2265 
    2266 void WebsiteDataStore::removePendingCookie(const WebCore::Cookie& cookie)
    2267 {
    2268     m_pendingCookies.remove(cookie);
    2269 }
    2270    
    2271 void WebsiteDataStore::clearPendingCookies()
    2272 {
    2273     m_pendingCookies.clear();
    2274 }
    2275 
    22762084void WebsiteDataStore::flushCookies(CompletionHandler<void()>&& completionHandler)
    22772085{
    2278     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2279     for (auto processPool : WebProcessPool::allProcessPools())
    2280         processPool->flushCookies(sessionID(), [callbackAggregator] { });
     2086    networkProcess().flushCookies(sessionID(), WTFMove(completionHandler));
    22812087}
    22822088
    22832089void WebsiteDataStore::setAllowsAnySSLCertificateForWebSocket(bool allows)
    22842090{
    2285     for (auto processPool : WebProcessPool::allProcessPools()) {
    2286         if (auto* networkProcess = processPool->networkProcess())
    2287             networkProcess->sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0);
    2288     }
     2091    networkProcess().sendSync(Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket(allows), Messages::NetworkProcess::SetAllowsAnySSLCertificateForWebSocket::Reply(), 0);
    22892092}
    22902093
    22912094void WebsiteDataStore::clearCachedCredentials()
    22922095{
    2293     for (auto processPool : WebProcessPool::allProcessPools())
    2294         processPool->clearCachedCredentials(sessionID());
     2096    networkProcess().send(Messages::NetworkProcess::ClearCachedCredentials(sessionID()), 0);
    22952097}
    22962098
     
    23172119
    23182120    resolveDirectoriesIfNecessary();
    2319 
    2320     parameters.pendingCookies = pendingCookies();
    23212121
    23222122    auto resourceLoadStatisticsDirectory = m_configuration->resourceLoadStatisticsDirectory();
     
    24242224#endif
    24252225    platformSetNetworkParameters(parameters);
    2426 
     2226#if PLATFORM(COCOA)
     2227    parameters.networkSessionParameters.appHasRequestedCrossWebsiteTrackingPermission = hasRequestedCrossWebsiteTrackingPermission();
     2228#endif
     2229   
    24272230    return parameters;
    24282231}
     
    24542257}
    24552258
    2456 void WebsiteDataStore::didCreateNetworkProcess()
    2457 {
    2458 }
    2459 
    24602259void WebsiteDataStore::getLocalStorageDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler)
    24612260{
     
    24652264    }
    24662265
    2467     for (auto& processPool : ensureProcessPools()) {
    2468         processPool->ensureNetworkProcess(this).getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) {
    2469             completionHandler(WTFMove(details));
    2470         });
    2471         // FIXME: Support fetching from multiple pools.
    2472         break;
    2473     }
    2474     ASSERT(!completionHandler);
     2266    networkProcess().getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) {
     2267        completionHandler(WTFMove(details));
     2268    });
    24752269}
    24762270
     
    24782272{
    24792273    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2480     for (auto& processPool : processPools()) {
    2481         if (auto* process = processPool->networkProcess())
    2482             process->resetQuota(m_sessionID, [callbackAggregator] { });
    2483     }
     2274    networkProcess().resetQuota(m_sessionID, [callbackAggregator] { });
    24842275}
    24852276
     
    25072298    return false;
    25082299}
    2509 #endif
     2300
     2301bool WebsiteDataStore::networkProcessHasEntitlementForTesting(const String&)
     2302{
     2303    return false;
     2304}
     2305#endif // !PLATFORM(COCOA)
    25102306
    25112307#if !USE(GLIB)
     
    25192315void WebsiteDataStore::renameOriginInWebsiteData(URL&& oldName, URL&& newName, OptionSet<WebsiteDataType> dataTypes, CompletionHandler<void()>&& completionHandler)
    25202316{
    2521     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2522     for (auto& processPool : WebProcessPool::allProcessPools()) {
    2523         if (auto* networkProcess = processPool->networkProcess()) {
    2524             networkProcess->addSession(*this);
    2525             networkProcess->renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, [callbackAggregator] { });
    2526         }
    2527     }
     2317    networkProcess().renameOriginInWebsiteData(m_sessionID, oldName, newName, dataTypes, WTFMove(completionHandler));
    25282318}
    25292319
     
    25312321void WebsiteDataStore::hasAppBoundSession(CompletionHandler<void(bool)>&& completionHandler) const
    25322322{
    2533     for (auto& processPool : processPools()) {
    2534         if (auto* networkProcess = processPool->networkProcess()) {
    2535             networkProcess->hasAppBoundSession(m_sessionID, WTFMove(completionHandler));
    2536             return;
    2537         }
    2538     }
    2539     completionHandler(false);
     2323    networkProcess().hasAppBoundSession(m_sessionID, WTFMove(completionHandler));
    25402324}
    25412325
    25422326void WebsiteDataStore::clearAppBoundSession(CompletionHandler<void()>&& completionHandler)
    25432327{
    2544     auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    2545 
    2546     for (auto& processPool : processPools()) {
    2547         if (auto* networkProcess = processPool->networkProcess())
    2548             networkProcess->clearAppBoundSession(m_sessionID, [processPool, callbackAggregator] { });
    2549     }
     2328    networkProcess().clearAppBoundSession(m_sessionID, WTFMove(completionHandler));
    25502329}
    25512330
     
    25692348    propagateAppBoundDomains(globalDefaultDataStore().get(), *appBoundDomains);
    25702349
    2571     for (auto* store : nonDefaultDataStores().values())
     2350    for (auto* store : allDataStores().values())
    25722351        propagateAppBoundDomains(store, *appBoundDomains);
    25732352}
     
    25772356    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    25782357
    2579     for (auto& processPool : processPools()) {
    2580         if (auto* networkProcess = processPool->networkProcess())
    2581             networkProcess->setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { });
    2582     }
     2358    networkProcess().setAppBoundDomainsForResourceLoadStatistics(m_sessionID, domains, [callbackAggregator] { });
    25832359}
    25842360#endif
     
    25882364    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    25892365
    2590     for (auto& processPool : processPools())
    2591         processPool->ensureNetworkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { });
     2366    networkProcess().updateBundleIdentifier(bundleIdentifier, [callbackAggregator] { });
    25922367}
    25932368
     
    25962371    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
    25972372
    2598     for (auto& processPool : processPools())
    2599         processPool->ensureNetworkProcess().clearBundleIdentifier([callbackAggregator] { });
    2600 }
    2601 
    2602 }
     2373    networkProcess().clearBundleIdentifier([callbackAggregator] { });
     2374}
     2375
     2376static bool nextNetworkProcessLaunchShouldFailForTesting { false };
     2377
     2378void WebsiteDataStore::makeNextNetworkProcessLaunchFailForTesting()
     2379{
     2380    nextNetworkProcessLaunchShouldFailForTesting = true;
     2381}
     2382
     2383bool WebsiteDataStore::shouldMakeNextNetworkProcessLaunchFailForTesting()
     2384{
     2385    return std::exchange(nextNetworkProcessLaunchShouldFailForTesting, false);
     2386}
     2387
     2388}
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h

    r267750 r267763  
    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;
     
    239258    DeviceIdHashSaltStorage& deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); }
    240259
    241     WebProcessPool* processPoolForCookieStorageOperations();
    242     bool isAssociatedProcessPool(WebProcessPool&) const;
    243 
    244260    WebsiteDataStoreParameters parameters();
    245261
    246     Vector<WebCore::Cookie> pendingCookies() const;
    247     void addPendingCookie(const WebCore::Cookie&);
    248     void removePendingCookie(const WebCore::Cookie&);
    249     void clearPendingCookies();
    250262    void flushCookies(CompletionHandler<void()>&&);
    251263    void clearCachedCredentials();
     
    254266
    255267    void dispatchOnQueue(Function<void()>&&);
     268
     269#if PLATFORM(COCOA)
     270    void sendNetworkProcessXPCEndpointToWebProcess(WebProcessProxy&);
     271    void sendNetworkProcessXPCEndpointToAllWebProcesses();
     272#endif
    256273
    257274#if USE(CURL)
     
    280297#endif
    281298
    282     void didCreateNetworkProcess();
    283 
    284299    const WebsiteDataStoreConfiguration& configuration() { return m_configuration.get(); }
    285300
     
    290305
    291306    void renameOriginInWebsiteData(URL&&, URL&&, OptionSet<WebsiteDataType>, CompletionHandler<void()>&&);
     307
     308    bool networkProcessHasEntitlementForTesting(const String&);
    292309
    293310#if ENABLE(DEVICE_ORIENTATION)
     
    367384    static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
    368385
    369     void maybeRegisterWithSessionIDMap();
     386    void registerWithSessionIDMap();
    370387
    371388#if ENABLE(APP_BOUND_DOMAINS)
     
    407424#endif
    408425
    409     HashSet<WebCore::Cookie> m_pendingCookies;
    410    
    411426    WeakHashSet<WebProcessProxy> m_processes;
    412427
     
    429444
    430445    RefPtr<API::HTTPCookieStore> m_cookieStore;
     446    RefPtr<NetworkProcessProxy> m_networkProcess;
    431447
    432448#if HAVE(APP_SSO)
  • trunk/Source/WebKit/UIProcess/WebsiteData/curl/WebsiteDataStoreCurl.cpp

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    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}
  • trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnectionInfo.h

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

    r267761 r267763  
     12020-09-29  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-26  Darin Adler  <darin@apple.com>
    297
  • trunk/Tools/TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267753 r267763  
    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
     
    9192    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    9293
    93     [configuration.get().processPool _terminateNetworkProcess];
     94    [configuration.get().websiteDataStore _terminateNetworkProcess];
    9495
    9596    NSURL *url = [[NSBundle mainBundle] URLForResource:databaseName withExtension:@"sqlite3" subdirectory:@"TestWebKitAPI.resources"];
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267750 r267763  
    427427    TestWebKitAPI::Util::spinRunLoop(1);
    428428
    429     [configuration.get().processPool _terminateNetworkProcess];
     429    [configuration.get().websiteDataStore _terminateNetworkProcess];
    430430
    431431    auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    460460    TestWebKitAPI::Util::spinRunLoop(1);
    461461
    462     [configuration.get().processPool _terminateNetworkProcess];
     462    [configuration.get().websiteDataStore _terminateNetworkProcess];
    463463
    464464    auto webView3 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    12381238TEST(ResourceLoadStatistics, CanAccessDataSummaryWithNoProcessPool)
    12391239{
     1240    NSURL *itpRootURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"CanAccessDataSummaryWithNoProcessPoolTest"] isDirectory:YES];
    12401241    auto defaultFileManager = [NSFileManager defaultManager];
    1241     _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease];
    1242     auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
    1243     NSURL *itpRootURL = [[dataStore _configuration] _resourceLoadStatisticsDirectory];
    12441242    NSURL *fileURL = [itpRootURL URLByAppendingPathComponent:@"observations.db"];
    12451243    [defaultFileManager removeItemAtPath:itpRootURL.path error:nil];
     
    12521250    [defaultFileManager copyItemAtPath:newFileURL.path toPath:fileURL.path error:nil];
    12531251    EXPECT_TRUE([defaultFileManager fileExistsAtPath:fileURL.path]);
     1252
     1253    _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[_WKWebsiteDataStoreConfiguration new] autorelease];
     1254    dataStoreConfiguration._resourceLoadStatisticsDirectory = itpRootURL;
     1255    auto *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
    12541256    [dataStore _setResourceLoadStatisticsEnabled:YES];
    12551257
     
    13011303
    13021304    __block bool doneFlag = false;
    1303     [sharedProcessPool _sendNetworkProcessPrepareToSuspend:^{
    1304         doneFlag = true;
    1305     }];
    1306     TestWebKitAPI::Util::run(&doneFlag);
    1307 
    1308     [sharedProcessPool _sendNetworkProcessDidResume];
     1305    [dataStore1 _sendNetworkProcessPrepareToSuspend:^{
     1306        doneFlag = true;
     1307    }];
     1308    TestWebKitAPI::Util::run(&doneFlag);
     1309
     1310    [dataStore1 _sendNetworkProcessDidResume];
    13091311}
    13101312
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267618 r267763  
    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

    r267761 r267763  
    10351035    resetQuota();
    10361036
    1037     WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(platformContext(), true);
    1038 
    10391037    WKContextClearCurrentModifierStateForTesting(TestController::singleton().context());
    10401038
     
    12091207        WKPageGetProcessIdentifier(TestController::singleton().mainWebView()->page()), '\n',
    12101208        TestController::networkProcessName(), ": ",
    1211         WKContextGetNetworkProcessIdentifier(m_context.get()), '\n'));
     1209        WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore()), '\n'));
    12121210#else
    12131211    dumpResponse("\n"_s);
     
    21712169void TestController::networkProcessDidCrash()
    21722170{
    2173     pid_t pid = WKContextGetNetworkProcessIdentifier(m_context.get());
     2171    pid_t pid = WKWebsiteDataStoreGetNetworkProcessIdentifier(websiteDataStore());
    21742172    fprintf(stderr, "#CRASHED - %s (pid %ld)\n", networkProcessName(), static_cast<long>(pid));
    21752173    exit(1);
     
    29912989void TestController::terminateNetworkProcess()
    29922990{
    2993     WKContextTerminateNetworkProcess(platformContext());
     2991    WKWebsiteDataStoreTerminateNetworkProcess(websiteDataStore());
    29942992}
    29952993
     
    30063004void TestController::platformInitializeDataStore(WKPageConfigurationRef configuration, const TestOptions& options)
    30073005{
    3008     if (options.useEphemeralSession)
    3009         m_websiteDataStore = WKPageConfigurationGetWebsiteDataStore(configuration);
    3010     else
    3011         m_websiteDataStore = defaultWebsiteDataStore();
     3006    if (!options.useEphemeralSession)
     3007        WKPageConfigurationSetWebsiteDataStore(configuration, defaultWebsiteDataStore());
     3008
     3009    m_websiteDataStore = WKPageConfigurationGetWebsiteDataStore(configuration);
    30123010}
    30133011
     
    30223020}
    30233021
    3024 WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef contextConfiguration)
    3025 {
    3026     WKContextSetPrimaryWebsiteDataStore(context, defaultWebsiteDataStore());
     3022WKContextRef TestController::platformAdjustContext(WKContextRef context, WKContextConfigurationRef)
     3023{
    30273024    return context;
    30283025}
Note: See TracChangeset for help on using the changeset viewer.