tor-browser

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

local-storage.https.html (1785B)


      1 <!DOCTYPE html>
      2 <title>Same-origin prerendering can access localStorage</title>
      3 <meta name="variant" content="?target_hint=_self">
      4 <meta name="variant" content="?target_hint=_blank">
      5 <meta name="timeout" content="long">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/common/utils.js"></script>
      9 <script src="/common/dispatcher/dispatcher.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 uid1 = token();
     19  const uid2 = token();
     20 
     21  // A promise to wait until a prerendered page writes data with the "prerender"
     22  // key in the local storage.
     23  const write_promise = new Promise((resolve, reject) => {
     24    window.addEventListener("storage", event => {
     25      if (event.key !== 'prerender') {
     26        reject("wrong key");
     27      } else {
     28        resolve();
     29      }
     30    }, { once: true });
     31  });
     32 
     33  const rule_extras = {'target_hint': getTargetHint()};
     34 
     35  window.localStorage.setItem('initial', uid1);
     36  const {exec} = await create_prerendered_page(
     37      t, undefined, undefined, rule_extras);
     38  const result = await exec(uid2 => {
     39    window.localStorage.setItem('prerender', uid2);
     40    return window.localStorage.getItem('initial');
     41  }, [uid2])
     42 
     43  // Start prerendering a page that attempts to access localStorage API.
     44  assert_equals(
     45    result, uid1,
     46      'prerendering page should be able to read from local storage');
     47 
     48  await write_promise;
     49  assert_equals(
     50    window.localStorage.getItem('prerender'), uid2,
     51      'prerendering page should be able to write to local storage');
     52 }, 'prerendering page should be able to access local storage');
     53 </script>