tor-browser

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

dom_worker_helper.js (3791B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(
      7  Ci.nsIWorkerDebuggerManager
      8 );
      9 
     10 const BASE_URL = "chrome://mochitests/content/chrome/dom/workers/test/";
     11 
     12 var gRemainingTests = 0;
     13 
     14 function waitForWorkerFinish() {
     15  if (gRemainingTests == 0) {
     16    SimpleTest.waitForExplicitFinish();
     17  }
     18  ++gRemainingTests;
     19 }
     20 
     21 function finish() {
     22  --gRemainingTests;
     23  if (gRemainingTests == 0) {
     24    SimpleTest.finish();
     25  }
     26 }
     27 
     28 function assertThrows(fun, message) {
     29  let throws = false;
     30  try {
     31    fun();
     32  } catch (e) {
     33    throws = true;
     34  }
     35  ok(throws, message);
     36 }
     37 
     38 function generateDebuggers() {
     39  return wdm.getWorkerDebuggerEnumerator();
     40 }
     41 
     42 function findDebugger(url) {
     43  for (let dbg of generateDebuggers()) {
     44    if (dbg.url === url) {
     45      return dbg;
     46    }
     47  }
     48  return null;
     49 }
     50 
     51 function waitForRegister(url, dbgUrl) {
     52  return new Promise(function (resolve) {
     53    wdm.addListener({
     54      onRegister(dbg) {
     55        if (dbg.url !== url) {
     56          return;
     57        }
     58        ok(true, "Debugger with url " + url + " should be registered.");
     59        wdm.removeListener(this);
     60        if (dbgUrl) {
     61          info("Initializing worker debugger with url " + url + ".");
     62          dbg.initialize(dbgUrl);
     63        }
     64        resolve(dbg);
     65      },
     66    });
     67  });
     68 }
     69 
     70 function waitForUnregister(url) {
     71  return new Promise(function (resolve) {
     72    wdm.addListener({
     73      onUnregister(dbg) {
     74        if (dbg.url !== url) {
     75          return;
     76        }
     77        ok(true, "Debugger with url " + url + " should be unregistered.");
     78        wdm.removeListener(this);
     79        resolve();
     80      },
     81    });
     82  });
     83 }
     84 
     85 function waitForDebuggerClose(dbg) {
     86  return new Promise(function (resolve) {
     87    dbg.addListener({
     88      onClose() {
     89        ok(true, "Debugger should be closed.");
     90        dbg.removeListener(this);
     91        resolve();
     92      },
     93    });
     94  });
     95 }
     96 
     97 function waitForDebuggerError(dbg) {
     98  return new Promise(function (resolve) {
     99    dbg.addListener({
    100      onError(filename, lineno, message) {
    101        dbg.removeListener(this);
    102        resolve(new Error(message, filename, lineno));
    103      },
    104    });
    105  });
    106 }
    107 
    108 function waitForDebuggerMessage(dbg, message) {
    109  return new Promise(function (resolve) {
    110    dbg.addListener({
    111      onMessage(message1) {
    112        if (message !== message1) {
    113          return;
    114        }
    115        ok(true, "Should receive " + message + " message from debugger.");
    116        dbg.removeListener(this);
    117        resolve();
    118      },
    119    });
    120  });
    121 }
    122 
    123 function waitForWindowMessage(window, message) {
    124  return new Promise(function (resolve) {
    125    let onmessage = function (event) {
    126      // eslint-disable-next-line no-self-compare
    127      if (event.data !== event.data) {
    128        return;
    129      }
    130      window.removeEventListener("message", onmessage);
    131      resolve();
    132    };
    133    window.addEventListener("message", onmessage);
    134  });
    135 }
    136 
    137 function waitForWorkerMessage(worker, message) {
    138  return new Promise(function (resolve) {
    139    worker.addEventListener("message", function onmessage(event) {
    140      if (event.data !== message) {
    141        return;
    142      }
    143      ok(true, "Should receive " + message + " message from worker.");
    144      worker.removeEventListener("message", onmessage);
    145      resolve();
    146    });
    147  });
    148 }
    149 
    150 function waitForMultiple(promises) {
    151  // There used to be old logic which expects promises to be resolved in
    152  // succession, but where it seems like this was an incorrect assumption.
    153  // Assuming this change sticks, bug 1861778 tracks removing this method
    154  // entirely in favor of Promise.all at the call-sites or transform the callers
    155  // into explicitly documented awaited sequences.
    156  return Promise.all(promises);
    157 }