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/fetch/api/basic/keepalive.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/fetch/api/basic/keepalive.html')
-rw-r--r-- | testing/web-platform/tests/fetch/api/basic/keepalive.html | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fetch/api/basic/keepalive.html b/testing/web-platform/tests/fetch/api/basic/keepalive.html new file mode 100644 index 0000000000..36d156bba4 --- /dev/null +++ b/testing/web-platform/tests/fetch/api/basic/keepalive.html @@ -0,0 +1,106 @@ +<!doctype html> +<html> +<meta charset="utf-8"> +<title>Fetch API: keepalive handling</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<body> +<script> + +const { + HTTP_NOTSAMESITE_ORIGIN, + HTTP_REMOTE_ORIGIN, + HTTP_REMOTE_ORIGIN_WITH_DIFFERENT_PORT +} = get_host_info(); + +function getUrl(origin1, origin2, withHeaders) { + const frameOrigin = HTTP_NOTSAMESITE_ORIGIN; + return `${frameOrigin}/fetch/api/resources/keepalive-iframe.html?` + + `origin1=${origin1}&` + + `origin2=${origin2}&` + + (withHeaders ? `with-headers` : ``); +} + +async function getToken() { + return new Promise((resolve) => { + window.addEventListener('message', (event) => { + resolve(event.data); + }, {once: true}); + }); +} + +async function queryToken(token) { + const response = await fetch(`../resources/stash-take.py?key=${token}`); + const json = await response.json(); + return json; +} + +// In order to parallelize the work, we are going to have an async_test +// for the rest of the work. Note that we want the serialized behavior +// for the steps so far, so we don't want to make the entire test case +// an async_test. +function checkToken(testName, token) { + async_test((test) => { + new Promise((resolve) => test.step_timeout(resolve, 3000)).then(() => { + return queryToken(token); + }).then((result) => { + assert_equals(result, 'on'); + }).then(() => { + test.done(); + }).catch(test.step_func((e) => { + assert_unreached(e); + })); + }, testName); +} + +promise_test(async (test) => { + const iframe = document.createElement('iframe'); + iframe.src = getUrl('', '', false); + document.body.appendChild(iframe); + const tokenPromise = getToken(); + await (new Promise((resolve) => iframe.addEventListener('load', resolve))); + const token = await tokenPromise; + iframe.remove(); + + checkToken('same-origin', token); +}, 'same-origin; setting up'); + +promise_test(async (test) => { + const iframe = document.createElement('iframe'); + iframe.src = getUrl(HTTP_REMOTE_ORIGIN, + HTTP_REMOTE_ORIGIN_WITH_DIFFERENT_PORT, false); + document.body.appendChild(iframe); + const tokenPromise = getToken(); + await (new Promise((resolve) => iframe.addEventListener('load', resolve))); + const token = await tokenPromise; + iframe.remove(); + + checkToken('cross-origin redirect', token); +}, 'cross-origin redirect; setting up'); + +promise_test(async (test) => { + const iframe = document.createElement('iframe'); + iframe.src = getUrl(HTTP_REMOTE_ORIGIN, + HTTP_REMOTE_ORIGIN_WITH_DIFFERENT_PORT, true); + document.body.appendChild(iframe); + const tokenPromise = getToken(); + await (new Promise((resolve) => iframe.addEventListener('load', resolve))); + const token = await tokenPromise; + iframe.remove(); + + checkToken('cross-origin redirect with preflight', token); +}, 'cross-origin redirect with preflight; setting up'); + +promise_test(async (test) => { + const w = window.open( + `${HTTP_NOTSAMESITE_ORIGIN}/fetch/api/resources/keepalive-window.html`); + const tokenPromise = getToken(); + const token = await tokenPromise; + w.close(); + + checkToken('keepalive in onunload in nested frame in another window', token); +}, 'keepalive in onunload in nested frame in another window; setting up'); +</script> +</body> +</html> |