tor-browser

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

cross-global-revoke.sub.html (2304B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/common/get-host-info.sub.js"></script>
      6 <body>
      7 <script>
      8 async_test(t => {
      9  const blob_contents = 'test blob contents';
     10  const blob = new Blob([blob_contents]);
     11  const url = URL.createObjectURL(blob);
     12  const frame = document.createElement('iframe');
     13  frame.setAttribute('style', 'display:none;');
     14  frame.src = 'resources/revoke-helper.html';
     15  document.body.appendChild(frame);
     16 
     17  frame.onload = t.step_func(e => {
     18    frame.contentWindow.postMessage({url: url}, '*');
     19  });
     20 
     21  self.addEventListener('message', t.step_func(e => {
     22    if (e.source !== frame.contentWindow) return;
     23    assert_equals(e.data, 'revoked');
     24    promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done());
     25  }));
     26 }, 'It is possible to revoke same-origin blob URLs from different frames.');
     27 
     28 async_test(t => {
     29  const blob_contents = 'test blob contents';
     30  const blob = new Blob([blob_contents]);
     31  const url = URL.createObjectURL(blob);
     32  const worker = new Worker('resources/revoke-helper.js');
     33  worker.onmessage = t.step_func(e => {
     34    assert_equals(e.data, 'revoked');
     35    promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done());
     36  });
     37  worker.postMessage({url: url});
     38 }, 'It is possible to revoke same-origin blob URLs from a different worker global.');
     39 
     40 async_test(t => {
     41  const blob_contents = 'test blob contents';
     42  const blob = new Blob([blob_contents]);
     43  const url = URL.createObjectURL(blob);
     44  const frame = document.createElement('iframe');
     45  frame.setAttribute('style', 'display:none;');
     46  frame.src = get_host_info().HTTP_REMOTE_ORIGIN + '/FileAPI/url/resources/revoke-helper.html';
     47  document.body.appendChild(frame);
     48 
     49  frame.onload = t.step_func(e => {
     50    frame.contentWindow.postMessage({url: url}, '*');
     51  });
     52 
     53  self.addEventListener('message', t.step_func(e => {
     54    if (e.source !== frame.contentWindow) return;
     55    assert_equals(e.data, 'revoked');
     56    fetch(url).then(response => response.text()).then(t.step_func_done(text => {
     57      assert_equals(text, blob_contents);
     58    }), t.unreached_func('Unexpected promise rejection'));
     59  }));
     60 }, 'It is not possible to revoke cross-origin blob URLs.');
     61 
     62 </script>