tor-browser

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

Frame-onStep-resumption-05.js (1339B)


      1 // Test that invoking the interrupt callback counts as a step.
      2 
      3 function testResumptionVal(resumptionVal, turnOffDebugMode) {
      4  var g = newGlobal({newCompartment: true});
      5  var dbg = new Debugger;
      6  g.log = "";
      7  g.resumptionVal = resumptionVal;
      8 
      9  setInterruptCallback(function () {
     10    g.log += "i";
     11    dbg.addDebuggee(g);
     12    var frame = dbg.getNewestFrame();
     13    frame.onStep = function () {
     14      g.log += "s";
     15      frame.onStep = undefined;
     16 
     17      if (turnOffDebugMode)
     18        dbg.removeDebuggee(g);
     19 
     20      return resumptionVal;
     21    };
     22    return true;
     23  });
     24 
     25  try {
     26    return g.eval("(" + function f() {
     27      log += "f";
     28      invokeInterruptCallback(function (interruptRv) {
     29        log += "r";
     30        assertEq(interruptRv, resumptionVal == undefined);
     31      });
     32      log += "a";
     33      return 42;
     34    } + ")();");
     35  } finally {
     36    assertEq(g.log, resumptionVal == undefined ? "fisra" : "fisr");
     37  }
     38 }
     39 
     40 assertEq(testResumptionVal(undefined), 42);
     41 assertEq(testResumptionVal({ return: "not 42" }), "not 42");
     42 try {
     43  testResumptionVal({ throw: "thrown 42" });
     44 } catch (e) {
     45  assertEq(e, "thrown 42");
     46 }
     47 
     48 assertEq(testResumptionVal(undefined, true), 42);
     49 assertEq(testResumptionVal({ return: "not 42" }, true), "not 42");
     50 
     51 try {
     52  testResumptionVal({ throw: "thrown 42" }, true);
     53 } catch (e) {
     54  assertEq(e, "thrown 42");
     55 }