[webkit-changes] [WebKit/WebKit] dcf41a: ASSERTION FAILED: !m_listeners.contains(connection...

Sihui noreply at github.com
Sun Feb 5 19:34:37 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: dcf41af3936b535cd2875e868290874ab7ac3a65
      https://github.com/WebKit/WebKit/commit/dcf41af3936b535cd2875e868290874ab7ac3a65
  Author: Sihui Liu <sihui_liu at apple.com>
  Date:   2023-02-05 (Sun, 05 Feb 2023)

  Changed paths:
    M Source/WebCore/storage/StorageEventDispatcher.cpp
    M Source/WebCore/storage/StorageEventDispatcher.h
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.messages.in
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp
    M Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp
    M Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h
    M Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp
    M Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h
    M Source/WebKitLegacy/Storage/StorageAreaImpl.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm

  Log Message:
  -----------
  ASSERTION FAILED: !m_listeners.contains(connection) || m_listeners.get(connection) == identifier in StorageAreaBase
https://bugs.webkit.org/show_bug.cgi?id=251612
rdar://104609918

Reviewed by Alex Christensen.

The assertion ensures that web process will not have two StorageAreaMaps that connect to the same StorageArea. We avoid
having two StorageAreaMaps mapping to the same area because StorageAreaMap may need to send sync message for connection
(StorageAreaMap::connectSync()), and we don't want sync message if unnecessary.

In current implementation, each web process is associated with a session. In web process, each page points to a
WebStorageNameSpaceProvider picked based on page group (WebStorageNamespaceProvider::getOrCreate(WebPageGroupProxy&)).
Each WebStorageNamespaceProvider has one local StorageNamespace (WebCore::StorageNamespaceProvider), and each
StorageNamespace has multiple StorageAreaMaps (keyed by origin). Therefore, in web process, StorageAreaMap is identified
by { SessionID, PageGroupID, ClientOrigin }. However, in network process, StorageArea is identified by
{ SessionID, ClientOrigin }.

We used to have PageGroupID in key because we wanted to separate storage between groups in WebKitLegacy. As we moved
to WebKit, we still have it in key on the client side (web process), but not in the server side (network process), so
two StorageAreaMaps in different page groups can point to the same database, making it pointless to keep PageGroupID.
Therefore, this patch just drops PageGroup from WebStorage in WebKit.

* Source/WebCore/storage/StorageEventDispatcher.cpp:
(WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
* Source/WebCore/storage/StorageEventDispatcher.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::connectToStorageArea):
(WebKit::NetworkStorageManager::connectToStorageAreaSync):
(WebKit::NetworkStorageManager::cancelConnectToStorageArea):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.messages.in:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::m_appHighlightsVisible):
(WebKit::WebPage::~WebPage):
* Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::dispatchLocalStorageEvent):
* Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp:
(WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
(WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
(WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
(WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
(WebKit::StorageNamespaceImpl::copy):
(WebKit::StorageNamespaceImpl::pageGroupID const): Deleted.
* Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h:
* Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
(WebKit::existingStorageNameSpaceProvider):
(WebKit::WebStorageNamespaceProvider::getOrCreate):
(WebKit::WebStorageNamespaceProvider::incrementUseCount):
(WebKit::WebStorageNamespaceProvider::decrementUseCount):
(WebKit::WebStorageNamespaceProvider::WebStorageNamespaceProvider):
(WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
(WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
(): Deleted.
(WebKit::WebStorageNamespaceProvider::~WebStorageNamespaceProvider): Deleted.
* Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h:
* Source/WebKitLegacy/Storage/StorageAreaImpl.cpp:
(WebKit::StorageAreaImpl::dispatchStorageEvent):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
(TEST):

Canonical link: https://commits.webkit.org/259876@main




More information about the webkit-changes mailing list