| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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.pendingTaskUpdates_ = []; | 154 this.pendingTaskUpdates_ = []; |
| 169 this.is_column_shown_ = []; | 155 this.is_column_shown_ = []; |
| 170 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 156 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
| 171 this.is_column_shown_[i] = DEFAULT_COLUMNS[i][3]; | 157 this.is_column_shown_[i] = DEFAULT_COLUMNS[i][3]; |
| 172 } | 158 } |
| 173 | 159 |
| 174 this.localized_column_ = []; | 160 this.localized_column_ = []; |
| 175 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 161 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
| 176 var column_label_id = DEFAULT_COLUMNS[i][1]; | 162 var column_label_id = DEFAULT_COLUMNS[i][1]; |
| 177 var localized_label = localStrings.getString(column_label_id); | 163 var localized_label = localStrings.getString(column_label_id); |
| 178 // Falls back to raw column_label_id if localized string is not defined. | 164 // Falls back to raw column_label_id if localized string is not defined. |
| 179 if (localized_label == "") | 165 if (localized_label == "") |
| 180 localized_label = column_label_id; | 166 localized_label = column_label_id; |
| 181 | 167 |
| 182 this.localized_column_[i] = localized_label; | 168 this.localized_column_[i] = localized_label; |
| 183 } | 169 } |
| 184 | 170 |
| 171 this.initElements_(); |
| 185 this.initColumnModel_(); | 172 this.initColumnModel_(); |
| 186 this.selectionModel_ = new cr.ui.ListSelectionModel(); | 173 this.selectionModel_ = new cr.ui.ListSelectionModel(); |
| 187 this.dataModel_ = new cr.ui.ArrayDataModel([]); | 174 this.dataModel_ = new cr.ui.ArrayDataModel([]); |
| 188 | 175 |
| 189 this.selectionModel_.addEventListener('change', | 176 this.selectionModel_.addEventListener('change', |
| 190 this.onSelectionChange.bind(this)); | 177 this.onSelectionChange.bind(this)); |
| 191 | 178 |
| 192 // Initializes compare functions for column sort. | 179 // Initializes compare functions for column sort. |
| 193 var dm = this.dataModel_; | 180 var dm = this.dataModel_; |
| 194 // Columns to sort by value instead of itself. | 181 // Columns to sort by value instead of itself. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 206 var aValues = a[value_id]; | 193 var aValues = a[value_id]; |
| 207 var bValues = b[value_id]; | 194 var bValues = b[value_id]; |
| 208 var aValue = aValues && aValues[0] || 0; | 195 var aValue = aValues && aValues[0] || 0; |
| 209 var bvalue = bValues && bValues[0] || 0; | 196 var bvalue = bValues && bValues[0] || 0; |
| 210 return dm.defaultValuesCompareFunction(aValue, bvalue); | 197 return dm.defaultValuesCompareFunction(aValue, bvalue); |
| 211 }; | 198 }; |
| 212 }(); | 199 }(); |
| 213 dm.setCompareFunction(column_id, compare_func); | 200 dm.setCompareFunction(column_id, compare_func); |
| 214 } | 201 } |
| 215 | 202 |
| 216 var ary = this.dialogDom_.querySelectorAll('[visibleif]'); | 203 this.initTable_(); |
| 217 for (var i = 0; i < ary.length; i++) { | 204 |
| 218 var expr = ary[i].getAttribute('visibleif'); | 205 // Populate the static localized strings. |
| 219 if (!eval(expr)) | 206 i18nTemplate.process(this.document_, templateData); |
| 220 ary[i].hidden = true; | 207 |
| 208 measureTime.recordInterval('Load.DOM'); |
| 209 measureTime.recordInterval('Load.Total'); |
| 210 |
| 211 loadDelayedIncludes(this); |
| 212 }, |
| 213 |
| 214 /** |
| 215 * Initializes the visibilities and handlers of the elements. |
| 216 * This method is called by initialize(). |
| 217 * @private |
| 218 */ |
| 219 initElements_: function() { |
| 220 // <if expr="pp_ifdef('chromeos')"> |
| 221 // The elements 'dialog-title' and 'close-window' exist only on ChromeOS. |
| 222 // This <if ... /if> section is removed while flattening HTML if chrome is |
| 223 // built as Desktop Chrome. |
| 224 if (!this.opt_['isShowTitle']) |
| 225 $('dialog-title').style.display = 'none'; |
| 226 if (!this.opt_['isShowCloseButton']) |
| 227 $('close-window').style.display = 'none'; |
| 228 $('close-window').addEventListener('click', this.close.bind(this)); |
| 229 // </if> |
| 230 |
| 231 $('kill-process').addEventListener('click', |
| 232 this.killSelectedProcesses.bind(this)); |
| 233 $('about-memory-link').addEventListener('click', |
| 234 this.openAboutMemory.bind(this)); |
| 235 }, |
| 236 |
| 237 /** |
| 238 * Additional initialization of taskmanager. This function is called when |
| 239 * the loading of delayed scripts finished. |
| 240 */ |
| 241 delayedInitialize: function() { |
| 242 this.initColumnMenu_(); |
| 243 this.initTableMenu_(); |
| 244 |
| 245 var dm = this.dataModel_; |
| 246 for (var i = 0; i < dm.length; i++) { |
| 247 for (var j = 0; j < DEFAULT_COLUMNS.length; j++) { |
| 248 var columnId = DEFAULT_COLUMNS[j][0]; |
| 249 var row = dm.item(i)[columnId]; |
| 250 for (var k = 0; k < row.length; k++) { |
| 251 var processId = dm.item(i)['processId'][0]; |
| 252 var labelId = 'detail-' + columnId + '-pid' + processId + '-' + k; |
| 253 var label = $(labelId); |
| 254 |
| 255 // Initialize a context-menu, if the label exists and its context- |
| 256 // menu is not initialized yet. |
| 257 if (label && !label.contextMenu) |
| 258 cr.ui.contextMenuHandler.setContextMenu(label, |
| 259 this.tableContextMenu_); |
| 260 } |
| 261 } |
| 221 } | 262 } |
| 222 | 263 |
| 223 this.initTable_(); | 264 this.isFinishedInitDelayed_ = true; |
| 224 this.initColumnMenu_(); | |
| 225 this.initTableMenu_(); | |
| 226 this.table_.redraw(); | 265 this.table_.redraw(); |
| 227 }, | 266 }, |
| 228 | 267 |
| 229 initColumnModel_: function () { | 268 initColumnModel_: function () { |
| 230 var table_columns = new Array(); | 269 var table_columns = new Array(); |
| 231 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { | 270 for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { |
| 232 if (!this.is_column_shown_[i]) | 271 if (!this.is_column_shown_[i]) |
| 233 continue; | 272 continue; |
| 234 | 273 |
| 235 var column = DEFAULT_COLUMNS[i]; | 274 var column = DEFAULT_COLUMNS[i]; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 command.menuitem = item; | 307 command.menuitem = item; |
| 269 item.textContent = this.localized_column_[i]; | 308 item.textContent = this.localized_column_[i]; |
| 270 if (this.is_column_shown_[i]) | 309 if (this.is_column_shown_[i]) |
| 271 item.setAttributeNode(this.document_.createAttribute("checked")); | 310 item.setAttributeNode(this.document_.createAttribute("checked")); |
| 272 this.columnSelectContextMenu_.appendChild(item); | 311 this.columnSelectContextMenu_.appendChild(item); |
| 273 } | 312 } |
| 274 | 313 |
| 275 this.document_.body.appendChild(this.columnSelectContextMenu_); | 314 this.document_.body.appendChild(this.columnSelectContextMenu_); |
| 276 cr.ui.Menu.decorate(this.columnSelectContextMenu_); | 315 cr.ui.Menu.decorate(this.columnSelectContextMenu_); |
| 277 | 316 |
| 278 cr.ui.contextMenuHandler.addContextMenuProperty(this.table_.header); | 317 cr.ui.contextMenuHandler.setContextMenu(this.table_.header, |
| 279 this.table_.header.contextMenu = this.columnSelectContextMenu_; | 318 this.columnSelectContextMenu_); |
| 280 | 319 cr.ui.contextMenuHandler.setContextMenu(this.table_.list, |
| 281 cr.ui.contextMenuHandler.addContextMenuProperty(this.table_.list); | 320 this.columnSelectContextMenu_); |
| 282 this.table_.list.contextMenu = this.columnSelectContextMenu_; | |
| 283 | 321 |
| 284 this.document_.addEventListener('command', this.onCommand_.bind(this)); | 322 this.document_.addEventListener('command', this.onCommand_.bind(this)); |
| 285 this.document_.addEventListener('canExecute', | 323 this.document_.addEventListener('canExecute', |
| 286 this.onCommandCanExecute_.bind(this)); | 324 this.onCommandCanExecute_.bind(this)); |
| 287 | |
| 288 }, | 325 }, |
| 289 | 326 |
| 290 initTableMenu_: function () { | 327 initTableMenu_: function () { |
| 291 this.table_menu_commands_ = []; | 328 this.table_menu_commands_ = []; |
| 292 this.tableContextMenu_ = this.document_.createElement('menu'); | 329 this.tableContextMenu_ = this.document_.createElement('menu'); |
| 293 | 330 |
| 294 var addMenuItem = function (tm, command_id, string_id, default_label) { | 331 var addMenuItem = function (tm, command_id, string_id, default_label) { |
| 295 // Creates command element to receive event. | 332 // Creates command element to receive event. |
| 296 var command = tm.document_.createElement('command'); | 333 var command = tm.document_.createElement('command'); |
| 297 command.id = COMMAND_CONTEXTMENU_TABLE_PREFIX + '-' + command_id; | 334 command.id = COMMAND_CONTEXTMENU_TABLE_PREFIX + '-' + command_id; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 cell.appendChild( | 391 cell.appendChild( |
| 355 cm.getRenderFunction(i).call(null, dataItem, cm.getId(i), table)); | 392 cm.getRenderFunction(i).call(null, dataItem, cm.getId(i), table)); |
| 356 | 393 |
| 357 listItem.appendChild(cell); | 394 listItem.appendChild(cell); |
| 358 } | 395 } |
| 359 listItem.data = dataItem; | 396 listItem.data = dataItem; |
| 360 | 397 |
| 361 return listItem; | 398 return listItem; |
| 362 }, | 399 }, |
| 363 | 400 |
| 401 |
| 364 renderColumn_: function(entry, columnId, table) { | 402 renderColumn_: function(entry, columnId, table) { |
| 365 var container = this.document_.createElement('div'); | 403 var container = this.document_.createElement('div'); |
| 366 container.className = 'detail-container-' + columnId; | 404 container.className = 'detail-container-' + columnId; |
| 367 | 405 |
| 368 if (entry && entry[columnId]) { | 406 if (entry && entry[columnId]) { |
| 369 container.id = 'detail-container-' + columnId + '-pid' + entry.processId; | 407 container.id = 'detail-container-' + columnId + '-pid' + entry.processId; |
| 370 | 408 |
| 371 for (var i = 0; i < entry[columnId].length; i++) { | 409 for (var i = 0; i < entry[columnId].length; i++) { |
| 372 var label = document.createElement('div'); | 410 var label = document.createElement('div'); |
| 373 if (columnId == 'title') { | 411 if (columnId == 'title') { |
| 374 var image = this.document_.createElement('img'); | 412 var image = this.document_.createElement('img'); |
| 375 image.className = 'detail-title-image'; | 413 image.className = 'detail-title-image'; |
| 376 image.src = entry['icon'][i]; | 414 image.src = entry['icon'][i]; |
| 377 label.appendChild(image); | 415 label.appendChild(image); |
| 378 var text = this.document_.createElement('div'); | 416 var text = this.document_.createElement('div'); |
| 379 text.className = 'detail-title-text'; | 417 text.className = 'detail-title-text'; |
| 380 text.textContent = entry['title'][i]; | 418 text.textContent = entry['title'][i]; |
| 381 label.appendChild(text); | 419 label.appendChild(text); |
| 382 | 420 |
| 383 cr.ui.contextMenuHandler.addContextMenuProperty(label); | 421 // Chech if the delayed scripts (included in includes.js) have been |
| 384 label.contextMenu = this.tableContextMenu_; | 422 // loaded or not. If the delayed scripts ware not loaded yet, a |
| 423 // context menu could not be initialized. In such case, it will be |
| 424 // initialized at delayedInitialize() just after loading of delayed |
| 425 // scripts instead of here. |
| 426 if (this.isFinishedInitDelayed_) |
| 427 cr.ui.contextMenuHandler.setContextMenu(label, |
| 428 this.tableContextMenu_); |
| 385 | 429 |
| 386 label.addEventListener('dblclick', (function(uniqueId) { | 430 label.addEventListener('dblclick', (function(uniqueId) { |
| 387 this.activatePage(uniqueId); | 431 this.activatePage(uniqueId); |
| 388 }).bind(this, entry['uniqueId'][i])); | 432 }).bind(this, entry['uniqueId'][i])); |
| 389 | 433 |
| 390 label.data = entry; | 434 label.data = entry; |
| 391 label.index_in_group = i; | 435 label.index_in_group = i; |
| 392 } else { | 436 } else { |
| 393 label.textContent = entry[columnId][i]; | 437 label.textContent = entry[columnId][i]; |
| 394 } | 438 } |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 | 547 |
| 504 onCommandCanExecute_: function(event) { | 548 onCommandCanExecute_: function(event) { |
| 505 event.canExecute = true; | 549 event.canExecute = true; |
| 506 }, | 550 }, |
| 507 | 551 |
| 508 /** | 552 /** |
| 509 * Store resourceIndex of target resource of context menu, because resource | 553 * Store resourceIndex of target resource of context menu, because resource |
| 510 * will be replaced when it is refleshed. | 554 * will be replaced when it is refleshed. |
| 511 */ | 555 */ |
| 512 onTableContextMenuOpened_: function (e) { | 556 onTableContextMenuOpened_: function (e) { |
| 557 if (!this.isFinishedInitDelayed_) |
| 558 return; |
| 559 |
| 513 var mc = this.table_menu_commands_; | 560 var mc = this.table_menu_commands_; |
| 514 var inspect_menuitem = | 561 var inspect_menuitem = |
| 515 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-inspect'].menuitem; | 562 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-inspect'].menuitem; |
| 516 var activate_menuitem = | 563 var activate_menuitem = |
| 517 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-activate'].menuitem; | 564 mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-activate'].menuitem; |
| 518 | 565 |
| 519 // Disabled by default. | 566 // Disabled by default. |
| 520 inspect_menuitem.disabled = true; | 567 inspect_menuitem.disabled = true; |
| 521 activate_menuitem.disabled = true; | 568 activate_menuitem.disabled = true; |
| 522 | 569 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 return; | 657 return; |
| 611 taskmanager.onTaskChange(start, length, tasks); | 658 taskmanager.onTaskChange(start, length, tasks); |
| 612 } | 659 } |
| 613 | 660 |
| 614 function taskRemoved(start, length) { | 661 function taskRemoved(start, length) { |
| 615 // Sometimes this can get called too early. | 662 // Sometimes this can get called too early. |
| 616 if (!taskmanager) | 663 if (!taskmanager) |
| 617 return; | 664 return; |
| 618 taskmanager.onTaskRemove(start, length); | 665 taskmanager.onTaskRemove(start, length); |
| 619 } | 666 } |
| 620 | |
| OLD | NEW |