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 "content/common/service_manager/service_manager_connection_impl.h" | 5 #include "content/common/service_manager/service_manager_connection_impl.h" |
6 | 6 |
7 #include <queue> | 7 #include <queue> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 // bindings. | 42 // bindings. |
43 class ServiceManagerConnectionImpl::IOThreadContext | 43 class ServiceManagerConnectionImpl::IOThreadContext |
44 : public base::RefCountedThreadSafe<IOThreadContext>, | 44 : public base::RefCountedThreadSafe<IOThreadContext>, |
45 public service_manager::Service, | 45 public service_manager::Service, |
46 public service_manager::InterfaceFactory< | 46 public service_manager::InterfaceFactory< |
47 service_manager::mojom::ServiceFactory>, | 47 service_manager::mojom::ServiceFactory>, |
48 public service_manager::mojom::ServiceFactory { | 48 public service_manager::mojom::ServiceFactory { |
49 public: | 49 public: |
50 using InitializeCallback = | 50 using InitializeCallback = |
51 base::Callback<void(const service_manager::Identity&)>; | 51 base::Callback<void(const service_manager::Identity&)>; |
| 52 using ServiceFactoryCallback = |
| 53 base::Callback<void(service_manager::mojom::ServiceRequest, |
| 54 const std::string&)>; |
52 | 55 |
53 IOThreadContext( | 56 IOThreadContext( |
54 service_manager::mojom::ServiceRequest service_request, | 57 service_manager::mojom::ServiceRequest service_request, |
55 scoped_refptr<base::SequencedTaskRunner> io_task_runner, | 58 scoped_refptr<base::SequencedTaskRunner> io_task_runner, |
56 std::unique_ptr<service_manager::Connector> io_thread_connector, | 59 std::unique_ptr<service_manager::Connector> io_thread_connector, |
57 service_manager::mojom::ConnectorRequest connector_request) | 60 service_manager::mojom::ConnectorRequest connector_request) |
58 : pending_service_request_(std::move(service_request)), | 61 : pending_service_request_(std::move(service_request)), |
59 io_task_runner_(io_task_runner), | 62 io_task_runner_(io_task_runner), |
60 io_thread_connector_(std::move(io_thread_connector)), | 63 io_thread_connector_(std::move(io_thread_connector)), |
61 pending_connector_request_(std::move(connector_request)), | 64 pending_connector_request_(std::move(connector_request)), |
62 weak_factory_(this) { | 65 weak_factory_(this) { |
63 // This will be reattached by any of the IO thread functions on first call. | 66 // This will be reattached by any of the IO thread functions on first call. |
64 io_thread_checker_.DetachFromThread(); | 67 io_thread_checker_.DetachFromThread(); |
65 } | 68 } |
66 | 69 |
67 // Safe to call from any thread. | 70 // Safe to call from any thread. |
68 void Start( | 71 void Start( |
69 const InitializeCallback& initialize_callback, | 72 const InitializeCallback& initialize_callback, |
70 const ServiceManagerConnection::OnConnectHandler& on_connect_callback, | 73 const ServiceManagerConnection::OnConnectHandler& on_connect_callback, |
| 74 const ServiceFactoryCallback& create_service_callback, |
71 const base::Closure& stop_callback) { | 75 const base::Closure& stop_callback) { |
72 DCHECK(!started_); | 76 DCHECK(!started_); |
73 | 77 |
74 started_ = true; | 78 started_ = true; |
75 callback_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 79 callback_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
76 initialize_handler_ = initialize_callback; | 80 initialize_handler_ = initialize_callback; |
77 on_connect_callback_ = on_connect_callback; | 81 on_connect_callback_ = on_connect_callback; |
| 82 create_service_callback_ = create_service_callback; |
78 stop_callback_ = stop_callback; | 83 stop_callback_ = stop_callback; |
79 io_task_runner_->PostTask( | 84 io_task_runner_->PostTask( |
80 FROM_HERE, base::Bind(&IOThreadContext::StartOnIOThread, this)); | 85 FROM_HERE, base::Bind(&IOThreadContext::StartOnIOThread, this)); |
81 } | 86 } |
82 | 87 |
83 // Safe to call from whichever thread called Start() (or may have called | 88 // Safe to call from whichever thread called Start() (or may have called |
84 // Start()). Must be called before IO thread shutdown. | 89 // Start()). Must be called before IO thread shutdown. |
85 void ShutDown() { | 90 void ShutDown() { |
86 if (!started_) | 91 if (!started_) |
87 return; | 92 return; |
(...skipping 26 matching lines...) Expand all Loading... |
114 | 119 |
115 // Safe to call any time before Start() is called. | 120 // Safe to call any time before Start() is called. |
116 void SetDefaultBinderForBrowserConnection( | 121 void SetDefaultBinderForBrowserConnection( |
117 const service_manager::InterfaceRegistry::Binder& binder) { | 122 const service_manager::InterfaceRegistry::Binder& binder) { |
118 DCHECK(!started_); | 123 DCHECK(!started_); |
119 default_browser_binder_ = base::Bind( | 124 default_browser_binder_ = base::Bind( |
120 &IOThreadContext::CallBinderOnTaskRunner, | 125 &IOThreadContext::CallBinderOnTaskRunner, |
121 base::ThreadTaskRunnerHandle::Get(), binder); | 126 base::ThreadTaskRunnerHandle::Get(), binder); |
122 } | 127 } |
123 | 128 |
124 void AddEmbeddedService(const std::string& name, const ServiceInfo& info) { | |
125 io_task_runner_->PostTask( | |
126 FROM_HERE, base::Bind(&ServiceManagerConnectionImpl::IOThreadContext:: | |
127 AddEmbeddedServiceRequestHandlerOnIoThread, | |
128 this, name, info)); | |
129 } | |
130 | |
131 void AddServiceRequestHandler(const std::string& name, | |
132 const ServiceRequestHandler& handler) { | |
133 io_task_runner_->PostTask( | |
134 FROM_HERE, base::Bind(&ServiceManagerConnectionImpl::IOThreadContext:: | |
135 AddServiceRequestHandlerOnIoThread, | |
136 this, name, handler)); | |
137 } | |
138 | |
139 private: | 129 private: |
140 friend class base::RefCountedThreadSafe<IOThreadContext>; | 130 friend class base::RefCountedThreadSafe<IOThreadContext>; |
141 | 131 |
142 class MessageLoopObserver : public base::MessageLoop::DestructionObserver { | 132 class MessageLoopObserver : public base::MessageLoop::DestructionObserver { |
143 public: | 133 public: |
144 explicit MessageLoopObserver(base::WeakPtr<IOThreadContext> context) | 134 explicit MessageLoopObserver(base::WeakPtr<IOThreadContext> context) |
145 : context_(context) { | 135 : context_(context) { |
146 base::MessageLoop::current()->AddDestructionObserver(this); | 136 base::MessageLoop::current()->AddDestructionObserver(this); |
147 } | 137 } |
148 | 138 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 196 |
207 // Resetting the ServiceContext below may otherwise release the last | 197 // Resetting the ServiceContext below may otherwise release the last |
208 // reference to this IOThreadContext. We keep it alive until the stack | 198 // reference to this IOThreadContext. We keep it alive until the stack |
209 // unwinds. | 199 // unwinds. |
210 scoped_refptr<IOThreadContext> keepalive(this); | 200 scoped_refptr<IOThreadContext> keepalive(this); |
211 | 201 |
212 factory_bindings_.CloseAllBindings(); | 202 factory_bindings_.CloseAllBindings(); |
213 service_context_.reset(); | 203 service_context_.reset(); |
214 | 204 |
215 ClearConnectionFiltersOnIOThread(); | 205 ClearConnectionFiltersOnIOThread(); |
216 | |
217 request_handlers_.clear(); | |
218 embedded_services_.clear(); | |
219 } | 206 } |
220 | 207 |
221 void ClearConnectionFiltersOnIOThread() { | 208 void ClearConnectionFiltersOnIOThread() { |
222 base::AutoLock lock(lock_); | 209 base::AutoLock lock(lock_); |
223 connection_filters_.clear(); | 210 connection_filters_.clear(); |
224 } | 211 } |
225 | 212 |
226 void RemoveConnectionFilterOnIOThread(int filter_id) { | 213 void RemoveConnectionFilterOnIOThread(int filter_id) { |
227 base::AutoLock lock(lock_); | 214 base::AutoLock lock(lock_); |
228 auto it = connection_filters_.find(filter_id); | 215 auto it = connection_filters_.find(filter_id); |
229 // During shutdown the connection filters might have been cleared already | 216 // During shutdown the connection filters might have been cleared already |
230 // by ClearConnectionFiltersOnIOThread() above, so this id might not exist. | 217 // by ClearConnectionFiltersOnIOThread() above, so this id might not exist. |
231 if (it != connection_filters_.end()) | 218 if (it != connection_filters_.end()) |
232 connection_filters_.erase(it); | 219 connection_filters_.erase(it); |
233 } | 220 } |
234 | 221 |
235 void OnBrowserConnectionLost() { | 222 void OnBrowserConnectionLost() { |
236 DCHECK(io_thread_checker_.CalledOnValidThread()); | 223 DCHECK(io_thread_checker_.CalledOnValidThread()); |
237 has_browser_connection_ = false; | 224 has_browser_connection_ = false; |
238 } | 225 } |
239 | 226 |
240 void AddEmbeddedServiceRequestHandlerOnIoThread(const std::string& name, | |
241 const ServiceInfo& info) { | |
242 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
243 std::unique_ptr<EmbeddedServiceRunner> service( | |
244 new EmbeddedServiceRunner(name, info)); | |
245 AddServiceRequestHandler( | |
246 name, base::Bind(&EmbeddedServiceRunner::BindServiceRequest, | |
247 base::Unretained(service.get()))); | |
248 auto result = | |
249 embedded_services_.insert(std::make_pair(name, std::move(service))); | |
250 DCHECK(result.second); | |
251 } | |
252 | |
253 void AddServiceRequestHandlerOnIoThread( | |
254 const std::string& name, | |
255 const ServiceRequestHandler& handler) { | |
256 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
257 auto result = request_handlers_.insert(std::make_pair(name, handler)); | |
258 DCHECK(result.second); | |
259 } | |
260 | |
261 ///////////////////////////////////////////////////////////////////////////// | 227 ///////////////////////////////////////////////////////////////////////////// |
262 // service_manager::Service implementation | 228 // service_manager::Service implementation |
263 | 229 |
264 void OnStart() override { | 230 void OnStart() override { |
265 DCHECK(io_thread_checker_.CalledOnValidThread()); | 231 DCHECK(io_thread_checker_.CalledOnValidThread()); |
266 DCHECK(!initialize_handler_.is_null()); | 232 DCHECK(!initialize_handler_.is_null()); |
267 local_info_ = context()->local_info(); | 233 local_info_ = context()->local_info(); |
268 | 234 |
269 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_); | 235 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_); |
270 callback_task_runner_->PostTask(FROM_HERE, | 236 callback_task_runner_->PostTask(FROM_HERE, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 DCHECK(io_thread_checker_.CalledOnValidThread()); | 288 DCHECK(io_thread_checker_.CalledOnValidThread()); |
323 factory_bindings_.AddBinding(this, std::move(request)); | 289 factory_bindings_.AddBinding(this, std::move(request)); |
324 } | 290 } |
325 | 291 |
326 ///////////////////////////////////////////////////////////////////////////// | 292 ///////////////////////////////////////////////////////////////////////////// |
327 // service_manager::mojom::ServiceFactory implementation | 293 // service_manager::mojom::ServiceFactory implementation |
328 | 294 |
329 void CreateService(service_manager::mojom::ServiceRequest request, | 295 void CreateService(service_manager::mojom::ServiceRequest request, |
330 const std::string& name) override { | 296 const std::string& name) override { |
331 DCHECK(io_thread_checker_.CalledOnValidThread()); | 297 DCHECK(io_thread_checker_.CalledOnValidThread()); |
332 auto it = request_handlers_.find(name); | 298 callback_task_runner_->PostTask( |
333 DCHECK(it != request_handlers_.end()) | 299 FROM_HERE, |
334 << "Can't create service " << name << ". No handler found."; | 300 base::Bind(create_service_callback_, base::Passed(&request), name)); |
335 it->second.Run(std::move(request)); | |
336 } | 301 } |
337 | 302 |
338 static void CallBinderOnTaskRunner( | 303 static void CallBinderOnTaskRunner( |
339 scoped_refptr<base::SequencedTaskRunner> task_runner, | 304 scoped_refptr<base::SequencedTaskRunner> task_runner, |
340 const service_manager::InterfaceRegistry::Binder& binder, | 305 const service_manager::InterfaceRegistry::Binder& binder, |
341 const std::string& interface_name, | 306 const std::string& interface_name, |
342 mojo::ScopedMessagePipeHandle request_handle) { | 307 mojo::ScopedMessagePipeHandle request_handle) { |
343 task_runner->PostTask(FROM_HERE, base::Bind(binder, interface_name, | 308 task_runner->PostTask(FROM_HERE, base::Bind(binder, interface_name, |
344 base::Passed(&request_handle))); | 309 base::Passed(&request_handle))); |
345 } | 310 } |
(...skipping 11 matching lines...) Expand all Loading... |
357 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to | 322 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to |
358 // Start(). | 323 // Start(). |
359 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; | 324 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; |
360 | 325 |
361 // Callback to run once Service::OnStart is invoked. | 326 // Callback to run once Service::OnStart is invoked. |
362 InitializeCallback initialize_handler_; | 327 InitializeCallback initialize_handler_; |
363 | 328 |
364 // Callback to run when a connection request is received. | 329 // Callback to run when a connection request is received. |
365 ServiceManagerConnection::OnConnectHandler on_connect_callback_; | 330 ServiceManagerConnection::OnConnectHandler on_connect_callback_; |
366 | 331 |
| 332 // Callback to run when a new Service request is received. |
| 333 ServiceFactoryCallback create_service_callback_; |
| 334 |
367 // Callback to run if the service is stopped by the service manager. | 335 // Callback to run if the service is stopped by the service manager. |
368 base::Closure stop_callback_; | 336 base::Closure stop_callback_; |
369 | 337 |
370 // Called once a connection has been received from the browser process & the | 338 // Called once a connection has been received from the browser process & the |
371 // default binder (below) has been set up. | 339 // default binder (below) has been set up. |
372 bool has_browser_connection_ = false; | 340 bool has_browser_connection_ = false; |
373 | 341 |
374 service_manager::ServiceInfo local_info_; | 342 service_manager::ServiceInfo local_info_; |
375 | 343 |
376 // Default binder callback used for the browser connection's | 344 // Default binder callback used for the browser connection's |
377 // InterfaceRegistry. | 345 // InterfaceRegistry. |
378 // | 346 // |
379 // TODO(rockot): Remove this once all interfaces exposed to the browser are | 347 // TODO(rockot): Remove this once all interfaces exposed to the browser are |
380 // exposed via a ConnectionFilter. | 348 // exposed via a ConnectionFilter. |
381 service_manager::InterfaceRegistry::Binder default_browser_binder_; | 349 service_manager::InterfaceRegistry::Binder default_browser_binder_; |
382 | 350 |
383 std::unique_ptr<service_manager::ServiceContext> service_context_; | 351 std::unique_ptr<service_manager::ServiceContext> service_context_; |
384 mojo::BindingSet<service_manager::mojom::ServiceFactory> factory_bindings_; | 352 mojo::BindingSet<service_manager::mojom::ServiceFactory> factory_bindings_; |
385 int next_filter_id_ = kInvalidConnectionFilterId; | 353 int next_filter_id_ = kInvalidConnectionFilterId; |
386 | 354 |
387 // Not owned. | 355 // Not owned. |
388 MessageLoopObserver* message_loop_observer_ = nullptr; | 356 MessageLoopObserver* message_loop_observer_ = nullptr; |
389 | 357 |
390 // Guards |connection_filters_|. | 358 // Guards |connection_filters_|. |
391 base::Lock lock_; | 359 base::Lock lock_; |
392 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_; | 360 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_; |
393 | 361 |
394 std::unordered_map<std::string, std::unique_ptr<EmbeddedServiceRunner>> | |
395 embedded_services_; | |
396 std::unordered_map<std::string, ServiceRequestHandler> request_handlers_; | |
397 | |
398 base::WeakPtrFactory<IOThreadContext> weak_factory_; | 362 base::WeakPtrFactory<IOThreadContext> weak_factory_; |
399 | 363 |
400 DISALLOW_COPY_AND_ASSIGN(IOThreadContext); | 364 DISALLOW_COPY_AND_ASSIGN(IOThreadContext); |
401 }; | 365 }; |
402 | 366 |
403 //////////////////////////////////////////////////////////////////////////////// | 367 //////////////////////////////////////////////////////////////////////////////// |
404 // ServiceManagerConnection, public: | 368 // ServiceManagerConnection, public: |
405 | 369 |
406 // static | 370 // static |
407 void ServiceManagerConnection::SetForProcess( | 371 void ServiceManagerConnection::SetForProcess( |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 | 426 |
463 //////////////////////////////////////////////////////////////////////////////// | 427 //////////////////////////////////////////////////////////////////////////////// |
464 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation: | 428 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation: |
465 | 429 |
466 void ServiceManagerConnectionImpl::Start() { | 430 void ServiceManagerConnectionImpl::Start() { |
467 context_->Start( | 431 context_->Start( |
468 base::Bind(&ServiceManagerConnectionImpl::OnContextInitialized, | 432 base::Bind(&ServiceManagerConnectionImpl::OnContextInitialized, |
469 weak_factory_.GetWeakPtr()), | 433 weak_factory_.GetWeakPtr()), |
470 base::Bind(&ServiceManagerConnectionImpl::OnConnect, | 434 base::Bind(&ServiceManagerConnectionImpl::OnConnect, |
471 weak_factory_.GetWeakPtr()), | 435 weak_factory_.GetWeakPtr()), |
| 436 base::Bind(&ServiceManagerConnectionImpl::CreateService, |
| 437 weak_factory_.GetWeakPtr()), |
472 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost, | 438 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost, |
473 weak_factory_.GetWeakPtr())); | 439 weak_factory_.GetWeakPtr())); |
474 } | 440 } |
475 | 441 |
476 service_manager::Connector* ServiceManagerConnectionImpl::GetConnector() { | 442 service_manager::Connector* ServiceManagerConnectionImpl::GetConnector() { |
477 return connector_.get(); | 443 return connector_.get(); |
478 } | 444 } |
479 | 445 |
480 const service_manager::Identity& ServiceManagerConnectionImpl::GetIdentity() | 446 const service_manager::Identity& ServiceManagerConnectionImpl::GetIdentity() |
481 const { | 447 const { |
(...skipping 21 matching lines...) Expand all Loading... |
503 std::unique_ptr<ConnectionFilter> filter) { | 469 std::unique_ptr<ConnectionFilter> filter) { |
504 return context_->AddConnectionFilter(std::move(filter)); | 470 return context_->AddConnectionFilter(std::move(filter)); |
505 } | 471 } |
506 | 472 |
507 void ServiceManagerConnectionImpl::RemoveConnectionFilter(int filter_id) { | 473 void ServiceManagerConnectionImpl::RemoveConnectionFilter(int filter_id) { |
508 context_->RemoveConnectionFilter(filter_id); | 474 context_->RemoveConnectionFilter(filter_id); |
509 } | 475 } |
510 | 476 |
511 void ServiceManagerConnectionImpl::AddEmbeddedService(const std::string& name, | 477 void ServiceManagerConnectionImpl::AddEmbeddedService(const std::string& name, |
512 const ServiceInfo& info) { | 478 const ServiceInfo& info) { |
513 context_->AddEmbeddedService(name, info); | 479 std::unique_ptr<EmbeddedServiceRunner> service( |
| 480 new EmbeddedServiceRunner(name, info)); |
| 481 AddServiceRequestHandler( |
| 482 name, base::Bind(&EmbeddedServiceRunner::BindServiceRequest, |
| 483 base::Unretained(service.get()))); |
| 484 auto result = |
| 485 embedded_services_.insert(std::make_pair(name, std::move(service))); |
| 486 DCHECK(result.second); |
514 } | 487 } |
515 | 488 |
516 void ServiceManagerConnectionImpl::AddServiceRequestHandler( | 489 void ServiceManagerConnectionImpl::AddServiceRequestHandler( |
517 const std::string& name, | 490 const std::string& name, |
518 const ServiceRequestHandler& handler) { | 491 const ServiceRequestHandler& handler) { |
519 context_->AddServiceRequestHandler(name, handler); | 492 auto result = request_handlers_.insert(std::make_pair(name, handler)); |
| 493 DCHECK(result.second); |
520 } | 494 } |
521 | 495 |
522 int ServiceManagerConnectionImpl::AddOnConnectHandler( | 496 int ServiceManagerConnectionImpl::AddOnConnectHandler( |
523 const OnConnectHandler& handler) { | 497 const OnConnectHandler& handler) { |
524 int id = ++next_on_connect_handler_id_; | 498 int id = ++next_on_connect_handler_id_; |
525 on_connect_handlers_[id] = handler; | 499 on_connect_handlers_[id] = handler; |
526 return id; | 500 return id; |
527 } | 501 } |
528 | 502 |
529 void ServiceManagerConnectionImpl::RemoveOnConnectHandler(int id) { | 503 void ServiceManagerConnectionImpl::RemoveOnConnectHandler(int id) { |
530 auto it = on_connect_handlers_.find(id); | 504 auto it = on_connect_handlers_.find(id); |
531 DCHECK(it != on_connect_handlers_.end()); | 505 DCHECK(it != on_connect_handlers_.end()); |
532 on_connect_handlers_.erase(it); | 506 on_connect_handlers_.erase(it); |
533 } | 507 } |
534 | 508 |
| 509 void ServiceManagerConnectionImpl::CreateService( |
| 510 service_manager::mojom::ServiceRequest request, |
| 511 const std::string& name) { |
| 512 auto it = request_handlers_.find(name); |
| 513 DCHECK(it != request_handlers_.end()) |
| 514 << "Can't create service " << name << ". No handler found."; |
| 515 if (it != request_handlers_.end()) |
| 516 it->second.Run(std::move(request)); |
| 517 } |
| 518 |
535 void ServiceManagerConnectionImpl::OnContextInitialized( | 519 void ServiceManagerConnectionImpl::OnContextInitialized( |
536 const service_manager::Identity& identity) { | 520 const service_manager::Identity& identity) { |
537 identity_ = identity; | 521 identity_ = identity; |
538 } | 522 } |
539 | 523 |
540 void ServiceManagerConnectionImpl::OnConnectionLost() { | 524 void ServiceManagerConnectionImpl::OnConnectionLost() { |
541 if (!connection_lost_handler_.is_null()) | 525 if (!connection_lost_handler_.is_null()) |
542 connection_lost_handler_.Run(); | 526 connection_lost_handler_.Run(); |
543 } | 527 } |
544 | 528 |
545 void ServiceManagerConnectionImpl::OnConnect( | 529 void ServiceManagerConnectionImpl::OnConnect( |
546 const service_manager::ServiceInfo& local_info, | 530 const service_manager::ServiceInfo& local_info, |
547 const service_manager::ServiceInfo& remote_info) { | 531 const service_manager::ServiceInfo& remote_info) { |
548 local_info_ = local_info; | 532 local_info_ = local_info; |
549 for (auto& handler : on_connect_handlers_) | 533 for (auto& handler : on_connect_handlers_) |
550 handler.second.Run(local_info, remote_info); | 534 handler.second.Run(local_info, remote_info); |
551 } | 535 } |
552 | 536 |
553 void ServiceManagerConnectionImpl::GetInterface( | 537 void ServiceManagerConnectionImpl::GetInterface( |
554 service_manager::mojom::InterfaceProvider* provider, | 538 service_manager::mojom::InterfaceProvider* provider, |
555 const std::string& interface_name, | 539 const std::string& interface_name, |
556 mojo::ScopedMessagePipeHandle request_handle) { | 540 mojo::ScopedMessagePipeHandle request_handle) { |
557 provider->GetInterface(interface_name, std::move(request_handle)); | 541 provider->GetInterface(interface_name, std::move(request_handle)); |
558 } | 542 } |
559 | 543 |
560 } // namespace content | 544 } // namespace content |
OLD | NEW |