summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/lifecycle/resources/window.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/lifecycle/resources/window.html')
-rw-r--r--testing/web-platform/tests/lifecycle/resources/window.html84
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>