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 7e275aca9a37e2a78a16f265717c48d6b92b25cc..552b00acd2603485b6ec1c3a579a5733516d8b05 100644 |
--- a/content/browser/utility_process_host_impl.cc |
+++ b/content/browser/utility_process_host_impl.cc |
@@ -31,6 +31,7 @@ |
#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/utility_process_host_client.h" |
#include "content/public/common/content_switches.h" |
+#include "content/public/common/mojo_channel_switches.h" |
#include "content/public/common/process_type.h" |
#include "content/public/common/sandbox_type.h" |
#include "content/public/common/sandboxed_process_launcher_delegate.h" |
@@ -247,12 +248,6 @@ bool UtilityProcessHostImpl::StartProcess() { |
if (is_batch_mode_) |
return true; |
- bool mojo_result = mojo_application_host_->Init(); |
- if (!mojo_result) { |
- NotifyAndDelete(); |
- return false; |
- } |
- |
// Name must be set or metrics_service will crash in any test which |
// launches a UtilityProcessHost. |
process_.reset(new BrowserChildProcessHostImpl(PROCESS_TYPE_UTILITY, this)); |
@@ -266,14 +261,21 @@ bool UtilityProcessHostImpl::StartProcess() { |
if (RenderProcessHost::run_renderer_in_process()) { |
DCHECK(g_utility_main_thread_factory); |
+ mojo::ScopedMessagePipeHandle mojo_handle = |
+ mojo_application_host_->InitWithPipe(); |
+ if (!mojo_handle.is_valid()) { |
+ NotifyAndDelete(); |
+ return false; |
+ } |
+ |
// See comment in RenderProcessHostImpl::Init() for the background on why we |
// support single process mode this way. |
in_process_thread_.reset( |
g_utility_main_thread_factory(InProcessChildThreadParams( |
channel_id, BrowserThread::UnsafeGetMessageLoopForThread( |
- BrowserThread::IO)->task_runner()))); |
+ BrowserThread::IO)->task_runner(), |
+ mojo::MessagePipeHandle(), mojo_handle.release()))); |
in_process_thread_->Start(); |
- OnProcessLaunched(); |
} else { |
const base::CommandLine& browser_command_line = |
*base::CommandLine::ForCurrentProcess(); |
@@ -350,6 +352,10 @@ bool UtilityProcessHostImpl::StartProcess() { |
cmd_line->AppendSwitch(switches::kUtilityProcessRunningElevated); |
#endif |
+ std::string mojo_token = mojo_application_host_->InitWithToken(); |
+ cmd_line->AppendSwitchASCII(switches::kMojoApplicationChannelToken, |
+ mojo_token); |
+ |
process_->Launch( |
new UtilitySandboxedProcessLauncherDelegate(exposed_dir_, |
run_elevated_, |
@@ -396,17 +402,6 @@ void UtilityProcessHostImpl::OnProcessCrashed(int exit_code) { |
exit_code)); |
} |
-void UtilityProcessHostImpl::OnProcessLaunched() { |
- DCHECK(mojo_application_host_); |
- base::ProcessHandle handle; |
- if (RenderProcessHost::run_renderer_in_process()) |
- handle = base::GetCurrentProcessHandle(); |
- else |
- handle = process_->GetData().handle; |
- |
- mojo_application_host_->Activate(this, handle); |
-} |
- |
void UtilityProcessHostImpl::NotifyAndDelete() { |
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |