Debugger-debuggees-24.js (1166B)
1 // Turning debugger on for a particular global with on-stack scripts shouldn't 2 // make other globals' scripts observable. 3 4 var g1 = newGlobal({newCompartment: true}); 5 var g2 = newGlobal({newCompartment: true}); 6 var g3 = newGlobal({newCompartment: true}); 7 8 g1.eval("" + function f() { 9 var name = "f"; 10 g(); 11 return name; 12 }); 13 g2.eval("" + function g() { 14 var name = "g"; 15 h(); 16 return name; 17 }); 18 g3.eval("" + function h() { 19 var name = "h"; 20 toggle(); 21 return name; 22 }); 23 24 g1.g = g2.g; 25 g2.h = g3.h; 26 27 function name(f) { 28 return f.environment.getVariable("name"); 29 } 30 31 var dbg = new Debugger; 32 g3.toggle = function () { 33 var frame; 34 35 // Only f should be visible. 36 dbg.addDebuggee(g1); 37 frame = dbg.getNewestFrame(); 38 assertEq(name(frame), "f"); 39 40 // Now h should also be visible. 41 dbg.addDebuggee(g3); 42 frame = dbg.getNewestFrame(); 43 assertEq(name(frame), "h"); 44 assertEq(name(frame.older), "f"); 45 46 // Finally everything should be visible. 47 dbg.addDebuggee(g2); 48 frame = dbg.getNewestFrame(); 49 assertEq(name(frame), "h"); 50 assertEq(name(frame.older), "g"); 51 assertEq(name(frame.older.older), "f"); 52 }; 53 54 g1.eval("(" + function () { f(); } + ")();");