Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>contentEncoding in resource timing</title>
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<script src="/common/get-host-info.sub.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/entry-invariants.js"></script>
<script src="resources/resource-loaders.js"></script>
<script>
const { ORIGIN, REMOTE_ORIGIN } = get_host_info();
const run_same_origin_test = (path, contentEncoding) => {
const url = new URL(path, ORIGIN);
attribute_test(
fetch, url,
entry => {
assert_equals(entry.contentEncoding, contentEncoding,
`run_same_origin_test failed, unexpected contentEncoding value.`);
});
}
run_same_origin_test("/resource-timing/resources/compressed-data.py?content_encoding=dcb", "dcb");
run_same_origin_test("/resource-timing/resources/compressed-data.py?content_encoding=dcz", "dcz");
run_same_origin_test("/resource-timing/resources/gzip_xml.py", "gzip");
run_same_origin_test("/resource-timing/resources/foo.text.br", "br");
run_same_origin_test("/resource-timing/resources/foo.text.gz", "gzip");
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");
const run_cross_origin_test = (path) => {
const url = new URL(path, REMOTE_ORIGIN);
attribute_test(
load.xhr_async, url,
entry => {
assert_equals(entry.contentEncoding, "",
`run_cross_origin_test failed, contentEncoding should be empty.`);
});
}
run_cross_origin_test("/resource-timing/resources/compressed-data.py?content_encoding=dcb");
run_cross_origin_test("/resource-timing/resources/gzip_xml.py");
run_cross_origin_test("/resource-timing/resources/compressed-data.py?content_encoding=dcz");
run_cross_origin_test("/resource-timing/resources/foo.text.br");
run_cross_origin_test("/resource-timing/resources/foo.text.gz");
run_cross_origin_test("/resource-timing/resources/foo.text.zst");
run_cross_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=deflate");
run_cross_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=gzip");
const run_cross_origin_allowed_test = (path, contentEncoding) => {
const url = new URL(path, REMOTE_ORIGIN);
url.searchParams.set("allow_origin", ORIGIN);
attribute_test(
load.xhr_async, url,
entry => {
assert_equals(entry.contentEncoding, contentEncoding,
`run_cross_origin_allowed_test failed, unexpected contentEncoding value.`);
});
}
run_cross_origin_allowed_test("/resource-timing/resources/compressed-data.py?content_encoding=dcb", "dcb");
run_cross_origin_allowed_test("/resource-timing/resources/compressed-data.py?content_encoding=dcz", "dcz");
run_cross_origin_allowed_test("/resource-timing/resources/gzip_xml.py", "gzip");
run_cross_origin_allowed_test("/resource-timing/resources/compressed-js.py?content_encoding=deflate", "deflate");
run_cross_origin_allowed_test("/resource-timing/resources/compressed-js.py?content_encoding=gzip", "gzip");
// Content-Encoding for iframes is empty when cross origin redirects are present.
const multiRedirect = new URL(`${ORIGIN}/resource-timing/resources/multi_redirect.py`);
multiRedirect.searchParams.append("page_origin", ORIGIN);
multiRedirect.searchParams.append("cross_origin", REMOTE_ORIGIN);
multiRedirect.searchParams.append("final_resource", "/resource-timing/resources/compressed-js.py?content_encoding=gzip");
attribute_test(load.iframe, multiRedirect, (entry) => {
assert_equals(entry.contentEncoding, "",
`content-encoding should be empty for iframes having cross origin redirects`);
});
// Content-Encoding for iframes is exposed for same origin redirects.
const redirectCORS = new URL(`${ORIGIN}/resource-timing/resources/redirect-cors.py`);
const dest = `${ORIGIN}/resource-timing/resources/compressed-js.py?content_encoding=gzip`;
redirectCORS.searchParams.append("location", dest)
attribute_test(load.iframe, redirectCORS, (entry) => {
assert_equals(entry.contentEncoding, "gzip",
`content-encoding should be exposed for iframes having only same origin redirects`);
});
</script>
</head>
<body>
<h1>
Description</h1>
<p>
This test validates contentEncoding in resource timing.</p>
</body>
</html>