tor-browser

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

Debugger-debuggees-23.js (2260B)


      1 // Adding a debuggee allowed with scripts on stack from stranger places.
      2 
      3 // Test CCW.
      4 (function testCCW() {
      5  var g = newGlobal({newCompartment: true});
      6  var dbg = new Debugger;
      7  g.dbg = dbg;
      8  g.GLOBAL = g;
      9 
     10  g.turnOnDebugger = function () {
     11    dbg.addDebuggee(g);
     12  };
     13 
     14  g.eval("" + function f(d) {
     15    turnOnDebugger();
     16    assertEq(dbg.hasDebuggee(GLOBAL), true);
     17  });
     18 
     19  g.eval("(" + function test() {
     20    f(false);
     21    f(false);
     22    f(true);
     23    f(true);
     24  } + ")();");
     25 })();
     26 
     27 // Test getter.
     28 (function testGetter() {
     29  var g = newGlobal({newCompartment: true});
     30  g.dbg = new Debugger;
     31  g.GLOBAL = g;
     32 
     33  g.eval("" + function f(obj) {
     34    obj.foo;
     35    assertEq(dbg.hasDebuggee(GLOBAL), true);
     36  });
     37 
     38  g.eval("(" + function test() {
     39    f({ get foo() { dbg.addDebuggee(GLOBAL); } });
     40  } + ")();");
     41 })();
     42 
     43 // Test setter.
     44 (function testSetter() {
     45  var g = newGlobal({newCompartment: true});
     46  g.dbg = new Debugger;
     47  g.GLOBAL = g;
     48 
     49  g.eval("" + function f(obj) {
     50    obj.foo = 42;
     51    assertEq(dbg.hasDebuggee(GLOBAL), true);
     52  });
     53 
     54  g.eval("(" + function test() {
     55    f({ set foo(v) { dbg.addDebuggee(GLOBAL); } });
     56  } + ")();");
     57 })();
     58 
     59 // Test toString.
     60 (function testToString() {
     61  var g = newGlobal({newCompartment: true});
     62  g.dbg = new Debugger;
     63  g.GLOBAL = g;
     64 
     65  g.eval("" + function f(obj) {
     66    obj + "";
     67    assertEq(dbg.hasDebuggee(GLOBAL), true);
     68  });
     69 
     70  g.eval("(" + function test() {
     71    f({ toString: function () { dbg.addDebuggee(GLOBAL); }});
     72  } + ")();");
     73 })();
     74 
     75 // Test valueOf.
     76 (function testValueOf() {
     77  var g = newGlobal({newCompartment: true});
     78  g.dbg = new Debugger;
     79  g.GLOBAL = g;
     80 
     81  g.eval("" + function f(obj) {
     82    obj + "";
     83    assertEq(dbg.hasDebuggee(GLOBAL), true);
     84  });
     85 
     86  g.eval("(" + function test() {
     87    f({ valueOf: function () { dbg.addDebuggee(GLOBAL); }});
     88  } + ")();");
     89 })();
     90 
     91 // Test proxy trap.
     92 (function testProxyTrap() {
     93  var g = newGlobal({newCompartment: true});
     94  g.dbg = new Debugger;
     95  g.GLOBAL = g;
     96 
     97  g.eval("" + function f(proxy) {
     98    proxy["foo"];
     99    assertEq(dbg.hasDebuggee(GLOBAL), true);
    100  });
    101 
    102  g.eval("(" + function test() {
    103    var handler = { get: function () { dbg.addDebuggee(GLOBAL); } };
    104    var proxy = new Proxy({}, handler);
    105    f(proxy);
    106  } + ")();");
    107 })();