all" or "none". Unless stated otherwise it is "compression-dictionary",
"download",
"imageset",
"manifest",
@@ -1782,6 +1786,7 @@ device to assist defining CSP and Mixed Content. It is not exposed to JavaScript
A destination type is one of:
the empty string,
"audio",
+"compression-dictionary",
"audioworklet",
"document",
"embed",
@@ -1926,6 +1931,11 @@ not always relevant and might require different behavior.
video"
media-src
<video> element
+ compression-dictionary"
+ compression-dictionary"
+ default-src
+ <link rel=compression-dictionary>
download"
To determine the compression-dictionary cache partition, given a request request: + +
Let key be the result of determining the network partition key + given request. + +
If key is null, then return null. + +
Return the unique compression-dictionary cache associated with key. [[!HTTP-COMPRESSION-DICTIONARIES]] +
New protocols can avoid the need for blocking ports by negotiating the protocol @@ -6106,8 +6132,9 @@ run these steps:
If httpRequest's cache mode is
"only-if-cached", then return a network error.
-
Let forwardResponse be the result of running HTTP-network fetch given - httpFetchParams, includeCredentials, and isNewConnectionFetch. +
Let forwardResponse be the result of running + HTTP-network compression-dictionary fetch given httpFetchParams, + includeCredentials, and isNewConnectionFetch.
If httpRequest's method is unsafe and forwardResponse's status is in the range 200 to 399, inclusive, @@ -6256,12 +6283,120 @@ run these steps:
If isAuthenticationFetch is true, then create an authentication entry for request and the given realm. +
If response's header list
+ contains `Use-As-Dictionary`, then:
+
+
+
Let dictionaryValue be the result of
+ getting a structured field value given `Use-As-Dictionary`,
+ "dictionary", and response's header list.
+
+
If dictionaryValue is null or dictionaryValue["match"]
+ does not exist, then return response.
+
+
Let pattern be the result of creating a URL pattern from
+ dictionaryValue["match"] and request's
+ current URL.
+
+
If pattern is failure or pattern has regexp groups, then return + response. + +
Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +
If compressionDictionaryCache is null or request's
+ response tainting is "opaque", then return response.
+
+
Let expirationTime be the time at which the response becomes stale. + +
If expirationTime is not in the future, then return response. + +
Store response in compressionDictionaryCache with its associated + dictionaryValue and expirationTime. +
Return response. Typically response's body's stream is still being enqueued to after returning. +
To HTTP-network compression-dictionary fetch, +given a fetch params fetchParams, an optional boolean +includeCredentials (default false), and an optional boolean forceNewConnection +(default false), run these steps: + +
Let request be fetchParams's request. + +
If request's mode is "no-cors", then return the
+ result of running HTTP-network fetch given fetchParams,
+ includeCredentials, and forceNewConnection.
+
+
If the user agent is configured to block cookies for request, then return the + result of running HTTP-network fetch given fetchParams, + includeCredentials, and forceNewConnection. + +
Let compressionDictionaryCache be the result of + determining the compression-dictionary cache partition given request. + +
If compressionDictionaryCache is null, then return the result of running + HTTP-network fetch given fetchParams, includeCredentials, and + forceNewConnection. + +
Let bestMatch be the result of finding the best matching dictionary in + compressionDictionaryCache for request as defined in + [[!HTTP-COMPRESSION-DICTIONARIES]]. + +
If bestMatch is null, then return the result of running HTTP-network fetch + given fetchParams, includeCredentials, and forceNewConnection. + +
Add the `Available-Dictionary` and `Dictionary-ID`
+ (if applicable) headers to request using bestMatch as defined in
+ [[!HTTP-COMPRESSION-DICTIONARIES]].
+
+
Combine (`Accept-Encoding`, `dcb`)
+ in request's header list.
+
+
Combine (`Accept-Encoding`, `dcz`)
+ in request's header list.
+
+
Let response be the result of running HTTP-network fetch given + fetchParams, includeCredentials, and forceNewConnection. + +
Let codings be the result of extracting header list values given
+ `Content-Encoding` and response's header list.
+
+
If codings is null or does not contain `dcb` or `dcz`,
+ then return response.
+
+
If response's type is "opaque", then return a
+ network error.
+
+
Let availableDictionaryHash be the result of
+ getting a structured field value given `Available-Dictionary`,
+ "bytestring", and request's header list.
+
+
Let newBody be a new body whose stream is the + result of transforming response's body's stream + with an algorithm that verifies that the dictionary hash in the stream matches + availableDictionaryHash and decodes the rest of the stream with the applicable + algorithm as defined in [[!HTTP-COMPRESSION-DICTIONARIES]]. If verification or decoding fails, + the transformed stream must error. + +
Set response's body to newBody. + +
Delete `Content-Encoding` from response's
+ header list.
+
+
Return response. +
Follow the relevant requirements from HTTP. [[!HTTP]] [[!HTTP-CACHING]] + [[!HTTP-COMPRESSION-DICTIONARIES]]
If request's body is non-null, and request's @@ -8182,7 +8318,7 @@ dictionary RequestInit { any window; // can only be set to null }; -enum RequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "frame", "iframe", "image", "json", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" }; +enum RequestDestination { "", "audio", "audioworklet", "compression-dictionary", "document", "embed", "font", "frame", "iframe", "image", "json", "manifest", "object", "paintworklet", "report", "script", "sharedworker", "style", "track", "video", "worker", "xslt" }; enum RequestMode { "navigate", "same-origin", "no-cors", "cors" }; enum RequestCredentials { "omit", "same-origin", "include" }; enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };