tor-browser

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

breakpoint-12.js (1987B)


      1 // Removing a global as a debuggee forgets all its breakpoints.
      2 
      3 
      4 var dbgA = new Debugger;
      5 var logA = '';
      6 
      7 var dbgB = new Debugger;
      8 var logB = '';
      9 
     10 var g1 = newGlobal({newCompartment: true});
     11 g1.eval('function g1f() { print("Weltuntergang"); }');
     12 var DOAg1 = dbgA.addDebuggee(g1);
     13 var DOAg1f = DOAg1.getOwnPropertyDescriptor('g1f').value;
     14 DOAg1f.script.setBreakpoint(0, { hit: () => { logA += '1'; } });
     15 
     16 var DOBg1 = dbgB.addDebuggee(g1);
     17 var DOBg1f = DOBg1.getOwnPropertyDescriptor('g1f').value;
     18 DOBg1f.script.setBreakpoint(0, { hit: () => { logB += '1'; } });
     19 
     20 
     21 var g2 = newGlobal({newCompartment: true});
     22 g2.eval('function g2f() { print("Mokushi"); }');
     23 
     24 var DOAg2 = dbgA.addDebuggee(g2);
     25 var DOAg2f = DOAg2.getOwnPropertyDescriptor('g2f').value;
     26 DOAg2f.script.setBreakpoint(0, { hit: () => { logA += '2'; } });
     27 
     28 var DOBg2 = dbgB.addDebuggee(g2);
     29 var DOBg2f = DOBg2.getOwnPropertyDescriptor('g2f').value;
     30 DOBg2f.script.setBreakpoint(0, { hit: () => { logB += '2'; } });
     31 
     32 assertEq(logA, '');
     33 assertEq(logB, '');
     34 g1.g1f();
     35 g2.g2f();
     36 assertEq(logA, '12');
     37 assertEq(logB, '12');
     38 logA = logB = '';
     39 
     40 // Removing a global as a debuggee should make its breakpoint not hit.
     41 dbgA.removeDebuggee(g2);
     42 dbgB.removeDebuggee(g1);
     43 assertEq(logA, '');
     44 assertEq(logB, '');
     45 g1.g1f();
     46 g2.g2f();
     47 assertEq(logA, '1');
     48 assertEq(logB, '2');
     49 logA = logB = '';
     50 
     51 // Adding the global back as a debuggee should not resurrect its breakpoints.
     52 dbgA.addDebuggee(g2);
     53 dbgB.addDebuggee(g1);
     54 assertEq(logA, '');
     55 assertEq(logB, '');
     56 g1.g1f();
     57 g2.g2f();
     58 assertEq(logA, '1');
     59 assertEq(logB, '2');
     60 logA = logB = '';
     61 
     62 // But, we can set them again, and it all works.
     63 DOAg2f.script.setBreakpoint(0, { hit: () => { logA += '2'; } });
     64 assertEq(logA, '');
     65 assertEq(logB, '');
     66 g2.g2f();
     67 g1.g1f();
     68 assertEq(logA, '21');
     69 assertEq(logB, '2');
     70 logA = logB = '';
     71 
     72 DOBg1f.script.setBreakpoint(0, { hit: () => { logB += '1'; } });
     73 assertEq(logA, '');
     74 assertEq(logB, '');
     75 g2.g2f();
     76 g1.g1f();
     77 assertEq(logA, '21');
     78 assertEq(logB, '21');