tor-browser

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

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>