Chromium Code Reviews| Index: remoting/host/win/wts_session_process_delegate.cc |
| diff --git a/remoting/host/win/wts_session_process_delegate.cc b/remoting/host/win/wts_session_process_delegate.cc |
| index 635bd04b68dadb4923ac4a836a2add44aba5847e..42f4cba4b2c5c7ebae0598d7ab7d739964766c92 100644 |
| --- a/remoting/host/win/wts_session_process_delegate.cc |
| +++ b/remoting/host/win/wts_session_process_delegate.cc |
| @@ -7,6 +7,7 @@ |
| #include "remoting/host/win/wts_session_process_delegate.h" |
| +#include <memory> |
| #include <utility> |
| #include "base/bind.h" |
| @@ -27,6 +28,7 @@ |
| #include "ipc/ipc_message.h" |
| #include "mojo/edk/embedder/embedder.h" |
| #include "mojo/edk/embedder/named_platform_channel_pair.h" |
| +#include "mojo/edk/embedder/pending_process_connection.h" |
| #include "mojo/edk/embedder/platform_channel_pair.h" |
| #include "mojo/edk/embedder/platform_handle_utils.h" |
| #include "mojo/edk/embedder/scoped_platform_handle.h" |
| @@ -155,8 +157,8 @@ class WtsSessionProcessDelegate::Core |
| // Tracks the id of the worker process. |
| base::ProcessId worker_process_pid_ = base::kNullProcessId; |
| - // The mojo child token for the process being launched. |
| - std::string mojo_child_token_; |
| + // The pending process connection for the process being launched. |
| + std::unique_ptr<mojo::edk::PendingProcessConnection> process_connection_; |
| DISALLOW_COPY_AND_ASSIGN(Core); |
| }; |
| @@ -257,10 +259,7 @@ void WtsSessionProcessDelegate::Core::CloseChannel() { |
| channel_.reset(); |
| elevated_server_handle_.reset(); |
| elevated_launcher_pid_ = base::kNullProcessId; |
| - if (!mojo_child_token_.empty()) { |
| - mojo::edk::ChildProcessLaunchFailed(mojo_child_token_); |
| - mojo_child_token_.clear(); |
| - } |
| + process_connection_.reset(); |
| } |
| void WtsSessionProcessDelegate::Core::KillProcess() { |
| @@ -391,14 +390,12 @@ void WtsSessionProcessDelegate::Core::DoLaunchProcess() { |
| target_command_->GetProgram()); |
| } |
| - const std::string mojo_message_pipe_token = mojo::edk::GenerateRandomToken(); |
| - mojo_child_token_ = mojo::edk::GenerateRandomToken(); |
| + std::string mojo_pipe_token; |
| + process_connection_.reset(new mojo::edk::PendingProcessConnection); |
|
Sam McNally
2017/02/09 05:38:47
process_connection_ = base::MakeUnique<mojo::edk::
Ken Rockot(use gerrit already)
2017/02/09 06:01:58
done
|
| std::unique_ptr<IPC::ChannelProxy> channel = IPC::ChannelProxy::Create( |
| - mojo::edk::CreateParentMessagePipe(mojo_message_pipe_token, |
| - mojo_child_token_) |
| - .release(), |
| + process_connection_->CreateMessagePipe(&mojo_pipe_token).release(), |
| IPC::Channel::MODE_SERVER, this, io_task_runner_); |
| - command_line.AppendSwitchASCII(kMojoPipeToken, mojo_message_pipe_token); |
| + command_line.AppendSwitchASCII(kMojoPipeToken, pipe_token); |
| std::unique_ptr<mojo::edk::PlatformChannelPair> normal_mojo_channel; |
| std::unique_ptr<mojo::edk::NamedPlatformChannelPair> elevated_mojo_channel; |
| @@ -558,10 +555,8 @@ void WtsSessionProcessDelegate::Core::ReportProcessLaunched( |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| DCHECK(!worker_process_.IsValid()); |
| - mojo::edk::ChildProcessLaunched(worker_process.Get(), |
| - std::move(server_handle), |
| - mojo_child_token_); |
| - mojo_child_token_.clear(); |
| + process_connection_->Connect(worker_process.Get(), std::move(server_handle)); |
| + process_connection_.reset(); |
| worker_process_ = std::move(worker_process); |
| // Report a handle that can be used to wait for the worker process completion, |