tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>