| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| 11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
| 12 * | 12 * |
| 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY | 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
| 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR | 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
| 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 /** | 26 /** |
| 27 * @constructor | 27 * @constructor |
| 28 * @extends {WebInspector.SimpleView} | 28 * @extends {WebInspector.SimpleView} |
| 29 * @implements {WebInspector.ContextFlavorListener} |
| 29 */ | 30 */ |
| 30 WebInspector.CallStackSidebarPane = function() | 31 WebInspector.CallStackSidebarPane = function() |
| 31 { | 32 { |
| 32 WebInspector.SimpleView.call(this, WebInspector.UIString("Call Stack")); | 33 WebInspector.SimpleView.call(this, WebInspector.UIString("Call Stack")); |
| 33 this.element.addEventListener("keydown", this._keyDown.bind(this), true); | 34 this.element.addEventListener("keydown", this._keyDown.bind(this), true); |
| 34 this.element.tabIndex = 0; | 35 this.element.tabIndex = 0; |
| 35 this.callFrameList = new WebInspector.UIList(); | 36 this.callFrameList = new WebInspector.UIList(); |
| 36 this.callFrameList.show(this.element); | 37 this.callFrameList.show(this.element); |
| 37 this._linkifier = new WebInspector.Linkifier(); | 38 this._linkifier = new WebInspector.Linkifier(); |
| 38 WebInspector.moduleSetting("enableAsyncStackTraces").addChangeListener(this.
_asyncStackTracesStateChanged, this); | 39 WebInspector.moduleSetting("enableAsyncStackTraces").addChangeListener(this.
_asyncStackTracesStateChanged, this); |
| 39 WebInspector.moduleSetting("skipStackFramesPattern").addChangeListener(this.
_update, this); | 40 WebInspector.moduleSetting("skipStackFramesPattern").addChangeListener(this.
_update, this); |
| 40 /** @type {!Array<!WebInspector.CallStackSidebarPane.CallFrame>} */ | 41 /** @type {!Array<!WebInspector.CallStackSidebarPane.CallFrame>} */ |
| 41 this.callFrames = []; | 42 this.callFrames = []; |
| 42 this._locationPool = new WebInspector.LiveLocationPool(); | 43 this._locationPool = new WebInspector.LiveLocationPool(); |
| 43 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI
nspector.DebuggerModel.Events.DebuggerPaused, this._update, this); | 44 this._update(); |
| 44 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI
nspector.DebuggerModel.Events.DebuggerResumed, this._update, this); | |
| 45 WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._upda
te, this); | |
| 46 WebInspector.context.addFlavorChangeListener(WebInspector.DebuggerModel.Call
Frame, this._updateCallFrame, this); | |
| 47 } | 45 } |
| 48 | 46 |
| 49 WebInspector.CallStackSidebarPane.prototype = { | 47 WebInspector.CallStackSidebarPane.prototype = { |
| 48 /** |
| 49 * @override |
| 50 * @param {?Object} object |
| 51 */ |
| 52 flavorChanged: function(object) |
| 53 { |
| 54 this._update(); |
| 55 }, |
| 56 |
| 50 _update: function() | 57 _update: function() |
| 51 { | 58 { |
| 52 var target = WebInspector.context.flavor(WebInspector.Target); | 59 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDet
ails); |
| 53 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | |
| 54 var details = debuggerModel ? debuggerModel.debuggerPausedDetails() : nu
ll; | |
| 55 | 60 |
| 56 this.callFrameList.detach(); | 61 this.callFrameList.detach(); |
| 57 this.callFrameList.clear(); | 62 this.callFrameList.clear(); |
| 58 this._linkifier.reset(); | 63 this._linkifier.reset(); |
| 59 this.element.removeChildren(); | 64 this.element.removeChildren(); |
| 60 this._locationPool.disposeAll(); | 65 this._locationPool.disposeAll(); |
| 61 | 66 |
| 62 if (!details) { | |
| 63 var infoElement = this.element.createChild("div", "callstack-info"); | |
| 64 infoElement.textContent = WebInspector.UIString("Not Paused"); | |
| 65 return; | |
| 66 } | |
| 67 | |
| 68 this.callFrameList.show(this.element); | 67 this.callFrameList.show(this.element); |
| 69 this._debuggerModel = details.debuggerModel; | |
| 70 var asyncStackTrace = details.asyncStackTrace; | |
| 71 | |
| 72 delete this._statusMessageElement; | |
| 73 delete this._hiddenCallFramesMessageElement; | 68 delete this._hiddenCallFramesMessageElement; |
| 74 this.callFrames = []; | 69 this.callFrames = []; |
| 75 this._hiddenCallFrames = 0; | 70 this._hiddenCallFrames = 0; |
| 76 | 71 |
| 72 this._updateStatusMessage(details); |
| 73 |
| 74 if (!details) { |
| 75 WebInspector.context.setFlavor(WebInspector.DebuggerModel.CallFrame,
null); |
| 76 return; |
| 77 } |
| 78 this._debuggerModel = details.debuggerModel; |
| 79 var asyncStackTrace = details.asyncStackTrace; |
| 80 |
| 77 this._appendSidebarCallFrames(this._callFramesFromDebugger(details.callF
rames)); | 81 this._appendSidebarCallFrames(this._callFramesFromDebugger(details.callF
rames)); |
| 78 var topStackHidden = (this._hiddenCallFrames === this.callFrames.length)
; | 82 var topStackHidden = (this._hiddenCallFrames === this.callFrames.length)
; |
| 79 | 83 |
| 80 while (asyncStackTrace) { | 84 while (asyncStackTrace) { |
| 81 var title = WebInspector.asyncStackTraceLabel(asyncStackTrace.descri
ption); | 85 var title = WebInspector.asyncStackTraceLabel(asyncStackTrace.descri
ption); |
| 82 var asyncCallFrame = new WebInspector.UIList.Item(title, "", true); | 86 var asyncCallFrame = new WebInspector.UIList.Item(title, "", true); |
| 83 asyncCallFrame.setHoverable(false); | 87 asyncCallFrame.setHoverable(false); |
| 84 asyncCallFrame.element.addEventListener("contextmenu", this._asyncCa
llFrameContextMenu.bind(this, this.callFrames.length), true); | 88 asyncCallFrame.element.addEventListener("contextmenu", this._asyncCa
llFrameContextMenu.bind(this, this.callFrames.length), true); |
| 85 this._appendSidebarCallFrames(this._callFramesFromRuntime(asyncStack
Trace.callFrames, asyncCallFrame), asyncCallFrame); | 89 this._appendSidebarCallFrames(this._callFramesFromRuntime(asyncStack
Trace.callFrames, asyncCallFrame), asyncCallFrame); |
| 86 asyncStackTrace = asyncStackTrace.parent; | 90 asyncStackTrace = asyncStackTrace.parent; |
| 87 } | 91 } |
| 88 | 92 |
| 89 if (topStackHidden) | 93 if (topStackHidden) |
| 90 this._revealHiddenCallFrames(); | 94 this._revealHiddenCallFrames(); |
| 91 if (this._hiddenCallFrames) { | 95 if (this._hiddenCallFrames) { |
| 92 var element = createElementWithClass("div", "hidden-callframes-messa
ge"); | 96 var element = createElementWithClass("div", "hidden-callframes-messa
ge"); |
| 93 if (this._hiddenCallFrames === 1) | 97 if (this._hiddenCallFrames === 1) |
| 94 element.textContent = WebInspector.UIString("1 stack frame is hi
dden (black-boxed)."); | 98 element.textContent = WebInspector.UIString("1 stack frame is hi
dden (black-boxed)."); |
| 95 else | 99 else |
| 96 element.textContent = WebInspector.UIString("%d stack frames are
hidden (black-boxed).", this._hiddenCallFrames); | 100 element.textContent = WebInspector.UIString("%d stack frames are
hidden (black-boxed).", this._hiddenCallFrames); |
| 97 element.createTextChild(" "); | 101 element.createTextChild(" "); |
| 98 var showAllLink = element.createChild("span", "link"); | 102 var showAllLink = element.createChild("span", "link"); |
| 99 showAllLink.textContent = WebInspector.UIString("Show"); | 103 showAllLink.textContent = WebInspector.UIString("Show"); |
| 100 showAllLink.addEventListener("click", this._revealHiddenCallFrames.b
ind(this), false); | 104 showAllLink.addEventListener("click", this._revealHiddenCallFrames.b
ind(this), false); |
| 101 this.element.insertBefore(element, this.element.firstChild); | 105 this.element.insertBefore(element, this.element.firstChild); |
| 102 this._hiddenCallFramesMessageElement = element; | 106 this._hiddenCallFramesMessageElement = element; |
| 103 } | 107 } |
| 104 WebInspector.viewManager.revealViewWithWidget(this); | 108 this._selectNextVisibleCallFrame(0); |
| 109 this.revealView(); |
| 105 }, | 110 }, |
| 106 | 111 |
| 107 /** | 112 /** |
| 113 * @param {?WebInspector.DebuggerPausedDetails} details |
| 114 */ |
| 115 _updateStatusMessage: function(details) |
| 116 { |
| 117 var status = this.contentElement.createChild("div", "callstack-info"); |
| 118 status.removeChildren(); |
| 119 |
| 120 if (!details) { |
| 121 status.textContent = WebInspector.UIString("Not Paused"); |
| 122 status.classList.toggle("status", false); |
| 123 return; |
| 124 } |
| 125 |
| 126 if (details.reason === WebInspector.DebuggerModel.BreakReason.DOM) { |
| 127 status.appendChild(WebInspector.domBreakpointsSidebarPane.createBrea
kpointHitStatusMessage(details)); |
| 128 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.Eve
ntListener) { |
| 129 var eventName = details.auxData["eventName"]; |
| 130 var eventNameForUI = WebInspector.EventListenerBreakpointsSidebarPan
e.eventNameForUI(eventName, details.auxData); |
| 131 status.textContent = WebInspector.UIString("Paused on a \"%s\" Event
Listener.", eventNameForUI); |
| 132 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.XHR
) { |
| 133 status.textContent = WebInspector.UIString("Paused on a XMLHttpReque
st."); |
| 134 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.Exc
eption) { |
| 135 var description = details.auxData["description"] || ""; |
| 136 status.textContent = WebInspector.UIString("Paused on exception: '%s
'.", description.split("\n", 1)[0]); |
| 137 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.Pro
miseRejection) { |
| 138 var description = details.auxData["description"] || ""; |
| 139 status.textContent = WebInspector.UIString("Paused on promise reject
ion: '%s'.", description.split("\n", 1)[0]); |
| 140 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.Ass
ert) { |
| 141 status.textContent = WebInspector.UIString("Paused on assertion."); |
| 142 } else if (details.reason === WebInspector.DebuggerModel.BreakReason.Deb
ugCommand) { |
| 143 status.textContent = WebInspector.UIString("Paused on a debugged fun
ction."); |
| 144 } else { |
| 145 if (details.callFrames.length) { |
| 146 var uiLocation = details && details.callFrames.length ? WebInspe
ctor.debuggerWorkspaceBinding.rawLocationToUILocation(details.callFrames[0].loca
tion()) : null; |
| 147 var breakpoint = uiLocation ? WebInspector.breakpointManager.fin
dBreakpointOnLine(uiLocation.uiSourceCode, uiLocation.lineNumber) : null; |
| 148 if (breakpoint) { |
| 149 status.textContent = WebInspector.UIString("Paused on a Java
Script breakpoint."); |
| 150 } |
| 151 } else { |
| 152 console.warn("ScriptsPanel paused, but callFrames.length is zero
."); // TODO remove this once we understand this case better |
| 153 } |
| 154 } |
| 155 status.classList.toggle("hidden", !status.firstChild); |
| 156 }, |
| 157 |
| 158 /** |
| 108 * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames | 159 * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames |
| 109 * @return {!Array<!WebInspector.CallStackSidebarPane.CallFrame>} | 160 * @return {!Array<!WebInspector.CallStackSidebarPane.CallFrame>} |
| 110 */ | 161 */ |
| 111 _callFramesFromDebugger: function(callFrames) | 162 _callFramesFromDebugger: function(callFrames) |
| 112 { | 163 { |
| 113 var callFrameItems = []; | 164 var callFrameItems = []; |
| 114 for (var i = 0, n = callFrames.length; i < n; ++i) { | 165 for (var i = 0, n = callFrames.length; i < n; ++i) { |
| 115 var callFrame = callFrames[i]; | 166 var callFrame = callFrames[i]; |
| 116 var callFrameItem = new WebInspector.CallStackSidebarPane.CallFrame(
callFrame.functionName, callFrame.location(), this._linkifier, callFrame, this._
locationPool); | 167 var callFrameItem = new WebInspector.CallStackSidebarPane.CallFrame(
callFrame.functionName, callFrame.location(), this._linkifier, callFrame, this._
locationPool); |
| 117 callFrameItem.element.addEventListener("click", this._callFrameSelec
ted.bind(this, callFrameItem), false); | 168 callFrameItem.element.addEventListener("click", this._callFrameSelec
ted.bind(this, callFrameItem), false); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 callFrame.element.remove(); | 320 callFrame.element.remove(); |
| 270 } else { | 321 } else { |
| 271 lastSyncCallFrameIndex = i; | 322 lastSyncCallFrameIndex = i; |
| 272 } | 323 } |
| 273 } | 324 } |
| 274 this.callFrames.length = lastSyncCallFrameIndex + 1; | 325 this.callFrames.length = lastSyncCallFrameIndex + 1; |
| 275 if (shouldSelectTopFrame) | 326 if (shouldSelectTopFrame) |
| 276 this._selectNextVisibleCallFrame(0); | 327 this._selectNextVisibleCallFrame(0); |
| 277 }, | 328 }, |
| 278 | 329 |
| 279 _updateCallFrame: function() | |
| 280 { | |
| 281 var selectedCallFrame = WebInspector.context.flavor(WebInspector.Debugge
rModel.CallFrame); | |
| 282 for (var i = 0; i < this.callFrames.length; ++i) { | |
| 283 var callFrame = this.callFrames[i]; | |
| 284 callFrame.setSelected(callFrame._debuggerCallFrame === selectedCallF
rame); | |
| 285 if (callFrame.isSelected() && callFrame.isHidden()) | |
| 286 this._revealHiddenCallFrames(); | |
| 287 } | |
| 288 }, | |
| 289 | |
| 290 /** | 330 /** |
| 291 * @return {boolean} | 331 * @return {boolean} |
| 292 */ | 332 */ |
| 293 _selectNextCallFrameOnStack: function() | 333 _selectNextCallFrameOnStack: function() |
| 294 { | 334 { |
| 295 var index = this._selectedCallFrameIndex(); | 335 var index = this._selectedCallFrameIndex(); |
| 296 if (index === -1) | 336 if (index === -1) |
| 297 return false; | 337 return false; |
| 298 return this._selectNextVisibleCallFrame(index + 1); | 338 return this._selectNextVisibleCallFrame(index + 1); |
| 299 }, | 339 }, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 /** | 387 /** |
| 348 * @param {!WebInspector.CallStackSidebarPane.CallFrame} callFrameItem | 388 * @param {!WebInspector.CallStackSidebarPane.CallFrame} callFrameItem |
| 349 */ | 389 */ |
| 350 _asyncCallFrameClicked: function(callFrameItem) | 390 _asyncCallFrameClicked: function(callFrameItem) |
| 351 { | 391 { |
| 352 var uiLocation = WebInspector.debuggerWorkspaceBinding.rawLocationToUILo
cation(callFrameItem._location); | 392 var uiLocation = WebInspector.debuggerWorkspaceBinding.rawLocationToUILo
cation(callFrameItem._location); |
| 353 WebInspector.Revealer.reveal(uiLocation); | 393 WebInspector.Revealer.reveal(uiLocation); |
| 354 }, | 394 }, |
| 355 | 395 |
| 356 /** | 396 /** |
| 357 * @param {!WebInspector.CallStackSidebarPane.CallFrame} callFrameItem | 397 * @param {!WebInspector.CallStackSidebarPane.CallFrame} selectedCallFrame |
| 358 */ | 398 */ |
| 359 _callFrameSelected: function(callFrameItem) | 399 _callFrameSelected: function(selectedCallFrame) |
| 360 { | 400 { |
| 361 callFrameItem.element.scrollIntoViewIfNeeded(); | 401 selectedCallFrame.element.scrollIntoViewIfNeeded(); |
| 362 var callFrame = callFrameItem._debuggerCallFrame; | 402 var callFrame = selectedCallFrame._debuggerCallFrame; |
| 363 if (callFrame) | 403 |
| 364 callFrame.debuggerModel.setSelectedCallFrame(callFrame); | 404 for (var i = 0; i < this.callFrames.length; ++i) { |
| 405 var callFrameItem = this.callFrames[i]; |
| 406 callFrameItem.setSelected(callFrameItem === selectedCallFrame); |
| 407 if (callFrameItem.isSelected() && callFrameItem.isHidden()) |
| 408 this._revealHiddenCallFrames(); |
| 409 } |
| 410 |
| 411 WebInspector.context.setFlavor(WebInspector.DebuggerModel.CallFrame, cal
lFrame); |
| 412 callFrame.debuggerModel.setSelectedCallFrame(callFrame); |
| 365 }, | 413 }, |
| 366 | 414 |
| 367 _copyStackTrace: function() | 415 _copyStackTrace: function() |
| 368 { | 416 { |
| 369 var text = ""; | 417 var text = ""; |
| 370 var lastCallFrame = null; | 418 var lastCallFrame = null; |
| 371 for (var i = 0; i < this.callFrames.length; ++i) { | 419 for (var i = 0; i < this.callFrames.length; ++i) { |
| 372 var callFrame = this.callFrames[i]; | 420 var callFrame = this.callFrames[i]; |
| 373 if (callFrame.isHidden()) | 421 if (callFrame.isHidden()) |
| 374 continue; | 422 continue; |
| 375 if (lastCallFrame && callFrame._asyncCallFrame !== lastCallFrame._as
yncCallFrame) | 423 if (lastCallFrame && callFrame._asyncCallFrame !== lastCallFrame._as
yncCallFrame) |
| 376 text += callFrame._asyncCallFrame.title() + "\n"; | 424 text += callFrame._asyncCallFrame.title() + "\n"; |
| 377 text += callFrame.title() + " (" + callFrame.subtitle() + ")\n"; | 425 text += callFrame.title() + " (" + callFrame.subtitle() + ")\n"; |
| 378 lastCallFrame = callFrame; | 426 lastCallFrame = callFrame; |
| 379 } | 427 } |
| 380 InspectorFrontendHost.copyText(text); | 428 InspectorFrontendHost.copyText(text); |
| 381 }, | 429 }, |
| 382 | 430 |
| 383 /** | 431 /** |
| 384 * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, func
tion(!Event=):boolean)} registerShortcutDelegate | 432 * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, func
tion(!Event=):boolean)} registerShortcutDelegate |
| 385 */ | 433 */ |
| 386 registerShortcuts: function(registerShortcutDelegate) | 434 registerShortcuts: function(registerShortcutDelegate) |
| 387 { | 435 { |
| 388 registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortc
uts.NextCallFrame, this._selectNextCallFrameOnStack.bind(this)); | 436 registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortc
uts.NextCallFrame, this._selectNextCallFrameOnStack.bind(this)); |
| 389 registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortc
uts.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this)); | 437 registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortc
uts.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this)); |
| 390 }, | 438 }, |
| 391 | 439 |
| 392 /** | |
| 393 * @param {!Element|string} status | |
| 394 */ | |
| 395 setStatus: function(status) | |
| 396 { | |
| 397 if (!this._statusMessageElement) | |
| 398 this._statusMessageElement = this.element.createChild("div", "callst
ack-info status"); | |
| 399 if (typeof status === "string") { | |
| 400 this._statusMessageElement.textContent = status; | |
| 401 } else { | |
| 402 this._statusMessageElement.removeChildren(); | |
| 403 this._statusMessageElement.appendChild(status); | |
| 404 } | |
| 405 }, | |
| 406 | |
| 407 _keyDown: function(event) | 440 _keyDown: function(event) |
| 408 { | 441 { |
| 409 if (event.altKey || event.shiftKey || event.metaKey || event.ctrlKey) | 442 if (event.altKey || event.shiftKey || event.metaKey || event.ctrlKey) |
| 410 return; | 443 return; |
| 411 if (event.key === "ArrowUp" && this._selectPreviousCallFrameOnStack() ||
event.key === "ArrowDown" && this._selectNextCallFrameOnStack()) | 444 if (event.key === "ArrowUp" && this._selectPreviousCallFrameOnStack() ||
event.key === "ArrowDown" && this._selectNextCallFrameOnStack()) |
| 412 event.consume(true); | 445 event.consume(true); |
| 413 }, | 446 }, |
| 414 | 447 |
| 415 __proto__: WebInspector.SimpleView.prototype | 448 __proto__: WebInspector.SimpleView.prototype |
| 416 } | 449 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 var uiLocation = liveLocation.uiLocation(); | 484 var uiLocation = liveLocation.uiLocation(); |
| 452 if (!uiLocation) | 485 if (!uiLocation) |
| 453 return; | 486 return; |
| 454 var text = uiLocation.linkText(); | 487 var text = uiLocation.linkText(); |
| 455 this.setSubtitle(text.trimMiddle(30)); | 488 this.setSubtitle(text.trimMiddle(30)); |
| 456 this.subtitleElement.title = text; | 489 this.subtitleElement.title = text; |
| 457 }, | 490 }, |
| 458 | 491 |
| 459 __proto__: WebInspector.UIList.Item.prototype | 492 __proto__: WebInspector.UIList.Item.prototype |
| 460 } | 493 } |
| OLD | NEW |