tor-browser

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

page_download_canceled.html (1879B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <!DOCTYPE HTML>
      6 <html>
      7 <head>
      8  <meta charset="utf-8">
      9 </head>
     10 <body>
     11 
     12 <script src="../utils.js"></script>
     13 <script type="text/javascript">
     14 function wait_until_controlled() {
     15  return new Promise(function(resolve) {
     16    if (navigator.serviceWorker.controller) {
     17      resolve('controlled');
     18      return;
     19    }
     20    navigator.serviceWorker.addEventListener('controllerchange', function onController() {
     21      if (navigator.serviceWorker.controller) {
     22        navigator.serviceWorker.removeEventListener('controllerchange', onController);
     23        resolve('controlled');
     24      }
     25    });
     26  });
     27 }
     28 addEventListener('load', async function(event) {
     29  window.controlled = wait_until_controlled();
     30  window.registration =
     31    await navigator.serviceWorker.register('sw_download_canceled.js');
     32  let sw = registration.installing || registration.waiting ||
     33           registration.active;
     34  await waitForState(sw, 'activated');
     35  sw.postMessage('claim');
     36 });
     37 
     38 // Place to hold promises for stream closures reported by the SW.
     39 window.streamClosed = {};
     40 
     41 // The ServiceWorker will postMessage to this BroadcastChannel when the streams
     42 // are closed.  (Alternately, the SW could have used the clients API to post at
     43 // us, but the mechanism by which that operates would be different when this
     44 // test is uplifted, and it's desirable to avoid timing changes.)
     45 //
     46 // The browser test will use this promise to wait on stream shutdown.
     47 window.swStreamChannel = new BroadcastChannel("stream-closed");
     48 function trackStreamClosure(path) {
     49  let resolve;
     50  const promise = new Promise(r => { resolve = r });
     51  window.streamClosed[path] = { promise, resolve };
     52 }
     53 window.swStreamChannel.onmessage = ({ data }) => {
     54  window.streamClosed[data.what].resolve(data);
     55 };
     56 </script>
     57 
     58 </body>
     59 </html>