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