Title: [294562] trunk/Source/WebKit/NetworkProcess
- Revision
- 294562
- Author
- sihui_...@apple.com
- Date
- 2022-05-20 11:18:51 -0700 (Fri, 20 May 2022)
Log Message
Clear SessionStorage of a page when the page is destroyed
https://bugs.webkit.org/show_bug.cgi?id=240683
Reviewed by Chris Dumez.
We should not keep SessionStorage items in memory when they will not be accessed any more.
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::removeWebPageNetworkParameters):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::clearStorageForWebPage):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:
(WebKit::SessionStorageManager::removeNamespace):
* Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:
Canonical link: https://commits.webkit.org/250807@main
Modified Paths
Diff
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (294561 => 294562)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2022-05-20 18:15:23 UTC (rev 294561)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2022-05-20 18:18:51 UTC (rev 294562)
@@ -2766,8 +2766,10 @@
void NetworkProcess::removeWebPageNetworkParameters(PAL::SessionID sessionID, WebPageProxyIdentifier pageID)
{
- if (auto* session = networkSession(sessionID))
+ if (auto* session = networkSession(sessionID)) {
session->removeWebPageNetworkParameters(pageID);
+ session->storageManager().clearStorageForWebPage(pageID);
+ }
}
void NetworkProcess::countNonDefaultSessionSets(PAL::SessionID sessionID, CompletionHandler<void(size_t)>&& completionHandler)
Modified: trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp (294561 => 294562)
--- trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2022-05-20 18:15:23 UTC (rev 294561)
+++ trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2022-05-20 18:18:51 UTC (rev 294562)
@@ -319,6 +319,18 @@
});
}
+void NetworkStorageManager::clearStorageForWebPage(WebPageProxyIdentifier pageIdentifier)
+{
+ ASSERT(RunLoop::isMain());
+
+ m_queue->dispatch([this, protectedThis = Ref { *this }, pageIdentifier]() mutable {
+ for (auto& manager : m_localOriginStorageManagers.values()) {
+ if (auto* sessionStorageManager = manager->existingSessionStorageManager())
+ sessionStorageManager->removeNamespace(makeObjectIdentifier<StorageNamespaceIdentifierType>(pageIdentifier.toUInt64()));
+ }
+ });
+}
+
void NetworkStorageManager::didIncreaseQuota(WebCore::ClientOrigin&& origin, QuotaIncreaseRequestIdentifier identifier, std::optional<uint64_t> newQuota)
{
ASSERT(RunLoop::isMain());
Modified: trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h (294561 => 294562)
--- trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h 2022-05-20 18:15:23 UTC (rev 294561)
+++ trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h 2022-05-20 18:18:51 UTC (rev 294562)
@@ -32,6 +32,7 @@
#include "StorageAreaImplIdentifier.h"
#include "StorageAreaMapIdentifier.h"
#include "StorageNamespaceIdentifier.h"
+#include "WebPageProxyIdentifier.h"
#include "WebsiteData.h"
#include <WebCore/ClientOrigin.h>
#include <WebCore/FileSystemHandleIdentifier.h>
@@ -80,6 +81,7 @@
PAL::SessionID sessionID() const { return m_sessionID; }
void close();
void clearStorageForTesting(CompletionHandler<void()>&&);
+ void clearStorageForWebPage(WebPageProxyIdentifier);
void didIncreaseQuota(WebCore::ClientOrigin&&, QuotaIncreaseRequestIdentifier, std::optional<uint64_t> newQuota);
void fetchData(OptionSet<WebsiteDataType>, CompletionHandler<void(Vector<WebsiteData::Entry>&&)>&&);
void deleteData(OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, CompletionHandler<void()>&&);
Modified: trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp (294561 => 294562)
--- trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp 2022-05-20 18:15:23 UTC (rev 294561)
+++ trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp 2022-05-20 18:18:51 UTC (rev 294562)
@@ -62,6 +62,16 @@
storageArea->removeListener(connection);
}
+void SessionStorageManager::removeNamespace(StorageNamespaceIdentifier namespaceIdentifier)
+{
+ auto identifier = m_storageAreasByNamespace.take(namespaceIdentifier);
+ if (!identifier.isValid())
+ return;
+
+ m_storageAreas.remove(identifier);
+ m_registry.unregisterStorageArea(identifier);
+}
+
StorageAreaIdentifier SessionStorageManager::addStorageArea(std::unique_ptr<MemoryStorageArea> storageArea, StorageNamespaceIdentifier namespaceIdentifier)
{
auto identifier = storageArea->identifier();
Modified: trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h (294561 => 294562)
--- trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h 2022-05-20 18:15:23 UTC (rev 294561)
+++ trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h 2022-05-20 18:18:51 UTC (rev 294562)
@@ -47,6 +47,7 @@
bool hasDataInMemory() const;
void clearData();
void connectionClosed(IPC::Connection::UniqueID);
+ void removeNamespace(StorageNamespaceIdentifier);
StorageAreaIdentifier connectToSessionStorageArea(IPC::Connection::UniqueID, StorageAreaMapIdentifier, const WebCore::ClientOrigin&, StorageNamespaceIdentifier);
void cancelConnectToSessionStorageArea(IPC::Connection::UniqueID, StorageNamespaceIdentifier);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes