michael@0: // Debugger hooks fire based on debuggees. michael@0: michael@0: var g1 = newGlobal(); michael@0: g1.eval("var g2 = newGlobal('same-compartment')"); michael@0: var g2 = g1.g2; michael@0: g1.eval("function f() { debugger; g2.g(); }"); michael@0: g2.eval("function g() { debugger; }"); michael@0: michael@0: var log; michael@0: var dbg = new Debugger; michael@0: dbg.onDebuggerStatement = function (frame) { log += frame.callee.name; }; michael@0: michael@0: // No debuggees: onDebuggerStatement is not called. michael@0: log = ''; michael@0: g1.f(); michael@0: assertEq(log, ''); michael@0: michael@0: // Add a debuggee and check that the handler is called. michael@0: var g1w = dbg.addDebuggee(g1); michael@0: log = ''; michael@0: g1.f(); michael@0: assertEq(log, 'f'); michael@0: michael@0: // Two debuggees, two onDebuggerStatement calls. michael@0: dbg.addDebuggee(g2); michael@0: log = ''; michael@0: g1.f(); michael@0: assertEq(log, 'fg'); michael@0: michael@0: // After a debuggee is removed, it no longer calls hooks. michael@0: assertEq(dbg.removeDebuggee(g1w), undefined); michael@0: log = ''; michael@0: g1.f(); michael@0: assertEq(log, 'g');