summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html')
-rw-r--r--testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html50
1 files changed, 50 insertions, 0 deletions
diff --git a/testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html b/testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html
new file mode 100644
index 0000000000..bb631b3554
--- /dev/null
+++ b/testing/web-platform/tests/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<head>
+<!-- Following CSP directive allows this URL to prefetch itself. -->
+<meta
+ http-equiv="Content-Security-Policy"
+ content="prefetch-src http://{{host}}:{{ports[http][0]}}/speculation-rules/prerender/resources/csp-prefetch-src-allow.sub.html">
+</head>
+<script src="/common/utils.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="utils.js"></script>
+<script>
+
+const params = new URLSearchParams(location.search);
+
+// Take a key used for storing a test result in the server.
+const key = params.get('key');
+
+// The main test page (restriction-csp-prefetch-src.html in the parent
+// directory) will load this page only with the "key" parameter. This page will
+// then try prerendering itself with the "run-test" parameter. When "run-test"
+// is in the URL we'll actually start the test process and record the results to
+// send back to the main test page. We do this because the main test page cannot
+// navigate itself but it also cannot open a popup to a prerendered browsing
+// context so the prerender triggering and activation must both happen in this
+// popup.
+const run_test = params.has('run-test');
+if (!run_test) {
+ // Generate a new stash key so we can communicate with the prerendered page
+ // about when to close the popup.
+ const done_key = token();
+ const url = new URL(document.URL);
+ url.searchParams.append('run-test', '');
+ url.searchParams.append('done-key', done_key);
+ startPrerendering(url.toString());
+
+ // Wait until the prerendered page signals us it's ready to close.
+ nextValueFromServer(done_key).then(() => {
+ window.close();
+ });
+} else {
+ // Tell the harness the initial document.prerendering value.
+ writeValueToServer(key, document.prerendering);
+
+ // Tell the prerendering initiating page test being finished.
+ const done_key = params.get('done-key');
+ writeValueToServer(done_key, "done");
+}
+
+</script>