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

Reply via email to