| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <memory> | 5 #include <memory> |
| 6 | 6 |
| 7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "mojo/public/cpp/bindings/binding_set.h" | 12 #include "mojo/public/cpp/bindings/binding_set.h" |
| 13 #include "services/service_manager/public/c/main.h" | 13 #include "services/service_manager/public/c/main.h" |
| 14 #include "services/service_manager/public/cpp/binder_registry.h" |
| 14 #include "services/service_manager/public/cpp/interface_factory.h" | 15 #include "services/service_manager/public/cpp/interface_factory.h" |
| 15 #include "services/service_manager/public/cpp/interface_registry.h" | |
| 16 #include "services/service_manager/public/cpp/service.h" | 16 #include "services/service_manager/public/cpp/service.h" |
| 17 #include "services/service_manager/public/cpp/service_context.h" | 17 #include "services/service_manager/public/cpp/service_context.h" |
| 18 #include "services/service_manager/public/cpp/service_runner.h" | 18 #include "services/service_manager/public/cpp/service_runner.h" |
| 19 #include "services/service_manager/public/interfaces/service_factory.mojom.h" | 19 #include "services/service_manager/public/interfaces/service_factory.mojom.h" |
| 20 #include "services/service_manager/public/interfaces/service_manager.mojom.h" | 20 #include "services/service_manager/public/interfaces/service_manager.mojom.h" |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 class Singleton : public service_manager::Service { | 24 class Singleton : public service_manager::Service { |
| 25 public: | 25 public: |
| 26 explicit Singleton() {} | 26 explicit Singleton() {} |
| 27 ~Singleton() override {} | 27 ~Singleton() override {} |
| 28 | 28 |
| 29 private: | 29 private: |
| 30 // service_manager::Service: | 30 // service_manager::Service: |
| 31 bool OnConnect(const service_manager::ServiceInfo& remote_info, | 31 void OnBindInterface(const service_manager::ServiceInfo& source_info, |
| 32 service_manager::InterfaceRegistry* registry) override { | 32 const std::string& interface_name, |
| 33 return false; | 33 mojo::ScopedMessagePipeHandle interface_pipe) override {} |
| 34 } | |
| 35 | 34 |
| 36 DISALLOW_COPY_AND_ASSIGN(Singleton); | 35 DISALLOW_COPY_AND_ASSIGN(Singleton); |
| 37 }; | 36 }; |
| 38 | 37 |
| 39 class Embedder : public service_manager::Service, | 38 class Embedder : public service_manager::Service, |
| 40 public service_manager::InterfaceFactory< | 39 public service_manager::InterfaceFactory< |
| 41 service_manager::mojom::ServiceFactory>, | 40 service_manager::mojom::ServiceFactory>, |
| 42 public service_manager::mojom::ServiceFactory { | 41 public service_manager::mojom::ServiceFactory { |
| 43 public: | 42 public: |
| 44 Embedder() {} | 43 Embedder() { |
| 44 registry_.AddInterface<service_manager::mojom::ServiceFactory>(this); |
| 45 } |
| 45 ~Embedder() override {} | 46 ~Embedder() override {} |
| 46 | 47 |
| 47 private: | 48 private: |
| 48 // service_manager::Service: | 49 // service_manager::Service: |
| 49 bool OnConnect(const service_manager::ServiceInfo& remote_info, | 50 void OnBindInterface(const service_manager::ServiceInfo& source_info, |
| 50 service_manager::InterfaceRegistry* registry) override { | 51 const std::string& interface_name, |
| 51 registry->AddInterface<service_manager::mojom::ServiceFactory>(this); | 52 mojo::ScopedMessagePipeHandle interface_pipe) override { |
| 52 return true; | 53 registry_.BindInterface(source_info.identity, interface_name, |
| 54 std::move(interface_pipe)); |
| 53 } | 55 } |
| 54 | 56 |
| 55 bool OnServiceManagerConnectionLost() override { | 57 bool OnServiceManagerConnectionLost() override { |
| 56 base::MessageLoop::current()->QuitWhenIdle(); | 58 base::MessageLoop::current()->QuitWhenIdle(); |
| 57 return true; | 59 return true; |
| 58 } | 60 } |
| 59 | 61 |
| 60 // service_manager::InterfaceFactory<ServiceFactory>: | 62 // service_manager::InterfaceFactory<ServiceFactory>: |
| 61 void Create(const service_manager::Identity& remote_identity, | 63 void Create(const service_manager::Identity& remote_identity, |
| 62 service_manager::mojom::ServiceFactoryRequest request) override { | 64 service_manager::mojom::ServiceFactoryRequest request) override { |
| 63 service_factory_bindings_.AddBinding(this, std::move(request)); | 65 service_factory_bindings_.AddBinding(this, std::move(request)); |
| 64 } | 66 } |
| 65 | 67 |
| 66 // mojom::ServiceFactory: | 68 // mojom::ServiceFactory: |
| 67 void CreateService(service_manager::mojom::ServiceRequest request, | 69 void CreateService(service_manager::mojom::ServiceRequest request, |
| 68 const std::string& name) override { | 70 const std::string& name) override { |
| 69 if (name == "service_manager_unittest_singleton") { | 71 if (name == "service_manager_unittest_singleton") { |
| 70 context_.reset(new service_manager::ServiceContext( | 72 context_.reset(new service_manager::ServiceContext( |
| 71 base::MakeUnique<Singleton>(), std::move(request))); | 73 base::MakeUnique<Singleton>(), std::move(request))); |
| 72 } | 74 } |
| 73 } | 75 } |
| 74 | 76 |
| 75 std::unique_ptr<service_manager::ServiceContext> context_; | 77 std::unique_ptr<service_manager::ServiceContext> context_; |
| 78 service_manager::BinderRegistry registry_; |
| 76 mojo::BindingSet<service_manager::mojom::ServiceFactory> | 79 mojo::BindingSet<service_manager::mojom::ServiceFactory> |
| 77 service_factory_bindings_; | 80 service_factory_bindings_; |
| 78 | 81 |
| 79 DISALLOW_COPY_AND_ASSIGN(Embedder); | 82 DISALLOW_COPY_AND_ASSIGN(Embedder); |
| 80 }; | 83 }; |
| 81 | 84 |
| 82 } // namespace | 85 } // namespace |
| 83 | 86 |
| 84 MojoResult ServiceMain(MojoHandle service_request_handle) { | 87 MojoResult ServiceMain(MojoHandle service_request_handle) { |
| 85 service_manager::ServiceRunner runner(new Embedder); | 88 service_manager::ServiceRunner runner(new Embedder); |
| 86 return runner.Run(service_request_handle); | 89 return runner.Run(service_request_handle); |
| 87 } | 90 } |
| OLD | NEW |