Index: content/browser/utility_process_host_impl.cc |
diff --git a/content/browser/utility_process_host_impl.cc b/content/browser/utility_process_host_impl.cc |
index f2b3bc31deeaa3ff2b0fe94726a0309ce4e6c8d3..38a14bdc3c9788bffb64d845f18cc2c82622a41e 100644 |
--- a/content/browser/utility_process_host_impl.cc |
+++ b/content/browser/utility_process_host_impl.cc |
@@ -73,6 +73,9 @@ UtilityProcessHostImpl::UtilityProcessHostImpl( |
is_batch_mode_(false), |
is_mdns_enabled_(false), |
no_sandbox_(false), |
+#if defined(OS_WIN) |
+ run_elevated_(false), |
+#endif |
#if defined(OS_LINUX) |
child_flags_(ChildProcessHost::CHILD_ALLOW_SELF), |
#else |
@@ -120,6 +123,13 @@ void UtilityProcessHostImpl::DisableSandbox() { |
no_sandbox_ = true; |
} |
+#if defined(OS_WIN) |
+void UtilityProcessHostImpl::ElevatePrivileges() { |
+ no_sandbox_ = true; |
+ run_elevated_ = true; |
+} |
+#endif |
+ |
void UtilityProcessHostImpl::EnableZygote() { |
use_linux_zygote_ = true; |
} |
@@ -222,6 +232,14 @@ bool UtilityProcessHostImpl::StartProcess() { |
use_zygote = !no_sandbox_ && use_linux_zygote_; |
#endif |
+#if defined(OS_WIN) |
+ // If launching elevated in windows, launch there and return. |
+ if (run_elevated_) { |
+ process_->LaunchElevated(cmd_line); |
+ return true; |
+ } |
+#endif |
+ |
process_->Launch( |
#if defined(OS_WIN) |
new UtilitySandboxedProcessLauncherDelegate(exposed_dir_), |