referrer-policy.https.html (3115B)
1 <!DOCTYPE html> 2 <title>Prefetch is done with the referring page's referrer policy</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/common/dispatcher/dispatcher.js"></script> 6 <script src="/common/subset-tests.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="../resources/utils.js"></script> 9 <script src="resources/utils.sub.js"></script> 10 11 <!--Split test cases due to the use of timeouts in speculation rules test utilities.--> 12 <meta name="variant" content="?1-1"> 13 <meta name="variant" content="?2-2"> 14 <meta name="variant" content="?3-3"> 15 <meta name="variant" content="?4-last"> 16 17 <script> 18 "use strict"; 19 20 setup(() => assertSpeculationRulesIsSupported()); 21 22 subsetTest(promise_test, async t => { 23 const agent = await spawnWindow(t); 24 await agent.setReferrerPolicy("strict-origin-when-cross-origin"); 25 const expectedReferrer = agent.getExecutorURL().href; 26 27 const nextURL = agent.getExecutorURL({ page: 2 }); 28 await agent.forceSinglePrefetch(nextURL); 29 await agent.navigate(nextURL); 30 31 const headers = await agent.getRequestHeaders(); 32 assert_prefetched(headers, "must be prefetched"); 33 assert_equals(headers.referer, expectedReferrer, "must send the full URL as the referrer"); 34 }, 'with "strict-origin-when-cross-origin" referrer policy'); 35 36 subsetTest(promise_test, async t => { 37 const agent = await spawnWindow(t); 38 await agent.setReferrerPolicy("strict-origin"); 39 const expectedReferrer = agent.getExecutorURL().origin + "/"; 40 41 const nextURL = agent.getExecutorURL({ page: 2 }); 42 await agent.forceSinglePrefetch(nextURL); 43 await agent.navigate(nextURL); 44 45 const headers = await agent.getRequestHeaders(); 46 assert_prefetched(headers, "must be prefetched"); 47 assert_equals(headers.referer, expectedReferrer, "must send the origin as the referrer"); 48 }, 'with "strict-origin" referrer policy'); 49 50 subsetTest(promise_test, async t => { 51 const agent = await spawnWindow(t); 52 await agent.setReferrerPolicy("no-referrer"); 53 54 const nextURL = agent.getExecutorURL({ page: 2 }); 55 await agent.forceSinglePrefetch(nextURL); 56 await agent.navigate(nextURL); 57 58 const headers = await agent.getRequestHeaders(); 59 assert_prefetched(headers, "must be prefetched"); 60 assert_equals(headers.referer, undefined, "must send no referrer"); 61 }, 'with "no-referrer" referrer policy'); 62 63 subsetTest(promise_test, async t => { 64 const agent = await spawnWindow(t); 65 await agent.setReferrerPolicy("no-referrer"); 66 67 const next_url = agent.getExecutorURL({ page: 2 }); 68 await agent.execute_script((url) => { 69 const a = addLink(url); 70 a.referrerPolicy = 'strict-origin'; 71 insertDocumentRule(); 72 }, [next_url]); 73 await new Promise(resolve => t.step_timeout(resolve, 2000)); 74 await agent.navigate(next_url); 75 76 const headers = await agent.getRequestHeaders(); 77 const expected_referrer = next_url.origin + '/'; 78 assert_prefetched(headers, 'must be prefetched'); 79 assert_equals(headers.referer, expected_referrer); 80 }, 'with "strict-origin" link referrer policy overriding "no-referrer" of referring page'); 81 </script>