Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: dd68eb88a64ca414570729a171576e6a5571b5c4
https://github.com/WebKit/WebKit/commit/dd68eb88a64ca414570729a171576e6a5571b5c4
Author: Youenn Fablet <[email protected]>
Date: 2023-09-27 (Wed, 27 Sep 2023)
Changed paths:
M Source/WebCore/Modules/cache/CacheStorageConnection.h
M Source/WebCore/Modules/cache/DOMCacheStorage.cpp
M Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp
M Source/WebCore/Modules/cache/WorkerCacheStorageConnection.h
M Source/WebCore/page/CacheStorageProvider.h
M Source/WebKit/NetworkProcess/storage/CacheStorageManager.cpp
M Source/WebKit/NetworkProcess/storage/CacheStorageManager.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/Cache/WebCacheStorageConnection.cpp
M Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h
M Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
Log Message:
-----------
REGRESSION (iOS 17): PWA startup "FetchEvent.respondWith received an error
TypeError: Internal error"
https://bugs.webkit.org/show_bug.cgi?id=261767
rdar://115747046
Reviewed by Chris Dumez and Sihui Liu.
We were skipping sending reference signals when creating caches previously
created in other web pages.
This was allowing network process to clean up memory and we ended up not
matching any resource from DOMCache.
Make sure to always send the reference message, but only send dereference
message if there was a reference message before.
In addition, there is a potential race when network process sends DOMCache
identifiers to the web process, but web process did not yet created the
DOMCache objects
(aka WebProcess has not sent the reference message).
In that case, the OriginStorageManager can be removed, thus making the DOMCache
identifiers useless.
To prevent this, we are now locking/unlocking cache storage from WebProcess
when creating DOMCache objects.
This will prevent OriginStorageManager to be removed.
We are also handling reference/dereference counters directly in WebProcess
since the new code path in networking process is not doing so anymore.
This is needed as the same DOMCache identifier may be used by different
DOMCache objects (say one in a service worker and one in window).
Covered by API test.
* Source/WebCore/Modules/cache/CacheStorageConnection.h:
* Source/WebCore/Modules/cache/DOMCacheStorage.cpp:
(WebCore::ConnectionStorageLock::ConnectionStorageLock):
(WebCore::ConnectionStorageLock::~ConnectionStorageLock):
(WebCore::DOMCacheStorage::retrieveCaches):
* Source/WebCore/Modules/cache/WorkerCacheStorageConnection.cpp:
(WebCore::WorkerCacheStorageConnection::lockStorage):
(WebCore::WorkerCacheStorageConnection::unlockStorage):
* Source/WebCore/Modules/cache/WorkerCacheStorageConnection.h:
* Source/WebCore/page/CacheStorageProvider.h:
* Source/WebKit/NetworkProcess/storage/CacheStorageManager.cpp:
(WebKit::CacheStorageManager::lockStorage):
(WebKit::CacheStorageManager::unlockStorage):
(WebKit::CacheStorageManager::connectionClosed):
(WebKit::CacheStorageManager::isActive):
* Source/WebKit/NetworkProcess/storage/CacheStorageManager.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::lockCacheStorage):
(WebKit::NetworkStorageManager::unlockCacheStorage):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.messages.in:
* Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp:
(WebKit::WebCacheStorageConnection::open):
(WebKit::WebCacheStorageConnection::reference):
(WebKit::WebCacheStorageConnection::dereference):
(WebKit::WebCacheStorageConnection::lockStorage):
(WebKit::WebCacheStorageConnection::unlockStorage):
(WebKit::WebCacheStorageConnection::networkProcessConnectionClosed):
* Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
Canonical link: https://commits.webkit.org/268565@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes