summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html')
-rw-r--r--testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html80
1 files changed, 80 insertions, 0 deletions
diff --git a/testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html b/testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html
new file mode 100644
index 0000000000..8d68ffb5ff
--- /dev/null
+++ b/testing/web-platform/tests/referrer-policy/generic/inheritance/iframe-inheritance-history-about-blank.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<title>Referrer Policy: navigating back to an about:blank iframe reuses the original referrer policy</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<meta name="referrer" content="no-referrer">
+<div id="log"></div>
+<script>
+ let checkReferrer = document => {
+ let script = document.createElement('script');
+ script.innerText = `
+ fetch("${origin}/common/security-features/subresource/xhr.py",
+ {referrer: "${location.origin}/custom"})
+ .then(r => r.json())
+ .then(j => {
+ top.postMessage({referrer: j.headers.referer}, "*")
+ }).catch(e => {
+ top.postMessage({referrer: "FAILURE"}, "*");
+ });
+ `
+
+ let referrer = new Promise(resolve => {
+ window.addEventListener("message", function listener(msg) {
+ window.removeEventListener("message", listener, false);
+ resolve(msg.data.referrer);
+ });
+ });
+
+ document.body.appendChild(script);
+
+ return referrer;
+ };
+
+ let iframeLoaded = iframe => {
+ return new Promise(resolve => {
+ iframe.onload = resolve;
+ });
+ };
+
+ promise_test(async t => {
+ // 1. Create an iframe and navigate it to about:blank.
+ // (We cannot just create an empty iframe since the initial empty
+ // document will get its history entry replaced, so we cannot
+ // navigate back to it.)
+ const iframe = document.createElement("iframe");
+ iframe.name = 'test_frame';
+ iframe.src = "/referrer-policy";
+ document.body.appendChild(iframe);
+ await iframeLoaded(iframe);
+
+ window.open('about:blank', 'test_frame');
+ await iframeLoaded(iframe);
+ let referrer_1 = await checkReferrer(iframe.contentDocument);
+ assert_equals(referrer_1, undefined,
+ "First navigation uses correct policy.");
+
+ // 2. Change the referrer policy of the iframe.
+ let meta = iframe.contentDocument.createElement('meta');
+ meta.name = 'referrer';
+ meta.content = "unsafe-url";
+ iframe.contentDocument.head.appendChild(meta);
+
+ let referrer_2 = await checkReferrer(iframe.contentDocument);
+ assert_equals(referrer_2, location.origin + '/custom',
+ "Referrer policy correctly changed.");
+
+ // 3. Navigate the iframe elsewhere.
+ window.open('/referrer-policy', 'test_frame');
+ await iframeLoaded(iframe);
+
+ // 4. Navigate the iframe back.
+ iframe.contentWindow.history.back();
+ await iframeLoaded(iframe);
+
+ let referrer_3 = await checkReferrer(iframe.contentDocument);
+ assert_equals(referrer_3, undefined,
+ "History navigation reuses original policy.");
+ document.body.removeChild(iframe);
+ }, "History navigation reuses original policy.");
+
+</script>