Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 03403b4f8c4e7aa6e10be71dca42f10c0f28bbdd
      
https://github.com/WebKit/WebKit/commit/03403b4f8c4e7aa6e10be71dca42f10c0f28bbdd
  Author: Sihui Liu <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to