[webkit-changes] [WebKit/WebKit] 03403b: Manage CacheStorage by origin

Sihui noreply at github.com
Wed Dec 21 21:56:45 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 03403b4f8c4e7aa6e10be71dca42f10c0f28bbdd
      https://github.com/WebKit/WebKit/commit/03403b4f8c4e7aa6e10be71dca42f10c0f28bbdd
  Author: Sihui Liu <sihui_liu at apple.com>
  Date:   2022-12-21 (Wed, 21 Dec 2022)

  Changed paths:
    M LayoutTests/http/tests/cache-storage/cache-clearing-origin.https.html
    M LayoutTests/http/tests/cache-storage/cache-origins.https.html
    M LayoutTests/http/tests/cache-storage/cache-representation.https.html
    M Source/WTF/wtf/FileSystem.cpp
    M Source/WTF/wtf/FileSystem.h
    M Source/WebCore/platform/network/ResourceResponseBase.cpp
    M Source/WebCore/platform/network/ResourceResponseBase.h
    M Source/WebKit/NetworkProcess/NetworkProcess.cpp
    M Source/WebKit/NetworkProcess/NetworkProcess.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageCache.cpp
    A Source/WebKit/NetworkProcess/storage/CacheStorageCache.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageDiskStore.cpp
    A Source/WebKit/NetworkProcess/storage/CacheStorageDiskStore.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageManager.cpp
    A Source/WebKit/NetworkProcess/storage/CacheStorageManager.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageMemoryStore.cpp
    A Source/WebKit/NetworkProcess/storage/CacheStorageMemoryStore.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageRecord.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageRegistry.cpp
    A Source/WebKit/NetworkProcess/storage/CacheStorageRegistry.h
    A Source/WebKit/NetworkProcess/storage/CacheStorageStore.h
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h
    M Source/WebKit/NetworkProcess/storage/NetworkStorageManager.messages.in
    M Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp
    M Source/WebKit/NetworkProcess/storage/OriginStorageManager.h
    A Source/WebKit/NetworkProcess/storage/StorageUtilities.h
    M Source/WebKit/Sources.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp

  Log Message:
  -----------
  Manage CacheStorage by origin
https://bugs.webkit.org/show_bug.cgi?id=247207
rdar://problem/101968609

Reviewed by Youenn Fablet.

The OriginStorageManager class is designed to manage storage of a paritioned origin, and have exclusive access to origin
storage directory. This patch refactors DOMCache backend to use OriginStorageManager for CacheStorage management.

The old structure is:
NetworkSession - CacheStorage::Engine - CacheStorage::Caches - CacheStorage::Cache
The new structure is:
NetworkSession - NetworkStorageManager - OriginStorageManager - CacheStorageManager - CacheStorageCache

Here are the new classes:
CacheStorageManager: it manages cache storage of a partitioned origin and store caches.
CacheStorageCache: it represents a cache and keeps track of records (by record information) in memory.
CacheStorageStore: it represents backing store of cache; it is implemented by CacheStorageMemoryStore and
CacheStorageDiskStore.
CacheStorageRegistry: it keeps track of all CacheStorageCaches in a session, so NetworkStorageManager can find the
target of a CacheStorage IPC message quickly.

Here are some other changes made to complete the transition:
1. CacheStorage messages are sent to NetworkStorageManager instead of CacheStorage::Engine.
2. NetworkStorageManager handles CachesStorage messages and performs corresponding operations on its own WorkQueue.
Since WorkQueue is not tied to one thread, this patch use ResourceResponse::CrossThreadData instead of ResourceResponse
in CacheStorageRecord.
3. CacheStoragePersistentStore provides a simple file system backend for CacheStorage, instead of using
NetworkCache::Storage.
4. Representation string of CacheStorage will report origins that have CacheStorage data. It used to report origins of
existing CacheStorage::Caches (which manages cache storage of partitioned origin like CacheStorageManager), but having
CacheStorage::Caches does not mean the origin has CacheStorage data or the origin is actively performing CacheStorage
operations, and the state is subjective to change based on implementation (e.g. we might add/delete CacheStorage::Caches
proactively based on its activity). Therefore, let's use CacheStorage data as the truth, and update test expectations.
5. CacheStorage backend used to have multiple WorkQueues per partition origin, now it has one WorkQueue for all origins
(shared with other types) for message handling, and at most one queue per cache for I/O operation on cache records.

* LayoutTests/http/tests/cache-storage/cache-clearing-origin.https.html:
* LayoutTests/http/tests/cache-storage/cache-origins.https.html:
* LayoutTests/http/tests/cache-storage/cache-representation.https.html:
* Source/WTF/wtf/FileSystem.cpp:
(WTF::FileSystemImpl::overwriteEntireFile):
* Source/WTF/wtf/FileSystem.h:
* Source/WebCore/platform/network/ResourceResponseBase.cpp:
(WebCore::ResourceResponseBase::CrossThreadData::copy const):
* Source/WebCore/platform/network/ResourceResponseBase.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::fetchWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
(WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
(WebKit::NetworkProcess::registrableDomainsWithWebsiteData):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/storage/CacheStorageCache.cpp: Added.
(WebKit::computeKeyURL):
(WebKit::nextRecordIdentifier):
(WebKit::createStore):
(WebKit::CacheStorageCache::CacheStorageCache):
(WebKit::CacheStorageCache::manager):
(WebKit::CacheStorageCache::getSize):
(WebKit::CacheStorageCache::open):
(WebKit::toCacheStorageRecord):
(WebKit::CacheStorageCache::retrieveRecords):
(WebKit::CacheStorageCache::removeRecords):
(WebKit::CacheStorageCache::findExistingRecord):
(WebKit::CacheStorageCache::putRecords):
(WebKit::CacheStorageCache::putRecordsAfterQuotaCheck):
(WebKit::CacheStorageCache::putRecordsInStore):
(WebKit::CacheStorageCache::removeAllRecords):
(WebKit::CacheStorageCache::close):
* Source/WebKit/NetworkProcess/storage/CacheStorageCache.h: Added.
(WebKit::CacheStorageCache::identifier const):
(WebKit::CacheStorageCache::name const):
(WebKit::CacheStorageCache::uniqueName const):
* Source/WebKit/NetworkProcess/storage/CacheStorageDiskStore.cpp: Added.
(WebKit::shouldStoreBodyAsBlob):
(WebKit::computeSHA1):
(WebKit::RecordMetaData::RecordMetaData):
(WebKit::CacheStorageDiskStore::create):
(WebKit::CacheStorageDiskStore::CacheStorageDiskStore):
(WebKit::CacheStorageDiskStore::versionDirectoryPath const):
(WebKit::CacheStorageDiskStore::saltFilePath const):
(WebKit::CacheStorageDiskStore::recordsDirectoryPath const):
(WebKit::CacheStorageDiskStore::recordFilePath const):
(WebKit::CacheStorageDiskStore::recordBlobFilePath const):
(WebKit::CacheStorageDiskStore::blobsDirectoryPath const):
(WebKit::CacheStorageDiskStore::blobFilePath const):
(WebKit::decodeRecordMetaData):
(WebKit::decodeRecordHeader):
(WebKit::CacheStorageDiskStore::readRecordFromFileData):
(WebKit::CacheStorageDiskStore::readAllRecords):
(WebKit::CacheStorageDiskStore::readRecords):
(WebKit::CacheStorageDiskStore::deleteRecords):
(WebKit::encodeRecordHeader):
(WebKit::encodeRecordBody):
(WebKit::encodeRecord):
(WebKit::CacheStorageDiskStore::writeRecords):
* Source/WebKit/NetworkProcess/storage/CacheStorageDiskStore.h: Added.
* Source/WebKit/NetworkProcess/storage/CacheStorageManager.cpp: Added.
(WebKit::nextUpdateNumber):
(WebKit::readCachesList):
(WebKit::writeCachesList):
(WebKit::readSizeFile):
(WebKit::writeSizeFile):
(WebKit::CacheStorageManager::cacheStorageSalt):
(WebKit::CacheStorageManager::cacheStorageOriginDirectory):
(WebKit::CacheStorageManager::originsOfCacheStorageData):
(WebKit::getDirectorySize):
(WebKit::CacheStorageManager::cacheStorageSize):
(WebKit::CacheStorageManager::hasCacheList):
(WebKit::CacheStorageManager::makeDirty):
(WebKit::CacheStorageManager::CacheStorageManager):
(WebKit::CacheStorageManager::~CacheStorageManager):
(WebKit::CacheStorageManager::initializeCaches):
(WebKit::CacheStorageManager::openCache):
(WebKit::CacheStorageManager::removeCache):
(WebKit::CacheStorageManager::allCaches):
(WebKit::CacheStorageManager::initializeCacheSize):
(WebKit::CacheStorageManager::finishInitializingSize):
(WebKit::CacheStorageManager::requestSpaceAfterInitializingSize):
(WebKit::CacheStorageManager::requestSpace):
(WebKit::CacheStorageManager::sizeIncreased):
(WebKit::CacheStorageManager::sizeDecreased):
(WebKit::CacheStorageManager::reference):
(WebKit::CacheStorageManager::dereference):
(WebKit::CacheStorageManager::connectionClosed):
(WebKit::CacheStorageManager::removeUnusedCache):
(WebKit::CacheStorageManager::hasDataInMemory):
(WebKit::CacheStorageManager::isActive):
(WebKit::CacheStorageManager::representationString):
* Source/WebKit/NetworkProcess/storage/CacheStorageManager.h: Added.
(WebKit::CacheStorageManager::salt const):
* Source/WebKit/NetworkProcess/storage/CacheStorageMemoryStore.cpp: Added.
(WebKit::CacheStorageMemoryStore::create):
(WebKit::CacheStorageMemoryStore::readAllRecords):
(WebKit::CacheStorageMemoryStore::readRecords):
(WebKit::CacheStorageMemoryStore::deleteRecords):
(WebKit::CacheStorageMemoryStore::writeRecords):
* Source/WebKit/NetworkProcess/storage/CacheStorageMemoryStore.h: Added.
* Source/WebKit/NetworkProcess/storage/CacheStorageRecord.h: Added.
(WebKit::CacheStorageRecordInformation::updateVaryHeaders):
(WebKit::CacheStorageRecord::CacheStorageRecord):
(WebKit::CacheStorageRecord::copy const):
* Source/WebKit/NetworkProcess/storage/CacheStorageRegistry.cpp: Added.
(WebKit::CacheStorageRegistry::registerCache):
(WebKit::CacheStorageRegistry::unregisterCache):
(WebKit::CacheStorageRegistry::cache):
* Source/WebKit/NetworkProcess/storage/CacheStorageRegistry.h: Added.
* Source/WebKit/NetworkProcess/storage/CacheStorageStore.h: Added.
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::NetworkStorageManager):
(WebKit::NetworkStorageManager::canHandleTypes):
(WebKit::NetworkStorageManager::originStorageManager):
(WebKit::NetworkStorageManager::getAllOrigins):
(WebKit::NetworkStorageManager::cacheStorageOpenCache):
(WebKit::NetworkStorageManager::cacheStorageRemoveCache):
(WebKit::NetworkStorageManager::cacheStorageAllCaches):
(WebKit::NetworkStorageManager::cacheStorageReference):
(WebKit::NetworkStorageManager::cacheStorageDereference):
(WebKit::NetworkStorageManager::cacheStorageRetrieveRecords):
(WebKit::NetworkStorageManager::cacheStorageRemoveRecords):
(WebKit::NetworkStorageManager::cacheStoragePutRecords):
(WebKit::NetworkStorageManager::cacheStorageClearMemoryRepresentation):
(WebKit::NetworkStorageManager::cacheStorageRepresentation):
(WebKit::readOriginFromFile): Deleted.
(WebKit::writeOriginToFile): Deleted.
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:
* Source/WebKit/NetworkProcess/storage/NetworkStorageManager.messages.in:
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::StorageBucket::existingCacheStorageManager):
(WebKit::OriginStorageManager::StorageBucket::StorageBucket):
(WebKit::OriginStorageManager::StorageBucket::connectionClosed):
(WebKit::OriginStorageManager::StorageBucket::toStorageType const):
(WebKit::OriginStorageManager::StorageBucket::toStorageIdentifier const):
(WebKit::OriginStorageManager::StorageBucket::cacheStorageManager):
(WebKit::OriginStorageManager::StorageBucket::isActive const):
(WebKit::OriginStorageManager::StorageBucket::isEmpty):
(WebKit::OriginStorageManager::StorageBucket::fetchDataTypesInListFromMemory):
(WebKit::OriginStorageManager::StorageBucket::fetchDataTypesInListFromDisk):
(WebKit::OriginStorageManager::StorageBucket::deleteData):
(WebKit::OriginStorageManager::StorageBucket::deleteCacheStorageData):
(WebKit::OriginStorageManager::StorageBucket::deleteEmptyDirectory):
(WebKit::OriginStorageManager::StorageBucket::resolvedPath):
(WebKit::OriginStorageManager::StorageBucket::closeCacheStorageManager):
(WebKit::createQuotaManager):
(WebKit::OriginStorageManager::OriginStorageManager):
(WebKit::OriginStorageManager::defaultBucket):
(WebKit::OriginStorageManager::existingCacheStorageManager):
(WebKit::OriginStorageManager::cacheStorageManager):
(WebKit::OriginStorageManager::closeCacheStorageManager):
* Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:
* Source/WebKit/NetworkProcess/storage/StorageUtilities.h: Added.
(WebKit::readOriginFromFile):
(WebKit::writeOriginToFile):
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Cache/WebCacheStorageConnection.cpp:
(WebKit::WebCacheStorageConnection::open):
(WebKit::WebCacheStorageConnection::remove):
(WebKit::WebCacheStorageConnection::retrieveCaches):
(WebKit::WebCacheStorageConnection::retrieveRecords):
(WebKit::WebCacheStorageConnection::batchDeleteOperation):
(WebKit::WebCacheStorageConnection::batchPutOperation):
(WebKit::WebCacheStorageConnection::reference):
(WebKit::WebCacheStorageConnection::dereference):
(WebKit::WebCacheStorageConnection::clearMemoryRepresentation):
(WebKit::WebCacheStorageConnection::engineRepresentation):

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




More information about the webkit-changes mailing list