OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 | 4 |
5 /** @constructor */ | 5 /** @constructor */ |
6 function TaskManager() { } | 6 function TaskManager() { } |
7 | 7 |
8 cr.addSingletonGetter(TaskManager); | 8 cr.addSingletonGetter(TaskManager); |
9 | 9 |
10 /* | 10 /* |
(...skipping 19 matching lines...) Expand all Loading... | |
30 ]; | 30 ]; |
31 | 31 |
32 var COMMAND_CONTEXTMENU_COLUMN_PREFIX = 'columnContextMenu'; | 32 var COMMAND_CONTEXTMENU_COLUMN_PREFIX = 'columnContextMenu'; |
33 var COMMAND_CONTEXTMENU_TABLE_PREFIX = 'tableContextMenu'; | 33 var COMMAND_CONTEXTMENU_TABLE_PREFIX = 'tableContextMenu'; |
34 | 34 |
35 var localStrings = new LocalStrings(); | 35 var localStrings = new LocalStrings(); |
36 | 36 |
37 TaskManager.prototype = { | 37 TaskManager.prototype = { |
38 /** | 38 /** |
39 * Handle window close. | 39 * Handle window close. |
40 * @public | |
41 */ | 40 */ |
42 onClose: function () { | 41 onClose: function () { |
43 if (!this.disabled_) { | 42 if (!this.disabled_) { |
44 this.disabled_ = true; | 43 this.disabled_ = true; |
45 this.disableTaskManager(); | 44 this.disableTaskManager(); |
46 } | 45 } |
47 }, | 46 }, |
48 | 47 |
49 /** | 48 /** |
50 * Handle selection change. | 49 * Handle selection change. |
51 * This is also called when data of tasks are refleshed, even if selection | 50 * This is also called when data of tasks are refleshed, even if selection |
52 * has not been changed. | 51 * has not been changed. |
53 * @public | |
54 */ | 52 */ |
55 onSelectionChange: function () { | 53 onSelectionChange: function () { |
56 var sm = this.selectionModel_; | 54 var sm = this.selectionModel_; |
57 var dm = this.dataModel_; | 55 var dm = this.dataModel_; |
58 var selectedIndexes = sm.selectedIndexes; | 56 var selectedIndexes = sm.selectedIndexes; |
59 var is_end_process_enabled = true; | 57 var is_end_process_enabled = true; |
60 if (selectedIndexes.length == 0) | 58 if (selectedIndexes.length == 0) |
61 is_end_process_enabled = false; | 59 is_end_process_enabled = false; |
62 for (var i = 0; i < selectedIndexes.length; i++) { | 60 for (var i = 0; i < selectedIndexes.length; i++) { |
63 var index = selectedIndexes[i]; | 61 var index = selectedIndexes[i]; |
64 var task = dm.item(index); | 62 var task = dm.item(index); |
65 if (task['type'] == 'BROWSER') | 63 if (task['type'] == 'BROWSER') |
66 is_end_process_enabled = false; | 64 is_end_process_enabled = false; |
67 } | 65 } |
68 if (this.is_end_process_enabled_ != is_end_process_enabled) { | 66 if (this.is_end_process_enabled_ != is_end_process_enabled) { |
69 if (is_end_process_enabled) | 67 if (is_end_process_enabled) |
70 $('kill-process').removeAttribute("disabled"); | 68 $('kill-process').removeAttribute("disabled"); |
71 else | 69 else |
72 $('kill-process').setAttribute("disabled", "true"); | 70 $('kill-process').setAttribute("disabled", "true"); |
73 | 71 |
74 this.is_end_process_enabled_ = is_end_process_enabled; | 72 this.is_end_process_enabled_ = is_end_process_enabled; |
75 } | 73 } |
76 }, | 74 }, |
77 | 75 |
78 /** | 76 /** |
79 * Closes taskmanager dialog. | 77 * Closes taskmanager dialog. |
80 * After this function is called, onClose() will be called. | 78 * After this function is called, onClose() will be called. |
81 * @public | |
82 */ | 79 */ |
83 close: function () { | 80 close: function () { |
84 window.close(); | 81 window.close(); |
85 }, | 82 }, |
86 | 83 |
87 /** | 84 /** |
88 * Sends commands to kill selected processes. | 85 * Sends commands to kill selected processes. |
89 * @public | |
90 */ | 86 */ |
91 killSelectedProcesses: function () { | 87 killSelectedProcesses: function () { |
92 var selectedIndexes = this.selectionModel_.selectedIndexes; | 88 var selectedIndexes = this.selectionModel_.selectedIndexes; |
93 var dm = this.dataModel_; | 89 var dm = this.dataModel_; |
94 var uniqueIds = []; | 90 var uniqueIds = []; |
95 for (var i = 0; i < selectedIndexes.length; i++) { | 91 for (var i = 0; i < selectedIndexes.length; i++) { |
96 var index = selectedIndexes[i]; | 92 var index = selectedIndexes[i]; |
97 var task = dm.item(index); | 93 var task = dm.item(index); |
98 uniqueIds.push(task['uniqueId'][0]); | 94 uniqueIds.push(task['uniqueId'][0]); |
99 } | 95 } |
100 | 96 |
101 chrome.send('killProcesses', uniqueIds); | 97 chrome.send('killProcesses', uniqueIds); |
102 }, | 98 }, |
103 | 99 |
104 /** | 100 /** |
105 * Sends command to initiate resource inspection. | 101 * Sends command to initiate resource inspection. |
106 * @public | |
107 */ | 102 */ |
108 inspect: function (uniqueId) { | 103 inspect: function (uniqueId) { |
109 chrome.send('inspect', [uniqueId]); | 104 chrome.send('inspect', [uniqueId]); |
110 }, | 105 }, |
111 | 106 |
112 /** | 107 /** |
113 * Sends command to kill a process. | 108 * Sends command to kill a process. |
114 * @public | |
115 */ | 109 */ |
116 openAboutMemory: function () { | 110 openAboutMemory: function () { |
117 chrome.send('openAboutMemory'); | 111 chrome.send('openAboutMemory'); |
118 }, | 112 }, |
119 | 113 |
120 /** | 114 /** |
121 * Sends command to disable taskmanager model. | 115 * Sends command to disable taskmanager model. |
122 * @public | |
123 */ | 116 */ |
124 disableTaskManager: function () { | 117 disableTaskManager: function () { |
125 chrome.send('disableTaskManager'); | 118 chrome.send('disableTaskManager'); |
126 }, | 119 }, |
127 | 120 |
128 /** | 121 /** |
129 * Sends command to enable taskmanager model. | 122 * Sends command to enable taskmanager model. |
130 * @public | |
131 */ | 123 */ |
132 enableTaskManager: function () { | 124 enableTaskManager: function () { |
133 chrome.send('enableTaskManager'); | 125 chrome.send('enableTaskManager'); |
134 }, | 126 }, |
135 | 127 |
136 /** | 128 /** |
137 * Sends command to activate a page. | 129 * Sends command to activate a page. |
138 * @public | |
139 */ | 130 */ |
140 activatePage: function (uniqueId) { | 131 activatePage: function (uniqueId) { |
141 chrome.send('activatePage', [uniqueId]); | 132 chrome.send('activatePage', [uniqueId]); |
142 }, | 133 }, |
143 | 134 |
144 /** | 135 /** |
145 * Initializes taskmanager. | 136 * Initializes taskmanager. |
146 * @public | |
147 */ | 137 */ |
148 initialize: function (dialogDom, opt) { | 138 initialize: function (dialogDom, opt) { |
149 if (!dialogDom) { | 139 if (!dialogDom) { |
150 console.log('ERROR: dialogDom is not defined.'); | 140 console.log('ERROR: dialogDom is not defined.'); |
151 return; | 141 return; |
152 } | 142 } |
153 | 143 |
144 measuretime.startInterval('Load.DOM'); | |
145 | |
154 this.opt_ = opt; | 146 this.opt_ = opt; |
155 | 147 |
156 this.initialized_ = true; | 148 this.initialized_ = true; |
157 this.enableTaskManager(); | 149 this.enableTaskManager(); |
158 | 150 |
159 this.dialogDom_ = dialogDom; | 151 this.dialogDom_ = dialogDom; |
160 this.document_ = dialogDom.ownerDocument; | 152 this.document_ = dialogDom.ownerDocument; |
161 | 153 |
162 $('close-window').addEventListener('click', this.close.bind(this)); | |
163 $('kill-process').addEventListener('click', | |
164 this.killSelectedProcesses.bind(this)); | |
165 $('about-memory-link').addEventListener('click', | |
166 this.openAboutMemory.bind(this)); | |
167 | |
168 this.is_column_shown_ = []; | 154 this.is_column_shown_ = []; |
169 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 155 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
170 this.is_column_shown_[i] = DEFAULT_COLUMNS[i][3]; | 156 this.is_column_shown_[i] = DEFAULT_COLUMNS[i][3]; |
171 } | 157 } |
172 | 158 |
173 this.localized_column_ = []; | 159 this.localized_column_ = []; |
174 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 160 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
175 var column_label_id = DEFAULT_COLUMNS[i][1]; | 161 var column_label_id = DEFAULT_COLUMNS[i][1]; |
176 var localized_label = localStrings.getString(column_label_id); | 162 var localized_label = localStrings.getString(column_label_id); |
177 // Falls back to raw column_label_id if localized string is not defined. | 163 // Falls back to raw column_label_id if localized string is not defined. |
178 if (localized_label == "") | 164 if (localized_label == "") |
179 localized_label = column_label_id; | 165 localized_label = column_label_id; |
180 | 166 |
181 this.localized_column_[i] = localized_label; | 167 this.localized_column_[i] = localized_label; |
182 } | 168 } |
183 | 169 |
170 this.initElements_(); | |
184 this.initColumnModel_(); | 171 this.initColumnModel_(); |
185 this.selectionModel_ = new cr.ui.ListSelectionModel(); | 172 this.selectionModel_ = new cr.ui.ListSelectionModel(); |
186 this.dataModel_ = new cr.ui.ArrayDataModel([]); | 173 this.dataModel_ = new cr.ui.ArrayDataModel([]); |
187 | 174 |
188 this.selectionModel_.addEventListener('change', | 175 this.selectionModel_.addEventListener('change', |
189 this.onSelectionChange.bind(this)); | 176 this.onSelectionChange.bind(this)); |
190 | 177 |
191 // Initializes compare functions for column sort. | 178 // Initializes compare functions for column sort. |
192 var dm = this.dataModel_; | 179 var dm = this.dataModel_; |
193 // Columns to sort by value instead of itself. | 180 // Columns to sort by value instead of itself. |
(...skipping 11 matching lines...) Expand all Loading... | |
205 var aValues = a[value_id]; | 192 var aValues = a[value_id]; |
206 var bValues = b[value_id]; | 193 var bValues = b[value_id]; |
207 var aValue = aValues && aValues[0] || 0; | 194 var aValue = aValues && aValues[0] || 0; |
208 var bvalue = bValues && bValues[0] || 0; | 195 var bvalue = bValues && bValues[0] || 0; |
209 return dm.defaultValuesCompareFunction(aValue, bvalue); | 196 return dm.defaultValuesCompareFunction(aValue, bvalue); |
210 }; | 197 }; |
211 }(); | 198 }(); |
212 dm.setCompareFunction(column_id, compare_func); | 199 dm.setCompareFunction(column_id, compare_func); |
213 } | 200 } |
214 | 201 |
215 var ary = this.dialogDom_.querySelectorAll('[visibleif]'); | 202 this.initTable_(); |
216 for (var i = 0; i < ary.length; i++) { | 203 |
217 var expr = ary[i].getAttribute('visibleif'); | 204 // Populate the static localized strings. |
218 if (!eval(expr)) | 205 i18nTemplate.process(this.document_, templateData); |
219 ary[i].hidden = true; | 206 |
207 measuretime.recordInterval('Load.DOM'); | |
208 measuretime.recordInterval('Load.Total'); | |
209 | |
210 loadDelayedIncludes(this); | |
211 }, | |
212 | |
213 /** | |
214 * Initializes the visibilities and handlers of the elements. | |
215 * This method is called by initialize(). | |
216 */ | |
217 initElements_: function() { | |
218 // <if expr="pp_ifdef('chromeos')"> | |
arv (Not doing code reviews)
2011/12/21 20:19:43
Can this be removed? The pre-processor does all of
yoshiki
2011/12/22 08:50:31
In case of development using mock, these comment s
| |
219 // The elements 'dialog-title' and 'close-window' exist only on ChromeOS. | |
220 // This <if ... /if> section is removed while flattening HTML if chrome is | |
221 // built as Desktop Chrome. | |
222 if (this.opt_['isShowTitle']) | |
223 $('dialog-title').style.display = 'none'; | |
224 if (this.opt_['isShowCloseButton']) | |
225 $('close-window').style.display = 'none'; | |
226 $('close-window').addEventListener('click', this.close.bind(this)); | |
227 // </if> | |
228 | |
229 $('kill-process').addEventListener('click', | |
230 this.killSelectedProcesses.bind(this)); | |
231 $('about-memory-link').addEventListener('click', | |
232 this.openAboutMemory.bind(this)); | |
233 }, | |
234 | |
235 /** | |
236 * Additional initialization of taskmanager. This function is called when | |
237 * the loading of delayed scripts finished. | |
238 */ | |
239 delayedInitialize: function() { | |
240 this.initColumnMenu_(); | |
241 this.initTableMenu_(); | |
242 | |
243 var dm = this.dataModel_; | |
244 for (var i = 0; i < dm.length; i++) { | |
245 for (var j = 0; j < DEFAULT_COLUMNS.length; j++) { | |
246 var columnId = DEFAULT_COLUMNS[j][0]; | |
247 var row = dm.item(i)[columnId]; | |
248 for (var k = 0; k < row.length; k++) { | |
249 var processId = dm.item(i)['processId'][0]; | |
250 var labelId = 'detail-' + columnId + '-pid' + processId + '-' + k; | |
251 var label = $(labelId); | |
252 if (label && label.setContextMenu) | |
253 label.setContextMenu(this.tableContextMenu_); | |
254 } | |
255 } | |
220 } | 256 } |
221 | 257 |
222 this.initTable_(); | 258 this.isFinishedInitDelayed_ = true; |
223 this.initColumnMenu_(); | |
224 this.initTableMenu_(); | |
225 this.table_.redraw(); | 259 this.table_.redraw(); |
226 }, | 260 }, |
227 | 261 |
228 initColumnModel_: function () { | 262 initColumnModel_: function () { |
229 var table_columns = new Array(); | 263 var table_columns = new Array(); |
230 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 264 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
231 if (!this.is_column_shown_[i]) | 265 if (!this.is_column_shown_[i]) |
232 continue; | 266 continue; |
233 | 267 |
234 var column = DEFAULT_COLUMNS[i]; | 268 var column = DEFAULT_COLUMNS[i]; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
372 if (columnId == 'title') { | 406 if (columnId == 'title') { |
373 var image = this.document_.createElement('img'); | 407 var image = this.document_.createElement('img'); |
374 image.className = 'detail-title-image'; | 408 image.className = 'detail-title-image'; |
375 image.src = entry['icon'][i]; | 409 image.src = entry['icon'][i]; |
376 label.appendChild(image); | 410 label.appendChild(image); |
377 var text = this.document_.createElement('div'); | 411 var text = this.document_.createElement('div'); |
378 text.className = 'detail-title-text'; | 412 text.className = 'detail-title-text'; |
379 text.textContent = entry['title'][i]; | 413 text.textContent = entry['title'][i]; |
380 label.appendChild(text); | 414 label.appendChild(text); |
381 | 415 |
382 cr.ui.contextMenuHandler.addContextMenuProperty(label); | 416 label.setContextMenu = function(contextMenuElement) { |
arv (Not doing code reviews)
2011/12/21 20:19:43
I still think this is wrong.
Can you at least add
yoshiki
2011/12/22 08:50:31
Done. I added a comment.
| |
383 label.contextMenu = this.tableContextMenu_; | 417 if (!this.contextMenu) { |
418 cr.ui.contextMenuHandler.addContextMenuProperty(this); | |
419 this.contextMenu = contextMenuElement; | |
420 } | |
421 }; | |
422 | |
423 if (this.isFinishedInitDelayed_) | |
424 label.setContextMenu(this.tableContextMenu_); | |
384 | 425 |
385 label.addEventListener('dblclick', (function(uniqueId) { | 426 label.addEventListener('dblclick', (function(uniqueId) { |
386 this.activatePage(uniqueId); | 427 this.activatePage(uniqueId); |
387 }).bind(this, entry['uniqueId'][i])); | 428 }).bind(this, entry['uniqueId'][i])); |
388 | 429 |
389 label.data = entry; | 430 label.data = entry; |
390 label.index_in_group = i; | 431 label.index_in_group = i; |
391 } else { | 432 } else { |
392 label.textContent = entry[columnId][i]; | 433 label.textContent = entry[columnId][i]; |
393 } | 434 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
470 | 511 |
471 onCommandCanExecute_: function(event) { | 512 onCommandCanExecute_: function(event) { |
472 event.canExecute = true; | 513 event.canExecute = true; |
473 }, | 514 }, |
474 | 515 |
475 /** | 516 /** |
476 * Store resourceIndex of target resource of context menu, because resource | 517 * Store resourceIndex of target resource of context menu, because resource |
477 * will be replaced when it is refleshed. | 518 * will be replaced when it is refleshed. |
478 */ | 519 */ |
479 onTableContextMenuOpened_: function (e) { | 520 onTableContextMenuOpened_: function (e) { |
521 if (!this.isFinishedInitDelayed_) | |
522 return; | |
523 | |
480 var mc = this.table_menu_commands_; | 524 var mc = this.table_menu_commands_; |
481 var inspect_menuitem = | 525 var inspect_menuitem = |
482 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-inspect'].menuitem; | 526 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-inspect'].menuitem; |
483 var activate_menuitem = | 527 var activate_menuitem = |
484 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-activate'].menuitem; | 528 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-activate'].menuitem; |
485 | 529 |
486 // Disabled by default. | 530 // Disabled by default. |
487 inspect_menuitem.disabled = true; | 531 inspect_menuitem.disabled = true; |
488 activate_menuitem.disabled = true; | 532 activate_menuitem.disabled = true; |
489 | 533 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
577 return; | 621 return; |
578 taskmanager.onTaskChange(start, length, tasks); | 622 taskmanager.onTaskChange(start, length, tasks); |
579 } | 623 } |
580 | 624 |
581 function taskRemoved(start, length) { | 625 function taskRemoved(start, length) { |
582 // Sometimes this can get called too early. | 626 // Sometimes this can get called too early. |
583 if (!taskmanager) | 627 if (!taskmanager) |
584 return; | 628 return; |
585 taskmanager.onTaskRemove(start, length); | 629 taskmanager.onTaskRemove(start, length); |
586 } | 630 } |
587 | |
OLD | NEW |