Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: c824c7c2a2bea535b178a94352d064fd893ab154
      
https://github.com/WebKit/WebKit/commit/c824c7c2a2bea535b178a94352d064fd893ab154
  Author: Chris Dumez <[email protected]>
  Date:   2026-03-12 (Thu, 12 Mar 2026)

  Changed paths:
    M Source/WTF/wtf/SuspendableWorkQueue.cpp
    M Source/WTF/wtf/SuspendableWorkQueue.h
    M Source/WebCore/workers/service/server/SWRegistrationDatabase.cpp
    M Source/WebCore/workers/service/server/SWRegistrationDatabase.h
    M Source/WebCore/workers/service/server/SWRegistrationStore.h
    M Source/WebCore/workers/service/server/SWServer.cpp
    M Source/WebCore/workers/service/server/SWServer.h
    M Source/WebCore/workers/service/server/SWServerJobQueue.cpp
    M Source/WebCore/workers/service/server/SWServerJobQueue.h
    M Source/WebCore/workers/service/server/SWServerWorker.cpp
    M Source/WebCore/workers/service/server/SWServerWorker.h
    M Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.cpp
    M Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.h
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h
    M Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

  Log Message:
  -----------
  Service worker registrations database import may delay navigations 
significantly
https://bugs.webkit.org/show_bug.cgi?id=309559
rdar://172007435

Reviewed by Youenn Fablet.

Split service worker registration import into two phases to avoid blocking
navigations on unnecessary disk I/O. Previously, 
importServiceWorkerRegistrations()
loaded both metadata from SQLite and script bodies from disk for every 
registration.

Now, phase 1 imports only metadata (with empty script buffers), allowing
registrationStoreImportComplete() to fire quickly. Script bodies are loaded 
lazily
from disk (phase 2) when a worker actually needs to run or when a script 
comparison
is needed during updates.

The import dispatch QOS is also bumped to UserInitiated since it is blocking a 
user
initiated navigation.

Test: ServiceWorkers.UpdateCheckAfterRestoreFromDisk

* Source/WTF/wtf/SuspendableWorkQueue.cpp:
(WTF::SuspendableWorkQueue::dispatchWithQOS):
* Source/WTF/wtf/SuspendableWorkQueue.h:
* Source/WebCore/workers/service/server/SWRegistrationDatabase.cpp:
(WebCore::SWRegistrationDatabase::importRegistrationsImpl):
(WebCore::SWRegistrationDatabase::retrieveWorkerScripts):
(WebCore::populateScriptSourcesFromDisk): Deleted.
* Source/WebCore/workers/service/server/SWRegistrationDatabase.h:
* Source/WebCore/workers/service/server/SWRegistrationStore.h:
* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::addRegistrationFromStore):
(WebCore::SWServer::loadWorkerScripts):
(WebCore::SWServer::runServiceWorkerIfNecessary):
* Source/WebCore/workers/service/server/SWServer.h:
* Source/WebCore/workers/service/server/SWServerJobQueue.cpp:
(WebCore::SWServerJobQueue::scriptFetchFinished):
* Source/WebCore/workers/service/server/SWServerJobQueue.h:
* Source/WebCore/workers/service/server/SWServerWorker.cpp:
(WebCore::SWServerWorker::contextData const):
(WebCore::SWServerWorker::setWorkerScripts):
* Source/WebCore/workers/service/server/SWServerWorker.h:
(WebCore::SWServerWorker::needsScriptLoading const):
(WebCore::SWServerWorker::setNeedsScriptLoading):
(WebCore::SWServerWorker::didFailToLoadWorkerScripts):
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.cpp:
(WebKit::WebSWRegistrationStore::retrieveWorkerScripts):
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::importServiceWorkerRegistrations):
(WebKit::NetworkStorageManager::retrieveServiceWorkerScripts):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.cpp:
(WebKit::ServiceWorkerStorageManager::retrieveWorkerScripts):
* Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
((ServiceWorkers, UpdateCheckAfterRestoreFromDisk)):

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



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

Reply via email to