Title: [278487] branches/safari-611-branch/Source/WebKit
Revision
278487
Author
[email protected]
Date
2021-06-04 13:24:12 -0700 (Fri, 04 Jun 2021)

Log Message

Cherry-pick r275886. rdar://problem/78874996

    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):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275886 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-611-branch/Source/WebKit/ChangeLog (278486 => 278487)


--- branches/safari-611-branch/Source/WebKit/ChangeLog	2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/ChangeLog	2021-06-04 20:24:12 UTC (rev 278487)
@@ -1,5 +1,46 @@
 2021-06-04  Alan Coon  <[email protected]>
 
+        Cherry-pick r275886. rdar://problem/78874996
+
+    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):
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-04-13  Sihui Liu  <[email protected]>
+
+            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-06-04  Alan Coon  <[email protected]>
+
         Cherry-pick r273141. rdar://problem/78875378
 
     Norton Safe Web extension is causing crashes / hangs under [WKRemoteObjectEncoder encodeObject:forKey:]

Modified: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp (278486 => 278487)


--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2021-06-04 20:24:12 UTC (rev 278487)
@@ -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: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h (278486 => 278487)


--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2021-06-04 20:24:12 UTC (rev 278487)
@@ -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: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp (278486 => 278487)


--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp	2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp	2021-06-04 20:24:12 UTC (rev 278487)
@@ -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: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp (278486 => 278487)


--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2021-06-04 20:24:12 UTC (rev 278487)
@@ -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);
     });
 }
 
@@ -388,8 +394,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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to