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

Reply via email to