tor-browser

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

sw-install.html (1550B)


      1 <!DOCTYPE html>
      2 <script>
      3 const service_worker_unregister = async scope => {
      4  const absoluteScope = new URL(scope, window.location).href;
      5  const registration = await navigator.serviceWorker.getRegistration(scope);
      6  if (registration && registration.scope === absoluteScope) {
      7    return registration.unregister();
      8  }
      9 };
     10 
     11 const service_worker_reregister = async (url, scope) => {
     12  if (!scope || scope.length == 0) {
     13    return Promise.reject(new Error('tests must define a scope'));
     14  }
     15 
     16  await service_worker_unregister(scope);
     17  return navigator.serviceWorker.register(url, {'scope': scope});
     18 };
     19 
     20 const wait_for_state_activated = worker => {
     21  if (worker.state === 'activated')
     22    return Promise.resolve();
     23 
     24  if (worker.state === 'redundant') {
     25    return Promise.reject(new Error('worker is redundant'));
     26  }
     27 
     28  return new Promise(function(resolve) {
     29    worker.addEventListener('statechange', () => {
     30      if (worker.state === 'activated') {
     31        resolve();
     32      }
     33    });
     34  });
     35 };
     36 
     37 (async () => {
     38  const script = '/resource-timing/resources/sw.js';
     39  const scope = '/resource-timing/resources/';
     40  const registration = await service_worker_reregister(script, scope);
     41  await wait_for_state_activated(registration.installing);
     42 
     43  const opener = window.opener;
     44  if (!opener) {
     45    return;
     46  }
     47 
     48  opener.postMessage("installed", "*");
     49  window.addEventListener("message", async e => {
     50    if (e.data === "unregister") {
     51      await registration.unregister();
     52      opener.postMessage("unregistered", "*");
     53    }
     54  });
     55 
     56 })();
     57 
     58 </script>