diff options
-rw-r--r-- | chrome/browser/resources/task_manager/main.js | 17 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager.cc | 9 | ||||
-rw-r--r-- | chrome/browser/task_manager/task_manager.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/webui/task_manager_handler.cc | 56 | ||||
-rw-r--r-- | chrome/browser/ui/webui/task_manager_handler.h | 4 |
5 files changed, 47 insertions, 42 deletions
diff --git a/chrome/browser/resources/task_manager/main.js b/chrome/browser/resources/task_manager/main.js index a4827de..5c04529 100644 --- a/chrome/browser/resources/task_manager/main.js +++ b/chrome/browser/resources/task_manager/main.js @@ -85,12 +85,20 @@ TaskManager.prototype = { }, /** - * Sends commands to kill a process. + * Sends commands to kill selected processes. * @public */ - killProcess: function () { + killSelectedProcesses: function () { var selectedIndexes = this.selectionModel_.selectedIndexes; - chrome.send('killProcess', selectedIndexes); + var dm = this.dataModel_; + var uniqueIds = []; + for (var i = 0; i < selectedIndexes.length; i++) { + var index = selectedIndexes[i]; + var task = dm.item(index); + uniqueIds.push(task['uniqueId'][0]); + } + + chrome.send('killProcesses', uniqueIds); }, /** @@ -152,7 +160,8 @@ TaskManager.prototype = { this.document_ = dialogDom.ownerDocument; $('close-window').addEventListener('click', this.close.bind(this)); - $('kill-process').addEventListener('click', this.killProcess.bind(this)); + $('kill-process').addEventListener('click', + this.killSelectedProcesses.bind(this)); $('about-memory-link').addEventListener('click', this.openAboutMemory.bind(this)); diff --git a/chrome/browser/task_manager/task_manager.cc b/chrome/browser/task_manager/task_manager.cc index 063b586..cb14d7f 100644 --- a/chrome/browser/task_manager/task_manager.cc +++ b/chrome/browser/task_manager/task_manager.cc @@ -125,6 +125,15 @@ int TaskManagerModel::GetResourceUniqueId(int index) const { return resources_[index]->get_unique_id(); } +int TaskManagerModel::GetResourceIndexByUniqueId(const int unique_id) const { + for (int resource_index = 0; resource_index < ResourceCount(); + ++resource_index) { + if (GetResourceUniqueId(resource_index) == unique_id) + return resource_index; + } + return -1; +} + string16 TaskManagerModel::GetResourceTitle(int index) const { CHECK_LT(index, ResourceCount()); return resources_[index]->GetTitle(); diff --git a/chrome/browser/task_manager/task_manager.h b/chrome/browser/task_manager/task_manager.h index 8c8e101..e3686fb 100644 --- a/chrome/browser/task_manager/task_manager.h +++ b/chrome/browser/task_manager/task_manager.h @@ -273,6 +273,9 @@ class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> { double GetCPUUsage(int index) const; int GetProcessId(int index) const; int GetResourceUniqueId(int index) const; + // Returns the index of resource that has the given |unique_id|. Returns -1 if + // no resouce has the |unique_id|. + int GetResourceIndexByUniqueId(const int unique_id) const; // Methods to return formatted resource information. string16 GetResourceTitle(int index) const; diff --git a/chrome/browser/ui/webui/task_manager_handler.cc b/chrome/browser/ui/webui/task_manager_handler.cc index 0423ea0..5fd1888 100644 --- a/chrome/browser/ui/webui/task_manager_handler.cc +++ b/chrome/browser/ui/webui/task_manager_handler.cc @@ -307,8 +307,8 @@ void TaskManagerHandler::Init() { } void TaskManagerHandler::RegisterMessages() { - web_ui_->RegisterMessageCallback("killProcess", - base::Bind(&TaskManagerHandler::HandleKillProcess, + web_ui_->RegisterMessageCallback("killProcesses", + base::Bind(&TaskManagerHandler::HandleKillProcesses, base::Unretained(this))); web_ui_->RegisterMessageCallback("inspect", base::Bind(&TaskManagerHandler::HandleInspect, @@ -341,57 +341,41 @@ static int parseIndex(const Value* value) { return index; } -void TaskManagerHandler::HandleKillProcess(const ListValue* indexes) { - for (ListValue::const_iterator i = indexes->begin(); - i != indexes->end(); i++) { - int index = parseIndex(*i); - if (index == -1) - continue; - - int resource_index = model_->GetResourceIndexForGroup(index, 0); +void TaskManagerHandler::HandleKillProcesses(const ListValue* unique_ids) { + for (ListValue::const_iterator i = unique_ids->begin(); + i != unique_ids->end(); ++i) { + int unique_id = parseIndex(*i); + int resource_index = model_->GetResourceIndexByUniqueId(unique_id); if (resource_index == -1) continue; - LOG(INFO) << "kill PID:" << model_->GetResourceProcessId(resource_index); task_manager_->KillProcess(resource_index); } } -void TaskManagerHandler::HandleActivatePage(const ListValue* resource_index) { - for (ListValue::const_iterator i = resource_index->begin(); - i != resource_index->end(); ++i) { +void TaskManagerHandler::HandleActivatePage(const ListValue* unique_ids) { + for (ListValue::const_iterator i = unique_ids->begin(); + i != unique_ids->end(); ++i) { int unique_id = parseIndex(*i); - if (unique_id == -1) + int resource_index = model_->GetResourceIndexByUniqueId(unique_id); + if (resource_index == -1) continue; - for (int resource_index = 0; resource_index < model_->ResourceCount(); - ++resource_index) { - if (model_->GetResourceUniqueId(resource_index) == unique_id) { - task_manager_->ActivateProcess(resource_index); - break; - } - } - + task_manager_->ActivateProcess(resource_index); break; } } -void TaskManagerHandler::HandleInspect(const ListValue* resource_index) { - for (ListValue::const_iterator i = resource_index->begin(); - i != resource_index->end(); ++i) { +void TaskManagerHandler::HandleInspect(const ListValue* unique_ids) { + for (ListValue::const_iterator i = unique_ids->begin(); + i != unique_ids->end(); ++i) { int unique_id = parseIndex(*i); - if (unique_id == -1) + int resource_index = model_->GetResourceIndexByUniqueId(unique_id); + if (resource_index == -1) continue; - for (int resource_index = 0; resource_index < model_->ResourceCount(); - ++resource_index) { - if (model_->GetResourceUniqueId(resource_index) == unique_id) { - if (model_->CanInspect(resource_index)) - model_->Inspect(resource_index); - break; - } - } - + if (model_->CanInspect(resource_index)) + model_->Inspect(resource_index); break; } } diff --git a/chrome/browser/ui/webui/task_manager_handler.h b/chrome/browser/ui/webui/task_manager_handler.h index 1b0ec61..9e3d0701 100644 --- a/chrome/browser/ui/webui/task_manager_handler.h +++ b/chrome/browser/ui/webui/task_manager_handler.h @@ -35,8 +35,8 @@ class TaskManagerHandler : public WebUIMessageHandler, // WebUIMessageHandler implementation. virtual void RegisterMessages() OVERRIDE; - // Callback for the "killProcess" message. - void HandleKillProcess(const base::ListValue* indexes); + // Callback for the "killProcesses" message. + void HandleKillProcesses(const base::ListValue* indexes); // Callback for the "activatePage" message. void HandleActivatePage(const base::ListValue* resource_index); |