| Index: content/child/child_thread_impl.cc
|
| diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc
|
| index 033b4406c8a9c548ae6f56b4adbc3dc4e31dbbf1..ee0964d4f7a0233b913bde2c106f4acc256c3324 100644
|
| --- a/content/child/child_thread_impl.cc
|
| +++ b/content/child/child_thread_impl.cc
|
| @@ -54,9 +54,9 @@
|
| #include "content/child/websocket_message_filter.h"
|
| #include "content/common/child_process_messages.h"
|
| #include "content/common/in_process_child_thread_params.h"
|
| -#include "content/common/mojo/mojo_shell_connection_impl.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "content/public/common/mojo_channel_switches.h"
|
| +#include "content/public/common/mojo_shell_connection.h"
|
| #include "ipc/attachment_broker.h"
|
| #include "ipc/attachment_broker_unprivileged.h"
|
| #include "ipc/ipc_channel_mojo.h"
|
| @@ -305,6 +305,13 @@ ChildThreadImpl::Options::Builder::AddStartupFilter(
|
| return *this;
|
| }
|
|
|
| +ChildThreadImpl::Options::Builder&
|
| +ChildThreadImpl::Options::Builder::UseMojoShellConnection(
|
| + bool use_mojo_shell_connection) {
|
| + options_.use_mojo_shell_connection = use_mojo_shell_connection;
|
| + return *this;
|
| +}
|
| +
|
| ChildThreadImpl::Options ChildThreadImpl::Options::Builder::Build() {
|
| return options_;
|
| }
|
| @@ -375,6 +382,7 @@ void ChildThreadImpl::ConnectChannel(bool use_mojo_channel,
|
|
|
| void ChildThreadImpl::Init(const Options& options) {
|
| channel_name_ = options.channel_name;
|
| + use_mojo_shell_connection_ = options.use_mojo_shell_connection;
|
|
|
| g_lazy_tls.Pointer()->Set(this);
|
| on_channel_error_called_ = false;
|
| @@ -401,23 +409,26 @@ void ChildThreadImpl::Init(const Options& options) {
|
| mojo_ipc_support_.reset(new mojo::edk::ScopedIPCSupport(GetIOTaskRunner()));
|
| InitializeMojoIPCChannel();
|
| }
|
| - if (shell::ShellIsRemote()) {
|
| - MojoShellConnection::SetForProcess(
|
| - MojoShellConnection::Create(
|
| - shell::GetShellClientRequestFromCommandLine()));
|
| - }
|
| - mojo_application_.reset(new MojoApplication());
|
| std::string mojo_application_token;
|
| if (!IsInBrowserProcess()) {
|
| mojo_application_token =
|
| - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - switches::kMojoApplicationChannelToken);
|
| + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| + switches::kMojoApplicationChannelToken);
|
| } else {
|
| mojo_application_token = options.in_process_application_token;
|
| }
|
| - if (!mojo_application_token.empty())
|
| - mojo_application_->InitWithToken(mojo_application_token);
|
| -
|
| + if (use_mojo_shell_connection_) {
|
| + mojo::ScopedMessagePipeHandle handle =
|
| + mojo::edk::CreateChildMessagePipe(mojo_application_token);
|
| + DCHECK(handle.is_valid());
|
| + mojo_shell_connection_ = MojoShellConnection::Create(
|
| + mojo::MakeRequest<shell::mojom::ShellClient>(std::move(handle)));
|
| + mojo_shell_connection_->AddEmbeddedShellClient(this);
|
| + } else {
|
| + mojo_application_.reset(new MojoApplication());
|
| + if (!mojo_application_token.empty())
|
| + mojo_application_->InitWithToken(mojo_application_token);
|
| + }
|
| sync_message_filter_ = channel_->CreateSyncMessageFilter();
|
| thread_safe_sender_ = new ThreadSafeSender(
|
| message_loop_->task_runner(), sync_message_filter_.get());
|
| @@ -593,14 +604,36 @@ void ChildThreadImpl::RecordComputedAction(const std::string& action) {
|
| NOTREACHED();
|
| }
|
|
|
| +MojoShellConnection* ChildThreadImpl::GetMojoShellConnection() {
|
| + return mojo_shell_connection_.get();
|
| +}
|
| +
|
| shell::InterfaceRegistry* ChildThreadImpl::GetInterfaceRegistry() {
|
| + if (use_mojo_shell_connection_) {
|
| + if (!interface_registry_.get())
|
| + interface_registry_.reset(new shell::InterfaceRegistry(nullptr));
|
| + return interface_registry_.get();
|
| + }
|
| return mojo_application_->interface_registry();
|
| }
|
|
|
| shell::InterfaceProvider* ChildThreadImpl::GetRemoteInterfaces() {
|
| + if (use_mojo_shell_connection_) {
|
| + if (!remote_interfaces_.get())
|
| + remote_interfaces_.reset(new shell::InterfaceProvider);
|
| + return remote_interfaces_.get();
|
| + }
|
| return mojo_application_->remote_interfaces();
|
| }
|
|
|
| +shell::InterfaceRegistry* ChildThreadImpl::GetInterfaceRegistryForConnection() {
|
| + return GetInterfaceRegistry();
|
| +}
|
| +
|
| +shell::InterfaceProvider* ChildThreadImpl::GetInterfaceProviderForConnection() {
|
| + return GetRemoteInterfaces();
|
| +}
|
| +
|
| IPC::MessageRouter* ChildThreadImpl::GetRouter() {
|
| DCHECK(base::MessageLoop::current() == message_loop());
|
| return &router_;
|
|
|