Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: services/service_manager/tests/service_manager/embedder.cc

Issue 2795883002: Eliminate OnConnect usage (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 }
OLDNEW
« no previous file with comments | « services/service_manager/tests/lifecycle/parent.cc ('k') | services/service_manager/tests/service_manager/target.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698