tor-browser

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

shared-storage-writable-iframe-request-in-sandboxed-iframe-inner.https.sub.html (1645B)


      1 <!doctype html>
      2 <body>
      3  <script src=/resources/testharness.js></script>
      4  <script src=/shared-storage/resources/util.js></script>
      5  <script>
      6 
      7 async function init() {
      8  // Create iframe that sets (expectedKey, expectedValue) to shared storage
      9  // via response header.
     10  let {expectedKey, expectedValue} = parseExpectedKeyAndValueData();
     11  const rawWriteHeader = `set;key=${expectedKey};value=${expectedValue}`;
     12  const writeHeader = encodeURIComponent(rawWriteHeader);
     13  const iframeSrc =
     14    `/shared-storage/resources/shared-storage-write-notify-parent.py` +
     15    `?write=${writeHeader}`;
     16  let frame = document.createElement('iframe');
     17  frame.src = iframeSrc;
     18  frame.sharedStorageWritable = true;
     19 
     20  // We pass the message on to the parent/opener.
     21  const promise = new Promise((resolve, reject) => {
     22    window.addEventListener('message', async function handler(evt) {
     23      if (evt.source === frame.contentWindow &&
     24          evt.data.sharedStorageWritableHeader) {
     25        assert_equals(evt.data.sharedStorageWritableHeader, '?1');
     26        let parentOrOpener = window.opener || window.parent;
     27        parentOrOpener.postMessage({sharedStorageWritableHeader:
     28                                    evt.data.sharedStorageWritableHeader},
     29                                   "*");
     30        document.body.removeChild(frame);
     31        window.removeEventListener('message', handler);
     32        resolve();
     33      }
     34    });
     35    window.addEventListener('error', () => {
     36      reject(new Error('Navigation error'));
     37    });
     38  });
     39 
     40  // Navigate and wait for notification.
     41  document.body.appendChild(frame);
     42  await promise;
     43 }
     44 
     45 init();
     46  </script>
     47 </body>