Title: [287084] trunk/Source
Revision
287084
Author
cdu...@apple.com
Date
2021-12-15 10:19:32 -0800 (Wed, 15 Dec 2021)

Log Message

Move SWServers from NetworkProcess to NetworkSession
https://bugs.webkit.org/show_bug.cgi?id=234179

Reviewed by Darin Adler.

Source/WebKit:

Move SWServers from NetworkProcess to NetworkSession since they are per session.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
(WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
(WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::lowMemoryHandler):
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::fetchWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
(WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
(WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
(WebKit::NetworkProcess::prepareToSuspend):
(WebKit::NetworkProcess::resume):
(WebKit::NetworkProcess::processPushMessage):
(WebKit::NetworkProcess::forEachSWServer): Deleted.
(WebKit::NetworkProcess::swServerForSession): Deleted.
(WebKit::NetworkProcess::existingSWOriginStoreForSession const): Deleted.
(WebKit::NetworkProcess::registerSWServerConnection): Deleted.
(WebKit::NetworkProcess::unregisterSWServerConnection): Deleted.
(WebKit::NetworkProcess::addServiceWorkerSession): Deleted.
* NetworkProcess/NetworkProcess.h:
(WebKit::NetworkProcess::swServerForSessionIfExists): Deleted.
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::lowMemoryHandler):
(WebKit::NetworkSession::swOriginStore const):
(WebKit::NetworkSession::registerSWServerConnection):
(WebKit::NetworkSession::unregisterSWServerConnection):
(WebKit::NetworkSession::ensureSWServer):
(WebKit::NetworkSession::addServiceWorkerSession):
(WebKit::NetworkSession::hasServiceWorkerDatabasePath const):
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::swServer):
* NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
(WebKit::WebSWServerConnection::WebSWServerConnection):
(WebKit::WebSWServerConnection::~WebSWServerConnection):
* WebProcess/WebPage/WebPage.h:

Source/WTF:

* wtf/MemoryPressureHandler.h:
Using a bool as underlying type for those enum classes is sufficient.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (287083 => 287084)


--- trunk/Source/WTF/ChangeLog	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WTF/ChangeLog	2021-12-15 18:19:32 UTC (rev 287084)
@@ -1,3 +1,13 @@
+2021-12-15  Chris Dumez  <cdu...@apple.com>
+
+        Move SWServers from NetworkProcess to NetworkSession
+        https://bugs.webkit.org/show_bug.cgi?id=234179
+
+        Reviewed by Darin Adler.
+
+        * wtf/MemoryPressureHandler.h:
+        Using a bool as underlying type for those enum classes is sufficient.
+
 2021-12-15  Tomoki Imai  <tomoki.i...@sony.com>
 
         [PlayStation] Use FileSystem instead of FileSystemPlayStation except several unsupported APIs

Modified: trunk/Source/WTF/wtf/MemoryPressureHandler.h (287083 => 287084)


--- trunk/Source/WTF/wtf/MemoryPressureHandler.h	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WTF/wtf/MemoryPressureHandler.h	2021-12-15 18:19:32 UTC (rev 287084)
@@ -66,8 +66,8 @@
     Inactive,
 };
 
-enum class Critical : uint8_t { No, Yes };
-enum class Synchronous : uint8_t { No, Yes };
+enum class Critical : bool { No, Yes };
+enum class Synchronous : bool { No, Yes };
 
 typedef WTF::Function<void(Critical, Synchronous)> LowMemoryHandler;
 

Modified: trunk/Source/WebKit/ChangeLog (287083 => 287084)


--- trunk/Source/WebKit/ChangeLog	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/ChangeLog	2021-12-15 18:19:32 UTC (rev 287084)
@@ -1,3 +1,51 @@
+2021-12-15  Chris Dumez  <cdu...@apple.com>
+
+        Move SWServers from NetworkProcess to NetworkSession
+        https://bugs.webkit.org/show_bug.cgi?id=234179
+
+        Reviewed by Darin Adler.
+
+        Move SWServers from NetworkProcess to NetworkSession since they are per session.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
+        (WebKit::NetworkConnectionToWebProcess::establishSWServerConnection):
+        (WebKit::NetworkConnectionToWebProcess::establishSWContextConnection):
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::lowMemoryHandler):
+        (WebKit::NetworkProcess::addWebsiteDataStore):
+        (WebKit::NetworkProcess::destroySession):
+        (WebKit::NetworkProcess::fetchWebsiteData):
+        (WebKit::NetworkProcess::deleteWebsiteData):
+        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
+        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
+        (WebKit::NetworkProcess::prepareToSuspend):
+        (WebKit::NetworkProcess::resume):
+        (WebKit::NetworkProcess::processPushMessage):
+        (WebKit::NetworkProcess::forEachSWServer): Deleted.
+        (WebKit::NetworkProcess::swServerForSession): Deleted.
+        (WebKit::NetworkProcess::existingSWOriginStoreForSession const): Deleted.
+        (WebKit::NetworkProcess::registerSWServerConnection): Deleted.
+        (WebKit::NetworkProcess::unregisterSWServerConnection): Deleted.
+        (WebKit::NetworkProcess::addServiceWorkerSession): Deleted.
+        * NetworkProcess/NetworkProcess.h:
+        (WebKit::NetworkProcess::swServerForSessionIfExists): Deleted.
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::lowMemoryHandler):
+        (WebKit::NetworkSession::swOriginStore const):
+        (WebKit::NetworkSession::registerSWServerConnection):
+        (WebKit::NetworkSession::unregisterSWServerConnection):
+        (WebKit::NetworkSession::ensureSWServer):
+        (WebKit::NetworkSession::addServiceWorkerSession):
+        (WebKit::NetworkSession::hasServiceWorkerDatabasePath const):
+        * NetworkProcess/NetworkSession.h:
+        (WebKit::NetworkSession::swServer):
+        * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
+        (WebKit::WebSWServerConnection::WebSWServerConnection):
+        (WebKit::WebSWServerConnection::~WebSWServerConnection):
+        * WebProcess/WebPage/WebPage.h:
+
 2021-12-15  Youenn Fablet  <you...@apple.com>
 
         RemoteAudioMediaStreamTrackRendererInternalUnitManager::Unit should only reset once

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2021-12-15 18:19:32 UTC (rev 287084)
@@ -499,15 +499,19 @@
     CONNECTION_RELEASE_LOG(Loading, "scheduleResourceLoad: (parentPID=%d, pageProxyID=%" PRIu64 ", webPageID=%" PRIu64 ", frameID=%" PRIu64 ", resourceID=%" PRIu64 ", existingLoaderToResume=%" PRIu64 ")", loadParameters.parentPID, loadParameters.webPageProxyID.toUInt64(), loadParameters.webPageID.toUInt64(), loadParameters.webFrameID.toUInt64(), loadParameters.identifier.toUInt64(), existingLoaderToResume.value_or(NetworkResourceLoadIdentifier { }).toUInt64());
 
 #if ENABLE(SERVICE_WORKER)
-    auto& server = m_networkProcess->swServerForSession(m_sessionID);
-    if (!server.isImportCompleted()) {
-        server.whenImportIsCompleted([this, protectedThis = Ref { *this }, loadParameters = WTFMove(loadParameters), existingLoaderToResume]() mutable {
-            if (!m_networkProcess->webProcessConnection(webProcessIdentifier()))
-                return;
-            ASSERT(m_networkProcess->swServerForSession(m_sessionID).isImportCompleted());
-            scheduleResourceLoad(WTFMove(loadParameters), existingLoaderToResume);
-        });
-        return;
+    if (auto* session = networkSession()) {
+        if (auto& server = session->ensureSWServer(); !server.isImportCompleted()) {
+            server.whenImportIsCompleted([this, protectedThis = Ref { *this }, loadParameters = WTFMove(loadParameters), existingLoaderToResume]() mutable {
+                if (!m_networkProcess->webProcessConnection(webProcessIdentifier()))
+                    return;
+
+                ASSERT(networkSession());
+                ASSERT(networkSession()->swServer());
+                ASSERT(networkSession()->swServer()->isImportCompleted());
+                scheduleResourceLoad(WTFMove(loadParameters), existingLoaderToResume);
+            });
+            return;
+        }
     }
 #endif
 
@@ -1151,7 +1155,11 @@
     if (m_swConnection)
         return;
 
-    auto& server = m_networkProcess->swServerForSession(m_sessionID);
+    auto* session = networkSession();
+    if (!session)
+        return;
+
+    auto& server = session->ensureSWServer();
     auto connection = makeUnique<WebSWServerConnection>(m_networkProcess, server, m_connection.get(), m_webProcessIdentifier);
 
     m_swConnection = *connection;
@@ -1160,8 +1168,9 @@
 
 void NetworkConnectionToWebProcess::establishSWContextConnection(WebPageProxyIdentifier webPageProxyID, RegistrableDomain&& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, CompletionHandler<void()>&& completionHandler)
 {
-    if (auto* server = m_networkProcess->swServerForSessionIfExists(m_sessionID))
-        m_swContextConnection = makeUnique<WebSWServerToContextConnection>(*this, webPageProxyID, WTFMove(registrableDomain), serviceWorkerPageIdentifier, *server);
+    auto* session = networkSession();
+    if (auto* swServer = session ? session->swServer() : nullptr)
+        m_swContextConnection = makeUnique<WebSWServerToContextConnection>(*this, webPageProxyID, WTFMove(registrableDomain), serviceWorkerPageIdentifier, *swServer);
     completionHandler();
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2021-12-15 18:19:32 UTC (rev 287084)
@@ -60,9 +60,6 @@
 #include "WebProcessPoolMessages.h"
 #include "WebPushMessage.h"
 #include "WebResourceLoadStatisticsStore.h"
-#include "WebSWOriginStore.h"
-#include "WebSWServerConnection.h"
-#include "WebSWServerToContextConnection.h"
 #include "WebsiteDataFetchOption.h"
 #include "WebsiteDataStore.h"
 #include "WebsiteDataStoreParameters.h"
@@ -81,6 +78,7 @@
 #include <WebCore/ResourceRequest.h>
 #include <WebCore/RuntimeApplicationChecks.h>
 #include <WebCore/RuntimeEnabledFeatures.h>
+#include <WebCore/SWServer.h>
 #include <WebCore/SecurityOrigin.h>
 #include <WebCore/SecurityOriginData.h>
 #include <WebCore/StorageQuotaManager.h>
@@ -116,10 +114,6 @@
 #include <WebCore/CurlContext.h>
 #endif
 
-#if ENABLE(SERVICE_WORKER)
-#include "WebSWServerToContextConnectionMessages.h"
-#endif
-
 namespace WebKit {
 using namespace WebCore;
 
@@ -309,15 +303,10 @@
 
     WTF::releaseFastMallocFreeMemory();
 
-    forEachNetworkSession([](auto& networkSession) {
-        networkSession.clearPrefetchCache();
+    forEachNetworkSession([critical](auto& networkSession) {
+        networkSession.lowMemoryHandler(critical);
     });
 
-#if ENABLE(SERVICE_WORKER)
-    for (auto& swServer : m_swServers.values())
-        swServer->handleLowMemoryWarning();
-#endif
-
     for (auto& manager : m_storageManagers.values())
         manager->handleLowMemoryWarning();
 }
@@ -425,11 +414,12 @@
 
     addIndexedDatabaseSession(sessionID, parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
 
+    RemoteNetworkingContext::ensureWebsiteDataStoreSession(*this, WTFMove(parameters));
+
 #if ENABLE(SERVICE_WORKER)
-    addServiceWorkerSession(sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
+    if (auto* session = networkSession(sessionID))
+        session->addServiceWorkerSession(parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
 #endif
-
-    RemoteNetworkingContext::ensureWebsiteDataStoreSession(*this, WTFMove(parameters));
 }
 
 void NetworkProcess::addSessionStorageQuotaManager(PAL::SessionID sessionID, uint64_t defaultQuota, uint64_t defaultThirdPartyQuota, const String& cacheRootPath, SandboxExtension::Handle& cacheRootPathHandle)
@@ -568,11 +558,6 @@
     m_sessionsControlledByAutomation.remove(sessionID);
     CacheStorage::Engine::destroyEngine(*this, sessionID);
 
-#if ENABLE(SERVICE_WORKER)
-    m_swServers.remove(sessionID);
-    m_serviceWorkerInfo.remove(sessionID);
-#endif
-
     if (auto server = m_webIDBServers.take(sessionID))
         server->close();
     removeStorageManagerForSession(sessionID);
@@ -1466,6 +1451,7 @@
     };
 
     auto callbackAggregator = adoptRef(*new CallbackAggregator(WTFMove(completionHandler)));
+    auto* networkSession = this->networkSession(sessionID);
 
     if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
         if (auto* networkStorageSession = storageSession(sessionID))
@@ -1503,9 +1489,8 @@
     }
 
 #if ENABLE(SERVICE_WORKER)
-    path = m_serviceWorkerInfo.get(sessionID).databasePath;
-    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
-        swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable {
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && networkSession && networkSession->hasServiceWorkerDatabasePath()) {
+        networkSession->ensureSWServer().getOriginsWithRegistrations([callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable {
             for (auto& origin : securityOrigins)
                 callbackAggregator->m_websiteData.entries.append({ origin, WebsiteDataType::ServiceWorkerRegistrations, 0 });
         });
@@ -1520,23 +1505,19 @@
     }
 
 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
-    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices)) {
-        if (auto* session = networkSession(sessionID)) {
-            for (auto& origin : session->hostNamesWithAlternativeServices())
-                callbackAggregator->m_websiteData.entries.append({ origin, WebsiteDataType::AlternativeServices, 0 });
-        }
+    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices) && networkSession) {
+        for (auto& origin : networkSession->hostNamesWithAlternativeServices())
+            callbackAggregator->m_websiteData.entries.append({ origin, WebsiteDataType::AlternativeServices, 0 });
     }
 #endif
 
 #if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
-    if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
-        if (auto* session = networkSession(sessionID)) {
-            if (auto* resourceLoadStatistics = session->resourceLoadStatistics()) {
-                resourceLoadStatistics->registrableDomains([callbackAggregator](auto&& domains) mutable {
-                    while (!domains.isEmpty())
-                        callbackAggregator->m_websiteData.registrableDomainsWithResourceLoadStatistics.add(domains.takeLast());
-                });
-            }
+    if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics) && networkSession) {
+        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) {
+            resourceLoadStatistics->registrableDomains([callbackAggregator](auto&& domains) mutable {
+                while (!domains.isEmpty())
+                    callbackAggregator->m_websiteData.registrableDomainsWithResourceLoadStatistics.add(domains.takeLast());
+            });
         }
     }
 #endif
@@ -1552,6 +1533,8 @@
 
 void NetworkProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, WallTime modifiedSince, CompletionHandler<void()>&& completionHandler)
 {
+    auto* networkSession = this->networkSession(sessionID);
+
 #if PLATFORM(COCOA) || USE(SOUP)
     if (websiteDataTypes.contains(WebsiteDataType::HSTSCache))
         clearHSTSCache(sessionID, modifiedSince);
@@ -1578,43 +1561,33 @@
 
 #if ENABLE(SERVICE_WORKER)
     bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations);
-    if (clearServiceWorkers && !sessionID.isEphemeral())
-        swServerForSession(sessionID).clearAll([clearTasksHandler] { });
+    if (clearServiceWorkers && !sessionID.isEphemeral() && networkSession)
+        networkSession->ensureSWServer().clearAll([clearTasksHandler] { });
 #endif
 
 #if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
     if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
-        if (auto* networkSession = this->networkSession(sessionID)) {
-            if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) {
-                auto deletedTypesRaw = websiteDataTypes.toRaw();
-                auto monitoredTypesRaw = WebResourceLoadStatisticsStore::monitoredDataTypes().toRaw();
-                
-                // If we are deleting all of the data types that the resource load statistics store monitors
-                // we do not need to re-grandfather old data.
-                auto shouldGrandfather = ((monitoredTypesRaw & deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
-                
-                resourceLoadStatistics->scheduleClearInMemoryAndPersistent(modifiedSince, shouldGrandfather, [clearTasksHandler] { });
-            }
+        if (auto* resourceLoadStatistics = networkSession ? networkSession->resourceLoadStatistics() : nullptr) {
+            // If we are deleting all of the data types that the resource load statistics store monitors
+            // we do not need to re-grandfather old data.
+            auto shouldGrandfather = websiteDataTypes.containsAll(WebResourceLoadStatisticsStore::monitoredDataTypes()) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
+            resourceLoadStatistics->scheduleClearInMemoryAndPersistent(modifiedSince, shouldGrandfather, [clearTasksHandler] { });
         }
     }
 #endif
 
-    if (auto* networkSession = this->networkSession(sessionID))
+    if (networkSession)
         networkSession->removeNetworkWebsiteData(modifiedSince, std::nullopt, [clearTasksHandler] { });
 
     if (websiteDataTypes.contains(WebsiteDataType::DiskCache) && !sessionID.isEphemeral())
         clearDiskCache(modifiedSince, [clearTasksHandler] { });
 
-    if (websiteDataTypes.contains(WebsiteDataType::PrivateClickMeasurements)) {
-        if (auto* networkSession = this->networkSession(sessionID))
-            networkSession->clearPrivateClickMeasurement([clearTasksHandler] { });
-    }
+    if (websiteDataTypes.contains(WebsiteDataType::PrivateClickMeasurements) && networkSession)
+        networkSession->clearPrivateClickMeasurement([clearTasksHandler] { });
 
 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
-    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices)) {
-        if (auto* networkSession = this->networkSession(sessionID))
-            networkSession->clearAlternativeServices(modifiedSince);
-    }
+    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices) && networkSession)
+        networkSession->clearAlternativeServices(modifiedSince);
 #endif
 
     if (NetworkStorageManager::canHandleTypes(websiteDataTypes)) {
@@ -1649,6 +1622,8 @@
 
 void NetworkProcess::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<SecurityOriginData>& originDatas, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostNames, const Vector<RegistrableDomain>& registrableDomains, CompletionHandler<void()>&& completionHandler)
 {
+    auto* networkSession = this->networkSession(sessionID);
+
     if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
         if (auto* networkStorageSession = storageSession(sessionID))
             networkStorageSession->deleteCookiesForHostnames(cookieHostNames);
@@ -1660,24 +1635,17 @@
 #endif
 
 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
-    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices)) {
-        if (auto* networkSession = this->networkSession(sessionID)) {
-            Vector<String> hosts;
-            hosts.reserveInitialCapacity(originDatas.size());
-            for (auto& origin : originDatas)
-                hosts.uncheckedAppend(origin.host);
-            networkSession->deleteAlternativeServicesForHostNames(hosts);
-        }
+    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices) && networkSession) {
+        auto hosts = originDatas.map([](auto& originData) { return originData.host; });
+        networkSession->deleteAlternativeServicesForHostNames(hosts);
     }
 #endif
 
     auto clearTasksHandler = WTF::CallbackAggregator::create(WTFMove(completionHandler));
 
-    if (websiteDataTypes.contains(WebsiteDataType::PrivateClickMeasurements)) {
-        if (auto* networkSession = this->networkSession(sessionID)) {
-            for (auto& originData : originDatas)
-                networkSession->clearPrivateClickMeasurementForRegistrableDomain(RegistrableDomain::uncheckedCreateFromHost(originData.host), [clearTasksHandler] { });
-        }
+    if (websiteDataTypes.contains(WebsiteDataType::PrivateClickMeasurements) && networkSession) {
+        for (auto& originData : originDatas)
+            networkSession->clearPrivateClickMeasurementForRegistrableDomain(RegistrableDomain::uncheckedCreateFromHost(originData.host), [clearTasksHandler] { });
     }
 
     if (websiteDataTypes.contains(WebsiteDataType::DOMCache)) {
@@ -1690,8 +1658,8 @@
 
 #if ENABLE(SERVICE_WORKER)
     bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations);
-    if (clearServiceWorkers && !sessionID.isEphemeral()) {
-        auto& server = swServerForSession(sessionID);
+    if (clearServiceWorkers && !sessionID.isEphemeral() && networkSession) {
+        auto& server = networkSession->ensureSWServer();
         for (auto& originData : originDatas)
             server.clear(originData, [clearTasksHandler] { });
     }
@@ -1712,12 +1680,10 @@
     }
 
 #if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
-    if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
-        if (auto* networkSession = this->networkSession(sessionID)) {
-            for (auto& domain : registrableDomains) {
-                if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
-                    resourceLoadStatistics->removeDataForDomain(domain, [clearTasksHandler] { });
-            }
+    if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics) && networkSession) {
+        for (auto& domain : registrableDomains) {
+            if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+                resourceLoadStatistics->removeDataForDomain(domain, [clearTasksHandler] { });
         }
     }
 #endif
@@ -1727,7 +1693,7 @@
             iterator->value->deleteData(websiteDataTypes, originDatas, [clearTasksHandler] { });
     }
 
-    if (auto* networkSession = this->networkSession(sessionID)) {
+    if (networkSession) {
         HashSet<WebCore::RegistrableDomain> domainsToDeleteNetworkDataFor;
         for (auto& originData : originDatas)
             domainsToDeleteNetworkDataFor.add(WebCore::RegistrableDomain::uncheckedCreateFromHost(originData.host));
@@ -1781,6 +1747,8 @@
 
 void NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, RegistrableDomainsToDeleteOrRestrictWebsiteDataFor&& domains, bool shouldNotifyPage, CompletionHandler<void(const HashSet<RegistrableDomain>&)>&& completionHandler)
 {
+    auto* networkSession = this->networkSession(sessionID);
+
     OptionSet<WebsiteDataFetchOption> fetchOptions = WebsiteDataFetchOption::DoNotCreateProcesses;
 
     struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
@@ -1845,14 +1813,9 @@
 #endif
 
 #if HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
-    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices)) {
-        if (auto* networkSession = this->networkSession(sessionID)) {
-            Vector<String> registrableDomainsToDelete;
-            registrableDomainsToDelete.reserveInitialCapacity(domainsToDeleteAllNonCookieWebsiteDataFor.size());
-            for (auto& domain : domainsToDeleteAllNonCookieWebsiteDataFor)
-                registrableDomainsToDelete.uncheckedAppend(domain.string());
-            networkSession->deleteAlternativeServicesForHostNames(registrableDomainsToDelete);
-        }
+    if (websiteDataTypes.contains(WebsiteDataType::AlternativeServices) && networkSession) {
+        auto registrableDomainsToDelete = domainsToDeleteAllNonCookieWebsiteDataFor.map([](auto& domain) { return domain.string(); });
+        networkSession->deleteAlternativeServicesForHostNames(registrableDomainsToDelete);
     }
 #endif
 
@@ -1894,15 +1857,15 @@
     }
     
 #if ENABLE(SERVICE_WORKER)
-    path = m_serviceWorkerInfo.get(sessionID).databasePath;
     bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations);
-    if (clearServiceWorkers && !path.isEmpty()) {
-        swServerForSession(sessionID).getOriginsWithRegistrations([this, sessionID, domainsToDeleteAllNonCookieWebsiteDataFor, callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable {
+    if (clearServiceWorkers && networkSession && networkSession->hasServiceWorkerDatabasePath()) {
+        networkSession->ensureSWServer().getOriginsWithRegistrations([domainsToDeleteAllNonCookieWebsiteDataFor, callbackAggregator, networkSession = WeakPtr { *networkSession }](const HashSet<SecurityOriginData>& securityOrigins) mutable {
             for (auto& securityOrigin : securityOrigins) {
                 if (!domainsToDeleteAllNonCookieWebsiteDataFor.contains(RegistrableDomain::uncheckedCreateFromHost(securityOrigin.host)))
                     continue;
                 callbackAggregator->m_domains.add(RegistrableDomain::uncheckedCreateFromHost(securityOrigin.host));
-                swServerForSession(sessionID).clear(securityOrigin, [callbackAggregator] { });
+                if (networkSession)
+                    networkSession->ensureSWServer().clear(securityOrigin, [callbackAggregator] { });
             }
         });
     }
@@ -1964,6 +1927,8 @@
 
 void NetworkProcess::registrableDomainsWithWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, bool shouldNotifyPage, CompletionHandler<void(HashSet<RegistrableDomain>&&)>&& completionHandler)
 {
+    auto* networkSession = this->networkSession(sessionID);
+
     OptionSet<WebsiteDataFetchOption> fetchOptions = WebsiteDataFetchOption::DoNotCreateProcesses;
     
     struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
@@ -2037,9 +2002,8 @@
     }
     
 #if ENABLE(SERVICE_WORKER)
-    path = m_serviceWorkerInfo.get(sessionID).databasePath;
-    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) {
-        swServerForSession(sessionID).getOriginsWithRegistrations([callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable {
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && networkSession && networkSession->hasServiceWorkerDatabasePath()) {
+        networkSession->ensureSWServer().getOriginsWithRegistrations([callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable {
             for (auto& securityOrigin : securityOrigins)
                 callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::ServiceWorkerRegistrations, 0 });
         });
@@ -2253,18 +2217,15 @@
 
     forEachNetworkSession([&] (auto& networkSession) {
         platformFlushCookies(networkSession.sessionID(), [callbackAggregator] { });
+#if ENABLE(SERVICE_WORKER)
+        if (auto* swServer = networkSession.swServer())
+            swServer->startSuspension([callbackAggregator] { });
+#endif
     });
 
     for (auto& connection : m_webProcessConnections.values())
         connection->cleanupForSuspension([callbackAggregator] { });
 
-#if ENABLE(SERVICE_WORKER)
-    for (auto& server : m_swServers.values()) {
-        ASSERT(m_swServers.get(server->sessionID()) == server.get());
-        server->startSuspension([callbackAggregator] { });
-    }
-#endif
-
     for (auto& manager : m_storageManagers.values())
         manager->suspend([callbackAggregator] { });
 }
@@ -2296,8 +2257,10 @@
     PCM::Store::processDidResume();
 
 #if ENABLE(SERVICE_WORKER)
-    for (auto& server : m_swServers.values())
-        server->endSuspension();
+    forEachNetworkSession([&] (auto& networkSession) {
+        if (auto swServer = networkSession.swServer())
+            swServer->endSuspension();
+    });
 #endif
 #if PLATFORM(IOS_FAMILY)
     for (auto& server : m_webIDBServers.values())
@@ -2445,76 +2408,6 @@
 }
 
 #if ENABLE(SERVICE_WORKER)
-void NetworkProcess::forEachSWServer(const Function<void(SWServer&)>& callback)
-{
-    for (auto& server : m_swServers.values())
-        callback(*server);
-}
-
-SWServer& NetworkProcess::swServerForSession(PAL::SessionID sessionID)
-{
-    auto result = m_swServers.ensure(sessionID, [&] {
-        auto info = m_serviceWorkerInfo.get(sessionID);
-        auto path = info.databasePath;
-        // There should already be a registered path for this PAL::SessionID.
-        // If there's not, then where did this PAL::SessionID come from?
-        ASSERT(sessionID.isEphemeral() || !path.isEmpty());
-        
-#if ENABLE(APP_BOUND_DOMAINS)
-        auto appBoundDomainsCallback = [this, sessionID](auto&& completionHandler) {
-            parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::GetAppBoundDomains { sessionID }, WTFMove(completionHandler), 0);
-        };
-#else
-        auto appBoundDomainsCallback = [] (auto&& completionHandler) {
-            completionHandler({ });
-        };
-#endif
-        bool shouldRunServiceWorkersOnMainThreadForTesting = false;
-        if (auto* session = networkSession(sessionID))
-            shouldRunServiceWorkersOnMainThreadForTesting = session->shouldRunServiceWorkersOnMainThreadForTesting();
-        return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, shouldRunServiceWorkersOnMainThreadForTesting, parentProcessHasServiceWorkerEntitlement(), [this, sessionID](auto&& jobData, bool shouldRefreshCache, auto&& request, auto&& completionHandler) mutable {
-            ServiceWorkerSoftUpdateLoader::start(networkSession(sessionID), WTFMove(jobData), shouldRefreshCache, WTFMove(request), WTFMove(completionHandler));
-        }, [this, sessionID](auto& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, auto&& completionHandler) {
-            ASSERT(!registrableDomain.isEmpty());
-            parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, serviceWorkerPageIdentifier, sessionID }, WTFMove(completionHandler), 0);
-        }, WTFMove(appBoundDomainsCallback));
-    });
-    return *result.iterator->value;
-}
-
-WebSWOriginStore* NetworkProcess::existingSWOriginStoreForSession(PAL::SessionID sessionID) const
-{
-    auto* swServer = m_swServers.get(sessionID);
-    if (!swServer)
-        return nullptr;
-    return &static_cast<WebSWOriginStore&>(swServer->originStore());
-}
-
-void NetworkProcess::registerSWServerConnection(WebSWServerConnection& connection)
-{
-    auto* store = existingSWOriginStoreForSession(connection.sessionID());
-    ASSERT(store);
-    if (store)
-        store->registerSWServerConnection(connection);
-}
-
-void NetworkProcess::unregisterSWServerConnection(WebSWServerConnection& connection)
-{
-    if (auto* store = existingSWOriginStoreForSession(connection.sessionID()))
-        store->unregisterSWServerConnection(connection);
-}
-
-void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
-{
-    ServiceWorkerInfo info {
-        WTFMove(serviceWorkerRegistrationDirectory),
-        processTerminationDelayEnabled
-    };
-    auto addResult = m_serviceWorkerInfo.add(sessionID, WTFMove(info));
-    if (addResult.isNewEntry)
-        SandboxExtension::consumePermanently(handle);
-}
-
 void NetworkProcess::getPendingPushMessages(PAL::SessionID sessionID, CompletionHandler<void(const Vector<WebPushMessage>&)>&& callback)
 {
 #if ENABLE(BUILT_IN_NOTIFICATIONS)
@@ -2528,7 +2421,8 @@
 
 void NetworkProcess::processPushMessage(PAL::SessionID sessionID, WebPushMessage&& pushMessage, CompletionHandler<void(bool)>&& callback)
 {
-    swServerForSession(sessionID).processPushMessage(WTFMove(pushMessage.pushData), WTFMove(pushMessage.registrationURL), WTFMove(callback));
+    if (auto* session = networkSession(sessionID))
+        session->ensureSWServer().processPushMessage(WTFMove(pushMessage.pushData), WTFMove(pushMessage.registrationURL), WTFMove(callback));
 }
 #endif // ENABLE(SERVICE_WORKER)
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-12-15 18:19:32 UTC (rev 287084)
@@ -85,7 +85,6 @@
 class StorageQuotaManager;
 class NetworkStorageSession;
 class ResourceError;
-class SWServer;
 class UserContentURLPattern;
 enum class HTTPCookieAcceptPolicy : uint8_t;
 enum class IncludeHttpOnlyCookies : bool;
@@ -108,8 +107,6 @@
 class NetworkStorageManager;
 class ProcessAssertion;
 class WebPageNetworkParameters;
-class WebSWServerConnection;
-class WebSWServerToContextConnection;
 enum class CallDownloadDidStart : bool;
 enum class ShouldGrandfatherStatistics : bool;
 enum class StorageAccessStatus : uint8_t;
@@ -119,10 +116,6 @@
 struct WebPushMessage;
 struct WebsiteDataStoreParameters;
 
-#if ENABLE(SERVICE_WORKER)
-class WebSWOriginStore;
-#endif
-
 namespace NetworkCache {
 enum class CacheOption : uint8_t;
 }
@@ -308,15 +301,6 @@
     void clearStorage(PAL::SessionID, CompletionHandler<void()>&&);
     void renameOriginInWebsiteData(PAL::SessionID, const URL&, const URL&, OptionSet<WebsiteDataType>, CompletionHandler<void()>&&);
 
-#if ENABLE(SERVICE_WORKER)
-    WebCore::SWServer* swServerForSessionIfExists(PAL::SessionID sessionID) { return m_swServers.get(sessionID); }
-    WebCore::SWServer& swServerForSession(PAL::SessionID);
-    void registerSWServerConnection(WebSWServerConnection&);
-    void unregisterSWServerConnection(WebSWServerConnection&);
-    
-    void forEachSWServer(const Function<void(WebCore::SWServer&)>&);
-#endif
-
 #if PLATFORM(IOS_FAMILY)
     bool parentProcessHasServiceWorkerEntitlement() const;
     void disableServiceWorkerEntitlement();
@@ -500,18 +484,6 @@
     void removeWebIDBServerIfPossible(PAL::SessionID);
     void suspendIDBServers(bool isSuspensionImminent);
 
-#if ENABLE(SERVICE_WORKER)
-    void didCreateWorkerContextProcessConnection(const IPC::Attachment&);
-
-    void postMessageToServiceWorker(PAL::SessionID, WebCore::ServiceWorkerIdentifier destination, WebCore::MessageWithMessagePorts&&, const WebCore::ServiceWorkerOrClientIdentifier& source, WebCore::SWServerConnectionIdentifier);
-    
-    void disableServiceWorkerProcessTerminationDelay();
-    
-    WebSWOriginStore* existingSWOriginStoreForSession(PAL::SessionID) const;
-
-    void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
-#endif
-
 #if PLATFORM(IOS_FAMILY)
     void setIsHoldingLockedFiles(bool);
 #endif
@@ -598,15 +570,6 @@
     bool m_shouldSuspendIDBServers { false };
     uint64_t m_suspensionIdentifier { 0 };
     
-#if ENABLE(SERVICE_WORKER)
-    struct ServiceWorkerInfo {
-        String databasePath;
-        bool processTerminationDelayEnabled { true };
-    };
-    HashMap<PAL::SessionID, ServiceWorkerInfo> m_serviceWorkerInfo;
-    HashMap<PAL::SessionID, std::unique_ptr<WebCore::SWServer>> m_swServers;
-#endif
-    
 #if ENABLE(WEB_RTC)
     RefPtr<RTCDataChannelRemoteManagerProxy> m_rtcDataChannelProxy;
 #endif

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-12-15 18:19:32 UTC (rev 287084)
@@ -43,6 +43,7 @@
 #include "WebPageProxy.h"
 #include "WebPageProxyMessages.h"
 #include "WebProcessProxy.h"
+#include "WebSWOriginStore.h"
 #include "WebSocketTask.h"
 #include <WebCore/CookieJar.h>
 #include <WebCore/ResourceRequest.h>
@@ -547,7 +548,17 @@
     return m_attributedBundleIdentifierFromPageIdentifiers.get(identifier);
 }
 
+void NetworkSession::lowMemoryHandler(Critical)
+{
+    clearPrefetchCache();
+
 #if ENABLE(SERVICE_WORKER)
+    if (m_swServer)
+        m_swServer->handleLowMemoryWarning();
+#endif
+}
+
+#if ENABLE(SERVICE_WORKER)
 void NetworkSession::addNavigationPreloaderTask(ServiceWorkerFetchTask& task)
 {
     m_navigationPreloaders.add(task.fetchIdentifier(), task);
@@ -562,6 +573,70 @@
 {
     return m_navigationPreloaders.get(identifier).get();
 }
+
+WebSWOriginStore* NetworkSession::swOriginStore() const
+{
+    return m_swServer ? &static_cast<WebSWOriginStore&>(m_swServer->originStore()) : nullptr;
+}
+
+void NetworkSession::registerSWServerConnection(WebSWServerConnection& connection)
+{
+    auto* store = swOriginStore();
+    ASSERT(store);
+    if (store)
+        store->registerSWServerConnection(connection);
+}
+
+void NetworkSession::unregisterSWServerConnection(WebSWServerConnection& connection)
+{
+    if (auto* store = swOriginStore())
+        store->unregisterSWServerConnection(connection);
+}
+
+SWServer& NetworkSession::ensureSWServer()
+{
+    if (!m_swServer) {
+        auto info = m_serviceWorkerInfo.value_or(ServiceWorkerInfo { });
+        auto path = info.databasePath;
+        // There should already be a registered path for this PAL::SessionID.
+        // If there's not, then where did this PAL::SessionID come from?
+        ASSERT(m_sessionID.isEphemeral() || !path.isEmpty());
+
+#if ENABLE(APP_BOUND_DOMAINS)
+        auto appBoundDomainsCallback = [this](auto&& completionHandler) {
+            m_networkProcess->parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::GetAppBoundDomains { m_sessionID }, WTFMove(completionHandler), 0);
+        };
+#else
+        auto appBoundDomainsCallback = [] (auto&& completionHandler) {
+            completionHandler({ });
+        };
 #endif
+        m_swServer = makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), m_sessionID, shouldRunServiceWorkersOnMainThreadForTesting(), m_networkProcess->parentProcessHasServiceWorkerEntitlement(), [this](auto&& jobData, bool shouldRefreshCache, auto&& request, auto&& completionHandler) mutable {
+            ServiceWorkerSoftUpdateLoader::start(this, WTFMove(jobData), shouldRefreshCache, WTFMove(request), WTFMove(completionHandler));
+        }, [this](auto& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, auto&& completionHandler) {
+            ASSERT(!registrableDomain.isEmpty());
+            m_networkProcess->parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, serviceWorkerPageIdentifier, m_sessionID }, WTFMove(completionHandler), 0);
+        }, WTFMove(appBoundDomainsCallback));
+    }
+    return *m_swServer;
+}
 
+void NetworkSession::addServiceWorkerSession(bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
+{
+    bool hadServiceWorkerInfo = !!m_serviceWorkerInfo;
+    m_serviceWorkerInfo = ServiceWorkerInfo {
+        WTFMove(serviceWorkerRegistrationDirectory),
+        processTerminationDelayEnabled
+    };
+    if (!hadServiceWorkerInfo)
+        SandboxExtension::consumePermanently(handle);
+}
+
+bool NetworkSession::hasServiceWorkerDatabasePath() const
+{
+    return m_serviceWorkerInfo && !m_serviceWorkerInfo->databasePath.isEmpty();
+}
+
+#endif // ENABLE(SERVICE_WORKER)
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-12-15 18:19:32 UTC (rev 287084)
@@ -55,11 +55,16 @@
 class NetworkStorageSession;
 class ResourceRequest;
 class ResourceError;
+class SWServer;
 enum class IncludeHttpOnlyCookies : bool;
 enum class ShouldSample : bool;
 struct SecurityOriginData;
 }
 
+namespace WTF {
+enum class Critical : bool;
+}
+
 namespace WebKit {
 
 class NetworkDataTask;
@@ -72,6 +77,8 @@
 class WebPageNetworkParameters;
 class WebResourceLoadStatisticsStore;
 class WebSocketTask;
+class WebSWOriginStore;
+class WebSWServerConnection;
 struct NetworkSessionCreationParameters;
 struct SessionSet;
 
@@ -176,6 +183,8 @@
 
     bool isStaleWhileRevalidateEnabled() const { return m_isStaleWhileRevalidateEnabled; }
 
+    void lowMemoryHandler(WTF::Critical);
+
 #if ENABLE(SERVICE_WORKER)
     void addSoftUpdateLoader(std::unique_ptr<ServiceWorkerSoftUpdateLoader>&& loader) { m_softUpdateLoaders.add(WTFMove(loader)); }
     void removeSoftUpdateLoader(ServiceWorkerSoftUpdateLoader* loader) { m_softUpdateLoaders.remove(loader); }
@@ -182,6 +191,16 @@
     void addNavigationPreloaderTask(ServiceWorkerFetchTask&);
     ServiceWorkerFetchTask* navigationPreloaderTaskFromFetchIdentifier(WebCore::FetchIdentifier);
     void removeNavigationPreloaderTask(ServiceWorkerFetchTask&);
+
+    WebCore::SWServer* swServer() { return m_swServer.get(); }
+    WebCore::SWServer& ensureSWServer();
+    WebSWOriginStore* swOriginStore() const; // FIXME: Can be private?
+    void registerSWServerConnection(WebSWServerConnection&);
+    void unregisterSWServerConnection(WebSWServerConnection&);
+
+    bool hasServiceWorkerDatabasePath() const;
+
+    void addServiceWorkerSession(bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
 #endif
 
     NetworkLoadScheduler& networkLoadScheduler();
@@ -267,6 +286,13 @@
 #if ENABLE(SERVICE_WORKER)
     HashSet<std::unique_ptr<ServiceWorkerSoftUpdateLoader>> m_softUpdateLoaders;
     HashMap<WebCore::FetchIdentifier, WeakPtr<ServiceWorkerFetchTask>> m_navigationPreloaders;
+
+    struct ServiceWorkerInfo {
+        String databasePath;
+        bool processTerminationDelayEnabled { true };
+    };
+    std::optional<ServiceWorkerInfo> m_serviceWorkerInfo;
+    std::unique_ptr<WebCore::SWServer> m_swServer;
 #endif
 
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp (287083 => 287084)


--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp	2021-12-15 18:19:32 UTC (rev 287084)
@@ -35,6 +35,7 @@
 #include "NetworkProcess.h"
 #include "NetworkProcessProxyMessages.h"
 #include "NetworkResourceLoader.h"
+#include "NetworkSession.h"
 #include "WebCoreArgumentCoders.h"
 #include "WebProcess.h"
 #include "WebProcessMessages.h"
@@ -69,12 +70,14 @@
     , m_contentConnection(connection)
     , m_networkProcess(networkProcess)
 {
-    networkProcess.registerSWServerConnection(*this);
+    if (auto* session = this->session())
+        session->registerSWServerConnection(*this);
 }
 
 WebSWServerConnection::~WebSWServerConnection()
 {
-    m_networkProcess->unregisterSWServerConnection(*this);
+    if (auto* session = this->session())
+        session->unregisterSWServerConnection(*this);
     for (const auto& keyValue : m_clientOrigins)
         server().unregisterServiceWorkerClient(keyValue.value, keyValue.key);
     for (auto& completionHandler : m_unregisterJobs.values())

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (287083 => 287084)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-12-15 18:09:48 UTC (rev 287083)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-12-15 18:19:32 UTC (rev 287084)
@@ -173,7 +173,7 @@
 #define ENABLE_VIEWPORT_RESIZING PLATFORM(IOS_FAMILY)
 
 namespace WTF {
-enum class Critical : uint8_t;
+enum class Critical : bool;
 }
 
 namespace API {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to