tor-browser

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

resumption-08.js (2159B)


      1 // Check whether we respect resumption values when toggling debug mode on->off
      2 // from various points with live scripts on the stack.
      3 
      4 var g = newGlobal({newCompartment: true});
      5 var dbg = new Debugger;
      6 
      7 function reset() {
      8  dbg.onEnterFrame = undefined;
      9  dbg.onDebuggerStatement = undefined;
     10  dbg.addDebuggee(g);
     11  g.eval("(" + function test() {
     12    for (i = 0; i < 5; i++)
     13      f(42);
     14  } + ")();");
     15 }
     16 
     17 g.eval("" + function f(d) {
     18  return g(d);
     19 });
     20 
     21 g.eval("" + function g(d) {
     22  debugger;
     23  return d;
     24 });
     25 
     26 function testResumptionValues(handlerSetter) {
     27  // Test normal return.
     28  reset();
     29  handlerSetter(undefined);
     30  assertEq(g.eval("(" + function test() { return f(42); } + ")();"), 42);
     31 
     32  // Test forced return.
     33  reset();
     34  handlerSetter({ return: "not 42" });
     35  assertEq(g.eval("(" + function test() { return f(42); } + ")();"), "not 42");
     36 
     37  // Test throw.
     38  reset();
     39  handlerSetter({ throw: "thrown 42" });
     40  try {
     41    g.eval("(" + function test() { return f(42); } + ")();");;
     42  } catch (e) {
     43    assertEq(e, "thrown 42");
     44  }
     45 }
     46 
     47 // Turn off from within the prologue.
     48 testResumptionValues(function (resumptionVal) {
     49  dbg.onEnterFrame = function (frame) {
     50    if (frame.older) {
     51      if (frame.older.older) {
     52        dbg.removeDebuggee(g);
     53        return resumptionVal;
     54      }
     55    }
     56  };
     57 });
     58 
     59 // Turn off from within the epilogue.
     60 testResumptionValues(function (resumptionVal) {
     61  dbg.onEnterFrame = function (frame) {
     62    if (frame.older) {
     63      if (frame.older.older) {
     64        frame.onPop = function () {
     65          dbg.removeDebuggee(g);
     66          return resumptionVal;
     67        };
     68      }
     69    }
     70  };
     71 });
     72 
     73 // Turn off from within debugger statement handler.
     74 testResumptionValues(function (resumptionVal) {
     75  dbg.onDebuggerStatement = function (frame) {
     76    dbg.removeDebuggee(g);
     77    return resumptionVal;
     78  };
     79 });
     80 
     81 // Turn off from within debug trap handler.
     82 testResumptionValues(function (resumptionVal) {
     83  dbg.onEnterFrame = function (frame) {
     84    if (frame.older) {
     85      if (frame.older.older) {
     86        frame.onStep = function () {
     87          dbg.removeDebuggee(g);
     88          return resumptionVal;
     89        }
     90      }
     91    }
     92  };
     93 });