summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/resources/task_manager/main.js17
-rw-r--r--chrome/browser/task_manager/task_manager.cc9
-rw-r--r--chrome/browser/task_manager/task_manager.h3
-rw-r--r--chrome/browser/ui/webui/task_manager_handler.cc56
-rw-r--r--chrome/browser/ui/webui/task_manager_handler.h4
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);