[webkit-changes] [WebKit/WebKit] 1e35ce: Migrate ServiceWorkerRegistration data to origin d...

Sihui noreply at github.com
Wed Apr 5 12:40:27 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 1e35cedbb5b8c4d52b35faccb1b0b2ac7b619878
      https://github.com/WebKit/WebKit/commit/1e35cedbb5b8c4d52b35faccb1b0b2ac7b619878
  Author: Sihui Liu <sihui_liu at apple.com>
  Date:   2023-04-05 (Wed, 05 Apr 2023)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/WebCorePersistentCoders.cpp
    M Source/WebCore/workers/service/ServiceWorkerRegistrationKey.h
    M Source/WebCore/workers/service/ServiceWorkerTypes.h
    M Source/WebCore/workers/service/server/RegistrationDatabase.cpp
    M Source/WebCore/workers/service/server/RegistrationDatabase.h
    M Source/WebCore/workers/service/server/RegistrationStore.cpp
    M Source/WebCore/workers/service/server/RegistrationStore.h
    A Source/WebCore/workers/service/server/SWRegistrationDatabase.cpp
    A Source/WebCore/workers/service/server/SWRegistrationDatabase.h
    A 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/SWServerDelegate.h
    M Source/WebKit/NetworkProcess/NetworkProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.h
    M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
    M Source/WebKit/NetworkProcess/NetworkSession.cpp
    M Source/WebKit/NetworkProcess/NetworkSession.h
    A Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.cpp
    A 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/OriginStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/OriginStorageManager.h
    A Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.cpp
    A Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.h
    M Source/WebKit/Sources.txt
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h
    M Source/WebKit/UIProcess/WebProcessPool.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
    M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/Badging.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm

  Log Message:
  -----------
  Migrate ServiceWorkerRegistration data to origin directory
https://bugs.webkit.org/show_bug.cgi?id=254771
rdar://106385894

Reviewed by Youenn Fablet.

ServiceWorkerRegistration data is currently placed in Caches directory by default (see
WebsiteDataStore::defaultServiceWorkerRegistrationDirectory), which means ServiceWorker registrations could be deleted
by system. To avoid that, we should move it to a non-Caches directory.

To make ServiceWorkerRegistration aligned with other storage types like CacheStorage and IndexedDB, this patch adds
functions to migrate ServiceWorkerRegistration data to origin directory. Origin directory is managed by
OriginStorageManager, so for accessing ServiceWorkerRegistration data, SWServer will need to talk to
OriginStorageManager, or NetworkStorageManager (the owner of OriginStorageManager). This is implemented by replacing
RegistrationStore with SWRegistrationStore, and having SWRegistrationStore (implemented in WebSWRegistrationStore)
pointing to NetworkStorageManager.

A new class ServiceWorkerStorageManager is added to manage ServiceWorkerRegistration data of one "partition". Before
migration, ServiceWorkerRegistration has one database for all origins (i.e. there is only one "partition" for all
origins), so NetworkStorageManager owns a ServiceWorkerStorageManager. After migration, each origin has a database (i.e.
there is one "partition" per origin), so each OriginStorageManager owns a ServiceWorkerStorageManager and thus a
SWRegistrationDatabase. SWRegistrationDatabase is the single-thread version of the existing
RegistrationDatabase, because ServiceWorkerStorageManager only runs on WorkQueue of NetworkStorageManager.

New test: WKWebsiteDataStore.MigrateServiceWorkerRegistrationToGeneralStorageDirectory

* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/WebCorePersistentCoders.cpp:
* Source/WebCore/workers/service/ServiceWorkerRegistrationKey.h:
* Source/WebCore/workers/service/ServiceWorkerTypes.h:
(WebCore::ServiceWorkerScripts::isolatedCopy const):
* Source/WebCore/workers/service/server/RegistrationDatabase.cpp:
(WebCore::recordsTableSchema): Deleted.
(WebCore::recordsTableSchemaAlternate): Deleted.
(WebCore::databaseFilenameFromVersion): Deleted.
(WebCore::databaseFilename): Deleted.
(WebCore::serviceWorkerRegistrationDatabaseFilename): Deleted.
(WebCore::cleanOldDatabases): Deleted.
(WebCore::stripScriptSources): Deleted.
(WebCore::populateScriptSourcesFromDisk): Deleted.
(WebCore::registrationDatabaseWorkQueue): Deleted.
(WebCore::RegistrationDatabase::RegistrationDatabase): Deleted.
(WebCore::RegistrationDatabase::~RegistrationDatabase): Deleted.
(WebCore::RegistrationDatabase::postTaskToWorkQueue): Deleted.
(WebCore::RegistrationDatabase::openSQLiteDatabase): Deleted.
(WebCore::RegistrationDatabase::scriptStorageDirectory const): Deleted.
(WebCore::RegistrationDatabase::scriptStorage): Deleted.
(WebCore::RegistrationDatabase::importRecordsIfNecessary): Deleted.
(WebCore::RegistrationDatabase::ensureValidRecordsTable): Deleted.
(WebCore::updateViaCacheToString): Deleted.
(WebCore::stringToUpdateViaCache): Deleted.
(WebCore::workerTypeToString): Deleted.
(WebCore::stringToWorkerType): Deleted.
(WebCore::RegistrationDatabase::pushChanges): Deleted.
(WebCore::RegistrationDatabase::schedulePushChanges): Deleted.
(WebCore::RegistrationDatabase::close): Deleted.
(WebCore::RegistrationDatabase::clearAll): Deleted.
(WebCore::RegistrationDatabase::doPushChanges): Deleted.
(WebCore::RegistrationDatabase::doPushChangesWithOpenDatabase): Deleted.
(WebCore::RegistrationDatabase::importRecords): Deleted.
(WebCore::RegistrationDatabase::addRegistrationToStore): Deleted.
(WebCore::RegistrationDatabase::databaseFailedToOpen): Deleted.
(WebCore::RegistrationDatabase::databaseOpenedAndRecordsImported): Deleted.
* Source/WebCore/workers/service/server/RegistrationDatabase.h:
(WebCore::RegistrationDatabase::create): Deleted.
(WebCore::RegistrationDatabase::databaseDirectoryIsolatedCopy const): Deleted.
(): Deleted.
* Source/WebCore/workers/service/server/RegistrationStore.cpp:
(WebCore::RegistrationStore::RegistrationStore): Deleted.
(WebCore::RegistrationStore::~RegistrationStore): Deleted.
(WebCore::RegistrationStore::scheduleDatabasePushIfNecessary): Deleted.
(WebCore::RegistrationStore::pushChangesToDatabase): Deleted.
(WebCore::RegistrationStore::clearAll): Deleted.
(WebCore::RegistrationStore::flushChanges): Deleted.
(WebCore::RegistrationStore::startSuspension): Deleted.
(WebCore::RegistrationStore::closeDatabase): Deleted.
(WebCore::RegistrationStore::endSuspension): Deleted.
(WebCore::RegistrationStore::updateRegistration): Deleted.
(WebCore::RegistrationStore::removeRegistration): Deleted.
(WebCore::RegistrationStore::addRegistrationFromDatabase): Deleted.
(WebCore::RegistrationStore::didSaveWorkerScriptsToDisk): Deleted.
(WebCore::RegistrationStore::databaseFailedToOpen): Deleted.
(WebCore::RegistrationStore::databaseOpenedAndRecordsImported): Deleted.
* Source/WebCore/workers/service/server/RegistrationStore.h:
(WebCore::RegistrationStore::server): Deleted.
(WebCore::RegistrationStore::pushChangesToDatabase): Deleted.
(): Deleted.
* Source/WebCore/workers/service/server/SWRegistrationDatabase.cpp: Added.
(WebCore::databaseFilePath):
(WebCore::scriptDirectoryPath):
(WebCore::convertUpdateViaCacheToString):
(WebCore::convertStringToUpdateViaCache):
(WebCore::convertWorkerTypeToString):
(WebCore::convertStringToWorkerType):
(WebCore::currentRecordsTableSchema):
(WebCore::currentRecordsTableSchemaAlternate):
(WebCore::stripScriptSources):
(WebCore::populateScriptSourcesFromDisk):
(WebCore::SWRegistrationDatabase::statementString const):
(WebCore::SWRegistrationDatabase::cachedStatement):
(WebCore::SWRegistrationDatabase::SWRegistrationDatabase):
(WebCore::SWRegistrationDatabase::~SWRegistrationDatabase):
(WebCore::SWRegistrationDatabase::scriptStorage):
(WebCore::SWRegistrationDatabase::prepareDatabase):
(WebCore::SWRegistrationDatabase::ensureValidRecordsTable):
(WebCore::SWRegistrationDatabase::importRegistrations):
(WebCore::SWRegistrationDatabase::updateRegistrations):
* Source/WebCore/workers/service/server/SWRegistrationDatabase.h: Added.
* Source/WebCore/workers/service/server/SWRegistrationStore.h: Added.
* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::storeRegistrationsOnDisk):
(WebCore::SWServer::SWServer):
(WebCore::SWServer::Connection::storeRegistrationsOnDisk):
(WebCore::SWServer::startSuspension): Deleted.
(WebCore::SWServer::endSuspension): Deleted.
* Source/WebCore/workers/service/server/SWServer.h:
* Source/WebCore/workers/service/server/SWServerDelegate.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::prepareToSuspend):
(WebKit::NetworkProcess::processDidResume):
(WebKit::NetworkProcess::storeServiceWorkerRegistrations):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::createNetworkStorageManager):
(WebKit::NetworkSession::createUniqueRegistrationStore):
* Source/WebKit/NetworkProcess/NetworkSession.h:
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.cpp: Added.
(WebKit::WebSWRegistrationStore::WebSWRegistrationStore):
(WebKit::WebSWRegistrationStore::clearAll):
(WebKit::WebSWRegistrationStore::flushChanges):
(WebKit::WebSWRegistrationStore::closeFiles):
(WebKit::WebSWRegistrationStore::importRegistrations):
(WebKit::WebSWRegistrationStore::updateRegistration):
(WebKit::WebSWRegistrationStore::removeRegistration):
(WebKit::WebSWRegistrationStore::scheduleUpdateIfNecessary):
(WebKit::WebSWRegistrationStore::updateToStorage):
* Source/WebKit/NetworkProcess/ServiceWorker/WebSWRegistrationStore.h: Added.
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::create):
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::allManagedTypes):
(WebKit::NetworkStorageManager::closeServiceWorkerRegistrationFiles):
(WebKit::NetworkStorageManager::clearServiceWorkerRegistrations):
(WebKit::NetworkStorageManager::importServiceWorkerRegistrations):
(WebKit::NetworkStorageManager::updateServiceWorkerRegistrations):
(WebKit::NetworkStorageManager::migrateServiceWorkerRegistrationsToOrigins):
(WebKit::NetworkStorageManager::updateServiceWorkerRegistrationsByOrigin):
(WebKit::NetworkStorageManager::shouldManageServiceWorkerRegistrationsByOrigin):
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::StorageBucket::toStorageType const):
(WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier const):
(WebKit::OriginStorageManager::StorageBucket::serviceWorkerStorageManager):
(WebKit::OriginStorageManager::StorageBucket::resolvedPath):
(WebKit::OriginStorageManager::serviceWorkerStorageManager):
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:
* Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.cpp: Added.
(WebKit::ServiceWorkerStorageManager::ServiceWorkerStorageManager):
(WebKit::ServiceWorkerStorageManager::ensureDatabase):
(WebKit::ServiceWorkerStorageManager::closeFiles):
(WebKit::ServiceWorkerStorageManager::clearAllRegistrations):
(WebKit::ServiceWorkerStorageManager::importRegistrations):
(WebKit::ServiceWorkerStorageManager::updateRegistrations):
* Source/WebKit/NetworkProcess/storage/ServiceWorkerStorageManager.h: Added.
* Source/WebKit/Sources.txt:
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _storeServiceWorkerRegistrations:]):
(-[WKWebsiteDataStore _hasRegisteredServiceWorker]): Deleted.
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
* Source/WebKit/UIProcess/WebProcessPool.cpp:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::storeServiceWorkerRegistrations):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/Badging.mm:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
(log):
(install):
(addEventListener):
(then):
(catch):

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




More information about the webkit-changes mailing list