tor-browser

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

dedicated-worker-from-blob-url.window.js (1574B)


      1 function message_from_port(port) {
      2  return new Promise((resolve, reject) => {
      3    port.onmessage = e => resolve(e.data);
      4    port.onerror = e => reject(e);
      5  });
      6 }
      7 
      8 promise_test(async t => {
      9  const run_result = 'worker_OK';
     10  const blob_contents = 'self.postMessage("' + run_result + '");';
     11  const blob = new Blob([blob_contents]);
     12  const url = URL.createObjectURL(blob);
     13 
     14  const worker = new Worker(url);
     15  const reply = await message_from_port(worker);
     16  assert_equals(reply, run_result);
     17 }, 'Creating a dedicated worker from a blob URL works.');
     18 
     19 promise_test(async t => {
     20  const run_result = 'worker_OK';
     21  const blob_contents = 'self.postMessage("' + run_result + '");';
     22  const blob = new Blob([blob_contents]);
     23  const url = URL.createObjectURL(blob);
     24 
     25  const worker = new Worker(url);
     26  URL.revokeObjectURL(url);
     27  const reply = await message_from_port(worker);
     28  assert_equals(reply, run_result);
     29 }, 'Creating a dedicated worker from a blob URL works immediately before revoking.');
     30 
     31 promise_test(async t => {
     32  const run_result = false;
     33  const blob_contents = `
     34 let constructedRequest = false;
     35 try {
     36  new Request("./file.js");
     37  constructedRequest = true;
     38 } catch (e) {}
     39 self.postMessage(constructedRequest);
     40 `;
     41  const blob = new Blob([blob_contents]);
     42  const url = URL.createObjectURL(blob);
     43 
     44  const worker = new Worker(url);
     45  const reply = await message_from_port(worker);
     46  assert_equals(reply, run_result, "Should not be able to resolve request with relative file path in blob");
     47 }, 'Blob URLs should not resolve relative to document base URL.');