tor-browser

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

failure-on-resume.js (1607B)


      1 const dbgGlobal = newGlobal({ newCompartment: true });
      2 dbgGlobal.parent = this;
      3 dbgGlobal.eval(`
      4 var entered = 0;
      5 var forceReturn = false;
      6 Debugger(parent).onEnterFrame = function () {
      7  entered++;
      8  if (forceReturn) {
      9    return { return: "force return" };
     10  }
     11  return undefined;
     12 };
     13 `);
     14 
     15 {
     16  function* f1() { yield 10; };
     17 
     18  dbgGlobal.entered = 0;
     19  let g = f1();
     20  assertEq(dbgGlobal.entered, 1);
     21  dbgGlobal.forceReturn = true;
     22  let ret = g.next();
     23  dbgGlobal.forceReturn = false;
     24  assertEq(dbgGlobal.entered, 2);
     25 
     26  assertEq(ret.value, "force return");
     27 }
     28 
     29 {
     30  async function f2() { await {}; }
     31 
     32  dbgGlobal.entered = 0;
     33  let p = f2();
     34  assertEq(dbgGlobal.entered, 1);
     35  dbgGlobal.forceReturn = true;
     36  drainJobQueue();
     37  dbgGlobal.forceReturn = false;
     38  assertEq(dbgGlobal.entered, 2);
     39 
     40  let ret = null;
     41  p.then(x => ret = x);
     42  drainJobQueue();
     43  assertEq(ret, "force return");
     44 }
     45 
     46 {
     47  async function* f3() { await {}; }
     48 
     49  dbgGlobal.entered = 0;
     50  let g = f3();
     51  assertEq(dbgGlobal.entered, 1);
     52  dbgGlobal.forceReturn = true;
     53  let p = g.next();
     54  dbgGlobal.forceReturn = false;
     55  assertEq(dbgGlobal.entered, 2);
     56 
     57  let ret = null;
     58  p.then(v => ret = v);
     59  drainJobQueue();
     60  assertEq(ret.value, "force return");
     61 }
     62 
     63 {
     64  let m = registerModule("1", parseModule("await {};"));
     65  moduleLink(m);
     66 
     67  dbgGlobal.entered = 0;
     68  let p = moduleEvaluate(m);
     69  assertEq(dbgGlobal.entered, 1);
     70  dbgGlobal.forceReturn = true;
     71  drainJobQueue();
     72  dbgGlobal.forceReturn = false;
     73  assertEq(dbgGlobal.entered, 2);
     74 
     75  let ret = null;
     76  p.then(x => ret = x);
     77  drainJobQueue();
     78  assertEq(ret, undefined);
     79 }