Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0db442413a5a2f74bef75645007e4cdb8bcb9173
https://github.com/WebKit/WebKit/commit/0db442413a5a2f74bef75645007e4cdb8bcb9173
Author: Patrick Griffis <[email protected]>
Date: 2026-09-09 (Wed, 09 Sep 2026)
Changed paths:
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/platform/network/HTTPHeaderNames.in
M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
M Source/WebKit/NetworkProcess/NetworkProcess.cpp
M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
M Source/WebKit/NetworkProcess/NetworkResourceLoader.h
M Source/WebKit/NetworkProcess/cache/NetworkCache.cpp
M Source/WebKit/NetworkProcess/cache/NetworkCache.h
A
Source/WebKit/NetworkProcess/cache/NetworkCacheCompressionDictionaryEntry.cpp
A
Source/WebKit/NetworkProcess/cache/NetworkCacheCompressionDictionaryEntry.h
M Source/WebKit/Sources.txt
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebsiteData.cpp
Log Message:
-----------
Store dictionaries named by Use-As-Dictionary in the network cache
https://bugs.webkit.org/show_bug.cgi?id=322132
Reviewed by Alex Christensen.
Parse the Use-As-Dictionary response header from RFC 9842 and, when it names a
usable dictionary, store it in the network cache.
Adds a new "CompressionDictionary" record type, as this allows avoiding
traversing and parsing all Response records. It also lets
Clear-Site-Data: "cookies" clear an origin's dictionaries while leaving
its cached resources, per w3c/webappsec-clear-site-data#94.
These records store a `CompressionDictionaryEntry` because a dictionary is
not retrieved by a request and needs none of what Entry stores so we can
keep the metadata minimal.
Cache traversals now walk both record types so website data deletion reaches
dictionaries.
Nothing reads them yet; advertising with Available-Dictionary and decompressing
dcb and dcz responses comes later. Some API tests observe the cache being
created and removed.
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/network/HTTPHeaderNames.in:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::deleteCacheRecordsForOrigin):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigin):
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::startNetworkLoad):
(WebKit::stringBareItem):
(WebKit::NetworkResourceLoader::processUseAsDictionaryHeader):
(WebKit::NetworkResourceLoader::storeCompressionDictionaryIfNeeded):
(WebKit::NetworkResourceLoader::didReceiveResponse):
(WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
* Source/WebKit/NetworkProcess/NetworkResourceLoader.h:
* Source/WebKit/NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::recordTypeName):
(WebKit::NetworkCache::Cache::makeCacheKey):
(WebKit::NetworkCache::Cache::retrieve):
(WebKit::NetworkCache::Cache::makeEntry):
(WebKit::NetworkCache::Cache::makeRedirectEntry):
(WebKit::NetworkCache::Cache::store):
(WebKit::NetworkCache::Cache::storeRedirect):
(WebKit::NetworkCache::Cache::storeCompressionDictionary):
(WebKit::NetworkCache::Cache::TraversalRecord::type const):
(WebKit::NetworkCache::Cache::TraversalRecord::url const):
(WebKit::NetworkCache::Cache::remove):
(WebKit::NetworkCache::Cache::traverseRecords):
(WebKit::NetworkCache::Cache::traverseCompressionDictionaryRecords):
(WebKit::NetworkCache::Cache::traverseRecordsOfTypes):
(WebKit::NetworkCache::Cache::dumpContentsToFile):
(WebKit::NetworkCache::Cache::fetchData):
(WebKit::NetworkCache::Cache::fetchOriginAccessTimes):
(WebKit::NetworkCache::Cache::deleteData):
(WebKit::NetworkCache::Cache::deleteDataForRegistrableDomains):
(WebKit::NetworkCache::resourceType): Deleted.
* Source/WebKit/NetworkProcess/cache/NetworkCache.h:
*
Source/WebKit/NetworkProcess/cache/NetworkCacheCompressionDictionaryEntry.cpp:
Added.
(WebKit::NetworkCache::parseFetchDestination):
(WebKit::NetworkCache::CompressionDictionaryEntry::CompressionDictionaryEntry):
(WebKit::NetworkCache::CompressionDictionaryEntry::encodeAsStorageRecord const):
(WebKit::NetworkCache::CompressionDictionaryEntry::decodeStorageRecord):
(WebKit::NetworkCache::CompressionDictionaryEntry::asJSON const):
* Source/WebKit/NetworkProcess/cache/NetworkCacheCompressionDictionaryEntry.h:
Added.
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::fromRaw):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::toRaw const):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::isEmpty
const):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::contains
const):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::add):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::DestinationSet):
(WebKit::NetworkCache::CompressionDictionaryEntry::DestinationSet::bit):
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebsiteData.cpp:
(serverCallback):
(diskCacheSize):
(waitUntilDiskCacheSizeIsAtLeast):
(waitUntilDiskCacheSizeIsAtMost):
(loadCompressionDictionaryPage):
(registerCompressionDictionary):
(enableCompressionDictionary):
(testWebsiteDataCompressionDictionary):
(testWebsiteDataCompressionDictionaryForeignMatch):
(testWebsiteDataCompressionDictionaryOtherOrigin):
(beforeAll):
(afterAll):
Canonical link: https://commits.webkit.org/320786@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications