tor-browser

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

url-lifetime.html (1887B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <body>
      6 <script>
      7 promise_test(t => {
      8  const blob_contents = 'test blob contents';
      9  const blob = new Blob([blob_contents]);
     10  const worker = new Worker('resources/create-helper.js');
     11  let url;
     12  return new Promise(resolve => {
     13    worker.onmessage = e => resolve(e.data);
     14    worker.postMessage({blob: blob});
     15  }).then(data => {
     16    url = data.url;
     17    let result = fetch(url);
     18    worker.terminate();
     19    return result;
     20  }).then(response => response.text()).then(text => {
     21    assert_equals(text, blob_contents);
     22    return new Promise(resolve => t.step_timeout(resolve, 100));
     23  }).then(() => promise_rejects_js(t, TypeError, fetch(url)));
     24 }, 'Terminating worker revokes its URLs');
     25 
     26 promise_test(t => {
     27  const blob_contents = 'test blob contents';
     28  const blob = new Blob([blob_contents]);
     29  const frame = document.createElement('iframe');
     30  frame.setAttribute('style', 'display:none;');
     31  frame.src = 'resources/create-helper.html';
     32  document.body.appendChild(frame);
     33 
     34  let url;
     35  return new Promise(resolve => {
     36    frame.onload = t.step_func(e => {
     37      resolve(e);
     38    });
     39  }).then(e => {
     40    frame.contentWindow.postMessage({blob: blob}, '*');
     41    return new Promise(resolve => {
     42      self.addEventListener('message', t.step_func(e => {
     43        if (e.source === frame.contentWindow) resolve(e);
     44      }));
     45    });
     46  }).then(e => {
     47    url = e.data.url;
     48    let fetch_result = fetch(url);
     49    document.body.removeChild(frame);
     50    return fetch_result;
     51  }).then(response => response.text()).then(text => {
     52    assert_equals(text, blob_contents);
     53    return new Promise(resolve => t.step_timeout(resolve, 100));
     54  }).then(() => promise_rejects_js(t, TypeError, fetch(url)));
     55 }, 'Removing an iframe revokes its URLs');
     56 </script>