OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | |
5 /** | 4 /** |
6 * @constructor | |
7 * @extends {WebInspector.VBox} | |
8 * @implements {WebInspector.TargetManager.Observer} | 5 * @implements {WebInspector.TargetManager.Observer} |
| 6 * @unrestricted |
9 */ | 7 */ |
10 WebInspector.ThreadsSidebarPane = function() | 8 WebInspector.ThreadsSidebarPane = class extends WebInspector.VBox { |
11 { | 9 constructor() { |
12 WebInspector.VBox.call(this); | 10 super(); |
13 | 11 |
14 /** @type {!Map.<!WebInspector.DebuggerModel, !WebInspector.UIList.Item>} */ | 12 /** @type {!Map.<!WebInspector.DebuggerModel, !WebInspector.UIList.Item>} */ |
15 this._debuggerModelToListItems = new Map(); | 13 this._debuggerModelToListItems = new Map(); |
16 /** @type {!Map.<!WebInspector.UIList.Item, !WebInspector.Target>} */ | 14 /** @type {!Map.<!WebInspector.UIList.Item, !WebInspector.Target>} */ |
17 this._listItemsToTargets = new Map(); | 15 this._listItemsToTargets = new Map(); |
18 /** @type {?WebInspector.UIList.Item} */ | 16 /** @type {?WebInspector.UIList.Item} */ |
19 this._selectedListItem = null; | 17 this._selectedListItem = null; |
20 this.threadList = new WebInspector.UIList(); | 18 this.threadList = new WebInspector.UIList(); |
21 this.threadList.show(this.element); | 19 this.threadList.show(this.element); |
22 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI
nspector.DebuggerModel.Events.DebuggerPaused, this._onDebuggerStateChanged, this
); | 20 WebInspector.targetManager.addModelListener( |
23 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI
nspector.DebuggerModel.Events.DebuggerResumed, this._onDebuggerStateChanged, thi
s); | 21 WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.DebuggerPa
used, this._onDebuggerStateChanged, |
24 WebInspector.targetManager.addModelListener(WebInspector.RuntimeModel, WebIn
spector.RuntimeModel.Events.ExecutionContextChanged, this._onExecutionContextCha
nged, this); | 22 this); |
| 23 WebInspector.targetManager.addModelListener( |
| 24 WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.DebuggerRe
sumed, this._onDebuggerStateChanged, |
| 25 this); |
| 26 WebInspector.targetManager.addModelListener( |
| 27 WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionCon
textChanged, |
| 28 this._onExecutionContextChanged, this); |
25 WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._targ
etChanged, this); | 29 WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._targ
etChanged, this); |
26 WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Event
s.NameChanged, this._targetNameChanged, this); | 30 WebInspector.targetManager.addEventListener( |
| 31 WebInspector.TargetManager.Events.NameChanged, this._targetNameChanged,
this); |
27 WebInspector.targetManager.observeTargets(this); | 32 WebInspector.targetManager.observeTargets(this); |
| 33 } |
| 34 |
| 35 /** |
| 36 * @override |
| 37 * @param {!WebInspector.Target} target |
| 38 */ |
| 39 targetAdded(target) { |
| 40 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
| 41 if (!debuggerModel) |
| 42 return; |
| 43 |
| 44 var listItem = new WebInspector.UIList.Item(this._titleForTarget(target), ''
); |
| 45 listItem.element.addEventListener('click', this._onListItemClick.bind(this,
listItem), false); |
| 46 var currentTarget = WebInspector.context.flavor(WebInspector.Target); |
| 47 if (currentTarget === target) |
| 48 this._selectListItem(listItem); |
| 49 |
| 50 this._debuggerModelToListItems.set(debuggerModel, listItem); |
| 51 this._listItemsToTargets.set(listItem, target); |
| 52 this.threadList.addItem(listItem); |
| 53 this._updateDebuggerState(debuggerModel); |
| 54 } |
| 55 |
| 56 /** |
| 57 * @override |
| 58 * @param {!WebInspector.Target} target |
| 59 */ |
| 60 targetRemoved(target) { |
| 61 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
| 62 if (!debuggerModel) |
| 63 return; |
| 64 var listItem = this._debuggerModelToListItems.remove(debuggerModel); |
| 65 if (listItem) { |
| 66 this._listItemsToTargets.remove(listItem); |
| 67 this.threadList.removeItem(listItem); |
| 68 } |
| 69 } |
| 70 |
| 71 /** |
| 72 * @param {!WebInspector.Event} event |
| 73 */ |
| 74 _targetNameChanged(event) { |
| 75 var target = /** @type {!WebInspector.Target} */ (event.data); |
| 76 var listItem = this._listItemForTarget(target); |
| 77 if (listItem) |
| 78 listItem.setTitle(this._titleForTarget(target)); |
| 79 } |
| 80 |
| 81 /** |
| 82 * @param {!WebInspector.Event} event |
| 83 */ |
| 84 _targetChanged(event) { |
| 85 var listItem = this._listItemForTarget(/** @type {!WebInspector.Target} */ (
event.data)); |
| 86 if (listItem) |
| 87 this._selectListItem(listItem); |
| 88 } |
| 89 |
| 90 /** |
| 91 * @param {!WebInspector.Target} target |
| 92 * @return {?WebInspector.UIList.Item} |
| 93 */ |
| 94 _listItemForTarget(target) { |
| 95 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
| 96 if (!debuggerModel) |
| 97 return null; |
| 98 return this._debuggerModelToListItems.get(debuggerModel) || null; |
| 99 } |
| 100 |
| 101 /** |
| 102 * @param {!WebInspector.Target} target |
| 103 * @return {string} |
| 104 */ |
| 105 _titleForTarget(target) { |
| 106 var executionContext = target.runtimeModel.defaultExecutionContext(); |
| 107 return executionContext && executionContext.label() ? executionContext.label
() : target.name(); |
| 108 } |
| 109 |
| 110 /** |
| 111 * @param {!WebInspector.Event} event |
| 112 */ |
| 113 _onDebuggerStateChanged(event) { |
| 114 var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.target
); |
| 115 this._updateDebuggerState(debuggerModel); |
| 116 } |
| 117 |
| 118 /** |
| 119 * @param {!WebInspector.Event} event |
| 120 */ |
| 121 _onExecutionContextChanged(event) { |
| 122 var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.
data); |
| 123 if (!executionContext.isDefault) |
| 124 return; |
| 125 var debuggerModel = |
| 126 /** @type {!WebInspector.DebuggerModel} */ (WebInspector.DebuggerModel.f
romTarget(executionContext.target())); |
| 127 var listItem = this._debuggerModelToListItems.get(debuggerModel); |
| 128 if (listItem && executionContext.label()) |
| 129 listItem.setTitle(executionContext.label()); |
| 130 } |
| 131 |
| 132 /** |
| 133 * @param {!WebInspector.DebuggerModel} debuggerModel |
| 134 */ |
| 135 _updateDebuggerState(debuggerModel) { |
| 136 var listItem = this._debuggerModelToListItems.get(debuggerModel); |
| 137 listItem.setSubtitle(WebInspector.UIString(debuggerModel.isPaused() ? 'pause
d' : '')); |
| 138 } |
| 139 |
| 140 /** |
| 141 * @param {!WebInspector.UIList.Item} listItem |
| 142 */ |
| 143 _selectListItem(listItem) { |
| 144 if (listItem === this._selectedListItem) |
| 145 return; |
| 146 |
| 147 if (this._selectedListItem) |
| 148 this._selectedListItem.setSelected(false); |
| 149 |
| 150 this._selectedListItem = listItem; |
| 151 listItem.setSelected(true); |
| 152 } |
| 153 |
| 154 /** |
| 155 * @param {!WebInspector.UIList.Item} listItem |
| 156 */ |
| 157 _onListItemClick(listItem) { |
| 158 WebInspector.context.setFlavor(WebInspector.Target, this._listItemsToTargets
.get(listItem)); |
| 159 listItem.element.scrollIntoViewIfNeeded(); |
| 160 } |
28 }; | 161 }; |
29 | |
30 WebInspector.ThreadsSidebarPane.prototype = { | |
31 /** | |
32 * @override | |
33 * @param {!WebInspector.Target} target | |
34 */ | |
35 targetAdded: function(target) | |
36 { | |
37 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | |
38 if (!debuggerModel) | |
39 return; | |
40 | |
41 var listItem = new WebInspector.UIList.Item(this._titleForTarget(target)
, ""); | |
42 listItem.element.addEventListener("click", this._onListItemClick.bind(th
is, listItem), false); | |
43 var currentTarget = WebInspector.context.flavor(WebInspector.Target); | |
44 if (currentTarget === target) | |
45 this._selectListItem(listItem); | |
46 | |
47 this._debuggerModelToListItems.set(debuggerModel, listItem); | |
48 this._listItemsToTargets.set(listItem, target); | |
49 this.threadList.addItem(listItem); | |
50 this._updateDebuggerState(debuggerModel); | |
51 }, | |
52 | |
53 /** | |
54 * @override | |
55 * @param {!WebInspector.Target} target | |
56 */ | |
57 targetRemoved: function(target) | |
58 { | |
59 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | |
60 if (!debuggerModel) | |
61 return; | |
62 var listItem = this._debuggerModelToListItems.remove(debuggerModel); | |
63 if (listItem) { | |
64 this._listItemsToTargets.remove(listItem); | |
65 this.threadList.removeItem(listItem); | |
66 } | |
67 }, | |
68 | |
69 /** | |
70 * @param {!WebInspector.Event} event | |
71 */ | |
72 _targetNameChanged: function(event) | |
73 { | |
74 var target = /** @type {!WebInspector.Target} */ (event.data); | |
75 var listItem = this._listItemForTarget(target); | |
76 if (listItem) | |
77 listItem.setTitle(this._titleForTarget(target)); | |
78 }, | |
79 | |
80 /** | |
81 * @param {!WebInspector.Event} event | |
82 */ | |
83 _targetChanged: function(event) | |
84 { | |
85 var listItem = this._listItemForTarget(/** @type {!WebInspector.Target}
*/ (event.data)); | |
86 if (listItem) | |
87 this._selectListItem(listItem); | |
88 }, | |
89 | |
90 /** | |
91 * @param {!WebInspector.Target} target | |
92 * @return {?WebInspector.UIList.Item} | |
93 */ | |
94 _listItemForTarget: function(target) | |
95 { | |
96 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | |
97 if (!debuggerModel) | |
98 return null; | |
99 return this._debuggerModelToListItems.get(debuggerModel) || null; | |
100 }, | |
101 | |
102 /** | |
103 * @param {!WebInspector.Target} target | |
104 * @return {string} | |
105 */ | |
106 _titleForTarget: function(target) | |
107 { | |
108 var executionContext = target.runtimeModel.defaultExecutionContext(); | |
109 return executionContext && executionContext.label() ? executionContext.l
abel() : target.name(); | |
110 }, | |
111 | |
112 /** | |
113 * @param {!WebInspector.Event} event | |
114 */ | |
115 _onDebuggerStateChanged: function(event) | |
116 { | |
117 var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.ta
rget); | |
118 this._updateDebuggerState(debuggerModel); | |
119 }, | |
120 | |
121 /** | |
122 * @param {!WebInspector.Event} event | |
123 */ | |
124 _onExecutionContextChanged: function(event) | |
125 { | |
126 var executionContext = /** @type {!WebInspector.ExecutionContext} */ (ev
ent.data); | |
127 if (!executionContext.isDefault) | |
128 return; | |
129 var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (WebInspe
ctor.DebuggerModel.fromTarget(executionContext.target())); | |
130 var listItem = this._debuggerModelToListItems.get(debuggerModel); | |
131 if (listItem && executionContext.label()) | |
132 listItem.setTitle(executionContext.label()); | |
133 }, | |
134 | |
135 /** | |
136 * @param {!WebInspector.DebuggerModel} debuggerModel | |
137 */ | |
138 _updateDebuggerState: function(debuggerModel) | |
139 { | |
140 var listItem = this._debuggerModelToListItems.get(debuggerModel); | |
141 listItem.setSubtitle(WebInspector.UIString(debuggerModel.isPaused() ? "p
aused" : "")); | |
142 }, | |
143 | |
144 /** | |
145 * @param {!WebInspector.UIList.Item} listItem | |
146 */ | |
147 _selectListItem: function(listItem) | |
148 { | |
149 if (listItem === this._selectedListItem) | |
150 return; | |
151 | |
152 if (this._selectedListItem) | |
153 this._selectedListItem.setSelected(false); | |
154 | |
155 this._selectedListItem = listItem; | |
156 listItem.setSelected(true); | |
157 }, | |
158 | |
159 /** | |
160 * @param {!WebInspector.UIList.Item} listItem | |
161 */ | |
162 _onListItemClick: function(listItem) | |
163 { | |
164 WebInspector.context.setFlavor(WebInspector.Target, this._listItemsToTar
gets.get(listItem)); | |
165 listItem.element.scrollIntoViewIfNeeded(); | |
166 }, | |
167 | |
168 | |
169 __proto__: WebInspector.VBox.prototype | |
170 }; | |
OLD | NEW |