tor-browser

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

Debugger-debuggees-24.js (1166B)


      1 // Turning debugger on for a particular global with on-stack scripts shouldn't
      2 // make other globals' scripts observable.
      3 
      4 var g1 = newGlobal({newCompartment: true});
      5 var g2 = newGlobal({newCompartment: true});
      6 var g3 = newGlobal({newCompartment: true});
      7 
      8 g1.eval("" + function f() {
      9  var name = "f";
     10  g();
     11  return name;
     12 });
     13 g2.eval("" + function g() {
     14  var name = "g";
     15  h();
     16  return name;
     17 });
     18 g3.eval("" + function h() {
     19  var name = "h";
     20  toggle();
     21  return name;
     22 });
     23 
     24 g1.g = g2.g;
     25 g2.h = g3.h;
     26 
     27 function name(f) {
     28  return f.environment.getVariable("name");
     29 }
     30 
     31 var dbg = new Debugger;
     32 g3.toggle = function () {
     33  var frame;
     34 
     35  // Only f should be visible.
     36  dbg.addDebuggee(g1);
     37  frame = dbg.getNewestFrame();
     38  assertEq(name(frame), "f");
     39 
     40  // Now h should also be visible.
     41  dbg.addDebuggee(g3);
     42  frame = dbg.getNewestFrame();
     43  assertEq(name(frame), "h");
     44  assertEq(name(frame.older), "f");
     45 
     46  // Finally everything should be visible.
     47  dbg.addDebuggee(g2);
     48  frame = dbg.getNewestFrame();
     49  assertEq(name(frame), "h");
     50  assertEq(name(frame.older), "g");
     51  assertEq(name(frame.older.older), "f");
     52 };
     53 
     54 g1.eval("(" + function () { f(); } + ")();");