tor-browser

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

nested-blob-url-workers.html (1201B)


      1 <!doctype html>
      2 <script>
      3 const baseLocation = window.location;
      4 const parentWorkerScript = `
      5  const childWorkerScript = 'self.onmessage = async (e) => {' +
      6    '  const response = await fetch(e.data);' +
      7    '  const text = await response.text();' +
      8    '  self.postMessage(text);' +
      9    '};';
     10  const blob = new Blob([childWorkerScript], { type: 'text/javascript' });
     11  const blobUrl = URL.createObjectURL(blob);
     12  const childWorker = new Worker(blobUrl);
     13 
     14  // When a message comes from the parent frame, sends a resource url to the
     15  // child worker.
     16  self.onmessage = (e) => {
     17    childWorker.postMessage(e.data);
     18  };
     19  // When a message comes from the child worker, sends a content of fetch() to
     20  // the parent frame.
     21  childWorker.onmessage = (e) => {
     22    self.postMessage(e.data);
     23  };
     24 `;
     25 const blob = new Blob([parentWorkerScript], { type: 'text/javascript' });
     26 const blobUrl = URL.createObjectURL(blob);
     27 const worker = new Worker(blobUrl);
     28 
     29 function fetch_in_worker(url) {
     30  const resourceUrl = new URL(url, baseLocation).href;
     31  return new Promise((resolve) => {
     32    worker.onmessage = (event) => {
     33      resolve(event.data);
     34    };
     35    worker.postMessage(resourceUrl);
     36  });
     37 }
     38 </script>