Index: content/common/mojo/mojo_shell_connection_impl.cc |
diff --git a/content/common/mojo/mojo_shell_connection_impl.cc b/content/common/mojo/mojo_shell_connection_impl.cc |
index 2e4617cad9cfa3ea2a4c01c9df90abf744ccf249..a11e1e81ba8b29face18ba3a556b4ae511d2db05 100644 |
--- a/content/common/mojo/mojo_shell_connection_impl.cc |
+++ b/content/common/mojo/mojo_shell_connection_impl.cc |
@@ -17,6 +17,7 @@ |
namespace content { |
namespace { |
+ |
using MojoShellConnectionPtr = |
base::ThreadLocalPointer<MojoShellConnectionImpl>; |
@@ -34,11 +35,24 @@ bool IsRunningInMojoShell() { |
// static |
void MojoShellConnectionImpl::Create() { |
DCHECK(!lazy_tls_ptr.Pointer()->Get()); |
- MojoShellConnectionImpl* connection = new MojoShellConnectionImpl; |
+ MojoShellConnectionImpl* connection = |
+ new MojoShellConnectionImpl(true /* external */); |
lazy_tls_ptr.Pointer()->Set(connection); |
} |
// static |
+void MojoShellConnectionImpl::Create(mojo::ShellClientRequest request) { |
+ DCHECK(!lazy_tls_ptr.Pointer()->Get()); |
+ MojoShellConnectionImpl* connection = |
+ new MojoShellConnectionImpl(false /* external */); |
+ lazy_tls_ptr.Pointer()->Set(connection); |
+ |
+ connection->shell_connection_.reset( |
+ new mojo::ShellConnection(connection, std::move(request))); |
+ connection->shell_connection_->WaitForInitialize(); |
+} |
+ |
+// static |
MojoShellConnectionImpl* MojoShellConnectionImpl::Get() { |
return static_cast<MojoShellConnectionImpl*>(MojoShellConnection::Get()); |
} |
@@ -57,7 +71,9 @@ void MojoShellConnectionImpl::BindToMessagePipe( |
WaitForShell(std::move(handle)); |
} |
-MojoShellConnectionImpl::MojoShellConnectionImpl() : initialized_(false) {} |
+MojoShellConnectionImpl::MojoShellConnectionImpl(bool external) : |
+ external_(external), initialized_(false) {} |
+ |
MojoShellConnectionImpl::~MojoShellConnectionImpl() { |
STLDeleteElements(&listeners_); |
} |
@@ -66,7 +82,12 @@ void MojoShellConnectionImpl::WaitForShell( |
mojo::ScopedMessagePipeHandle handle) { |
mojo::ShellClientRequest request; |
runner_connection_.reset(mojo::shell::RunnerConnection::ConnectToRunner( |
- &request, std::move(handle))); |
+ &request, std::move(handle), false /* exit_on_error */)); |
+ if (!runner_connection_) { |
+ delete this; |
+ lazy_tls_ptr.Pointer()->Set(nullptr); |
+ return; |
+ } |
shell_connection_.reset(new mojo::ShellConnection(this, std::move(request))); |
shell_connection_->WaitForInitialize(); |
} |
@@ -91,7 +112,7 @@ mojo::Shell* MojoShellConnectionImpl::GetShell() { |
} |
bool MojoShellConnectionImpl::UsingExternalShell() const { |
- return true; |
+ return external_; |
} |
void MojoShellConnectionImpl::AddListener(Listener* listener) { |