referrer-policy-mismatch.https.html (4086B)
1 <!DOCTYPE html> 2 <title>Referrer policy mismatches must be allowed between prerendering and activation</title> 3 <meta name="timeout" content="long"> 4 <meta name="referrer" content="strict-origin-when-cross-origin"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="/common/dispatcher/dispatcher.js"></script> 9 <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> 10 <script src="../resources/utils.js"></script> 11 <script src="resources/utils.js"></script> 12 13 <body> 14 <script> 15 setup(() => assertSpeculationRulesIsSupported()); 16 17 promise_test(async t => { 18 const rcHelper = new PrerenderingRemoteContextHelper(); 19 const referrerRC = await rcHelper.addWindow(undefined, { features: "noopener" }); 20 await setReferrerPolicy(referrerRC, "strict-origin-when-cross-origin"); 21 const prerenderedRC = await referrerRC.addPrerender(); 22 23 const referrerURL = await referrerRC.executeScript(() => location.href); 24 25 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), true); 26 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerURL); 27 28 await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC, url => { 29 const a = document.createElement("a"); 30 a.href = url; 31 a.referrerPolicy = "no-referrer"; 32 a.click(); 33 }); 34 35 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), false); 36 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerURL); 37 }, 'prerendered with "strict-origin-when-cross-origin", activated with "no-referrer"'); 38 39 promise_test(async t => { 40 const rcHelper = new PrerenderingRemoteContextHelper(); 41 const referrerRC = await rcHelper.addWindow(undefined, { features: "noopener" }); 42 await setReferrerPolicy(referrerRC, "strict-origin-when-cross-origin"); 43 const prerenderedRC = await referrerRC.addPrerender(); 44 45 const referrerURL = await referrerRC.executeScript(() => location.href); 46 47 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), true); 48 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerURL); 49 50 await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC, url => { 51 const a = document.createElement("a"); 52 a.href = url; 53 a.referrerPolicy = "strict-origin"; 54 a.click(); 55 }); 56 57 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), false); 58 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerURL); 59 }, 'prerendered with "strict-origin-when-cross-origin", activated with "strict-origin"'); 60 61 promise_test(async t => { 62 const rcHelper = new PrerenderingRemoteContextHelper(); 63 const referrerRC = await rcHelper.addWindow(undefined, { features: "noopener" }); 64 await setReferrerPolicy(referrerRC, "strict-origin"); 65 const prerenderedRC = await referrerRC.addPrerender(); 66 67 const referrerURL = await referrerRC.executeScript(() => location.href); 68 const referrerOrigin = (new URL(referrerURL)).origin + "/"; 69 70 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), true); 71 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerOrigin); 72 73 await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC, url => { 74 const a = document.createElement("a"); 75 a.href = url; 76 a.referrerPolicy = "unsafe-url"; 77 a.click(); 78 }); 79 80 assert_equals(await prerenderedRC.executeScript(() => document.prerendering), false); 81 assert_equals(await prerenderedRC.executeScript(() => document.referrer), referrerOrigin); 82 }, 'prerendered with "strict-origin", activated with "unsafe-url"'); 83 84 function setReferrerPolicy(referrerRC, referrerPolicy) { 85 return referrerRC.executeScript(referrerPolicy => { 86 const meta = document.createElement("meta"); 87 meta.name = "referrer"; 88 meta.content = referrerPolicy; 89 document.head.append(meta); 90 }, [referrerPolicy]); 91 } 92 </script>