[webkit-changes] [WebKit/WebKit] dd68eb: REGRESSION (iOS 17): PWA startup "FetchEvent.respo...

youennf noreply at github.com
Wed Sep 27 23:52:39 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: dd68eb88a64ca414570729a171576e6a5571b5c4
      https://github.com/WebKit/WebKit/commit/dd68eb88a64ca414570729a171576e6a5571b5c4
  Author: Youenn Fablet <youennf at gmail.com>
  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




More information about the webkit-changes mailing list