| 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 718789237456bc13b7e3d68fbd521ed070d08b39..ac662944c8142a2d676a05a3d1060eb4e49fa016 100644
|
| --- a/content/common/mojo/mojo_shell_connection_impl.cc
|
| +++ b/content/common/mojo/mojo_shell_connection_impl.cc
|
| @@ -114,16 +114,6 @@ class MojoShellConnectionImpl::IOThreadContext
|
| base::ThreadTaskRunnerHandle::Get(), binder);
|
| }
|
|
|
| - // Safe to call any time after Start() is called.
|
| - void GetRemoteInterface(const mojo::String& interface_name,
|
| - mojo::ScopedMessagePipeHandle request_handle) {
|
| - DCHECK(started_);
|
| - io_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&IOThreadContext::GetRemoteInterfaceOnIOThread, this,
|
| - interface_name, base::Passed(&request_handle)));
|
| - }
|
| -
|
| private:
|
| friend class base::RefCountedThreadSafe<IOThreadContext>;
|
|
|
| @@ -144,22 +134,9 @@ class MojoShellConnectionImpl::IOThreadContext
|
| factory_bindings_.CloseAllBindings();
|
| }
|
|
|
| - void GetRemoteInterfaceOnIOThread(
|
| - const mojo::String& interface_name,
|
| - mojo::ScopedMessagePipeHandle request_handle) {
|
| - DCHECK(io_thread_checker_.CalledOnValidThread());
|
| - if (browser_connection_) {
|
| - browser_connection_->GetRemoteInterfaces()->GetInterface(
|
| - interface_name, std::move(request_handle));
|
| - } else {
|
| - pending_remote_interface_requests_.emplace(interface_name,
|
| - std::move(request_handle));
|
| - }
|
| - }
|
| -
|
| void OnBrowserConnectionLost() {
|
| DCHECK(io_thread_checker_.CalledOnValidThread());
|
| - browser_connection_ = nullptr;
|
| + has_browser_connection_ = false;
|
| }
|
|
|
| /////////////////////////////////////////////////////////////////////////////
|
| @@ -173,38 +150,29 @@ class MojoShellConnectionImpl::IOThreadContext
|
| callback_task_runner_->PostTask(FROM_HERE, base::Bind(handler, identity));
|
| }
|
|
|
| - bool OnConnect(shell::Connection* connection) override {
|
| + bool OnConnect(const shell::Identity& remote_identity,
|
| + shell::InterfaceRegistry* registry) override {
|
| DCHECK(io_thread_checker_.CalledOnValidThread());
|
| - std::string remote_app = connection->GetRemoteIdentity().name();
|
| + std::string remote_app = remote_identity.name();
|
| if (remote_app == "mojo:shell") {
|
| // Only expose the SCF interface to the shell.
|
| - connection->AddInterface<shell::mojom::ServiceFactory>(this);
|
| + registry->AddInterface<shell::mojom::ServiceFactory>(this);
|
| return true;
|
| }
|
|
|
| bool accept = false;
|
| for (auto& filter : connection_filters_) {
|
| accept = accept ||
|
| - filter->OnConnect(connection, service_context_->connector());
|
| + filter->OnConnect(remote_identity, registry,
|
| + service_context_->connector());
|
| }
|
|
|
| - // Capture the browser connection if possible.
|
| - if (remote_app == "exe:content_browser" && !browser_connection_) {
|
| - browser_connection_ = connection;
|
| - connection->GetInterfaceRegistry()->set_default_binder(
|
| - default_browser_binder_);
|
| - connection->SetConnectionLostClosure(
|
| + if (remote_identity.name() == "exe:content_browser" &&
|
| + !has_browser_connection_) {
|
| + has_browser_connection_ = true;
|
| + registry->set_default_binder(default_browser_binder_);
|
| + registry->SetConnectionLostClosure(
|
| base::Bind(&IOThreadContext::OnBrowserConnectionLost, this));
|
| - shell::InterfaceProvider* remote_interfaces =
|
| - connection->GetRemoteInterfaces();
|
| -
|
| - // Flush any pending outgoing interface requests.
|
| - while (!pending_remote_interface_requests_.empty()) {
|
| - auto& request = pending_remote_interface_requests_.front();
|
| - remote_interfaces->GetInterface(
|
| - request.first, std::move(request.second));
|
| - pending_remote_interface_requests_.pop();
|
| - }
|
| return true;
|
| }
|
|
|
| @@ -269,25 +237,9 @@ class MojoShellConnectionImpl::IOThreadContext
|
| // Callback to run if the service is stopped by the service manager.
|
| base::Closure stop_callback_;
|
|
|
| - // The incoming Connection from the browser process. This is captured the
|
| - // first time the browser connects to this Service and persists until shutdown
|
| - // or a connection error is detected. This connection is used to fulfill
|
| - // remote interface requests from legacy code which does not use
|
| - // shell::Connector.
|
| - //
|
| - // TODO(rockot): Remove this once all child-to-browser interface connections
|
| - // are made via a Connector rather than directly through an InterfaceProvider
|
| - // and all interfaces exposed to the browser are exposed via a
|
| - // ConnectionFilter.
|
| - shell::Connection* browser_connection_ = nullptr;
|
| -
|
| - // A queue of remote interface requests destined for the browser, which will
|
| - // remain pending until an incoming connection is accepted from the browser.
|
| - //
|
| - // TODO(rockot): Remove this once all child-to-browser interface connections
|
| - // are made via a Connector rather than directly through an InterfaceProvider.
|
| - std::queue<std::pair<mojo::String, mojo::ScopedMessagePipeHandle>>
|
| - pending_remote_interface_requests_;
|
| + // Called once a connection has been received from the browser process & the
|
| + // default binder (below) has been set up.
|
| + bool has_browser_connection_ = false;
|
|
|
| // Default binder callback used for the browser connection's
|
| // InterfaceRegistry.
|
| @@ -405,14 +357,7 @@ void MojoShellConnectionImpl::SetupInterfaceRequestProxies(
|
| base::Bind(&MojoShellConnectionImpl::GetInterface,
|
| weak_factory_.GetWeakPtr(), registry));
|
|
|
| - if (!provider)
|
| - return;
|
| -
|
| - // Forward all remote interface requests on |provider| to our IO-thread
|
| - // context. This will ensure they're forwarded to the provider on the
|
| - // incoming browser connection.
|
| - provider->Forward(base::Bind(&IOThreadContext::GetRemoteInterface,
|
| - context_));
|
| + // TODO(beng): remove provider parameter.
|
| }
|
|
|
| void MojoShellConnectionImpl::AddConnectionFilter(
|
|
|