tor-browser

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

Source-introductionScript-02.js (1266B)


      1 // Calls to 'eval', etc. by JS primitives get attributed to the point of
      2 // the primitive's call.
      3 
      4 var g = newGlobal({newCompartment: true});
      5 var dbg = new Debugger;
      6 var gDO = dbg.addDebuggee(g);
      7 var log = '';
      8 
      9 function outerHandler(frame) {
     10  log += 'o';
     11  var outerScript = frame.script;
     12 
     13  dbg.onDebuggerStatement = function (frame) {
     14    log += 'i';
     15    var source = frame.script.source;
     16    var introScript = source.introductionScript;
     17    assertEq(introScript, outerScript);
     18    assertEq(introScript.getOffsetLocation(source.introductionOffset).lineNumber, 1234);
     19  };
     20 };
     21 
     22 log = '';
     23 dbg.onDebuggerStatement = outerHandler;
     24 g.evaluate('debugger; ["debugger;"].map(eval)', { lineNumber: 1234 });
     25 assertEq(log, 'oi');
     26 
     27 log = '';
     28 dbg.onDebuggerStatement = outerHandler;
     29 g.evaluate('debugger; "debugger;".replace(/.*/, eval);',
     30           { lineNumber: 1234 });
     31 assertEq(log, 'oi');
     32 
     33 
     34 // If the call takes place in another global, however, we don't record the
     35 // introduction script.
     36 log = '';
     37 dbg.onDebuggerStatement = function (frame) {
     38  log += 'd';
     39  assertEq(frame.script.source.introductionScript, undefined);
     40  assertEq(frame.script.source.introductionOffset, undefined);
     41 };
     42 ["debugger;"].map(g.eval);
     43 "debugger;".replace(/.*/, g.eval);
     44 assertEq(log, 'dd');