Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cef0f2109f9f946482b2128fb08d9ff96670ad9b
      
https://github.com/WebKit/WebKit/commit/cef0f2109f9f946482b2128fb08d9ff96670ad9b
  Author: Sihui Liu <[email protected]>
  Date:   2026-05-19 (Tue, 19 May 2026)

  Changed paths:
    M 
LayoutTests/storage/indexeddb/modern/resources/worker-idb-after-network-crash.js
    M 
LayoutTests/storage/indexeddb/modern/worker-idb-after-network-crash-expected.txt
    M LayoutTests/storage/indexeddb/modern/worker-idb-after-network-crash.html
    M Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp
    M Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h
    M Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp
    M Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h
    M Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.cpp
    M Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.h
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebCore/workers/WorkerGlobalScope.cpp
    M Source/WebCore/workers/WorkerGlobalScope.h
    M Source/WebCore/workers/WorkerLoaderProxy.h
    M Source/WebCore/workers/WorkerMessagingProxy.cpp
    M Source/WebCore/workers/WorkerMessagingProxy.h
    M Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp
    M Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h
    M Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp
    M Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h
    M Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
    M Source/WebKit/WebProcess/WebProcess.cpp
    M Source/WebKit/WebProcess/WebProcess.h

  Log Message:
  -----------
  Recover IndexedDB connections in dedicated workers after network process crash
https://bugs.webkit.org/show_bug.cgi?id=314932
rdar://177219395

Reviewed by Brady Eidson.

If a page only uses IndexedDB from a dedicated worker, the worker's connection 
never recovers from a network process
crash -- the existing recovery in 309032@main only handles documents.

This patch replaces the existing push-based recovery with a lazy self-heal 
driven by new IDBConnectionProxy::isValid().
On the next IDB operation, Page::idbConnection(), 
Document::idbConnectionProxy() and
WorkerGlobalScope::idbConnectionProxy() each detect the invalid cached value 
and refetch. Workers reach the main thread
through a new WorkerLoaderProxy::createIDBConnectionProxy() virtual. The 
on-demand pattern is already used by other
worker storage APIs (e.g. WebCacheStorageConnection::ensureConnection),

Only dedicated workers are wired up. ServiceWorkerThreadProxy returns nullptr 
because service workers are deliberately
killed on network process close (SWContextManager::stopAllServiceWorkers) and 
start fresh on relaunch.
SharedWorkerThreadProxy also returns nullptr now: the broader behavior of 
shared workers after a network process crash
is not yet well-defined and needs to be settled separately.

worker-idb-after-network-crash.html is updated to cover the new behavior -- it 
no longer needs IDB operation in page to
relaunch network process.

* 
LayoutTests/storage/indexeddb/modern/resources/worker-idb-after-network-crash.js:
(self.onmessage):
(openInitialDatabase.db.onclose):
(openInitialDatabase.tx.oncomplete):
* 
LayoutTests/storage/indexeddb/modern/worker-idb-after-network-crash-expected.txt:
* LayoutTests/storage/indexeddb/modern/worker-idb-after-network-crash.html:
* Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp:
(WebCore::IDBClient::IDBConnectionProxy::isValid const):
* Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h:
* Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp:
(WebCore::IDBClient::IDBConnectionToServer::connectionToServerLost):
* Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h:
* Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.cpp:
(WebCore::AudioWorkletMessagingProxy::createIDBConnectionProxy):
* Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.h:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::idbConnectionProxy):
(WebCore::Document::clearIDBConnectionProxy): Deleted.
* Source/WebCore/dom/Document.h:
* Source/WebCore/page/Page.cpp:
(WebCore::Page::idbConnection):
(WebCore::Page::clearIDBConnection): Deleted.
(WebCore::Page::clearIDBConnectionOnAllDocuments): Deleted.
(WebCore::Page::refreshIDBConnectionForWorkers): Deleted.
* Source/WebCore/page/Page.h:
* Source/WebCore/workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::idbConnectionProxy):
(WebCore::WorkerGlobalScope::replaceIDBConnectionProxy): Deleted.
(WebCore::WorkerGlobalScope::replaceIDBConnectionProxyOnAllWorkers): Deleted.
* Source/WebCore/workers/WorkerGlobalScope.h:
* Source/WebCore/workers/WorkerLoaderProxy.h:
* Source/WebCore/workers/WorkerMessagingProxy.cpp:
(WebCore::WorkerMessagingProxy::createIDBConnectionProxy):
* Source/WebCore/workers/WorkerMessagingProxy.h:
* Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp:
(WebCore::ServiceWorkerThreadProxy::createIDBConnectionProxy):
* Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h:
* Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp:
(WebCore::SharedWorkerThreadProxy::createIDBConnectionProxy):
(WebCore::SharedWorkerThreadProxy::createRTCDataChannelRemoteHandlerConnection):
* Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:
* Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didClose):
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::ensureNetworkProcessConnection):
(WebKit::WebProcess::networkProcessConnectionClosed):
(WebKit::WebProcess::refreshIDBConnectionForWorkers): Deleted.
* Source/WebKit/WebProcess/WebProcess.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to