summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html')
-rw-r--r--testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html65
1 files changed, 65 insertions, 0 deletions
diff --git a/testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html b/testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html
new file mode 100644
index 0000000000..f32126f93d
--- /dev/null
+++ b/testing/web-platform/tests/speculation-rules/prerender/resources/window-open-in-prerenderingchange.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="utils.js"></script>
+<script>
+
+// This file is loaded twice. First this is loaded as a page to trigger
+// prerendering and then loaded as a prerendering page. The trigger page
+// activates the prerendering page.
+
+// Runs as the trigger page. This page starts prerendering and waits for signal
+// from the prerendering page. After the signal, this page starts activation.
+function runAsTriggerPage() {
+ assert_false(document.prerendering);
+
+ // Start prerendering.
+ const prerendering_url = location.href + '&prerendering=true';
+ startPrerendering(prerendering_url);
+
+ // Activate the prerendering page once it gets ready.
+ const bc = new PrerenderChannel('activation-ready');
+ bc.onmessage = () => { window.location = prerendering_url };
+}
+
+// Runs as prerendeirng page. First this page waits for the load event and
+// signals to the trigger page for starting activation. Then, this page fires
+// the prerenderingchange event and tests window.open() in the event.
+function runAsPrerenderingPage() {
+ assert_true(document.prerendering);
+
+ window.onload = () => {
+ assert_true(document.prerendering);
+
+ // Notify the trigger page of activation ready.
+ const bc = new PrerenderChannel('activation-ready');
+ bc.postMessage('ready for activation');
+ }
+
+ new PrerenderChannel('close').addEventListener('message', () => {
+ window.close();
+ });
+ document.onprerenderingchange = () => {
+ assert_false(document.prerendering);
+
+ // Attempt to open a window in the prerenderingchange event.
+ const win = window.open('empty.html', '_blank');
+
+ // Send the result to the test runner page.
+ const bc = new PrerenderChannel('result');
+ if (win) {
+ bc.postMessage('opened');
+ win.close();
+ } else {
+ bc.postMessage('failed to open');
+ }
+ };
+}
+
+if (new URLSearchParams(location.search).has('prerendering')) {
+ runAsPrerenderingPage();
+} else {
+ runAsTriggerPage();
+}
+
+</script>