Index: content/browser/child_process_launcher.cc |
diff --git a/content/browser/child_process_launcher.cc b/content/browser/child_process_launcher.cc |
index 721cd5a88ede6cc6eeb7907bdecbfd35b7a5ff6d..6de24761b6cc373dd2014bda4d0a308d40f44c46 100644 |
--- a/content/browser/child_process_launcher.cc |
+++ b/content/browser/child_process_launcher.cc |
@@ -68,9 +68,20 @@ class ChildProcessLauncher::Context |
#endif |
} |
+#if defined(OS_WIN) |
+ void Launch( |
+ SandboxedProcessLauncherDelegate* delegate, |
+ CommandLine* cmd_line, |
+ int child_process_id, |
+ Client* client) { |
+ Launch(delegate, false, cmd_line, child_process_id, client); |
+ } |
+#endif |
+ |
void Launch( |
#if defined(OS_WIN) |
SandboxedProcessLauncherDelegate* delegate, |
+ bool run_elevated, |
#elif defined(OS_ANDROID) |
int ipcfd, |
#elif defined(OS_POSIX) |
@@ -100,6 +111,7 @@ class ChildProcessLauncher::Context |
child_process_id, |
#if defined(OS_WIN) |
delegate, |
+ run_elevated, |
#elif defined(OS_ANDROID) |
ipcfd, |
#elif defined(OS_POSIX) |
@@ -183,6 +195,7 @@ class ChildProcessLauncher::Context |
int child_process_id, |
#if defined(OS_WIN) |
SandboxedProcessLauncherDelegate* delegate, |
+ bool run_elevated, |
#elif defined(OS_ANDROID) |
int ipcfd, |
#elif defined(OS_POSIX) |
@@ -194,9 +207,17 @@ class ChildProcessLauncher::Context |
scoped_ptr<CommandLine> cmd_line_deleter(cmd_line); |
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; |
+ if (run_elevated) { |
+ base::LaunchOptions options; |
+ options.run_elevated = run_elevated; |
+ base::LaunchProcess(*cmd_line, options, &handle); |
+ } else { |
+ handle = StartSandboxedProcess(delegate, cmd_line); |
+ } |
#elif defined(OS_ANDROID) |
// Android WebView runs in single process, ensure that we never get here |
// when running in single process mode. |
@@ -437,6 +458,23 @@ ChildProcessLauncher::ChildProcessLauncher( |
client); |
} |
+#if defined(OS_WIN) |
+ChildProcessLauncher::ChildProcessLauncher( |
+ SandboxedProcessLauncherDelegate* delegate, |
+ bool run_elevated, |
+ CommandLine* cmd_line, |
+ int child_process_id, |
+ Client* client) { |
+ context_ = new Context(); |
+ context_->Launch( |
+ delegate, |
+ run_elevated, |
+ cmd_line, |
+ child_process_id, |
+ client); |
+} |
+#endif |
+ |
ChildProcessLauncher::~ChildProcessLauncher() { |
context_->ResetClient(); |
} |