| Index: content/common/sandbox_policy.cc
|
| diff --git a/content/common/sandbox_policy.cc b/content/common/sandbox_policy.cc
|
| index dc07070154137b9fb34971eb0b9c455079c58776..da359a8816b7443dc93c8b1fff1369a0d603a56e 100644
|
| --- a/content/common/sandbox_policy.cc
|
| +++ b/content/common/sandbox_policy.cc
|
| @@ -22,6 +22,7 @@
|
| #include "content/public/common/content_client.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "content/public/common/process_type.h"
|
| +#include "content/public/common/sandbox_init.h"
|
| #include "sandbox/src/sandbox.h"
|
| #include "ui/gfx/gl/gl_switches.h"
|
|
|
| @@ -458,41 +459,6 @@ bool InitTargetServices(sandbox::TargetServices* target_services) {
|
| return SBOX_ALL_OK == result;
|
| }
|
|
|
| -bool BrokerDuplicateHandle(HANDLE source_handle,
|
| - DWORD target_process_id,
|
| - HANDLE* target_handle,
|
| - DWORD desired_access,
|
| - DWORD options) {
|
| - // If our process is the target just duplicate the handle.
|
| - if (::GetCurrentProcessId() == target_process_id) {
|
| - return !!::DuplicateHandle(::GetCurrentProcess(), source_handle,
|
| - ::GetCurrentProcess(), target_handle,
|
| - desired_access, FALSE, options);
|
| -
|
| - }
|
| -
|
| - // Try the broker next
|
| - if (g_target_services &&
|
| - g_target_services->DuplicateHandle(source_handle, target_process_id,
|
| - target_handle, desired_access,
|
| - options) == SBOX_ALL_OK) {
|
| - return true;
|
| - }
|
| -
|
| - // Finally, see if we already have access to the process.
|
| - base::win::ScopedHandle target_process;
|
| - target_process.Set(::OpenProcess(PROCESS_DUP_HANDLE, FALSE,
|
| - target_process_id));
|
| - if (target_process.IsValid()) {
|
| - return !!::DuplicateHandle(::GetCurrentProcess(), source_handle,
|
| - target_process, target_handle,
|
| - desired_access, FALSE, options);
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -
|
| base::ProcessHandle StartProcessWithAccess(CommandLine* cmd_line,
|
| const FilePath& exposed_dir) {
|
| const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
|
| @@ -688,3 +654,41 @@ base::ProcessHandle StartProcessWithAccess(CommandLine* cmd_line,
|
| }
|
|
|
| } // namespace sandbox
|
| +
|
| +namespace content {
|
| +
|
| +bool BrokerDuplicateHandle(HANDLE source_handle,
|
| + DWORD target_process_id,
|
| + HANDLE* target_handle,
|
| + DWORD desired_access,
|
| + DWORD options) {
|
| + // If our process is the target just duplicate the handle.
|
| + if (::GetCurrentProcessId() == target_process_id) {
|
| + return !!::DuplicateHandle(::GetCurrentProcess(), source_handle,
|
| + ::GetCurrentProcess(), target_handle,
|
| + desired_access, FALSE, options);
|
| +
|
| + }
|
| +
|
| + // Try the broker next
|
| + if (g_target_services &&
|
| + g_target_services->DuplicateHandle(source_handle, target_process_id,
|
| + target_handle, desired_access,
|
| + options) == sandbox::SBOX_ALL_OK) {
|
| + return true;
|
| + }
|
| +
|
| + // Finally, see if we already have access to the process.
|
| + base::win::ScopedHandle target_process;
|
| + target_process.Set(::OpenProcess(PROCESS_DUP_HANDLE, FALSE,
|
| + target_process_id));
|
| + if (target_process.IsValid()) {
|
| + return !!::DuplicateHandle(::GetCurrentProcess(), source_handle,
|
| + target_process, target_handle,
|
| + desired_access, FALSE, options);
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +} // namespace content
|
|
|