summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/process_util.h6
-rw-r--r--base/process_util_posix.cc6
-rw-r--r--base/process_util_win.cc16
-rw-r--r--chrome/browser/task_manager.h15
-rw-r--r--chrome/browser/task_manager_resource_providers.cc39
-rw-r--r--chrome/browser/task_manager_resource_providers.h11
-rw-r--r--chrome/chrome.gyp1
-rw-r--r--chrome/views/window/dialog_client_view.h2
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();