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

Side by Side Diff: services/service_manager/tests/lifecycle/package.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 <algorithm> 5 #include <algorithm>
6 #include <memory> 6 #include <memory>
7 7
8 #include "base/bind.h" 8 #include "base/bind.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 "mojo/public/cpp/bindings/binding_set.h" 11 #include "mojo/public/cpp/bindings/binding_set.h"
12 #include "services/service_manager/public/c/main.h" 12 #include "services/service_manager/public/c/main.h"
13 #include "services/service_manager/public/cpp/binder_registry.h"
13 #include "services/service_manager/public/cpp/interface_factory.h" 14 #include "services/service_manager/public/cpp/interface_factory.h"
14 #include "services/service_manager/public/cpp/interface_registry.h"
15 #include "services/service_manager/public/cpp/service_context.h" 15 #include "services/service_manager/public/cpp/service_context.h"
16 #include "services/service_manager/public/cpp/service_runner.h" 16 #include "services/service_manager/public/cpp/service_runner.h"
17 #include "services/service_manager/public/interfaces/service_factory.mojom.h" 17 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
18 #include "services/service_manager/tests/lifecycle/app_client.h" 18 #include "services/service_manager/tests/lifecycle/app_client.h"
19 #include "services/service_manager/tests/lifecycle/lifecycle_unittest.mojom.h" 19 #include "services/service_manager/tests/lifecycle/lifecycle_unittest.mojom.h"
20 20
21 namespace { 21 namespace {
22 22
23 class PackagedApp 23 class PackagedApp
24 : public service_manager::Service, 24 : public service_manager::Service,
25 public service_manager::InterfaceFactory< 25 public service_manager::InterfaceFactory<
26 service_manager::test::mojom::LifecycleControl>, 26 service_manager::test::mojom::LifecycleControl>,
27 public service_manager::test::mojom::LifecycleControl { 27 public service_manager::test::mojom::LifecycleControl {
28 public: 28 public:
29 PackagedApp( 29 PackagedApp(
30 const base::Closure& service_manager_connection_closed_callback, 30 const base::Closure& service_manager_connection_closed_callback,
31 const base::Closure& destruct_callback) 31 const base::Closure& destruct_callback)
32 : service_manager_connection_closed_callback_( 32 : service_manager_connection_closed_callback_(
33 service_manager_connection_closed_callback), 33 service_manager_connection_closed_callback),
34 destruct_callback_(destruct_callback) { 34 destruct_callback_(destruct_callback) {
35 bindings_.set_connection_error_handler(base::Bind(&PackagedApp::BindingLost, 35 bindings_.set_connection_error_handler(base::Bind(&PackagedApp::BindingLost,
36 base::Unretained(this))); 36 base::Unretained(this)));
37 registry_.AddInterface<service_manager::test::mojom::LifecycleControl>(
38 this);
37 } 39 }
38 40
39 ~PackagedApp() override {} 41 ~PackagedApp() override {}
40 42
41 private: 43 private:
42 // service_manager::Service: 44 // service_manager::Service:
43 bool OnConnect(const service_manager::ServiceInfo& remote_info, 45 void OnBindInterface(const service_manager::ServiceInfo& source_info,
44 service_manager::InterfaceRegistry* registry) override { 46 const std::string& interface_name,
45 registry->AddInterface<service_manager::test::mojom::LifecycleControl>( 47 mojo::ScopedMessagePipeHandle interface_pipe) override {
46 this); 48 registry_.BindInterface(source_info.identity, interface_name,
47 return true; 49 std::move(interface_pipe));
48 } 50 }
49 51
50 // service_manager::InterfaceFactory<LifecycleControl> 52 // service_manager::InterfaceFactory<LifecycleControl>
51 void Create( 53 void Create(
52 const service_manager::Identity& remote_identity, 54 const service_manager::Identity& remote_identity,
53 service_manager::test::mojom::LifecycleControlRequest request) override { 55 service_manager::test::mojom::LifecycleControlRequest request) override {
54 bindings_.AddBinding(this, std::move(request)); 56 bindings_.AddBinding(this, std::move(request));
55 } 57 }
56 58
57 // LifecycleControl: 59 // LifecycleControl:
(...skipping 22 matching lines...) Expand all
80 // remain active. 82 // remain active.
81 } 83 }
82 84
83 void BindingLost() { 85 void BindingLost() {
84 if (bindings_.empty()) { 86 if (bindings_.empty()) {
85 // Deletes |this|. 87 // Deletes |this|.
86 destruct_callback_.Run(); 88 destruct_callback_.Run();
87 } 89 }
88 } 90 }
89 91
92 service_manager::BinderRegistry registry_;
90 mojo::BindingSet<service_manager::test::mojom::LifecycleControl> bindings_; 93 mojo::BindingSet<service_manager::test::mojom::LifecycleControl> bindings_;
91 94
92 // Run when this object's connection to the service manager is closed. 95 // Run when this object's connection to the service manager is closed.
93 base::Closure service_manager_connection_closed_callback_; 96 base::Closure service_manager_connection_closed_callback_;
94 // Run when this object is destructed. 97 // Run when this object is destructed.
95 base::Closure destruct_callback_; 98 base::Closure destruct_callback_;
96 99
97 DISALLOW_COPY_AND_ASSIGN(PackagedApp); 100 DISALLOW_COPY_AND_ASSIGN(PackagedApp);
98 }; 101 };
99 102
100 class Package : public service_manager::ForwardingService, 103 class Package : public service_manager::ForwardingService,
101 public service_manager::InterfaceFactory< 104 public service_manager::InterfaceFactory<
102 service_manager::mojom::ServiceFactory>, 105 service_manager::mojom::ServiceFactory>,
103 public service_manager::mojom::ServiceFactory { 106 public service_manager::mojom::ServiceFactory {
104 public: 107 public:
105 Package() : ForwardingService(&app_client_) {} 108 Package() : ForwardingService(&app_client_) {
109 registry_.AddInterface<service_manager::mojom::ServiceFactory>(this);
110 }
106 ~Package() override {} 111 ~Package() override {}
107 112
108 private: 113 private:
109 // ForwardingService: 114 // ForwardingService:
110 bool OnConnect(const service_manager::ServiceInfo& remote_info, 115 void OnBindInterface(const service_manager::ServiceInfo& source_info,
111 service_manager::InterfaceRegistry* registry) override { 116 const std::string& interface_name,
112 registry->AddInterface<service_manager::mojom::ServiceFactory>(this); 117 mojo::ScopedMessagePipeHandle interface_pipe) override {
113 return ForwardingService::OnConnect(remote_info, registry); 118 if (registry_.CanBindInterface(interface_name)) {
119 registry_.BindInterface(source_info.identity, interface_name,
120 std::move(interface_pipe));
121 } else {
122 ForwardingService::OnBindInterface(source_info, interface_name,
123 std::move(interface_pipe));
124 }
114 } 125 }
115 126
116 // service_manager::InterfaceFactory<service_manager::mojom::ServiceFactory>: 127 // service_manager::InterfaceFactory<service_manager::mojom::ServiceFactory>:
117 void Create(const service_manager::Identity& remote_identity, 128 void Create(const service_manager::Identity& remote_identity,
118 service_manager::mojom::ServiceFactoryRequest request) override { 129 service_manager::mojom::ServiceFactoryRequest request) override {
119 bindings_.AddBinding(this, std::move(request)); 130 bindings_.AddBinding(this, std::move(request));
120 } 131 }
121 132
122 // service_manager::mojom::ServiceFactory: 133 // service_manager::mojom::ServiceFactory:
123 void CreateService(service_manager::mojom::ServiceRequest request, 134 void CreateService(service_manager::mojom::ServiceRequest request,
(...skipping 25 matching lines...) Expand all
149 auto it = contexts_.find(id_it->second); 160 auto it = contexts_.find(id_it->second);
150 DCHECK(it != contexts_.end()); 161 DCHECK(it != contexts_.end());
151 contexts_.erase(it); 162 contexts_.erase(it);
152 id_to_context_.erase(id_it); 163 id_to_context_.erase(id_it);
153 if (contexts_.empty() && base::MessageLoop::current()->is_running()) 164 if (contexts_.empty() && base::MessageLoop::current()->is_running())
154 base::MessageLoop::current()->QuitWhenIdle(); 165 base::MessageLoop::current()->QuitWhenIdle();
155 } 166 }
156 167
157 service_manager::test::AppClient app_client_; 168 service_manager::test::AppClient app_client_;
158 int service_manager_connection_refcount_ = 0; 169 int service_manager_connection_refcount_ = 0;
170 service_manager::BinderRegistry registry_;
159 mojo::BindingSet<service_manager::mojom::ServiceFactory> bindings_; 171 mojo::BindingSet<service_manager::mojom::ServiceFactory> bindings_;
160 172
161 using ServiceContextMap = 173 using ServiceContextMap =
162 std::map<service_manager::ServiceContext*, 174 std::map<service_manager::ServiceContext*,
163 std::unique_ptr<service_manager::ServiceContext>>; 175 std::unique_ptr<service_manager::ServiceContext>>;
164 ServiceContextMap contexts_; 176 ServiceContextMap contexts_;
165 177
166 int next_id_ = 0; 178 int next_id_ = 0;
167 std::map<int, service_manager::ServiceContext*> id_to_context_; 179 std::map<int, service_manager::ServiceContext*> id_to_context_;
168 180
169 DISALLOW_COPY_AND_ASSIGN(Package); 181 DISALLOW_COPY_AND_ASSIGN(Package);
170 }; 182 };
171 183
172 } // namespace 184 } // namespace
173 185
174 MojoResult ServiceMain(MojoHandle service_request_handle) { 186 MojoResult ServiceMain(MojoHandle service_request_handle) {
175 service_manager::ServiceRunner runner(new Package); 187 service_manager::ServiceRunner runner(new Package);
176 return runner.Run(service_request_handle); 188 return runner.Run(service_request_handle);
177 } 189 }
OLDNEW
« no previous file with comments | « services/service_manager/tests/connect/connect_test_exe.cc ('k') | services/service_manager/tests/lifecycle/parent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698