Frame-onPop-multiple-02.js (984B)
1 // One Debugger's onPop handler can remove another Debugger's onPop handler. 2 var g = newGlobal({newCompartment: true}); 3 var dbg1 = new Debugger(g); 4 var dbg2 = new Debugger(g); 5 6 var log; 7 var frames = []; 8 var firstPop = true; 9 10 function handleEnter(frame) { 11 log += '('; 12 frames.push(frame); 13 frame.onPop = function handlePop(completion) { 14 log += ')'; 15 assertEq(completion.return, 42); 16 if (firstPop) { 17 // We can't say which frame's onPop handler will get called first. 18 if (this == frames[0]) 19 frames[1].onPop = undefined; 20 else 21 frames[0].onPop = undefined; 22 gc(); 23 } else { 24 assertEq("second pop handler was called", 25 "second pop handler should not be called"); 26 } 27 firstPop = false; 28 }; 29 }; 30 31 dbg1.onEnterFrame = handleEnter; 32 dbg2.onEnterFrame = handleEnter; 33 34 log = ''; 35 assertEq(g.eval('40 + 2'), 42); 36 assertEq(log, '(()');