diff options
-rw-r--r-- | base/process_util.h | 6 | ||||
-rw-r--r-- | base/process_util_posix.cc | 6 | ||||
-rw-r--r-- | base/process_util_win.cc | 16 | ||||
-rw-r--r-- | chrome/browser/task_manager.h | 15 | ||||
-rw-r--r-- | chrome/browser/task_manager_resource_providers.cc | 39 | ||||
-rw-r--r-- | chrome/browser/task_manager_resource_providers.h | 11 | ||||
-rw-r--r-- | chrome/chrome.gyp | 1 | ||||
-rw-r--r-- | chrome/views/window/dialog_client_view.h | 2 |
8 files changed, 70 insertions, 26 deletions
diff --git a/base/process_util.h b/base/process_util.h index a692870..a459ed4 100644 --- a/base/process_util.h +++ b/base/process_util.h @@ -71,6 +71,12 @@ ProcessHandle GetCurrentProcessHandle(); // CloseProcessHandle when you are done with it. Returns true on success. bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle); +// Converts a PID to a process handle. On Windows the handle is opened +// with more access rights and must only be used by trusted code. +// You have to close returned handle using CloseProcessHandle. Returns true +// on success. +bool OpenPrivilegedProcessHandle(ProcessId pid, ProcessHandle* handle); + // Closes the process handle opened by OpenProcessHandle. void CloseProcessHandle(ProcessHandle process); diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index efe7442..859dfc3 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -43,6 +43,12 @@ bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle) { return true; } +bool OpenPrivilegedProcessHandle(ProcessId pid, ProcessHandle* handle) { + // On POSIX permissions are checked for each operation on process, + // not when opening a "handle". + return OpenProcessHandle(pid, handle); +} + void CloseProcessHandle(ProcessHandle process) { // See OpenProcessHandle, nothing to do. return; diff --git a/base/process_util_win.cc b/base/process_util_win.cc index 45a23e8..265c26f 100644 --- a/base/process_util_win.cc +++ b/base/process_util_win.cc @@ -34,6 +34,7 @@ ProcessHandle GetCurrentProcessHandle() { } bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle) { + // TODO(phajdan.jr): Take even more permissions out of this list. ProcessHandle result = OpenProcess(PROCESS_DUP_HANDLE | PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | @@ -47,6 +48,21 @@ bool OpenProcessHandle(ProcessId pid, ProcessHandle* handle) { return true; } +bool OpenPrivilegedProcessHandle(ProcessId pid, ProcessHandle* handle) { + ProcessHandle result = OpenProcess(PROCESS_DUP_HANDLE | + PROCESS_TERMINATE | + PROCESS_QUERY_INFORMATION | + PROCESS_VM_READ | + SYNCHRONIZE, + FALSE, pid); + + if (result == INVALID_HANDLE_VALUE) + return false; + + *handle = result; + return true; +} + void CloseProcessHandle(ProcessHandle process) { CloseHandle(process); } diff --git a/chrome/browser/task_manager.h b/chrome/browser/task_manager.h index 106aeaa..da4f0d2 100644 --- a/chrome/browser/task_manager.h +++ b/chrome/browser/task_manager.h @@ -9,13 +9,18 @@ #include <string> #include <vector> +#include "base/basictypes.h" #include "base/lock.h" -#include "base/singleton.h" +#include "base/process_util.h" #include "base/ref_counted.h" +#include "base/singleton.h" #include "base/timer.h" #include "chrome/browser/renderer_host/web_cache_manager.h" #include "chrome/browser/tab_contents/tab_contents.h" +#if defined(OS_WIN) +// TODO(port): Port or produce equivalent. #include "chrome/views/controls/table/group_table_view.h" +#endif // defined(OS_WIN) #include "chrome/views/window/dialog_delegate.h" #include "net/url_request/url_request_job_tracker.h" #include "testing/gtest/include/gtest/gtest_prod.h" @@ -52,7 +57,7 @@ class TaskManager : public views::DialogDelegate { virtual std::wstring GetTitle() const = 0; virtual SkBitmap GetIcon() const = 0; - virtual HANDLE GetProcess() const = 0; + virtual base::ProcessHandle GetProcess() const = 0; // A helper function for ActivateFocusedTab. Returns NULL by default // because not all resources have an assoiciated tab. @@ -144,7 +149,7 @@ class TaskManager : public views::DialogDelegate { // Obtain an instance via GetInstance(). TaskManager(); - friend DefaultSingletonTraits<TaskManager>; + friend struct DefaultSingletonTraits<TaskManager>; ~TaskManager(); @@ -164,6 +169,9 @@ class TaskManager : public views::DialogDelegate { DISALLOW_COPY_AND_ASSIGN(TaskManager); }; +#if defined(OS_WIN) +// TODO(port): Port or produce equivalent. + // The model that the table is using. class TaskManagerTableModel : public views::GroupTableModel, public URLRequestJobTracker::JobObserver, @@ -325,5 +333,6 @@ class TaskManagerTableModel : public views::GroupTableModel, DISALLOW_COPY_AND_ASSIGN(TaskManagerTableModel); }; +#endif // defined(OS_WIN) #endif // CHROME_BROWSER_TASK_MANAGER_H_ diff --git a/chrome/browser/task_manager_resource_providers.cc b/chrome/browser/task_manager_resource_providers.cc index 5364b4d..5f0cc42 100644 --- a/chrome/browser/task_manager_resource_providers.cc +++ b/chrome/browser/task_manager_resource_providers.cc @@ -4,6 +4,7 @@ #include "chrome/browser/task_manager_resource_providers.h" +#include "base/basictypes.h" #include "base/file_version_info.h" #include "base/message_loop.h" #include "base/process_util.h" @@ -16,10 +17,13 @@ #include "chrome/browser/tab_contents/tab_util.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/child_process_host.h" +#include "chrome/common/l10n_util.h" #include "chrome/common/notification_service.h" #include "chrome/common/resource_bundle.h" #include "chrome/common/stl_util-inl.h" +#if defined(OS_WIN) #include "chrome/common/gfx/icon_util.h" +#endif // defined(OS_WIN) #include "grit/generated_resources.h" #include "grit/theme_resources.h" @@ -67,7 +71,7 @@ SkBitmap TaskManagerWebContentsResource::GetIcon() const { return web_contents_->GetFavIcon(); } -HANDLE TaskManagerWebContentsResource::GetProcess() const { +base::ProcessHandle TaskManagerWebContentsResource::GetProcess() const { return process_; } @@ -81,8 +85,8 @@ TabContents* TaskManagerWebContentsResource::GetTabContents() const { TaskManagerWebContentsResourceProvider:: TaskManagerWebContentsResourceProvider(TaskManager* task_manager) - : task_manager_(task_manager), - updating_(false) { + : updating_(false), + task_manager_(task_manager) { } TaskManagerWebContentsResourceProvider:: @@ -280,7 +284,7 @@ SkBitmap TaskManagerChildProcessResource::GetIcon() const { return *default_icon_; } -HANDLE TaskManagerChildProcessResource::GetProcess() const { +base::ProcessHandle TaskManagerChildProcessResource::GetProcess() const { return child_process_.handle(); } @@ -290,8 +294,8 @@ HANDLE TaskManagerChildProcessResource::GetProcess() const { TaskManagerChildProcessResourceProvider:: TaskManagerChildProcessResourceProvider(TaskManager* task_manager) - : task_manager_(task_manager), - updating_(false), + : updating_(false), + task_manager_(task_manager), ui_loop_(MessageLoop::current()) { } @@ -444,13 +448,15 @@ void TaskManagerChildProcessResourceProvider::ChildProcessInfoRetreived() { SkBitmap* TaskManagerBrowserProcessResource::default_icon_ = NULL; TaskManagerBrowserProcessResource::TaskManagerBrowserProcessResource() -: title_(), - network_usage_support_(false) { - pid_ = GetCurrentProcessId(); - process_ = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, - FALSE, - pid_); - DCHECK(process_); + : network_usage_support_(false), + title_() { + pid_ = base::GetCurrentProcId(); + bool success = base::OpenPrivilegedProcessHandle(pid_, &process_); + DCHECK(success); +#if !defined(OS_WIN) + // TODO(port): Port icon code. + NOTIMPLEMENTED(); +#else if (!default_icon_) { HICON icon = LoadIcon(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME)); @@ -465,10 +471,11 @@ TaskManagerBrowserProcessResource::TaskManagerBrowserProcessResource() default_icon_ = IconUtil::CreateSkBitmapFromHICON(icon, icon_size); } } +#endif // defined(OS_WIN) } TaskManagerBrowserProcessResource::~TaskManagerBrowserProcessResource() { - CloseHandle(process_); + base::CloseProcessHandle(process_); } // TaskManagerResource methods: @@ -483,8 +490,8 @@ SkBitmap TaskManagerBrowserProcessResource::GetIcon() const { return *default_icon_; } -HANDLE TaskManagerBrowserProcessResource::GetProcess() const { - return GetCurrentProcess(); // process_; +base::ProcessHandle TaskManagerBrowserProcessResource::GetProcess() const { + return base::GetCurrentProcessHandle(); // process_; } //////////////////////////////////////////////////////////////////////////////// diff --git a/chrome/browser/task_manager_resource_providers.h b/chrome/browser/task_manager_resource_providers.h index fe1c233..9181543 100644 --- a/chrome/browser/task_manager_resource_providers.h +++ b/chrome/browser/task_manager_resource_providers.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_TASK_MANAGER_RESOURCE_PROVIDERS_H_ #include "base/basictypes.h" +#include "base/process_util.h" #include "chrome/browser/task_manager.h" #include "chrome/common/child_process_info.h" #include "chrome/common/notification_observer.h" @@ -22,7 +23,7 @@ class TaskManagerWebContentsResource : public TaskManager::Resource { // TaskManagerResource methods: std::wstring GetTitle() const; SkBitmap GetIcon() const; - HANDLE GetProcess() const; + base::ProcessHandle GetProcess() const; TabContents* GetTabContents() const; // WebContents always provide the network usage. @@ -31,7 +32,7 @@ class TaskManagerWebContentsResource : public TaskManager::Resource { private: WebContents* web_contents_; - HANDLE process_; + base::ProcessHandle process_; int pid_; DISALLOW_COPY_AND_ASSIGN(TaskManagerWebContentsResource); @@ -85,7 +86,7 @@ class TaskManagerChildProcessResource : public TaskManager::Resource { // TaskManagerResource methods: std::wstring GetTitle() const; SkBitmap GetIcon() const; - HANDLE GetProcess() const; + base::ProcessHandle GetProcess() const; bool SupportNetworkUsage() const { return network_usage_support_; @@ -175,7 +176,7 @@ class TaskManagerBrowserProcessResource : public TaskManager::Resource { // TaskManagerResource methods: std::wstring GetTitle() const; SkBitmap GetIcon() const; - HANDLE GetProcess() const; + base::ProcessHandle GetProcess() const; bool SupportNetworkUsage() const { return network_usage_support_; @@ -189,7 +190,7 @@ class TaskManagerBrowserProcessResource : public TaskManager::Resource { int process_id() const { return pid_; } private: - HANDLE process_; + base::ProcessHandle process_; int pid_; bool network_usage_support_; mutable std::wstring title_; diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 95bffd2..3d845d5 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -1461,7 +1461,6 @@ 'browser/tab_contents/web_drag_source.cc', 'browser/tab_contents/web_drop_target.cc', 'browser/task_manager.cc', - 'browser/task_manager_resource_providers.cc', 'browser/window_sizer.cc', ], }], diff --git a/chrome/views/window/dialog_client_view.h b/chrome/views/window/dialog_client_view.h index fadabb6..0e311bb 100644 --- a/chrome/views/window/dialog_client_view.h +++ b/chrome/views/window/dialog_client_view.h @@ -78,7 +78,7 @@ class DialogClientView : public ClientView, // Returns the width of the specified dialog button using the correct font. int GetButtonWidth(int button) const; - int DialogClientView::GetButtonsHeight() const; + int GetButtonsHeight() const; // Position and size various sub-views. void LayoutDialogButtons(); |