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 // Dynamically generated sources should have their introduction script and
2 // offset set correctly.
4 var g = newGlobal();
5 var dbg = new Debugger;
6 var gDO = dbg.addDebuggee(g);
7 var log;
9 // Direct eval, while the frame is live.
10 dbg.onDebuggerStatement = function (frame) {
11 log += 'd';
12 var source = frame.script.source;
13 var introducer = frame.older;
14 assertEq(source.introductionScript, introducer.script);
15 assertEq(source.introductionOffset, introducer.offset);
16 };
17 log = '';
18 g.eval('\n\neval("\\n\\ndebugger;");');
19 assertEq(log, 'd');
21 // Direct eval, after the frame has been popped.
22 var introducer, introduced;
23 dbg.onDebuggerStatement = function (frame) {
24 log += 'de1';
25 introducer = frame.script;
26 dbg.onDebuggerStatement = function (frame) {
27 log += 'de2';
28 introduced = frame.script.source;
29 };
30 };
31 log = '';
32 g.evaluate('debugger; eval("\\n\\ndebugger;");', { lineNumber: 1812 });
33 assertEq(log, 'de1de2');
34 assertEq(introduced.introductionScript, introducer);
35 assertEq(introducer.getOffsetLine(introduced.introductionOffset), 1812);
37 // Indirect eval, while the frame is live.
38 dbg.onDebuggerStatement = function (frame) {
39 log += 'd';
40 var source = frame.script.source;
41 var introducer = frame.older;
42 assertEq(source.introductionScript, introducer.script);
43 assertEq(source.introductionOffset, introducer.offset);
44 };
45 log = '';
46 g.eval('\n\n(0,eval)("\\n\\ndebugger;");');
47 assertEq(log, 'd');
49 // Indirect eval, after the frame has been popped.
50 var introducer, introduced;
51 dbg.onDebuggerStatement = function (frame) {
52 log += 'de1';
53 introducer = frame.script;
54 dbg.onDebuggerStatement = function (frame) {
55 log += 'de2';
56 introduced = frame.script.source;
57 };
58 };
59 log = '';
60 g.evaluate('debugger; (0,eval)("\\n\\ndebugger;");', { lineNumber: 1066 });
61 assertEq(log, 'de1de2');
62 assertEq(introduced.introductionScript, introducer);
63 assertEq(introducer.getOffsetLine(introduced.introductionOffset), 1066);
65 // Function constructor.
66 dbg.onDebuggerStatement = function (frame) {
67 log += 'o';
68 var outerScript = frame.script;
69 var outerOffset = frame.offset;
70 dbg.onDebuggerStatement = function (frame) {
71 log += 'i';
72 var source = frame.script.source;
73 assertEq(source.introductionScript, outerScript);
74 assertEq(outerScript.getOffsetLine(source.introductionOffset),
75 outerScript.getOffsetLine(outerOffset));
76 };
77 };
78 log = '';
79 g.eval('\n\n\ndebugger; Function("debugger;")()');
80 assertEq(log, 'oi');
82 // Function constructor, after the the introduction call's frame has been
83 // popped.
84 var introducer;
85 dbg.onDebuggerStatement = function (frame) {
86 log += 'F2';
87 introducer = frame.script;
88 };
89 log = '';
90 var fDO = gDO.evalInGlobal('debugger; Function("origami;")', { lineNumber: 1685 }).return;
91 var source = fDO.script.source;
92 assertEq(log, 'F2');
93 assertEq(source.introductionScript, introducer);
94 assertEq(introducer.getOffsetLine(source.introductionOffset), 1685);
96 // If the introduction script is in a different global from the script it
97 // introduced, we don't record it.
98 dbg.onDebuggerStatement = function (frame) {
99 log += 'x';
100 var source = frame.script.source;
101 assertEq(source.introductionScript, undefined);
102 assertEq(source.introductionOffset, undefined);
103 };
104 log = '';
105 g.eval('debugger;'); // introduction script is this top-level script
106 assertEq(log, 'x');
108 // If the code is introduced by a function that doesn't provide
109 // introduction information, that shouldn't be a problem.
110 dbg.onDebuggerStatement = function (frame) {
111 log += 'x';
112 var source = frame.script.source;
113 assertEq(source.introductionScript, undefined);
114 assertEq(source.introductionOffset, undefined);
115 };
116 log = '';
117 g.eval('evaluate("debugger;", { lineNumber: 1729 });');
118 assertEq(log, 'x');