tor-browser

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

cancel-prerendering-after-clear-site-data-cache-same-origin.https.html (2973B)


      1 <!DOCTYPE html>
      2 <title>clear-site-data-cache cancels prerenders</title>
      3 <meta name="timeout" content="long">
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="/common/utils.js"></script>
      7 <script src="/common/get-host-info.sub.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 <script>
     13 setup(() => assertSpeculationRulesIsSupported());
     14 
     15 promise_test(async t => {
     16 
     17  const rcHelper = new PrerenderingRemoteContextHelper();
     18  const referrerRC = await rcHelper.addWindow({
     19    origin: 'HTTPS_ORIGIN'
     20  }, {
     21    features: 'noopener'
     22  });
     23  const prerenderedRC = await referrerRC.addPrerender({
     24    origin: 'HTTPS_ORIGIN'
     25  });
     26 
     27  const sameOrigin = get_host_info().HTTPS_ORIGIN;
     28 
     29  // Open new window with url to clear cache data through Clear-Site-Data header.
     30  // Ensure that the cache is cleared before the navigation.
     31  const gotMessage = new Promise(resolve => {
     32    window.addEventListener('message', e => {
     33      resolve(e.data);
     34    }, {
     35      once: true
     36    });
     37  });
     38  window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-prerenderCache.py");
     39  await gotMessage;
     40 
     41  // Because Clear-Site-Data response header is sent, the existing prerender
     42  // is expected to be canceled.
     43  // And the navigation is expected to create another page instead of activation.
     44  await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC);
     45 }, "clear-site-data prerenderCache headers should prevent it from being activated");
     46 
     47 promise_test(async t => {
     48 
     49  const rcHelper = new PrerenderingRemoteContextHelper();
     50  const referrerRC = await rcHelper.addWindow({
     51    origin: 'HTTPS_ORIGIN'
     52  }, {
     53    features: 'noopener'
     54  });
     55  const prerenderedRC = await referrerRC.addPrerender({
     56    origin: 'HTTPS_ORIGIN'
     57  });
     58 
     59  const sameOrigin = get_host_info().HTTPS_ORIGIN;
     60 
     61  // Open new window with url to clear cache data through Clear-Site-Data header.
     62  // Ensure that the cache is cleared before the navigation.
     63  const gotMessage = new Promise(resolve => {
     64    window.addEventListener('message', e => {
     65      resolve(e.data);
     66    }, {
     67      once: true
     68    });
     69  });
     70  let cache_helper = "cache_helper=" + self.crypto.randomUUID() + "&";
     71  window.open(sameOrigin + "/../../clear-site-data/support/clear-site-data-cache.py?" + cache_helper + "response=single_html&cache&clear_first=all");
     72  await gotMessage;
     73 
     74  // Because Clear-Site-Data response header is sent, the existing prerender
     75  // is expected to be canceled.
     76  // And the navigation is expected to create another page instead of activation.
     77  await referrerRC.navigateExpectingNoPrerenderingActivation(prerenderedRC);
     78 }, "clear-site-data cache headers should prevent it from being activated");
     79 </script>