[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