tor-browser

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

Frame-onStack-05.js (966B)


      1 // frame.onStack is false for frames removed after their compartments stopped being debuggees.
      2 
      3 load(libdir + 'asserts.js');
      4 
      5 var g1 = newGlobal({newCompartment: true});
      6 var g2 = newGlobal({newCompartment: true});
      7 var dbg = Debugger(g1, g2);
      8 var hits = 0;
      9 var snapshot = [];
     10 dbg.onDebuggerStatement = function (frame) {
     11    if (hits++ === 0) {
     12        assertEq(frame.eval("x();"), null);
     13    } else {
     14        for (var f = frame; f; f = f.older) {
     15            if (f.type === "call" && f.script !== null)
     16                snapshot.push(f);
     17        }
     18        dbg.removeDebuggee(g2);
     19        return null;
     20    }
     21 };
     22 
     23 g1.eval("function z() { debugger; }");
     24 g2.z = g1.z;
     25 g2.eval("function y() { z(); }");
     26 g2.eval("function x() { y(); }");
     27 assertEq(g2.eval("debugger; 'ok';"), "ok");
     28 assertEq(hits, 2);
     29 assertEq(snapshot.length, 3);
     30 for (var i = 0; i < snapshot.length; i++) {
     31    assertEq(snapshot[i].onStack, false);
     32    assertThrowsInstanceOf(() => frame.script, Error);
     33 }