tor-browser

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

partitioned-service-worker-iframe-claim.html (1941B)


      1 <!DOCTYPE html>
      2 <title>Service Worker: 3P iframe for partitioned service workers</title>
      3 <script src="./test-helpers.sub.js"></script>
      4 <script src="/common/get-host-info.sub.js"></script>
      5 <script src="./partitioned-utils.js"></script>
      6 
      7 <body>
      8  <script>
      9    // 1p mode will respond to requests for its current controller and
     10    // postMessage when its controller changes.
     11    async function onLoad1pMode(){
     12      self.addEventListener('message', evt => {
     13        if(!evt.data)
     14          return;
     15 
     16        if (evt.data.type === "get-controller") {
     17          window.parent.postMessage({controller: navigator.serviceWorker.controller});
     18        }
     19      });
     20 
     21      navigator.serviceWorker.addEventListener('controllerchange', evt => {
     22        window.parent.postMessage({status: "success", context: "1p"}, '*');
     23      });
     24    }
     25 
     26    // 3p mode will tell its SW to claim and then postMessage its results
     27    // automatically.
     28    async function onLoad3pMode() {
     29      reg = await setupServiceWorker();
     30 
     31      if(navigator.serviceWorker.controller != null){
     32        //This iframe is already under control of a service worker, testing for
     33        // a controller change will timeout. Return a failure.
     34        window.parent.postMessage({status: "failure", context: "3p"}, '*');
     35        return;
     36      }
     37 
     38      // Once this client is claimed, let the test know.
     39      navigator.serviceWorker.addEventListener('controllerchange', evt => {
     40        window.parent.postMessage({status: "success", context: "3p"}, '*');
     41      });
     42 
     43      // Trigger the SW to claim.
     44      reg.active.postMessage({type: "claim"});
     45 
     46    }
     47 
     48    const request_url = new URL(window.location.href);
     49    var url_search = request_url.search.substr(1);
     50 
     51    if(url_search == "1p-mode") {
     52      self.addEventListener('load', onLoad1pMode);
     53    }
     54    else if(url_search == "3p-mode") {
     55      self.addEventListener('load', onLoad3pMode);
     56    }
     57    // Else do nothing.
     58  </script>
     59 </body>