diff options
Diffstat (limited to 'testing/web-platform/tests/lifecycle/resources/window.html')
-rw-r--r-- | testing/web-platform/tests/lifecycle/resources/window.html | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/testing/web-platform/tests/lifecycle/resources/window.html b/testing/web-platform/tests/lifecycle/resources/window.html new file mode 100644 index 0000000000..58181f32da --- /dev/null +++ b/testing/web-platform/tests/lifecycle/resources/window.html @@ -0,0 +1,84 @@ +<!doctype html> +<html> +<head><title>Frozen Window</title></head> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/common/utils.js"></script> +<body> +<h1>This window will be frozen</h1> +<iframe id="child_frame" src="child.html"></iframe> +<script> + +const freezingStepName = 'testOnFreeze'; + +function testFetch(keepalive) { + var request_token = token(); + var name = 'testfetch' + (keepalive ? 'with' : 'without') + 'keepalive'; + window.opener.add_step(name); + + function handler() { + window.opener.step_fail(name); + } + + fetch('beacon.py?token=' + request_token, { + keepalive: keepalive + }).then(() => handler()).catch(() => handler()); + + window.opener.poll_for_result(request_token, name, keepalive); +} + +function testXHR(async) { + var request_token = token(); + var name = 'test' + (async ? 'Async' : 'Sync') + 'XHR'; + window.opener.add_step(name); + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status === 0) + window.opener.step_success(name); + else + window.opener.step_fail(name); + } + } + xhr.open('GET', 'beacon.py?token=' + request_token, async); + try { + xhr.send(null); + if (async) { + window.opener.poll_for_result(request_token, name, false); + } + } catch { + window.opener.step_success(name); + }; +} + +function testSendBeacon() { + var request_token = token(); + var name = 'testSendBeacon'; + window.opener.add_step(name); + if (navigator.sendBeacon("beacon.py?token=" + request_token, "")) { + window.opener.poll_for_result(request_token, name, true); + } else { + window.opener.step_fail(name); + } +} + +window.document.addEventListener("freeze", () => { + // Testing fetch, only fetch keepalive should succeed. + testFetch(true /* keepalive */); + testFetch(false /* keepalive */); + // Testing XHR, both sync and async should fail. + testXHR(true /* async */); + testXHR(false /* sync */); + // Testing navigator.sendBeacon, which should be allowed. + testSendBeacon(); + window.opener.step_success(freezingStepName); +}); + +onload = function() { + window.opener.add_step(freezingStepName); + test_driver.freeze(); +}; + +</script> +</body> +</html> |