| Index: content/browser/child_process_launcher.cc
|
| diff --git a/content/browser/child_process_launcher.cc b/content/browser/child_process_launcher.cc
|
| index 3a162119bd5b58f993c1bb741662944d214f4b9d..7dfad56a08ea1950b287984188d6697a49cba07a 100644
|
| --- a/content/browser/child_process_launcher.cc
|
| +++ b/content/browser/child_process_launcher.cc
|
| @@ -73,6 +73,7 @@ class ChildProcessLauncher::Context
|
| void Launch(
|
| #if defined(OS_WIN)
|
| SandboxedProcessLauncherDelegate* delegate,
|
| + bool launch_elevated,
|
| #elif defined(OS_ANDROID)
|
| int ipcfd,
|
| #elif defined(OS_POSIX)
|
| @@ -102,6 +103,7 @@ class ChildProcessLauncher::Context
|
| child_process_id,
|
| #if defined(OS_WIN)
|
| delegate,
|
| + launch_elevated,
|
| #elif defined(OS_ANDROID)
|
| ipcfd,
|
| #elif defined(OS_POSIX)
|
| @@ -185,6 +187,7 @@ class ChildProcessLauncher::Context
|
| int child_process_id,
|
| #if defined(OS_WIN)
|
| SandboxedProcessLauncherDelegate* delegate,
|
| + bool launch_elevated,
|
| #elif defined(OS_ANDROID)
|
| int ipcfd,
|
| #elif defined(OS_POSIX)
|
| @@ -197,8 +200,15 @@ class ChildProcessLauncher::Context
|
| base::TimeTicks begin_launch_time = base::TimeTicks::Now();
|
|
|
| #if defined(OS_WIN)
|
| - scoped_ptr<SandboxedProcessLauncherDelegate> delegate_deleter(delegate);
|
| - base::ProcessHandle handle = StartSandboxedProcess(delegate, cmd_line);
|
| + base::ProcessHandle handle = base::kNullProcessHandle;
|
| + if (launch_elevated) {
|
| + base::LaunchOptions options;
|
| + options.start_hidden = true;
|
| + base::LaunchElevatedProcess(*cmd_line, options, &handle);
|
| + } else {
|
| + scoped_ptr<SandboxedProcessLauncherDelegate> delegate_deleter(delegate);
|
| + handle = StartSandboxedProcess(delegate, cmd_line);
|
| + }
|
| #elif defined(OS_POSIX)
|
| std::string process_type =
|
| cmd_line->GetSwitchValueASCII(switches::kProcessType);
|
| @@ -335,7 +345,11 @@ class ChildProcessLauncher::Context
|
| zygote_ = zygote;
|
| #endif
|
| if (client_) {
|
| - client_->OnProcessLaunched();
|
| + if (handle) {
|
| + client_->OnProcessLaunched();
|
| + } else {
|
| + client_->OnProcessLaunchFailed();
|
| + }
|
| } else {
|
| Terminate();
|
| }
|
| @@ -418,6 +432,7 @@ class ChildProcessLauncher::Context
|
| ChildProcessLauncher::ChildProcessLauncher(
|
| #if defined(OS_WIN)
|
| SandboxedProcessLauncherDelegate* delegate,
|
| + bool launch_elevated,
|
| #elif defined(OS_POSIX)
|
| bool use_zygote,
|
| const base::EnvironmentMap& environ,
|
| @@ -430,6 +445,7 @@ ChildProcessLauncher::ChildProcessLauncher(
|
| context_->Launch(
|
| #if defined(OS_WIN)
|
| delegate,
|
| + launch_elevated,
|
| #elif defined(OS_ANDROID)
|
| ipcfd,
|
| #elif defined(OS_POSIX)
|
|
|