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