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