Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // After clearing one breakpoint, another breakpoint from a different Debugger object at the same instruction still works.
3 function test(which) {
4 var g = newGlobal();
5 g.eval("var line0 = Error().lineNumber;\n" +
6 "function f() {\n" + // line0 + 1
7 " return " + which + ";\n" + // line0 + 2
8 "}\n");
10 var log;
11 var scripts = [];
12 var handlers = [];
13 function addDebugger(g, i) {
14 var dbg = Debugger(g);
15 dbg.onDebuggerStatement = function (frame) {
16 var s = frame.eval("f").return.script;
17 scripts[i] = s;
18 var offs = s.getLineOffsets(g.line0 + 2);
19 var handler = {hit: function (frame) { log += '' + i; } };
20 s.setBreakpoint(0, handler);
21 handlers[i] = handler;
22 };
23 }
25 var expected = '';
26 for (var i = 0; i < 3; i++) {
27 addDebugger(g, i);
28 if (i !== which)
29 expected += '' + i;
30 }
31 g.eval('debugger;');
33 for (var i = 0; i < 3; i++)
34 assertEq(scripts[i].getBreakpoints()[0], handlers[i]);
36 log = '';
37 g.f();
38 assertEq(log, '012');
40 scripts[which].clearAllBreakpoints();
42 log = '';
43 g.f();
44 assertEq(log, expected);
45 }
47 for (var j = 0; j < 3; j++)
48 test(j);