summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger/resources/debugger.js
blob: a52a5c07ef9d4c7a28db115ace7f8c04237b56ba (plain)
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
/**
 * @fileoverview Helper functions and objects for the JS debugger UI.
 * @see debugger.html
 */

/**
 * Called at the end of <body>.
 */
function loaded() {
  focusOnCommandLine();
};

/**
 * Sets focus to command-line-text element.
 */
function focusOnCommandLine() {
  var input = document.getElementById('command-line-text');
  input.focus();
};

/**
 * Called by chrome code when there's output to display.
 */
function appendText(txt) {
  var output = document.getElementById('output');
  output.appendChild(document.createTextNode(txt));
  output.appendChild(document.createElement('br'));
  document.body.scrollTop = document.body.scrollHeight;
};

// command object stores command-line history state.
var command = {
  history: [],
  history_index: 0,
  pending: null
};

/**
 * Execute a debugger command, add it to the command history and display it in
 * the output window.
 */
function executeCommand(str) {
  appendText("$ " + str);
  // Sends field.value to DebuggerContents.HandleCommand.
  chrome.send("command", [str]);
  command.history.push(str);
  command.history_index = command.history.length;
  command.pending = null;
};

/**
 * Display the previous history item in the given text field.
 */
function selectPreviousCommand(field) {
  if (command.history_index > 0) {
    // Remember the current field value as a pending command if we're at the
    // end (it's something the user typed in).
    if (command.history_index == command.history.length)
      command.pending = field.value;
    command.history_index--;
    field.value = command.history[command.history_index];
    field.select();
  }
};

/**
 * Display the next history item in the given text field.
 */
function selectNextCommand(field) {
  if (command.history_index < command.history.length) {
    command.history_index++;
    if (command.history_index == command.history.length) {
      field.value = command.pending || "";
    } else {
      field.value = command.history[command.history_index];
    }
    field.select();
  }
};


/**
 * command-line-text's onkeypress handler
 */
function keypress(e) {
  var field = e.target;
  var key = e.keyCode;
  if (key == 13) { // enter
    executeCommand(field.value);
    field.value = "";
    return false;
  }
  return true;
};

/**
 * command-line-text's onkeydown handler
 */
function keydown(e) {
  var field = e.target;
  var key = e.keyCode;
  if (key == 38) { // up arrow
    selectPreviousCommand(field);
    return false;
  } else if (key == 40) { // down arrow
    selectNextCommand(field);
    return false;
  }
  return true;
};

/**
 * Called by chrome code to set the current state as to whether the debugger
 * is stopped at a breakpoint or is running.
 */
function setDebuggerBreak(is_broken) {
  var out = document.getElementById('output');
  if (is_broken) {
    out.style.color = "black";
    focusOnCommandLine();
  } else {
    out.style.color = "gray";
  }
};