From b06b95096627f9a4e34ff8cbe7916a3b6233caf0 Mon Sep 17 00:00:00 2001 From: "yoshiki@chromium.org" Date: Wed, 26 Oct 2011 10:55:44 +0000 Subject: Disable end process button when Browser process is selected in Task Manager BUG=chromium-os:20077 TEST=manual Review URL: http://codereview.chromium.org/8357017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107330 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/resources/task_manager/main.js | 31 +++++++++++++++++ chrome/browser/task_manager/task_manager.h | 44 +++++++++++++++++-------- chrome/browser/ui/webui/task_manager_handler.cc | 5 +++ 3 files changed, 67 insertions(+), 13 deletions(-) (limited to 'chrome/browser') diff --git a/chrome/browser/resources/task_manager/main.js b/chrome/browser/resources/task_manager/main.js index 94c7a18..7c7a5cea 100644 --- a/chrome/browser/resources/task_manager/main.js +++ b/chrome/browser/resources/task_manager/main.js @@ -44,6 +44,34 @@ TaskManager.prototype = { }, /** + * Handle selection change. + * This is also called when data of tasks are refleshed, even if selection + * has not been changed. + * @public + */ + onSelectionChange: function () { + var sm = this.selectionModel_; + var dm = this.dataModel_; + var selectedIndexes = sm.selectedIndexes; + + var is_end_process_enabled = true; + for (var i = 0; i < selectedIndexes.length; i++) { + var index = selectedIndexes[i]; + var task = dm.item(index); + if (task['type'] == 'BROWSER') + is_end_process_enabled = false; + } + if (this.is_end_process_enabled_ != is_end_process_enabled) { + if (is_end_process_enabled) + $('kill-process').removeAttribute("disabled"); + else + $('kill-process').setAttribute("disabled", "true"); + + this.is_end_process_enabled_ = is_end_process_enabled; + } + }, + + /** * Closes taskmanager dialog. * After this function is called, onClose() will be called. * @public @@ -128,6 +156,9 @@ TaskManager.prototype = { this.selectionModel_ = new cr.ui.ListSelectionModel(); this.dataModel_ = new cr.ui.ArrayDataModel([]); + this.selectionModel_.addEventListener('change', + this.onSelectionChange.bind(this)); + // Initializes compare functions for column sort. var dm = this.dataModel_; // Columns to sort by value instead of itself. diff --git a/chrome/browser/task_manager/task_manager.h b/chrome/browser/task_manager/task_manager.h index 117cc8a..a3d2cba 100644 --- a/chrome/browser/task_manager/task_manager.h +++ b/chrome/browser/task_manager/task_manager.h @@ -34,6 +34,23 @@ namespace net { class URLRequest; } +#define TASKMANAGER_RESOURCE_TYPE_LIST(def) \ + def(BROWSER) /* The main browser process. */ \ + def(RENDERER) /* A normal TabContents renderer process. */ \ + def(EXTENSION) /* An extension or app process. */ \ + def(NOTIFICATION) /* A notification process. */ \ + def(PLUGIN) /* A plugin process. */ \ + def(WORKER) /* A web worker process. */ \ + def(NACL) /* A NativeClient loader or broker process. */ \ + def(UTILITY) /* A browser utility process. */ \ + def(PROFILE_IMPORT) /* A profile import process. */ \ + def(ZYGOTE) /* A Linux zygote process. */ \ + def(SANDBOX_HELPER) /* A sandbox helper process. */ \ + def(GPU) /* A graphics process. */ + +#define TASKMANAGER_RESOURCE_TYPE_LIST_ENUM(a) a, +#define TASKMANAGER_RESOURCE_TYPE_LIST_AS_STRING(a) case a: return #a; + // This class is a singleton. class TaskManager { public: @@ -44,19 +61,8 @@ class TaskManager { virtual ~Resource() {} enum Type { - UNKNOWN = 0, // An unknown process type. - BROWSER, // The main browser process. - RENDERER, // A normal TabContents renderer process. - EXTENSION, // An extension or app process. - NOTIFICATION, // A notification process. - PLUGIN, // A plugin process. - WORKER, // A web worker process. - NACL, // A NativeClient loader or broker process. - UTILITY, // A browser utility process. - PROFILE_IMPORT, // A profile import process. - ZYGOTE, // A Linux zygote process. - SANDBOX_HELPER, // A sandbox helper process. - GPU // A graphics process. + UNKNOWN = 0, + TASKMANAGER_RESOURCE_TYPE_LIST(TASKMANAGER_RESOURCE_TYPE_LIST_ENUM) }; virtual string16 GetTitle() const = 0; @@ -113,6 +119,13 @@ class TaskManager { // Returns true if this resource is not visible to the user because it lives // in the background (e.g. extension background page, background contents). virtual bool IsBackground() const { return false; } + + static const char* GetResourceTypeAsString(const Type type) { + switch (type) { + TASKMANAGER_RESOURCE_TYPE_LIST(TASKMANAGER_RESOURCE_TYPE_LIST_AS_STRING) + default: return "UNKNOWN"; + } + }; }; // ResourceProviders are responsible for adding/removing resources to the task @@ -204,6 +217,11 @@ class TaskManager { DISALLOW_COPY_AND_ASSIGN(TaskManager); }; +#undef TASKMANAGER_RESOURCE_TYPE_LIST +#undef DEFINE_ENUM +#undef DEFINE_CONVERT_TO_STRING + + class TaskManagerModelObserver { public: virtual ~TaskManagerModelObserver() {} diff --git a/chrome/browser/ui/webui/task_manager_handler.cc b/chrome/browser/ui/webui/task_manager_handler.cc index 1ac7463..1834bdf 100644 --- a/chrome/browser/ui/webui/task_manager_handler.cc +++ b/chrome/browser/ui/webui/task_manager_handler.cc @@ -26,6 +26,10 @@ namespace { static Value* CreateColumnValue(const TaskManagerModel* tm, const std::string column_name, const int i) { + if (column_name == "type") + return Value::CreateStringValue( + TaskManager::Resource::GetResourceTypeAsString( + tm->GetResourceType(i))); if (column_name == "processId") return Value::CreateStringValue(tm->GetResourceProcessId(i)); if (column_name == "processIdValue") @@ -152,6 +156,7 @@ static DictionaryValue* CreateTaskGroupValue(const TaskManagerModel* tm, tm->IsBackgroundResource(index)); // Columns which have one datum in each group. + CreateGroupColumnList(tm, "type", index, 1, val); CreateGroupColumnList(tm, "processId", index, 1, val); CreateGroupColumnList(tm, "processIdValue", index, 1, val); CreateGroupColumnList(tm, "cpuUsage", index, 1, val); -- cgit v1.1