tor-browser

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

bfcache-test-helpers.js (1532B)


      1 'use strict';
      2 
      3 // Calls `createLock` with a file handle for `fileName`. Returns the lock if it
      4 // succeeds. Returns undefined if it doesn't.
      5 export async function tryToCreateLock(fileName, createLock) {
      6  const dir = await navigator.storage.getDirectory();
      7  const fileHandle = await dir.getFileHandle(fileName, {create: true});
      8 
      9  try {
     10    return await createLock(fileHandle);
     11  } catch {
     12    return undefined;
     13  }
     14 }
     15 
     16 // Returns a function that forwards `funcName` and the `args` passed to it to
     17 // the `bfcache-test-worker.js` dedicated worker.
     18 //
     19 // Will create the dedicated worker if it doesn't already exist.
     20 export const forwardToDedicatedWorker = (() => {
     21  let dedicatedWorker;
     22 
     23  // Returns a promise that resolves with the next dedicated worker result. Or
     24  // rejects if there is an error on the worker.
     25  function getNextDedicatedWorkerResult(dedicatedWorker) {
     26    return new Promise((resolve, reject) => {
     27      dedicatedWorker.addEventListener('message', ({data}) => {
     28        resolve(data);
     29      }, {once: true});
     30      dedicatedWorker.addEventListener('error', () => {
     31        reject(new Error('An error occurred on the dedicated worker.'));
     32      }, {once: true});
     33    });
     34  }
     35 
     36  return function(funcName) {
     37    return (...args) => {
     38      if (!dedicatedWorker) {
     39        dedicatedWorker = new Worker(
     40            `/fs/resources/bfcache-test-worker.js`, {type: 'module'});
     41      }
     42 
     43      dedicatedWorker.postMessage({funcName, args});
     44      return getNextDedicatedWorkerResult(dedicatedWorker);
     45    }
     46  }
     47 })();