diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/preload/link-header-preload-non-html.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/preload/link-header-preload-non-html.html')
-rw-r--r-- | testing/web-platform/tests/preload/link-header-preload-non-html.html | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/testing/web-platform/tests/preload/link-header-preload-non-html.html b/testing/web-platform/tests/preload/link-header-preload-non-html.html new file mode 100644 index 0000000000..c990e610d9 --- /dev/null +++ b/testing/web-platform/tests/preload/link-header-preload-non-html.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Makes sure that Link headers preload resources in non-HTML documents</title> +<meta name="timeout" content="long"> +<script src="resources/dummy.js?link-header-preload2"></script> +<script src="/common/utils.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/preload/resources/preload_helper.js"></script> +<body> +<script> + + function test_document_type(options, desc) { + promise_test(async t => { + const id = token(); + const preloadLink = `/html/semantics/document-metadata/the-link-element/stylesheet.py?id=${id}`; + const params = new URLSearchParams(); + for (const opt in options) + params.set(opt, options[opt]); + params.set('link', `<${preloadLink}>;rel=preload;as=style`); + + const docURL = getAbsoluteURL(`./resources/echo-preload-header.py?${params.toString()}`); + const iframe = document.createElement('iframe'); + t.add_cleanup(() => iframe.remove()); + iframe.src = docURL; + document.body.appendChild(iframe); + await new Promise(resolve => iframe.addEventListener('load', resolve)); + const timeout = 5000; + const interval = 25; + let count = 0; + const before = performance.now(); + + while (performance.now() < before + timeout) { + // count=true returns the number of times the resource was accessed + const res = await fetch(preloadLink + '&count=true'); + + // If count is positive, the resource was accessed. + count = Number(await res.text()); + if (count > 0) + break; + + await new Promise(resolve => t.step_timeout(resolve, interval)); + } + + assert_equals(count, 1, "verify that request was issued exactly once"); + }, `${desc} documents should respect preload Link headers`); + } + + test_document_type({ + type: 'application/xml', + content: `<?xml version="1.0" encoding="utf-8"?> + <html xmlns="http://www.w3.org/1999/xhtml"> + </html>`}, "XHTML"); + test_document_type({content: 'Hello', type: 'text/plain'}, 'plain text'); + test_document_type({file: 'square.png', type: 'image/png'}, 'image'); + test_document_type({file: 'white.mp4', type: 'video/mp4'}, 'media'); + test_document_type({content: 'dummy', type: 'image/png'}, 'invalid image'); +</script> +</body> |