From 8a0ccc073d34451824a34ea33bd619c92db4e124 Mon Sep 17 00:00:00 2001 From: Guohui Deng Date: Tue, 4 Feb 2025 05:13:33 +0000 Subject: [PATCH] Bug 1945614 [wpt PR 50456] - Revise filtering for Content-Encoding in ResourceTiming, a=testonly Automatic update from web-platform-tests Revise filtering for Content-Encoding in ResourceTiming The value from the http header can be of multiple codings, or not properly formatted. Per discussion on https://github.com/w3c/resource-timing/issues/381, multiple codings should be transformed to "multiple"; "identity" is not allowed in response header; and the coding value should be formatted if it's not in http header. Bug: 327941462 Change-Id: I9048423c5ad562d8001562324cb35f72ef8ac5da Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6215331 Reviewed-by: Noam Rosenthal Reviewed-by: Yoav Weiss (@Shopify) Commit-Queue: Guohui Deng Cr-Commit-Position: refs/heads/main@{#1415037} -- wpt-commits: 1691f567df269bca146cb8d25c43d644b2b42c63 wpt-pr: 50456 --- .../resource-timing/content-encoding.https.html | 10 ++++++++-- .../resources/content-encoding-headers.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 testing/web-platform/tests/resource-timing/resources/content-encoding-headers.py diff --git a/testing/web-platform/tests/resource-timing/content-encoding.https.html b/testing/web-platform/tests/resource-timing/content-encoding.https.html index 58ea76ed22b2c1..0d67bfc7d4f9a9 100644 --- a/testing/web-platform/tests/resource-timing/content-encoding.https.html +++ b/testing/web-platform/tests/resource-timing/content-encoding.https.html @@ -33,10 +33,16 @@ run_same_origin_test("/resource-timing/resources/foo.text.zst", "zstd"); run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=deflate", "deflate"); run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=gzip", "gzip"); - run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=identity", "identity"); // Unrecognized content encoding value should be transformed to "unknown". run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=unrecognizedname", "unknown"); - + // "identity" is not allowed in response header and should be transformed to "unknown". + run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=identity", "unknown"); + // Mult-encodinging and formatting tests. + run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=gzip, deflate,Apple", "multiple"); + run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=gzip, ", "multiple"); + run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=gZip ", "gzip"); + // Empty value test. + run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=", ""); const run_cross_origin_test = (path) => { const url = new URL(path, REMOTE_ORIGIN); diff --git a/testing/web-platform/tests/resource-timing/resources/content-encoding-headers.py b/testing/web-platform/tests/resource-timing/resources/content-encoding-headers.py new file mode 100644 index 00000000000000..38fb0f7349bc46 --- /dev/null +++ b/testing/web-platform/tests/resource-timing/resources/content-encoding-headers.py @@ -0,0 +1,15 @@ +import os.path + +# Return arbitory content-encoding header value. + +def read(file): + path = os.path.join(os.path.dirname(__file__), file) + return open(path, u"rb").read() + +def main(request, response): + response.headers.set(b"Content-Type", b"text/javascript") + response.content = read(u"./dummy.js") + + if b'content_encoding' in request.GET: + content_encoding = request.GET.first(b"content_encoding") + response.headers.set(b"Content-Encoding", content_encoding)