Title: [287191] trunk/Source/WebKit
Revision
287191
Author
[email protected]
Date
2021-12-17 09:25:43 -0800 (Fri, 17 Dec 2021)

Log Message

Move storage managers from the NetworkProcess to the NetworkSession class
https://bugs.webkit.org/show_bug.cgi?id=234409

Reviewed by Alex Christensen.

Move storage managers from the NetworkProcess to the NetworkSession class since they are
per session.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::lowMemoryHandler):
(WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::hasLocalStorage):
(WebKit::NetworkProcess::fetchWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
(WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
(WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
(WebKit::NetworkProcess::prepareToSuspend):
(WebKit::NetworkProcess::resume):
(WebKit::NetworkProcess::syncLocalStorage):
(WebKit::NetworkProcess::clearStorage):
(WebKit::NetworkProcess::renameOriginInWebsiteData):
(WebKit::NetworkProcess::connectionToWebProcessClosed):
(WebKit::NetworkProcess::addStorageManagerForSession): Deleted.
(WebKit::NetworkProcess::removeStorageManagerForSession): Deleted.
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::invalidateAndCancel):
(WebKit::NetworkSession::lowMemoryHandler):
(WebKit::NetworkSession::addStorageManagerSession):
* NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::storageManager):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (287190 => 287191)


--- trunk/Source/WebKit/ChangeLog	2021-12-17 17:13:11 UTC (rev 287190)
+++ trunk/Source/WebKit/ChangeLog	2021-12-17 17:25:43 UTC (rev 287191)
@@ -1,5 +1,42 @@
 2021-12-17  Chris Dumez  <[email protected]>
 
+        Move storage managers from the NetworkProcess to the NetworkSession class
+        https://bugs.webkit.org/show_bug.cgi?id=234409
+
+        Reviewed by Alex Christensen.
+
+        Move storage managers from the NetworkProcess to the NetworkSession class since they are
+        per session.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::lowMemoryHandler):
+        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
+        (WebKit::NetworkProcess::addWebsiteDataStore):
+        (WebKit::NetworkProcess::destroySession):
+        (WebKit::NetworkProcess::hasLocalStorage):
+        (WebKit::NetworkProcess::fetchWebsiteData):
+        (WebKit::NetworkProcess::deleteWebsiteData):
+        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+        (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
+        (WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
+        (WebKit::NetworkProcess::prepareToSuspend):
+        (WebKit::NetworkProcess::resume):
+        (WebKit::NetworkProcess::syncLocalStorage):
+        (WebKit::NetworkProcess::clearStorage):
+        (WebKit::NetworkProcess::renameOriginInWebsiteData):
+        (WebKit::NetworkProcess::connectionToWebProcessClosed):
+        (WebKit::NetworkProcess::addStorageManagerForSession): Deleted.
+        (WebKit::NetworkProcess::removeStorageManagerForSession): Deleted.
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::invalidateAndCancel):
+        (WebKit::NetworkSession::lowMemoryHandler):
+        (WebKit::NetworkSession::addStorageManagerSession):
+        * NetworkProcess/NetworkSession.h:
+        (WebKit::NetworkSession::storageManager):
+
+2021-12-17  Chris Dumez  <[email protected]>
+
         Unreviewed, reverting r286850.
 
         Put r282794 back in. It turns out it was an overall

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (287190 => 287191)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2021-12-17 17:13:11 UTC (rev 287190)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2021-12-17 17:25:43 UTC (rev 287191)
@@ -304,9 +304,6 @@
     forEachNetworkSession([critical](auto& session) {
         session.lowMemoryHandler(critical);
     });
-
-    for (auto& manager : m_storageManagers.values())
-        manager->handleLowMemoryWarning();
 }
 
 void NetworkProcess::initializeNetworkProcess(NetworkProcessCreationParameters&& parameters)
@@ -389,10 +386,11 @@
 
     connection.setOnLineState(NetworkStateNotifier::singleton().onLine());
 
-    if (auto* session = networkSession(sessionID))
+    if (auto* session = networkSession(sessionID)) {
         session->ensureWebIDBServer().addConnection(connection.connection(), identifier);
-    if (auto manager = m_storageManagers.get(sessionID))
-        manager->startReceivingMessageFromConnection(connection.connection());
+        if (auto* manager = session->storageManager())
+            manager->startReceivingMessageFromConnection(connection.connection());
+    }
 }
 
 void NetworkProcess::clearCachedCredentials(PAL::SessionID sessionID)
@@ -410,10 +408,10 @@
 
     RemoteNetworkingContext::ensureWebsiteDataStoreSession(*this, parameters);
 
-    addStorageManagerForSession(sessionID, parameters.generalStorageDirectory, parameters.generalStorageDirectoryHandle, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle);
     addSessionStorageQuotaManager(sessionID, parameters.perOriginStorageQuota, parameters.perThirdPartyOriginStorageQuota, parameters.cacheStorageDirectory, parameters.cacheStorageDirectoryExtensionHandle);
 
     if (auto* session = networkSession(sessionID)) {
+        session->addStorageManagerSession(parameters.generalStorageDirectory, parameters.generalStorageDirectoryHandle, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle);
         session->addIndexedDatabaseSession(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
 #if ENABLE(SERVICE_WORKER)
         session->addServiceWorkerSession(parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
@@ -440,21 +438,6 @@
     m_sessionStorageQuotaManagers.remove(sessionID);
 }
 
-void NetworkProcess::addStorageManagerForSession(PAL::SessionID sessionID, const String& generalStoragePath, SandboxExtension::Handle& generalStoragePathHandle, const String& localStoragePath, SandboxExtension::Handle& localStoragePathHandle)
-{
-    m_storageManagers.ensure(sessionID, [&] {
-        SandboxExtension::consumePermanently(generalStoragePathHandle);
-        SandboxExtension::consumePermanently(localStoragePathHandle);
-        return NetworkStorageManager::create(sessionID, generalStoragePath, localStoragePath);
-    });
-}
-
-void NetworkProcess::removeStorageManagerForSession(PAL::SessionID sessionID)
-{
-    if (auto manager = m_storageManagers.take(sessionID))
-        manager->close();
-}
-
 void NetworkProcess::forEachNetworkSession(const Function<void(NetworkSession&)>& functor)
 {
     for (auto& session : m_networkSessions.values())
@@ -556,8 +539,6 @@
     m_networkStorageSessions.remove(sessionID);
     m_sessionsControlledByAutomation.remove(sessionID);
     CacheStorage::Engine::destroyEngine(*this, sessionID);
-
-    removeStorageManagerForSession(sessionID);
 }
 
 #if ENABLE(INTELLIGENT_TRACKING_PREVENTION)
@@ -1044,12 +1025,12 @@
 
 void NetworkProcess::hasLocalStorage(PAL::SessionID sessionID, const RegistrableDomain& domain, CompletionHandler<void(bool)>&& completionHandler)
 {
-    auto iterator = m_storageManagers.find(sessionID);
-    if (iterator == m_storageManagers.end())
+    auto* session = networkSession(sessionID);
+    if (!session || !session->storageManager())
         return completionHandler(false);
 
     auto types = OptionSet<WebsiteDataType> { WebsiteDataType::LocalStorage };
-    iterator->value->fetchData(types, [domain, completionHandler = WTFMove(completionHandler)](auto entries) mutable {
+    session->storageManager()->fetchData(types, [domain, completionHandler = WTFMove(completionHandler)](auto entries) mutable {
         completionHandler(WTF::anyOf(entries, [&domain](auto& entry) {
             return domain.matches(entry.origin);
         }));
@@ -1518,12 +1499,10 @@
     }
 #endif
 
-    if (NetworkStorageManager::canHandleTypes(websiteDataTypes)) {
-        if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end()) {
-            iterator->value->fetchData(websiteDataTypes, [callbackAggregator](auto entries) mutable {
-                callbackAggregator->m_websiteData.entries.appendVector(WTFMove(entries));
-            });
-        }
+    if (NetworkStorageManager::canHandleTypes(websiteDataTypes) && session && session->storageManager()) {
+        session->storageManager()->fetchData(websiteDataTypes, [callbackAggregator](auto entries) mutable {
+            callbackAggregator->m_websiteData.entries.appendVector(WTFMove(entries));
+        });
     }
 }
 
@@ -1586,10 +1565,8 @@
         session->clearAlternativeServices(modifiedSince);
 #endif
 
-    if (NetworkStorageManager::canHandleTypes(websiteDataTypes)) {
-        if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end())
-            iterator->value->deleteDataModifiedSince(websiteDataTypes, modifiedSince, [clearTasksHandler] { });
-    }
+    if (NetworkStorageManager::canHandleTypes(websiteDataTypes) && session && session->storageManager())
+        session->storageManager()->deleteDataModifiedSince(websiteDataTypes, modifiedSince, [clearTasksHandler] { });
 }
 
 static void clearDiskCacheEntries(NetworkCache::Cache* cache, const Vector<SecurityOriginData>& origins, CompletionHandler<void()>&& completionHandler)
@@ -1684,10 +1661,8 @@
     }
 #endif
 
-    if (NetworkStorageManager::canHandleTypes(websiteDataTypes)) {
-        if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end())
-            iterator->value->deleteData(websiteDataTypes, originDatas, [clearTasksHandler] { });
-    }
+    if (NetworkStorageManager::canHandleTypes(websiteDataTypes) && session && session->storageManager())
+        session->storageManager()->deleteData(websiteDataTypes, originDatas, [clearTasksHandler] { });
 
     if (session) {
         HashSet<WebCore::RegistrableDomain> domainsToDeleteNetworkDataFor;
@@ -1887,13 +1862,11 @@
         });
     }
 
-    if (NetworkStorageManager::canHandleTypes(websiteDataTypes)) {
-        if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end()) {
-            iterator->value->deleteDataForRegistrableDomains(websiteDataTypes, domainsToDeleteAllNonCookieWebsiteDataFor, [callbackAggregator](auto&& deletedDomains) mutable {
-                for (auto domain : deletedDomains)
-                    callbackAggregator->m_domains.add(WTFMove(domain));
-            });
-        }
+    if (NetworkStorageManager::canHandleTypes(websiteDataTypes) && session && session->storageManager()) {
+        session->storageManager()->deleteDataForRegistrableDomains(websiteDataTypes, domainsToDeleteAllNonCookieWebsiteDataFor, [callbackAggregator](auto&& deletedDomains) mutable {
+            for (auto domain : deletedDomains)
+                callbackAggregator->m_domains.add(WTFMove(domain));
+        });
     }
 
     auto dataTypesForUIProcess = WebsiteData::filter(websiteDataTypes, WebsiteDataProcessType::UI);
@@ -2013,8 +1986,8 @@
         });
     }
 
-    if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end()) {
-        iterator->value->fetchData(websiteDataTypes, [callbackAggregator](auto entries) mutable {
+    if (session && session->storageManager()) {
+        session->storageManager()->fetchData(websiteDataTypes, [callbackAggregator](auto entries) mutable {
             callbackAggregator->m_websiteData.entries.appendVector(WTFMove(entries));
         });
     }
@@ -2220,13 +2193,12 @@
         if (auto* swServer = session.swServer())
             swServer->startSuspension([callbackAggregator] { });
 #endif
+        if (auto* storageManager = session.storageManager())
+            storageManager->suspend([callbackAggregator] { });
     });
 
     for (auto& connection : m_webProcessConnections.values())
         connection->cleanupForSuspension([callbackAggregator] { });
-
-    for (auto& manager : m_storageManagers.values())
-        manager->suspend([callbackAggregator] { });
 }
 
 void NetworkProcess::applicationDidEnterBackground()
@@ -2255,22 +2227,22 @@
 #endif
     PCM::Store::processDidResume();
 
+    forEachNetworkSession([](auto& session) {
 #if ENABLE(SERVICE_WORKER)
-    forEachNetworkSession([] (auto& session) {
-        if (auto swServer = session.swServer())
+        if (auto* swServer = session.swServer())
             swServer->endSuspension();
-    });
 #endif
 #if PLATFORM(IOS_FAMILY)
-    forEachNetworkSession([](auto& session) {
         if (auto* server = session.webIDBServer())
             server->resume();
+#endif
+        if (auto* manager = session.storageManager())
+            manager->resume();
     });
+
+#if PLATFORM(IOS_FAMILY)
     m_shouldSuspendIDBServers = false;
 #endif
-
-    for (auto& manager : m_storageManagers.values())
-        manager->resume();
 }
 
 void NetworkProcess::prefetchDNS(const String& hostname)
@@ -2330,8 +2302,10 @@
 void NetworkProcess::syncLocalStorage(CompletionHandler<void()>&& completionHandler)
 {
     auto aggregator = CallbackAggregator::create(WTFMove(completionHandler));
-    for (auto& manager : m_storageManagers.values())
-        manager->syncLocalStorage([aggregator] { });
+    forEachNetworkSession([&](auto& session) {
+        if (auto* manager = session.storageManager())
+            manager->syncLocalStorage([aggregator] { });
+    });
 }
 
 void NetworkProcess::resetQuota(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
@@ -2346,7 +2320,8 @@
 
 void NetworkProcess::clearStorage(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
 {
-    if (auto manager = m_storageManagers.get(sessionID))
+    auto* session = networkSession(sessionID);
+    if (auto* manager = session ? session->storageManager() : nullptr)
         manager->clearStorageForTesting(WTFMove(completionHandler));
     else
         completionHandler();
@@ -2361,13 +2336,12 @@
     if (oldOrigin.isEmpty() || newOrigin.isEmpty())
         return;
 
-    if (auto iterator = m_storageManagers.find(sessionID); iterator != m_storageManagers.end())
-        iterator->value->moveData(oldOrigin, newOrigin, [aggregator] { });
+    auto* session = networkSession(sessionID);
+    if (auto* manager = session ? session->storageManager() : nullptr)
+        manager->moveData(oldOrigin, newOrigin, [aggregator] { });
 
-    if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
-        if (auto* session = networkSession(sessionID); session && session->hasIDBDatabasePath())
-            session->ensureWebIDBServer().renameOrigin(oldOrigin, newOrigin, [aggregator] { });
-    }
+    if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && session && session->hasIDBDatabasePath())
+        session->ensureWebIDBServer().renameOrigin(oldOrigin, newOrigin, [aggregator] { });
 }
 
 #if ENABLE(SERVICE_WORKER)
@@ -2592,10 +2566,9 @@
     if (auto* session = networkSession(sessionID)) {
         if (auto* server = session->webIDBServer())
             server->removeConnection(connection);
+        if (auto* manager = session->storageManager())
+            manager->stopReceivingMessageFromConnection(connection);
     }
-
-    if (auto manager = m_storageManagers.get(sessionID))
-        manager->stopReceivingMessageFromConnection(connection);
 }
 
 NetworkConnectionToWebProcess* NetworkProcess::webProcessConnection(ProcessIdentifier identifier) const

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (287190 => 287191)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-12-17 17:13:11 UTC (rev 287190)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-12-17 17:25:43 UTC (rev 287191)
@@ -102,7 +102,6 @@
 class NetworkProcessSupplement;
 class NetworkProximityManager;
 class NetworkResourceLoader;
-class NetworkStorageManager;
 class ProcessAssertion;
 class WebPageNetworkParameters;
 enum class CallDownloadDidStart : bool;
@@ -520,9 +519,6 @@
     void addSessionStorageQuotaManager(PAL::SessionID, uint64_t defaultQuota, uint64_t defaultThirdPartyQuota, const String& cacheRootPath, SandboxExtension::Handle&);
     void removeSessionStorageQuotaManager(PAL::SessionID);
 
-    void addStorageManagerForSession(PAL::SessionID, const String& path, SandboxExtension::Handle&, const String& localStoragePath, SandboxExtension::Handle&);
-    void removeStorageManagerForSession(PAL::SessionID);
-
     // Connections to WebProcesses.
     HashMap<WebCore::ProcessIdentifier, Ref<NetworkConnectionToWebProcess>> m_webProcessConnections;
 
@@ -582,8 +578,6 @@
 
     bool m_privateClickMeasurementEnabled { true };
     bool m_ftpEnabled { false };
-
-    HashMap<PAL::SessionID, Ref<NetworkStorageManager>> m_storageManagers; // FIXME: Should move to NetworkSession.
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (287190 => 287191)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-12-17 17:13:11 UTC (rev 287190)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp	2021-12-17 17:25:43 UTC (rev 287191)
@@ -34,6 +34,7 @@
 #include "NetworkResourceLoadParameters.h"
 #include "NetworkResourceLoader.h"
 #include "NetworkSessionCreationParameters.h"
+#include "NetworkStorageManager.h"
 #include "NotificationManagerMessageHandlerMessages.h"
 #include "PingLoad.h"
 #include "PrivateClickMeasurementClientImpl.h"
@@ -201,6 +202,8 @@
 #endif
     if (auto server = std::exchange(m_webIDBServer, nullptr))
         server->close();
+    if (auto manager = std::exchange(m_storageManager, nullptr))
+        manager->close();
 #if ASSERT_ENABLED
     m_isInvalidated = true;
 #endif
@@ -560,6 +563,8 @@
     if (m_swServer)
         m_swServer->handleLowMemoryWarning();
 #endif
+    if (m_storageManager)
+        m_storageManager->handleLowMemoryWarning();
 }
 
 #if ENABLE(SERVICE_WORKER)
@@ -684,4 +689,14 @@
     }
 }
 
+void NetworkSession::addStorageManagerSession(const String& generalStoragePath, SandboxExtension::Handle& generalStoragePathHandle, const String& localStoragePath, SandboxExtension::Handle& localStoragePathHandle)
+{
+    if (m_storageManager)
+        return;
+
+    SandboxExtension::consumePermanently(generalStoragePathHandle);
+    SandboxExtension::consumePermanently(localStoragePathHandle);
+    m_storageManager = NetworkStorageManager::create(sessionID(), generalStoragePath, localStoragePath);
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (287190 => 287191)


--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-12-17 17:13:11 UTC (rev 287190)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h	2021-12-17 17:25:43 UTC (rev 287191)
@@ -67,12 +67,13 @@
 
 namespace WebKit {
 
+class NetworkBroadcastChannelRegistry;
 class NetworkDataTask;
 class NetworkLoadScheduler;
 class NetworkProcess;
 class NetworkResourceLoader;
-class NetworkBroadcastChannelRegistry;
 class NetworkSocketChannel;
+class NetworkStorageManager;
 class ServiceWorkerFetchTask;
 class WebIDBServer;
 class WebPageNetworkParameters;
@@ -210,6 +211,9 @@
     void addIndexedDatabaseSession(const String& indexedDatabaseDirectory, SandboxExtension::Handle&);
     bool hasIDBDatabasePath() const { return !m_idbDatabasePath.isEmpty(); }
 
+    NetworkStorageManager* storageManager() { return m_storageManager.get(); }
+    void addStorageManagerSession(const String& generalStoragePath, SandboxExtension::Handle& generalStoragePathHandle, const String& localStoragePath, SandboxExtension::Handle& localStoragePathHandle);
+
     NetworkLoadScheduler& networkLoadScheduler();
     PCM::ManagerInterface& privateClickMeasurement() { return m_privateClickMeasurement.get(); }
     void setPrivateClickMeasurementDebugMode(bool);
@@ -305,6 +309,8 @@
     String m_idbDatabasePath;
     RefPtr<WebIDBServer> m_webIDBServer;
 
+    RefPtr<NetworkStorageManager> m_storageManager;
+
 #if PLATFORM(COCOA)
     AppPrivacyReportTestingData m_appPrivacyReportTestingData;
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to