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 |
(...skipping 24 matching lines...) Expand all Loading... |
35 } | 35 } |
36 | 36 |
37 WebInspector.CallStackSidebarPane.Events = { | 37 WebInspector.CallStackSidebarPane.Events = { |
38 CallFrameRestarted: "CallFrameRestarted", | 38 CallFrameRestarted: "CallFrameRestarted", |
39 CallFrameSelected: "CallFrameSelected" | 39 CallFrameSelected: "CallFrameSelected" |
40 } | 40 } |
41 | 41 |
42 WebInspector.CallStackSidebarPane.prototype = { | 42 WebInspector.CallStackSidebarPane.prototype = { |
43 /** | 43 /** |
44 * @param {?Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames | 44 * @param {?Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames |
| 45 * @param {?WebInspector.DebuggerModel.StackTrace} asyncStackTrace |
45 */ | 46 */ |
46 update: function(callFrames) | 47 update: function(callFrames, asyncStackTrace) |
47 { | 48 { |
48 this.bodyElement.removeChildren(); | 49 this.bodyElement.removeChildren(); |
49 delete this._statusMessageElement; | 50 delete this._statusMessageElement; |
50 /** @type {!Array.<!WebInspector.CallStackSidebarPane.Placard>} */ | 51 /** @type {!Array.<!WebInspector.CallStackSidebarPane.Placard>} */ |
51 this.placards = []; | 52 this.placards = []; |
52 | 53 |
53 if (!callFrames) { | 54 if (!callFrames) { |
54 var infoElement = this.bodyElement.createChild("div", "info"); | 55 var infoElement = this.bodyElement.createChild("div", "info"); |
55 infoElement.textContent = WebInspector.UIString("Not Paused"); | 56 infoElement.textContent = WebInspector.UIString("Not Paused"); |
56 return; | 57 return; |
57 } | 58 } |
58 | 59 |
59 this._appendSidebarPlacards(callFrames, this.bodyElement); | 60 this._appendSidebarPlacards(callFrames, this.bodyElement); |
| 61 |
| 62 while (asyncStackTrace) { |
| 63 var asyncPlacards = this._appendSidebarPlacards(asyncStackTrace.call
Frames); |
| 64 var group = new WebInspector.PlacardGroup(WebInspector.UIString("[As
ync Call]"), asyncPlacards); |
| 65 group.element.addEventListener("contextmenu", this._placardContextMe
nu.bind(this, asyncPlacards[0]), true); |
| 66 this.bodyElement.appendChild(group.element); |
| 67 asyncStackTrace = asyncStackTrace.asyncStackTrace; |
| 68 } |
60 }, | 69 }, |
61 | 70 |
62 /** | 71 /** |
63 * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames | 72 * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames |
64 * @param {!Element=} parentElement | 73 * @param {!Element=} parentElement |
| 74 * @return {!Array.<!WebInspector.CallStackSidebarPane.Placard>} |
65 */ | 75 */ |
66 _appendSidebarPlacards: function(callFrames, parentElement) | 76 _appendSidebarPlacards: function(callFrames, parentElement) |
67 { | 77 { |
| 78 var result = []; |
68 for (var i = 0, n = callFrames.length; i < n; ++i) { | 79 for (var i = 0, n = callFrames.length; i < n; ++i) { |
69 var placard = new WebInspector.CallStackSidebarPane.Placard(callFram
es[i]); | 80 var placard = new WebInspector.CallStackSidebarPane.Placard(callFram
es[i]); |
70 placard.element.addEventListener("click", this._placardSelected.bind
(this, placard), false); | 81 placard.element.addEventListener("click", this._placardSelected.bind
(this, placard), false); |
71 placard.element.addEventListener("contextmenu", this._placardContext
Menu.bind(this, placard), true); | 82 placard.element.addEventListener("contextmenu", this._placardContext
Menu.bind(this, placard), true); |
| 83 result.push(placard); |
72 this.placards.push(placard); | 84 this.placards.push(placard); |
73 if (parentElement) | 85 if (parentElement) |
74 parentElement.appendChild(placard.element); | 86 parentElement.appendChild(placard.element); |
75 } | 87 } |
| 88 return result; |
76 }, | 89 }, |
77 | 90 |
78 /** | 91 /** |
79 * @param {!WebInspector.CallStackSidebarPane.Placard} placard | 92 * @param {!WebInspector.CallStackSidebarPane.Placard} placard |
80 */ | 93 */ |
81 _placardContextMenu: function(placard, event) | 94 _placardContextMenu: function(placard, event) |
82 { | 95 { |
83 var contextMenu = new WebInspector.ContextMenu(event); | 96 var contextMenu = new WebInspector.ContextMenu(event); |
84 | 97 |
85 if (WebInspector.debuggerModel.canSetScriptSource()) | 98 if (!placard._callFrame.isAsync() && WebInspector.debuggerModel.canSetSc
riptSource()) |
86 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa
seMenuTitles() ? "Restart frame" : "Restart Frame"), this._restartFrame.bind(thi
s, placard)); | 99 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa
seMenuTitles() ? "Restart frame" : "Restart Frame"), this._restartFrame.bind(thi
s, placard)); |
87 | 100 |
88 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMe
nuTitles() ? "Copy stack trace" : "Copy Stack Trace"), this._copyStackTrace.bind
(this)); | 101 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMe
nuTitles() ? "Copy stack trace" : "Copy Stack Trace"), this._copyStackTrace.bind
(this)); |
| 102 contextMenu.appendSeparator(); |
| 103 |
| 104 var asyncStacksEnabled = WebInspector.settings.enableAsyncStackTraces.ge
t(); |
| 105 if (asyncStacksEnabled) |
| 106 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa
seMenuTitles() ? "Disable async stack traces" : "Disable Async Stack Traces"), t
his._enableAsyncStacks.bind(this, false)); |
| 107 else |
| 108 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCa
seMenuTitles() ? "Enable async stack traces" : "Enable Async Stack Traces"), thi
s._enableAsyncStacks.bind(this, true)); |
| 109 |
89 contextMenu.show(); | 110 contextMenu.show(); |
90 }, | 111 }, |
91 | 112 |
92 /** | 113 /** |
93 * @param {!WebInspector.CallStackSidebarPane.Placard} placard | 114 * @param {!WebInspector.CallStackSidebarPane.Placard} placard |
94 */ | 115 */ |
95 _restartFrame: function(placard) | 116 _restartFrame: function(placard) |
96 { | 117 { |
97 placard._callFrame.restart(); | 118 placard._callFrame.restart(); |
98 this.dispatchEventToListeners(WebInspector.CallStackSidebarPane.Events.C
allFrameRestarted, placard._callFrame); | 119 this.dispatchEventToListeners(WebInspector.CallStackSidebarPane.Events.C
allFrameRestarted, placard._callFrame); |
99 }, | 120 }, |
100 | 121 |
101 /** | 122 /** |
102 * @param {!WebInspector.DebuggerModel.CallFrame} x | 123 * @param {boolean} enable |
| 124 */ |
| 125 _enableAsyncStacks: function(enable) |
| 126 { |
| 127 WebInspector.settings.enableAsyncStackTraces.set(enable); |
| 128 }, |
| 129 |
| 130 /** |
| 131 * @param {WebInspector.DebuggerModel.CallFrame} x |
103 */ | 132 */ |
104 setSelectedCallFrame: function(x) | 133 setSelectedCallFrame: function(x) |
105 { | 134 { |
106 for (var i = 0; i < this.placards.length; ++i) { | 135 for (var i = 0; i < this.placards.length; ++i) { |
107 var placard = this.placards[i]; | 136 var placard = this.placards[i]; |
108 placard.selected = (placard._callFrame === x); | 137 placard.selected = (placard._callFrame === x); |
109 } | 138 } |
110 }, | 139 }, |
111 | 140 |
112 /** | 141 /** |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 * @param {!WebInspector.CallStackSidebarPane.Placard} placard | 194 * @param {!WebInspector.CallStackSidebarPane.Placard} placard |
166 */ | 195 */ |
167 _placardSelected: function(placard) | 196 _placardSelected: function(placard) |
168 { | 197 { |
169 this.dispatchEventToListeners(WebInspector.CallStackSidebarPane.Events.C
allFrameSelected, placard._callFrame); | 198 this.dispatchEventToListeners(WebInspector.CallStackSidebarPane.Events.C
allFrameSelected, placard._callFrame); |
170 }, | 199 }, |
171 | 200 |
172 _copyStackTrace: function() | 201 _copyStackTrace: function() |
173 { | 202 { |
174 var text = ""; | 203 var text = ""; |
175 for (var i = 0; i < this.placards.length; ++i) | 204 for (var i = 0; i < this.placards.length; ++i) { |
| 205 if (i && this.placards[i].group() !== this.placards[i - 1].group()) |
| 206 text += this.placards[i].group().title() + "\n"; |
176 text += this.placards[i].title + " (" + this.placards[i].subtitle +
")\n"; | 207 text += this.placards[i].title + " (" + this.placards[i].subtitle +
")\n"; |
| 208 } |
177 InspectorFrontendHost.copyText(text); | 209 InspectorFrontendHost.copyText(text); |
178 }, | 210 }, |
179 | 211 |
180 /** | 212 /** |
181 * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, func
tion(Event=):boolean)} registerShortcutDelegate | 213 * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, func
tion(Event=):boolean)} registerShortcutDelegate |
182 */ | 214 */ |
183 registerShortcuts: function(registerShortcutDelegate) | 215 registerShortcuts: function(registerShortcutDelegate) |
184 { | 216 { |
185 registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKey
s.NextCallFrame, this._selectNextCallFrameOnStack.bind(this)); | 217 registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKey
s.NextCallFrame, this._selectNextCallFrameOnStack.bind(this)); |
186 registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKey
s.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this)); | 218 registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKey
s.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this)); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 /** | 266 /** |
235 * @param {!WebInspector.UILocation} uiLocation | 267 * @param {!WebInspector.UILocation} uiLocation |
236 */ | 268 */ |
237 _update: function(uiLocation) | 269 _update: function(uiLocation) |
238 { | 270 { |
239 this.subtitle = uiLocation.linkText().trimMiddle(100); | 271 this.subtitle = uiLocation.linkText().trimMiddle(100); |
240 }, | 272 }, |
241 | 273 |
242 __proto__: WebInspector.Placard.prototype | 274 __proto__: WebInspector.Placard.prototype |
243 } | 275 } |
OLD | NEW |