File: browser_eval_in_debugger_stackframe.js

package info (click to toggle)
iceweasel 31.6.0esr-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 1,368,576 kB
  • sloc: cpp: 3,692,968; ansic: 1,797,194; python: 193,401; java: 180,622; asm: 133,557; xml: 89,288; sh: 71,748; perl: 22,087; makefile: 21,687; objc: 4,014; yacc: 1,995; pascal: 1,292; lex: 950; exp: 449; lisp: 228; awk: 211; php: 113; sed: 43; csh: 31; ada: 16; ruby: 3
file content (149 lines) | stat: -rw-r--r-- 4,062 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

// Test that makes sure web console eval happens in the user-selected stackframe
// from the js debugger.

const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-eval-in-stackframe.html";

let gWebConsole, gJSTerm, gDebuggerWin, gThread, gDebuggerController, gStackframes;

function test()
{
  addTab(TEST_URI);
  browser.addEventListener("load", function onLoad() {
    browser.removeEventListener("load", onLoad, true);
    openConsole(null, consoleOpened);
  }, true);
}

function consoleOpened(hud)
{
  gWebConsole = hud;
  gJSTerm = hud.jsterm;
  gJSTerm.execute("foo", onExecuteFoo);
}

function onExecuteFoo()
{
  isnot(gWebConsole.outputNode.textContent.indexOf("globalFooBug783499"), -1,
        "|foo| value is correct");

  gJSTerm.clearOutput();

  // Test for Bug 690529 - Web Console and Scratchpad should evaluate
  // expressions in the scope of the content window, not in a sandbox.
  executeSoon(() => gJSTerm.execute("foo2 = 'newFoo'; window.foo2", onNewFoo2));
}

function onNewFoo2(msg)
{
  is(gWebConsole.outputNode.textContent.indexOf("undefined"), -1,
     "|undefined| is not displayed after adding |foo2|");

  ok(msg, "output result found");

  isnot(msg.textContent.indexOf("newFoo"), -1,
        "'newFoo' is displayed after adding |foo2|");

  gJSTerm.clearOutput();

  info("openDebugger");
  executeSoon(() => openDebugger().then(debuggerOpened));
}

function debuggerOpened(aResult)
{
  gDebuggerWin = aResult.panelWin;
  gDebuggerController = gDebuggerWin.DebuggerController;
  gThread = gDebuggerController.activeThread;
  gStackframes = gDebuggerController.StackFrames;

  info("openConsole");
  executeSoon(() =>
    openConsole(null, () =>
      gJSTerm.execute("foo + foo2", onExecuteFooAndFoo2)
    )
  );
}

function onExecuteFooAndFoo2()
{
  let expected = "globalFooBug783499newFoo";
  isnot(gWebConsole.outputNode.textContent.indexOf(expected), -1,
        "|foo + foo2| is displayed after starting the debugger");

  executeSoon(() => {
    gJSTerm.clearOutput();

    info("openDebugger");
    openDebugger().then(() => {
      gThread.addOneTimeListener("framesadded", onFramesAdded);

      info("firstCall()");
      content.wrappedJSObject.firstCall();
    });
  });
}

function onFramesAdded()
{
  info("onFramesAdded, openConsole() now");
  executeSoon(() =>
    openConsole(null, () =>
      gJSTerm.execute("foo + foo2", onExecuteFooAndFoo2InSecondCall)
    )
  );
}

function onExecuteFooAndFoo2InSecondCall()
{
  let expected = "globalFooBug783499foo2SecondCall";
  isnot(gWebConsole.outputNode.textContent.indexOf(expected), -1,
        "|foo + foo2| from |secondCall()|");

  executeSoon(() => {
    gJSTerm.clearOutput();

    info("openDebugger and selectFrame(1)");

    openDebugger().then(() => {
      gStackframes.selectFrame(1);

      info("openConsole");
      executeSoon(() =>
        openConsole(null, () =>
          gJSTerm.execute("foo + foo2 + foo3", onExecuteFoo23InFirstCall)
        )
      );
    });
  });
}

function onExecuteFoo23InFirstCall()
{
  let expected = "fooFirstCallnewFoofoo3FirstCall";
  isnot(gWebConsole.outputNode.textContent.indexOf(expected), -1,
        "|foo + foo2 + foo3| from |firstCall()|");

  executeSoon(() =>
    gJSTerm.execute("foo = 'abba'; foo3 = 'bug783499'; foo + foo3",
                    onExecuteFooAndFoo3ChangesInFirstCall));
}

function onExecuteFooAndFoo3ChangesInFirstCall()
{
  let expected = "abbabug783499";
  isnot(gWebConsole.outputNode.textContent.indexOf(expected), -1,
        "|foo + foo3| updated in |firstCall()|");

  is(content.wrappedJSObject.foo, "globalFooBug783499", "|foo| in content window");
  is(content.wrappedJSObject.foo2, "newFoo", "|foo2| in content window");
  ok(!content.wrappedJSObject.foo3, "|foo3| was not added to the content window");

  gWebConsole = gJSTerm = gDebuggerWin = gThread = gDebuggerController =
    gStackframes = null;
  executeSoon(finishTest);
}