Title: [287090] trunk/Source/WebKit
Revision
287090
Author
sihui_...@apple.com
Date
2021-12-15 11:42:28 -0800 (Wed, 15 Dec 2021)

Log Message

REGRESSION (r286936): Many webstorage layout tests have become flaky failures
https://bugs.webkit.org/show_bug.cgi?id=234274
<rdar://problem/86434478>

Reviewed by Chris Dumez.

Connection (listener) is not added properly to existing MemoryStorageAreas, so events are not dispatched.
Also according to the old behavior, we don't add connection (listener) to StorageArea when creating it, but when
there is a connection message.

* NetworkProcess/storage/SessionStorageManager.cpp:
(WebKit::SessionStorageManager::addStorageArea):
(WebKit::SessionStorageManager::connectToSessionStorageArea):
(WebKit::SessionStorageManager::cloneStorageArea):
* NetworkProcess/storage/SessionStorageManager.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (287089 => 287090)


--- trunk/Source/WebKit/ChangeLog	2021-12-15 19:37:58 UTC (rev 287089)
+++ trunk/Source/WebKit/ChangeLog	2021-12-15 19:42:28 UTC (rev 287090)
@@ -1,3 +1,21 @@
+2021-12-15  Sihui Liu  <sihui_...@apple.com>
+
+        REGRESSION (r286936): Many webstorage layout tests have become flaky failures
+        https://bugs.webkit.org/show_bug.cgi?id=234274
+        <rdar://problem/86434478>
+
+        Reviewed by Chris Dumez.
+
+        Connection (listener) is not added properly to existing MemoryStorageAreas, so events are not dispatched.
+        Also according to the old behavior, we don't add connection (listener) to StorageArea when creating it, but when
+        there is a connection message.
+
+        * NetworkProcess/storage/SessionStorageManager.cpp:
+        (WebKit::SessionStorageManager::addStorageArea):
+        (WebKit::SessionStorageManager::connectToSessionStorageArea):
+        (WebKit::SessionStorageManager::cloneStorageArea):
+        * NetworkProcess/storage/SessionStorageManager.h:
+
 2021-12-15  Chris Dumez  <cdu...@apple.com>
 
         Move SWServers from NetworkProcess to NetworkSession

Modified: trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp (287089 => 287090)


--- trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp	2021-12-15 19:37:58 UTC (rev 287089)
+++ trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp	2021-12-15 19:42:28 UTC (rev 287090)
@@ -62,11 +62,10 @@
         storageArea->removeListener(connection);
 }
 
-StorageAreaIdentifier SessionStorageManager::addStorageArea(std::unique_ptr<MemoryStorageArea> storageArea, IPC::Connection::UniqueID connection, StorageNamespaceIdentifier namespaceIdentifier)
+StorageAreaIdentifier SessionStorageManager::addStorageArea(std::unique_ptr<MemoryStorageArea> storageArea, StorageNamespaceIdentifier namespaceIdentifier)
 {
     auto identifier = storageArea->identifier();
     m_registry.registerStorageArea(identifier, *storageArea);
-    storageArea->addListener(connection);
     m_storageAreasByNamespace.add(namespaceIdentifier, identifier);
     m_storageAreas.add(identifier, WTFMove(storageArea));
 
@@ -76,13 +75,17 @@
 StorageAreaIdentifier SessionStorageManager::connectToSessionStorageArea(IPC::Connection::UniqueID connection, const WebCore::ClientOrigin& origin, StorageNamespaceIdentifier namespaceIdentifier)
 {
     auto identifier = m_storageAreasByNamespace.get(namespaceIdentifier);
-    if (identifier.isValid()) {
-        ASSERT(m_storageAreas.contains(identifier));
-        return identifier;
+    if (!identifier.isValid()) {
+        auto newStorageArea = makeUnique<MemoryStorageArea>(origin);
+        identifier = addStorageArea(WTFMove(newStorageArea), namespaceIdentifier);
     }
 
-    auto newStorageArea = makeUnique<MemoryStorageArea>(origin);
-    return addStorageArea(WTFMove(newStorageArea), connection, namespaceIdentifier);
+    auto storageArea = m_storageAreas.get(identifier);
+    if (!storageArea)
+        return StorageAreaIdentifier { };
+
+    storageArea->addListener(connection);
+    return identifier;
 }
 
 void SessionStorageManager::disconnectFromStorageArea(IPC::Connection::UniqueID connection, StorageAreaIdentifier identifier)
@@ -97,10 +100,8 @@
     if (!identifier.isValid())
         return;
 
-    if (auto iterator = m_storageAreas.find(identifier); iterator != m_storageAreas.end()) {
-        auto newStorageArea = iterator->value->clone();
-        addStorageArea(WTFMove(newStorageArea), connection, targetNamespaceIdentifier);
-    }
+    if (auto storageArea = m_storageAreas.get(identifier))
+        addStorageArea(storageArea->clone(), targetNamespaceIdentifier);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h (287089 => 287090)


--- trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h	2021-12-15 19:37:58 UTC (rev 287089)
+++ trunk/Source/WebKit/NetworkProcess/storage/SessionStorageManager.h	2021-12-15 19:42:28 UTC (rev 287090)
@@ -52,7 +52,7 @@
     void cloneStorageArea(IPC::Connection::UniqueID, StorageNamespaceIdentifier, StorageNamespaceIdentifier);
 
 private:
-    StorageAreaIdentifier addStorageArea(std::unique_ptr<MemoryStorageArea>, IPC::Connection::UniqueID, StorageNamespaceIdentifier);
+    StorageAreaIdentifier addStorageArea(std::unique_ptr<MemoryStorageArea>, StorageNamespaceIdentifier);
 
     StorageAreaRegistry& m_registry;
     HashMap<StorageAreaIdentifier, std::unique_ptr<MemoryStorageArea>> m_storageAreas;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to