| Index: content/browser/mojo/mojo_application_host.cc
|
| diff --git a/content/browser/mojo/mojo_application_host.cc b/content/browser/mojo/mojo_application_host.cc
|
| index 5bbe45a26311034ad3e802f52fc67adaddf71e51..be71f76716dbdafce890c02e4d3bcd39b02f8b06 100644
|
| --- a/content/browser/mojo/mojo_application_host.cc
|
| +++ b/content/browser/mojo/mojo_application_host.cc
|
| @@ -17,10 +17,16 @@ namespace {
|
| // http://crbug.com/2072603002
|
| class ApplicationSetupImpl : public mojom::ApplicationSetup {
|
| public:
|
| - ApplicationSetupImpl(ServiceRegistryImpl* service_registry,
|
| + ApplicationSetupImpl(shell::InterfaceRegistry* interface_registry,
|
| + shell::InterfaceProvider* remote_interfaces,
|
| mojo::InterfaceRequest<mojom::ApplicationSetup> request)
|
| : binding_(this, std::move(request)),
|
| - service_registry_(service_registry) {}
|
| + interface_registry_(interface_registry),
|
| + remote_interfaces_(remote_interfaces) {
|
| + shell::mojom::InterfaceProviderPtr remote;
|
| + pending_interfaces_request_ = GetProxy(&remote);
|
| + remote_interfaces_->Bind(std::move(remote));
|
| + }
|
|
|
| ~ApplicationSetupImpl() override {
|
| }
|
| @@ -28,31 +34,36 @@ class ApplicationSetupImpl : public mojom::ApplicationSetup {
|
| private:
|
| // mojom::ApplicationSetup implementation.
|
| void ExchangeInterfaceProviders(
|
| - shell::mojom::InterfaceProviderRequest services,
|
| - shell::mojom::InterfaceProviderPtr exposed_services) override {
|
| - service_registry_->Bind(std::move(services));
|
| - mojo::FuseInterface(service_registry_->TakeRemoteRequest(),
|
| - exposed_services.PassInterface());
|
| + shell::mojom::InterfaceProviderRequest request,
|
| + shell::mojom::InterfaceProviderPtr remote_interfaces) override {
|
| + mojo::FuseInterface(std::move(pending_interfaces_request_),
|
| + remote_interfaces.PassInterface());
|
| + interface_registry_->Bind(std::move(request));
|
| }
|
|
|
| mojo::Binding<mojom::ApplicationSetup> binding_;
|
| - ServiceRegistryImpl* service_registry_;
|
| + shell::InterfaceRegistry* interface_registry_;
|
| + shell::InterfaceProvider* remote_interfaces_;
|
| + shell::mojom::InterfaceProviderRequest pending_interfaces_request_;
|
| };
|
|
|
| } // namespace
|
|
|
| MojoApplicationHost::MojoApplicationHost(const std::string& child_token)
|
| - : token_(mojo::edk::GenerateRandomToken()) {
|
| + : token_(mojo::edk::GenerateRandomToken()),
|
| + interface_registry_(new shell::InterfaceRegistry(nullptr)),
|
| + remote_interfaces_(new shell::InterfaceProvider) {
|
| #if defined(OS_ANDROID)
|
| - service_registry_android_ =
|
| - ServiceRegistryAndroid::Create(&service_registry_);
|
| + service_registry_android_ = ServiceRegistryAndroid::Create(
|
| + interface_registry_.get(), remote_interfaces_.get());
|
| #endif
|
|
|
| mojo::ScopedMessagePipeHandle pipe =
|
| mojo::edk::CreateParentMessagePipe(token_, child_token);
|
| DCHECK(pipe.is_valid());
|
| application_setup_.reset(new ApplicationSetupImpl(
|
| - &service_registry_,
|
| + interface_registry_.get(),
|
| + remote_interfaces_.get(),
|
| mojo::MakeRequest<mojom::ApplicationSetup>(std::move(pipe))));
|
| }
|
|
|
|
|