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

Side by Side Diff: content/common/service_manager/service_manager_connection_impl.cc

Issue 2850743004: Replace ServiceInfo with BindSourceInfo. (Closed)
Patch Set: . Created 3 years, 7 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 "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 30 matching lines...) Expand all
41 // A ref-counted object which owns the IO thread state of a 41 // A ref-counted object which owns the IO thread state of a
42 // ServiceManagerConnectionImpl. This includes Service and ServiceFactory 42 // ServiceManagerConnectionImpl. This includes Service and ServiceFactory
43 // bindings. 43 // bindings.
44 class ServiceManagerConnectionImpl::IOThreadContext 44 class ServiceManagerConnectionImpl::IOThreadContext
45 : public base::RefCountedThreadSafe<IOThreadContext>, 45 : public base::RefCountedThreadSafe<IOThreadContext>,
46 public service_manager::Service, 46 public service_manager::Service,
47 public service_manager::mojom::ServiceFactory, 47 public service_manager::mojom::ServiceFactory,
48 public mojom::Child { 48 public mojom::Child {
49 public: 49 public:
50 using InitializeCallback = 50 using InitializeCallback =
51 base::Callback<void(const service_manager::ServiceInfo&)>; 51 base::Callback<void(const service_manager::BindSourceInfo&)>;
52 52
53 IOThreadContext( 53 IOThreadContext(
54 service_manager::mojom::ServiceRequest service_request, 54 service_manager::mojom::ServiceRequest service_request,
55 scoped_refptr<base::SequencedTaskRunner> io_task_runner, 55 scoped_refptr<base::SequencedTaskRunner> io_task_runner,
56 std::unique_ptr<service_manager::Connector> io_thread_connector, 56 std::unique_ptr<service_manager::Connector> io_thread_connector,
57 service_manager::mojom::ConnectorRequest connector_request) 57 service_manager::mojom::ConnectorRequest connector_request)
58 : pending_service_request_(std::move(service_request)), 58 : pending_service_request_(std::move(service_request)),
59 io_task_runner_(io_task_runner), 59 io_task_runner_(io_task_runner),
60 io_thread_connector_(std::move(io_thread_connector)), 60 io_thread_connector_(std::move(io_thread_connector)),
61 pending_connector_request_(std::move(connector_request)), 61 pending_connector_request_(std::move(connector_request)),
62 child_binding_(this), 62 child_binding_(this),
63 weak_factory_(this) { 63 weak_factory_(this) {
64 // This will be reattached by any of the IO thread functions on first call. 64 // This will be reattached by any of the IO thread functions on first call.
65 io_thread_checker_.DetachFromThread(); 65 io_thread_checker_.DetachFromThread();
66 } 66 }
67 67
68 // Safe to call from any thread. 68 // Safe to call from any thread.
69 void Start(const InitializeCallback& local_info_available_callback, 69 void Start(const InitializeCallback& browser_info_available_callback,
70 const InitializeCallback& browser_info_available_callback,
71 const base::Closure& stop_callback) { 70 const base::Closure& stop_callback) {
72 DCHECK(!started_); 71 DCHECK(!started_);
73 72
74 started_ = true; 73 started_ = true;
75 callback_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 74 callback_task_runner_ = base::ThreadTaskRunnerHandle::Get();
76 local_info_available_callback_ = local_info_available_callback;
77 browser_info_available_callback_ = browser_info_available_callback; 75 browser_info_available_callback_ = browser_info_available_callback;
78 stop_callback_ = stop_callback; 76 stop_callback_ = stop_callback;
79 io_task_runner_->PostTask( 77 io_task_runner_->PostTask(
80 FROM_HERE, base::Bind(&IOThreadContext::StartOnIOThread, this)); 78 FROM_HERE, base::Bind(&IOThreadContext::StartOnIOThread, this));
81 } 79 }
82 80
83 // Safe to call from whichever thread called Start() (or may have called 81 // Safe to call from whichever thread called Start() (or may have called
84 // Start()). Must be called before IO thread shutdown. 82 // Start()). Must be called before IO thread shutdown.
85 void ShutDown() { 83 void ShutDown() {
86 if (!started_) 84 if (!started_)
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 const std::string& name, 239 const std::string& name,
242 const ServiceRequestHandler& handler) { 240 const ServiceRequestHandler& handler) {
243 DCHECK(io_thread_checker_.CalledOnValidThread()); 241 DCHECK(io_thread_checker_.CalledOnValidThread());
244 auto result = request_handlers_.insert(std::make_pair(name, handler)); 242 auto result = request_handlers_.insert(std::make_pair(name, handler));
245 DCHECK(result.second); 243 DCHECK(result.second);
246 } 244 }
247 245
248 ///////////////////////////////////////////////////////////////////////////// 246 /////////////////////////////////////////////////////////////////////////////
249 // service_manager::Service implementation 247 // service_manager::Service implementation
250 248
251 void OnStart() override { 249 void OnBindInterface(const service_manager::BindSourceInfo& source_info,
252 DCHECK(io_thread_checker_.CalledOnValidThread());
253 DCHECK(!local_info_available_callback_.is_null());
254 local_info_ = context()->local_info();
255
256 InitializeCallback handler =
257 base::ResetAndReturn(&local_info_available_callback_);
258 callback_task_runner_->PostTask(FROM_HERE,
259 base::Bind(handler, local_info_));
260 }
261
262 void OnBindInterface(const service_manager::ServiceInfo& source_info,
263 const std::string& interface_name, 250 const std::string& interface_name,
264 mojo::ScopedMessagePipeHandle interface_pipe) override { 251 mojo::ScopedMessagePipeHandle interface_pipe) override {
265 DCHECK(io_thread_checker_.CalledOnValidThread()); 252 DCHECK(io_thread_checker_.CalledOnValidThread());
266 if (source_info.identity.name() == service_manager::mojom::kServiceName && 253 if (source_info.identity.name() == service_manager::mojom::kServiceName &&
267 interface_name == service_manager::mojom::ServiceFactory::Name_) { 254 interface_name == service_manager::mojom::ServiceFactory::Name_) {
268 factory_bindings_.AddBinding( 255 factory_bindings_.AddBinding(
269 this, mojo::MakeRequest<service_manager::mojom::ServiceFactory>( 256 this, mojo::MakeRequest<service_manager::mojom::ServiceFactory>(
270 std::move(interface_pipe))); 257 std::move(interface_pipe)));
271 } else if (source_info.identity.name() == mojom::kBrowserServiceName && 258 } else if (source_info.identity.name() == mojom::kBrowserServiceName &&
272 interface_name == mojom::Child::Name_) { 259 interface_name == mojom::Child::Name_) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 service_manager::mojom::ServiceRequest pending_service_request_; 306 service_manager::mojom::ServiceRequest pending_service_request_;
320 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; 307 scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
321 std::unique_ptr<service_manager::Connector> io_thread_connector_; 308 std::unique_ptr<service_manager::Connector> io_thread_connector_;
322 service_manager::mojom::ConnectorRequest pending_connector_request_; 309 service_manager::mojom::ConnectorRequest pending_connector_request_;
323 310
324 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to 311 // TaskRunner on which to run our owner's callbacks, i.e. the ones passed to
325 // Start(). 312 // Start().
326 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; 313 scoped_refptr<base::SequencedTaskRunner> callback_task_runner_;
327 314
328 // Callback to run once Service::OnStart is invoked. 315 // Callback to run once Service::OnStart is invoked.
329 InitializeCallback local_info_available_callback_;
330 InitializeCallback browser_info_available_callback_; 316 InitializeCallback browser_info_available_callback_;
331 317
332 // Callback to run if the service is stopped by the service manager. 318 // Callback to run if the service is stopped by the service manager.
333 base::Closure stop_callback_; 319 base::Closure stop_callback_;
334 320
335 service_manager::ServiceInfo local_info_; 321 service_manager::BindSourceInfo local_info_;
336 322
337 std::unique_ptr<service_manager::ServiceContext> service_context_; 323 std::unique_ptr<service_manager::ServiceContext> service_context_;
338 mojo::BindingSet<service_manager::mojom::ServiceFactory> factory_bindings_; 324 mojo::BindingSet<service_manager::mojom::ServiceFactory> factory_bindings_;
339 int next_filter_id_ = kInvalidConnectionFilterId; 325 int next_filter_id_ = kInvalidConnectionFilterId;
340 326
341 // Not owned. 327 // Not owned.
342 MessageLoopObserver* message_loop_observer_ = nullptr; 328 MessageLoopObserver* message_loop_observer_ = nullptr;
343 329
344 // Guards |connection_filters_|. 330 // Guards |connection_filters_|.
345 base::Lock lock_; 331 base::Lock lock_;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 400
415 ServiceManagerConnectionImpl::~ServiceManagerConnectionImpl() { 401 ServiceManagerConnectionImpl::~ServiceManagerConnectionImpl() {
416 context_->ShutDown(); 402 context_->ShutDown();
417 } 403 }
418 404
419 //////////////////////////////////////////////////////////////////////////////// 405 ////////////////////////////////////////////////////////////////////////////////
420 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation: 406 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation:
421 407
422 void ServiceManagerConnectionImpl::Start() { 408 void ServiceManagerConnectionImpl::Start() {
423 context_->Start( 409 context_->Start(
424 base::Bind(&ServiceManagerConnectionImpl::OnLocalServiceInfoAvailable,
425 weak_factory_.GetWeakPtr()),
426 base::Bind(&ServiceManagerConnectionImpl::OnBrowserServiceInfoAvailable, 410 base::Bind(&ServiceManagerConnectionImpl::OnBrowserServiceInfoAvailable,
427 weak_factory_.GetWeakPtr()), 411 weak_factory_.GetWeakPtr()),
428 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost, 412 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost,
429 weak_factory_.GetWeakPtr())); 413 weak_factory_.GetWeakPtr()));
430 } 414 }
431 415
432 service_manager::Connector* ServiceManagerConnectionImpl::GetConnector() { 416 service_manager::Connector* ServiceManagerConnectionImpl::GetConnector() {
433 return connector_.get(); 417 return connector_.get();
434 } 418 }
435 419
436 const service_manager::ServiceInfo& ServiceManagerConnectionImpl::GetLocalInfo() 420 const service_manager::BindSourceInfo&
437 const {
438 return local_info_;
439 }
440
441 const service_manager::ServiceInfo&
442 ServiceManagerConnectionImpl::GetBrowserInfo() const { 421 ServiceManagerConnectionImpl::GetBrowserInfo() const {
443 return browser_info_; 422 return browser_info_;
444 } 423 }
445 424
446 void ServiceManagerConnectionImpl::SetConnectionLostClosure( 425 void ServiceManagerConnectionImpl::SetConnectionLostClosure(
447 const base::Closure& closure) { 426 const base::Closure& closure) {
448 connection_lost_handler_ = closure; 427 connection_lost_handler_ = closure;
449 } 428 }
450 429
451 int ServiceManagerConnectionImpl::AddConnectionFilter( 430 int ServiceManagerConnectionImpl::AddConnectionFilter(
(...skipping 22 matching lines...) Expand all
474 on_connect_handlers_[id] = handler; 453 on_connect_handlers_[id] = handler;
475 return id; 454 return id;
476 } 455 }
477 456
478 void ServiceManagerConnectionImpl::RemoveOnConnectHandler(int id) { 457 void ServiceManagerConnectionImpl::RemoveOnConnectHandler(int id) {
479 auto it = on_connect_handlers_.find(id); 458 auto it = on_connect_handlers_.find(id);
480 DCHECK(it != on_connect_handlers_.end()); 459 DCHECK(it != on_connect_handlers_.end());
481 on_connect_handlers_.erase(it); 460 on_connect_handlers_.erase(it);
482 } 461 }
483 462
484 void ServiceManagerConnectionImpl::OnLocalServiceInfoAvailable(
485 const service_manager::ServiceInfo& local_info) {
486 local_info_ = local_info;
487 }
488
489 void ServiceManagerConnectionImpl::OnBrowserServiceInfoAvailable( 463 void ServiceManagerConnectionImpl::OnBrowserServiceInfoAvailable(
490 const service_manager::ServiceInfo& browser_info) { 464 const service_manager::BindSourceInfo& browser_info) {
491 browser_info_ = browser_info; 465 browser_info_ = browser_info;
492 for (auto& handler : on_connect_handlers_) 466 for (auto& handler : on_connect_handlers_)
493 handler.second.Run(local_info_, browser_info_); 467 handler.second.Run(browser_info_);
494 } 468 }
495 469
496 void ServiceManagerConnectionImpl::OnConnectionLost() { 470 void ServiceManagerConnectionImpl::OnConnectionLost() {
497 if (!connection_lost_handler_.is_null()) 471 if (!connection_lost_handler_.is_null())
498 connection_lost_handler_.Run(); 472 connection_lost_handler_.Run();
499 } 473 }
500 474
501 void ServiceManagerConnectionImpl::GetInterface( 475 void ServiceManagerConnectionImpl::GetInterface(
502 service_manager::mojom::InterfaceProvider* provider, 476 service_manager::mojom::InterfaceProvider* provider,
503 const std::string& interface_name, 477 const std::string& interface_name,
504 mojo::ScopedMessagePipeHandle request_handle) { 478 mojo::ScopedMessagePipeHandle request_handle) {
505 provider->GetInterface(interface_name, std::move(request_handle)); 479 provider->GetInterface(interface_name, std::move(request_handle));
506 } 480 }
507 481
508 } // namespace content 482 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698