Chromium Code Reviews| Index: mojo/shell/runner/host/child_process_host.cc |
| diff --git a/mojo/shell/runner/host/child_process_host.cc b/mojo/shell/runner/host/child_process_host.cc |
| index 4e9fa9f164949347ba300667dd0a350039a189f4..17b17a171d1e11b183512447395e684449c3eb01 100644 |
| --- a/mojo/shell/runner/host/child_process_host.cc |
| +++ b/mojo/shell/runner/host/child_process_host.cc |
| @@ -22,7 +22,6 @@ |
| #include "mojo/public/cpp/bindings/interface_ptr_info.h" |
| #include "mojo/public/cpp/system/core.h" |
| #include "mojo/shell/runner/common/switches.h" |
| -#include "third_party/mojo/src/mojo/edk/embedder/embedder.h" |
| #if defined(OS_LINUX) && !defined(OS_ANDROID) |
| #include "sandbox/linux/services/namespace_sandbox.h" |
| @@ -64,26 +63,16 @@ ChildProcessHost::ChildProcessHost(base::TaskRunner* launch_process_runner, |
| : launch_process_runner_(launch_process_runner), |
| start_sandboxed_(start_sandboxed), |
| app_path_(app_path), |
| - channel_info_(nullptr), |
| start_child_process_event_(false, false), |
| weak_factory_(this) { |
| pipe_holder_ = new PipeHolder(); |
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch("use-new-edk")) { |
| - node_channel_.reset(new edk::PlatformChannelPair); |
| - primordial_pipe_token_ = edk::GenerateRandomToken(); |
| - } else { |
| - pipe_holder_->SetPipe(embedder::CreateChannel( |
| - platform_channel_pair_.PassServerHandle(), |
| - base::Bind(&ChildProcessHost::DidCreateChannel, base::Unretained(this)), |
| - base::ThreadTaskRunnerHandle::Get())); |
| - OnMessagePipeCreated(); |
| - } |
| + node_channel_.reset(new edk::PlatformChannelPair); |
| + primordial_pipe_token_ = edk::GenerateRandomToken(); |
| } |
| ChildProcessHost::ChildProcessHost(ScopedHandle channel) |
| : launch_process_runner_(nullptr), |
| start_sandboxed_(false), |
| - channel_info_(nullptr), |
| start_child_process_event_(false, false), |
| weak_factory_(this) { |
| CHECK(channel.is_valid()); |
| @@ -102,32 +91,30 @@ void ChildProcessHost::Start(const ProcessReadyCallback& callback) { |
| DCHECK(process_ready_callback_.is_null()); |
| process_ready_callback_ = callback; |
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch("use-new-edk")) { |
| - // With the new EDK, bootstrap message pipes are created asynchronously. |
| - // We recieve the bound pipe (if successful) on an arbitrary thread, |
| - // stash it in the thread-safe |pipe_holder_|, and then try to call |
| - // OnMessagePipeCreated() on the host's main thread. |
| - // |
| - // Because of the way the launcher process shuts down, it's possible for |
| - // the main thread's MessageLoop to stop running (but not yet be destroyed!) |
| - // while this boostrap is pending, resulting in OnMessagePipeCreated() never |
| - // being called. |
| - // |
| - // A typical child process (i.e. one using ApplicationImpl to bind the other |
| - // end of this pipe) may hang forever waiting for an Initialize() message |
| - // unless the pipe is closed. This in turn means that Join() could hang |
| - // waiting for the process to exit. Deadlock! |
| - // |
| - // |pipe_holder_| exists for this reason. If it's still holding onto the |
| - // pipe when Join() is called, the pipe will be closed. |
| - DCHECK(!primordial_pipe_token_.empty()); |
| - edk::CreateParentMessagePipe( |
| - primordial_pipe_token_, |
| - base::Bind(&OnParentMessagePipeCreated, pipe_holder_, |
| - base::ThreadTaskRunnerHandle::Get(), |
| - base::Bind(&ChildProcessHost::OnMessagePipeCreated, |
| - weak_factory_.GetWeakPtr()))); |
| - } |
| + // With the new EDK, bootstrap message pipes are created asynchronously. |
|
jam
2016/02/08 17:32:12
nit: remove new edk since there's only one now?
Ken Rockot(use gerrit already)
2016/02/08 17:51:18
Done
|
| + // We recieve the bound pipe (if successful) on an arbitrary thread, |
| + // stash it in the thread-safe |pipe_holder_|, and then try to call |
| + // OnMessagePipeCreated() on the host's main thread. |
| + // |
| + // Because of the way the launcher process shuts down, it's possible for |
| + // the main thread's MessageLoop to stop running (but not yet be destroyed!) |
| + // while this boostrap is pending, resulting in OnMessagePipeCreated() never |
| + // being called. |
| + // |
| + // A typical child process (i.e. one using ApplicationImpl to bind the other |
| + // end of this pipe) may hang forever waiting for an Initialize() message |
| + // unless the pipe is closed. This in turn means that Join() could hang |
| + // waiting for the process to exit. Deadlock! |
| + // |
| + // |pipe_holder_| exists for this reason. If it's still holding onto the |
| + // pipe when Join() is called, the pipe will be closed. |
| + DCHECK(!primordial_pipe_token_.empty()); |
| + edk::CreateParentMessagePipe( |
| + primordial_pipe_token_, |
| + base::Bind(&OnParentMessagePipeCreated, pipe_holder_, |
| + base::ThreadTaskRunnerHandle::Get(), |
| + base::Bind(&ChildProcessHost::OnMessagePipeCreated, |
| + weak_factory_.GetWeakPtr()))); |
| launch_process_runner_->PostTaskAndReply( |
| FROM_HERE, |
| @@ -261,9 +248,9 @@ void ChildProcessHost::DoLaunch() { |
| platform_channel_pair_.ChildProcessLaunched(); |
| if (node_channel_.get()) { |
| node_channel_->ChildProcessLaunched(); |
| - mojo::embedder::ChildProcessLaunched( |
| + mojo::edk::ChildProcessLaunched( |
| child_process_.Handle(), |
| - mojo::embedder::ScopedPlatformHandle(mojo::embedder::PlatformHandle( |
| + mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle( |
| node_channel_->PassServerHandle().release().handle))); |
| } |
| } |
| @@ -278,14 +265,6 @@ void ChildProcessHost::AppCompleted(int32_t result) { |
| } |
| } |
| -void ChildProcessHost::DidCreateChannel(embedder::ChannelInfo* channel_info) { |
| - DVLOG(2) << "AppChildProcessHost::DidCreateChannel()"; |
| - |
| - DCHECK(channel_info || |
| - base::CommandLine::ForCurrentProcess()->HasSwitch("use-new-edk")); |
| - channel_info_ = channel_info; |
| -} |
| - |
| void ChildProcessHost::OnMessagePipeCreated() { |
| controller_.Bind( |
| InterfacePtrInfo<mojom::ChildController>(pipe_holder_->PassPipe(), 0u)); |