Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1e35cedbb5b8c4d52b35faccb1b0b2ac7b619878
https://github.com/WebKit/WebKit/commit/1e35cedbb5b8c4d52b35faccb1b0b2ac7b619878
Author: Sihui Liu <[email protected]>
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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes