Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: dcf41af3936b535cd2875e868290874ab7ac3a65
https://github.com/WebKit/WebKit/commit/dcf41af3936b535cd2875e868290874ab7ac3a65
Author: Sihui Liu <[email protected]>
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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes