Title: [275886] trunk/Source/WebKit
Revision
275886
Author
sihui_...@apple.com
Date
2021-04-13 08:55:34 -0700 (Tue, 13 Apr 2021)

Log Message

StorageArea in LocalStorageNamespace can be abandoned
https://bugs.webkit.org/show_bug.cgi?id=224459

Reviewed by Geoffrey Garen.

Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).

* NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
(WebKit::LocalStorageNamespace::removeStorageArea):
* NetworkProcess/WebStorage/LocalStorageNamespace.h:
* NetworkProcess/WebStorage/StorageArea.cpp:
(WebKit::StorageArea::removeListener):
* NetworkProcess/WebStorage/StorageManagerSet.cpp:
(WebKit::StorageManagerSet::removeConnection):
(WebKit::StorageManagerSet::disconnectFromStorageArea):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (275885 => 275886)


--- trunk/Source/WebKit/ChangeLog	2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/ChangeLog	2021-04-13 15:55:34 UTC (rev 275886)
@@ -1,3 +1,21 @@
+2021-04-13  Sihui Liu  <sihui_...@apple.com>
+
+        StorageArea in LocalStorageNamespace can be abandoned
+        https://bugs.webkit.org/show_bug.cgi?id=224459
+
+        Reviewed by Geoffrey Garen.
+
+        Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).
+
+        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
+        (WebKit::LocalStorageNamespace::removeStorageArea):
+        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
+        * NetworkProcess/WebStorage/StorageArea.cpp:
+        (WebKit::StorageArea::removeListener):
+        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
+        (WebKit::StorageManagerSet::removeConnection):
+        (WebKit::StorageManagerSet::disconnectFromStorageArea):
+
 2021-04-13  Peng Liu  <peng.l...@apple.com>
 
         [macOS] Netflix videos opened in background tab never become playable after foregrounding

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp (275885 => 275886)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2021-04-13 15:55:34 UTC (rev 275886)
@@ -79,6 +79,13 @@
     }
 }
 
+
+void LocalStorageNamespace::removeStorageArea(const SecurityOriginData& origin)
+{
+    ASSERT(!RunLoop::isMain());
+    m_storageAreaMap.remove(origin);
+}
+
 Vector<SecurityOriginData> LocalStorageNamespace::ephemeralOrigins() const
 {
     ASSERT(!RunLoop::isMain());

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h (275885 => 275886)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2021-04-13 15:55:34 UTC (rev 275886)
@@ -52,6 +52,7 @@
 
     void clearStorageAreasMatchingOrigin(const WebCore::SecurityOriginData&);
     void clearAllStorageAreas();
+    void removeStorageArea(const WebCore::SecurityOriginData&);
     void flushAndClose(const WebCore::SecurityOriginData&);
 
     Vector<WebCore::SecurityOriginData> ephemeralOrigins() const;

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp (275885 => 275886)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp	2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp	2021-04-13 15:55:34 UTC (rev 275886)
@@ -70,6 +70,15 @@
 {
     ASSERT(!RunLoop::isMain());
     m_eventListeners.remove(connectionID);
+
+    if (!m_eventListeners.isEmpty())
+        return;
+
+    if (!m_localStorageNamespace)
+        return;
+
+    syncToDatabase();
+    m_localStorageNamespace->removeStorageArea(m_securityOrigin);
 }
 
 bool StorageArea::hasListener(IPC::Connection::UniqueID connectionID) const

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp (275885 => 275886)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2021-04-13 15:55:34 UTC (rev 275886)
@@ -115,11 +115,17 @@
     connection.removeWorkQueueMessageReceiver(Messages::StorageManagerSet::messageReceiverName());
 
     m_queue->dispatch([this, protectedThis = makeRef(*this), connectionID]() {
-        for (const auto& storageArea : m_storageAreas.values()) {
-            ASSERT(storageArea);
+        Vector<StorageAreaIdentifier> identifiersToRemove;
+        for (auto& [identifier, storageArea] : m_storageAreas) {
             if (storageArea)
                 storageArea->removeListener(connectionID);
+
+            if (!storageArea)
+                identifiersToRemove.append(identifier);
         }
+
+        for (auto identifier : identifiersToRemove)
+            m_storageAreas.remove(identifier);
     });
 }
 
@@ -383,8 +389,12 @@
     ASSERT(storageArea);
     ASSERT(storageArea->hasListener(connection.uniqueID()));
 
-    if (storageArea)
-        storageArea->removeListener(connection.uniqueID());
+    if (!storageArea)
+        return;
+
+    storageArea->removeListener(connection.uniqueID());
+    if (!storageArea)
+        m_storageAreas.remove(storageAreaID);
 }
 
 void StorageManagerSet::getValues(IPC::Connection& connection, StorageAreaIdentifier storageAreaID, GetValuesCallback&& completionHandler)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to