Bug 981097: Test introductionScript when the introducer and introduced are in different globals. r=sfink

This commit is contained in:
Jim Blandy 2014-03-13 11:54:33 -07:00
parent fbf37b0473
commit d32b645720
2 changed files with 45 additions and 0 deletions

View File

@ -29,3 +29,16 @@ dbg.onDebuggerStatement = outerHandler;
g.evaluate('debugger; "debugger;".replace(/.*/, eval);',
{ lineNumber: 1234 });
assertEq(log, 'oi');
// If the call takes place in another global, however, we don't record the
// introduction script.
log = '';
dbg.onDebuggerStatement = function (frame) {
log += 'd';
assertEq(frame.script.source.introductionScript, undefined);
assertEq(frame.script.source.introductionOffset, undefined);
};
["debugger;"].map(g.eval);
"debugger;".replace(/.*/, g.eval);
assertEq(log, 'dd');

View File

@ -0,0 +1,32 @@
// We don't record introduction scripts in a different global from the
// introduced script, even if they're both debuggees.
var dbg = new Debugger;
var g1 = newGlobal();
g1.g1 = g1;
var g1DO = dbg.addDebuggee(g1);
var g2 = newGlobal();
g2.g1 = g1;
var log = '';
dbg.onDebuggerStatement = function (frame) {
log += 'd';
assertEq(frame.script.source.introductionScript, undefined);
assertEq(frame.script.source.introductionOffset, undefined);
};
g2.eval('g1.eval("debugger;");');
assertEq(log, 'd');
// Just for sanity: when it's not cross-global, we do note the introducer.
log = '';
dbg.onDebuggerStatement = function (frame) {
log += 'd';
assertEq(frame.script.source.introductionScript instanceof Debugger.Script, true);
assertEq(typeof frame.script.source.introductionOffset, "number");
};
// Exactly as above, but with g1 instead of g2.
g1.eval('g1.eval("debugger;");');
assertEq(log, 'd');