| Index: services/service_manager/service_manager.cc
|
| diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
|
| index e3532537ce9f91ef19695cd21b4bedd84e1e4c47..2a0150437eb4d2e4575991f0e6dd78b22f2b58f0 100644
|
| --- a/services/service_manager/service_manager.cc
|
| +++ b/services/service_manager/service_manager.cc
|
| @@ -107,7 +107,6 @@ class ServiceManager::Instance
|
| : public mojom::Connector,
|
| public mojom::PIDReceiver,
|
| public Service,
|
| - public InterfaceFactory<mojom::ServiceManager>,
|
| public mojom::ServiceManager,
|
| public mojom::ServiceControl {
|
| public:
|
| @@ -279,17 +278,19 @@ class ServiceManager::Instance
|
| uint32_t id() const { return id_; }
|
|
|
| // Service:
|
| - bool OnConnect(const ServiceInfo& remote_info,
|
| - InterfaceRegistry* registry) override {
|
| + void OnBindInterface(const ServiceInfo& source_info,
|
| + const std::string& interface_name,
|
| + mojo::ScopedMessagePipeHandle interface_pipe) override {
|
| Instance* source =
|
| - service_manager_->GetExistingInstance(remote_info.identity);
|
| + service_manager_->GetExistingInstance(source_info.identity);
|
| DCHECK(source);
|
| - if (HasCapability(source->GetConnectionSpec(),
|
| + if (interface_name == mojom::ServiceManager::Name_ &&
|
| + HasCapability(source->GetConnectionSpec(),
|
| kCapability_ServiceManager)) {
|
| - registry->AddInterface<mojom::ServiceManager>(this);
|
| - return true;
|
| + mojom::ServiceManagerRequest request =
|
| + mojo::MakeRequest<mojom::ServiceManager>(std::move(interface_pipe));
|
| + service_manager_bindings_.AddBinding(this, std::move(request));
|
| }
|
| - return false;
|
| }
|
|
|
| private:
|
| @@ -376,12 +377,6 @@ class ServiceManager::Instance
|
| PIDAvailable(pid);
|
| }
|
|
|
| - // InterfaceFactory<mojom::ServiceManager>:
|
| - void Create(const Identity& remote_identity,
|
| - mojom::ServiceManagerRequest request) override {
|
| - service_manager_bindings_.AddBinding(this, std::move(request));
|
| - }
|
| -
|
| // mojom::ServiceManager implementation:
|
| void AddListener(mojom::ServiceManagerListenerPtr listener) override {
|
| // TODO(beng): this should only track the instances matching this user, and
|
| @@ -580,22 +575,24 @@ class ServiceManager::ServiceImpl : public Service {
|
| ~ServiceImpl() override {}
|
|
|
| // Service:
|
| - bool OnConnect(const ServiceInfo& remote_info,
|
| - InterfaceRegistry* registry) override {
|
| + void OnBindInterface(const ServiceInfo& source_info,
|
| + const std::string& interface_name,
|
| + mojo::ScopedMessagePipeHandle interface_pipe) override {
|
| // The only interface ServiceManager exposes is mojom::ServiceManager, and
|
| // access to this interface is brokered by a policy specific to each caller,
|
| // managed by the caller's instance. Here we look to see who's calling,
|
| // and forward to the caller's instance to continue.
|
| Instance* instance = nullptr;
|
| for (const auto& entry : service_manager_->identity_to_instance_) {
|
| - if (entry.first == remote_info.identity) {
|
| + if (entry.first == source_info.identity) {
|
| instance = entry.second;
|
| break;
|
| }
|
| }
|
|
|
| DCHECK(instance);
|
| - return instance->OnConnect(remote_info, registry);
|
| + instance->OnBindInterface(source_info, interface_name,
|
| + std::move(interface_pipe));
|
| }
|
|
|
| private:
|
|
|