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

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

Issue 2398783002: Rename a bunch of Mojo Application stuff to reference Services. (Closed)
Patch Set: . Created 4 years, 2 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/mojo/mojo_shell_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
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/threading/thread_checker.h" 17 #include "base/threading/thread_checker.h"
18 #include "content/common/mojo/embedded_application_runner.h" 18 #include "content/common/service_manager/embedded_service_runner.h"
19 #include "content/public/common/connection_filter.h" 19 #include "content/public/common/connection_filter.h"
20 #include "mojo/public/cpp/bindings/binding_set.h" 20 #include "mojo/public/cpp/bindings/binding_set.h"
21 #include "mojo/public/cpp/system/message_pipe.h" 21 #include "mojo/public/cpp/system/message_pipe.h"
22 #include "services/shell/public/cpp/service.h" 22 #include "services/shell/public/cpp/service.h"
23 #include "services/shell/public/cpp/service_context.h" 23 #include "services/shell/public/cpp/service_context.h"
24 #include "services/shell/public/interfaces/service_factory.mojom.h" 24 #include "services/shell/public/interfaces/service_factory.mojom.h"
25 #include "services/shell/runner/common/client_util.h" 25 #include "services/shell/runner/common/client_util.h"
26 26
27 namespace content { 27 namespace content {
28 namespace { 28 namespace {
29 29
30 base::LazyInstance<std::unique_ptr<MojoShellConnection>>::Leaky 30 base::LazyInstance<std::unique_ptr<ServiceManagerConnection>>::Leaky
31 g_connection_for_process = LAZY_INSTANCE_INITIALIZER; 31 g_connection_for_process = LAZY_INSTANCE_INITIALIZER;
32 32
33 MojoShellConnection::Factory* mojo_shell_connection_factory = nullptr; 33 ServiceManagerConnection::Factory* service_manager_connection_factory = nullptr;
34 34
35 } // namespace 35 } // namespace
36 36
37 // A ref-counted object which owns the IO thread state of a 37 // A ref-counted object which owns the IO thread state of a
38 // MojoShellConnectionImpl. This includes Service and ServiceFactory 38 // ServiceManagerConnectionImpl. This includes Service and ServiceFactory
39 // bindings. 39 // bindings.
40 class MojoShellConnectionImpl::IOThreadContext 40 class ServiceManagerConnectionImpl::IOThreadContext
41 : public base::RefCountedThreadSafe<IOThreadContext>, 41 : public base::RefCountedThreadSafe<IOThreadContext>,
42 public shell::Service, 42 public shell::Service,
43 public shell::InterfaceFactory<shell::mojom::ServiceFactory>, 43 public shell::InterfaceFactory<shell::mojom::ServiceFactory>,
44 public shell::mojom::ServiceFactory { 44 public shell::mojom::ServiceFactory {
45 public: 45 public:
46 using InitializeCallback = base::Callback<void(const shell::Identity&)>; 46 using InitializeCallback = base::Callback<void(const shell::Identity&)>;
47 using ServiceFactoryCallback = 47 using ServiceFactoryCallback =
48 base::Callback<void(shell::mojom::ServiceRequest, const std::string&)>; 48 base::Callback<void(shell::mojom::ServiceRequest, const std::string&)>;
49 49
50 IOThreadContext(shell::mojom::ServiceRequest service_request, 50 IOThreadContext(shell::mojom::ServiceRequest service_request,
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 DCHECK(!initialize_handler_.is_null()); 219 DCHECK(!initialize_handler_.is_null());
220 id_ = identity; 220 id_ = identity;
221 221
222 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_); 222 InitializeCallback handler = base::ResetAndReturn(&initialize_handler_);
223 callback_task_runner_->PostTask(FROM_HERE, base::Bind(handler, identity)); 223 callback_task_runner_->PostTask(FROM_HERE, base::Bind(handler, identity));
224 } 224 }
225 225
226 bool OnConnect(const shell::Identity& remote_identity, 226 bool OnConnect(const shell::Identity& remote_identity,
227 shell::InterfaceRegistry* registry) override { 227 shell::InterfaceRegistry* registry) override {
228 DCHECK(io_thread_checker_.CalledOnValidThread()); 228 DCHECK(io_thread_checker_.CalledOnValidThread());
229 std::string remote_app = remote_identity.name(); 229 std::string remote_service = remote_identity.name();
230 if (remote_app == "service:shell") { 230 if (remote_service == "service:shell") {
231 // Only expose the SCF interface to the shell. 231 // Only expose the SCF interface to the shell.
232 registry->AddInterface<shell::mojom::ServiceFactory>(this); 232 registry->AddInterface<shell::mojom::ServiceFactory>(this);
233 return true; 233 return true;
234 } 234 }
235 235
236 bool accept = false; 236 bool accept = false;
237 { 237 {
238 base::AutoLock lock(lock_); 238 base::AutoLock lock(lock_);
239 for (auto& entry : connection_filters_) { 239 for (auto& entry : connection_filters_) {
240 accept |= entry.second->OnConnect(remote_identity, registry, 240 accept |= entry.second->OnConnect(remote_identity, registry,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 // Guards |connection_filters_|. 336 // Guards |connection_filters_|.
337 base::Lock lock_; 337 base::Lock lock_;
338 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_; 338 std::map<int, std::unique_ptr<ConnectionFilter>> connection_filters_;
339 339
340 base::WeakPtrFactory<IOThreadContext> weak_factory_; 340 base::WeakPtrFactory<IOThreadContext> weak_factory_;
341 341
342 DISALLOW_COPY_AND_ASSIGN(IOThreadContext); 342 DISALLOW_COPY_AND_ASSIGN(IOThreadContext);
343 }; 343 };
344 344
345 //////////////////////////////////////////////////////////////////////////////// 345 ////////////////////////////////////////////////////////////////////////////////
346 // MojoShellConnection, public: 346 // ServiceManagerConnection, public:
347 347
348 // static 348 // static
349 void MojoShellConnection::SetForProcess( 349 void ServiceManagerConnection::SetForProcess(
350 std::unique_ptr<MojoShellConnection> connection) { 350 std::unique_ptr<ServiceManagerConnection> connection) {
351 DCHECK(!g_connection_for_process.Get()); 351 DCHECK(!g_connection_for_process.Get());
352 g_connection_for_process.Get() = std::move(connection); 352 g_connection_for_process.Get() = std::move(connection);
353 } 353 }
354 354
355 // static 355 // static
356 MojoShellConnection* MojoShellConnection::GetForProcess() { 356 ServiceManagerConnection* ServiceManagerConnection::GetForProcess() {
357 return g_connection_for_process.Get().get(); 357 return g_connection_for_process.Get().get();
358 } 358 }
359 359
360 // static 360 // static
361 void MojoShellConnection::DestroyForProcess() { 361 void ServiceManagerConnection::DestroyForProcess() {
362 // This joins the shell controller thread. 362 // This joins the service manager controller thread.
363 g_connection_for_process.Get().reset(); 363 g_connection_for_process.Get().reset();
364 } 364 }
365 365
366 // static 366 // static
367 void MojoShellConnection::SetFactoryForTest(Factory* factory) { 367 void ServiceManagerConnection::SetFactoryForTest(Factory* factory) {
368 DCHECK(!g_connection_for_process.Get()); 368 DCHECK(!g_connection_for_process.Get());
369 mojo_shell_connection_factory = factory; 369 service_manager_connection_factory = factory;
370 } 370 }
371 371
372 // static 372 // static
373 std::unique_ptr<MojoShellConnection> MojoShellConnection::Create( 373 std::unique_ptr<ServiceManagerConnection> ServiceManagerConnection::Create(
374 shell::mojom::ServiceRequest request, 374 shell::mojom::ServiceRequest request,
375 scoped_refptr<base::SequencedTaskRunner> io_task_runner) { 375 scoped_refptr<base::SequencedTaskRunner> io_task_runner) {
376 if (mojo_shell_connection_factory) 376 if (service_manager_connection_factory)
377 return mojo_shell_connection_factory->Run(); 377 return service_manager_connection_factory->Run();
378 return base::MakeUnique<MojoShellConnectionImpl>( 378 return base::MakeUnique<ServiceManagerConnectionImpl>(
379 std::move(request), io_task_runner); 379 std::move(request), io_task_runner);
380 } 380 }
381 381
382 MojoShellConnection::~MojoShellConnection() {} 382 ServiceManagerConnection::~ServiceManagerConnection() {}
383 383
384 //////////////////////////////////////////////////////////////////////////////// 384 ////////////////////////////////////////////////////////////////////////////////
385 // MojoShellConnectionImpl, public: 385 // ServiceManagerConnectionImpl, public:
386 386
387 MojoShellConnectionImpl::MojoShellConnectionImpl( 387 ServiceManagerConnectionImpl::ServiceManagerConnectionImpl(
388 shell::mojom::ServiceRequest request, 388 shell::mojom::ServiceRequest request,
389 scoped_refptr<base::SequencedTaskRunner> io_task_runner) 389 scoped_refptr<base::SequencedTaskRunner> io_task_runner)
390 : weak_factory_(this) { 390 : weak_factory_(this) {
391 shell::mojom::ConnectorRequest connector_request; 391 shell::mojom::ConnectorRequest connector_request;
392 connector_ = shell::Connector::Create(&connector_request); 392 connector_ = shell::Connector::Create(&connector_request);
393 393
394 std::unique_ptr<shell::Connector> io_thread_connector = connector_->Clone(); 394 std::unique_ptr<shell::Connector> io_thread_connector = connector_->Clone();
395 context_ = new IOThreadContext( 395 context_ = new IOThreadContext(
396 std::move(request), io_task_runner, std::move(io_thread_connector), 396 std::move(request), io_task_runner, std::move(io_thread_connector),
397 std::move(connector_request)); 397 std::move(connector_request));
398 } 398 }
399 399
400 MojoShellConnectionImpl::~MojoShellConnectionImpl() { 400 ServiceManagerConnectionImpl::~ServiceManagerConnectionImpl() {
401 context_->ShutDown(); 401 context_->ShutDown();
402 } 402 }
403 403
404 //////////////////////////////////////////////////////////////////////////////// 404 ////////////////////////////////////////////////////////////////////////////////
405 // MojoShellConnectionImpl, MojoShellConnection implementation: 405 // ServiceManagerConnectionImpl, ServiceManagerConnection implementation:
406 406
407 void MojoShellConnectionImpl::Start() { 407 void ServiceManagerConnectionImpl::Start() {
408 context_->Start( 408 context_->Start(
409 base::Bind(&MojoShellConnectionImpl::OnContextInitialized, 409 base::Bind(&ServiceManagerConnectionImpl::OnContextInitialized,
410 weak_factory_.GetWeakPtr()), 410 weak_factory_.GetWeakPtr()),
411 base::Bind(&MojoShellConnectionImpl::CreateService, 411 base::Bind(&ServiceManagerConnectionImpl::CreateService,
412 weak_factory_.GetWeakPtr()), 412 weak_factory_.GetWeakPtr()),
413 base::Bind(&MojoShellConnectionImpl::OnConnectionLost, 413 base::Bind(&ServiceManagerConnectionImpl::OnConnectionLost,
414 weak_factory_.GetWeakPtr())); 414 weak_factory_.GetWeakPtr()));
415 } 415 }
416 416
417 void MojoShellConnectionImpl::SetInitializeHandler( 417 void ServiceManagerConnectionImpl::SetInitializeHandler(
418 const base::Closure& handler) { 418 const base::Closure& handler) {
419 DCHECK(initialize_handler_.is_null()); 419 DCHECK(initialize_handler_.is_null());
420 initialize_handler_ = handler; 420 initialize_handler_ = handler;
421 } 421 }
422 422
423 shell::Connector* MojoShellConnectionImpl::GetConnector() { 423 shell::Connector* ServiceManagerConnectionImpl::GetConnector() {
424 return connector_.get(); 424 return connector_.get();
425 } 425 }
426 426
427 const shell::Identity& MojoShellConnectionImpl::GetIdentity() const { 427 const shell::Identity& ServiceManagerConnectionImpl::GetIdentity() const {
428 return identity_; 428 return identity_;
429 } 429 }
430 430
431 void MojoShellConnectionImpl::SetConnectionLostClosure( 431 void ServiceManagerConnectionImpl::SetConnectionLostClosure(
432 const base::Closure& closure) { 432 const base::Closure& closure) {
433 connection_lost_handler_ = closure; 433 connection_lost_handler_ = closure;
434 } 434 }
435 435
436 void MojoShellConnectionImpl::SetupInterfaceRequestProxies( 436 void ServiceManagerConnectionImpl::SetupInterfaceRequestProxies(
437 shell::InterfaceRegistry* registry, 437 shell::InterfaceRegistry* registry,
438 shell::InterfaceProvider* provider) { 438 shell::InterfaceProvider* provider) {
439 // It's safe to bind |registry| as a raw pointer because the caller must 439 // It's safe to bind |registry| as a raw pointer because the caller must
440 // guarantee that it outlives |this|, and |this| is bound as a weak ptr here. 440 // guarantee that it outlives |this|, and |this| is bound as a weak ptr here.
441 context_->SetDefaultBinderForBrowserConnection( 441 context_->SetDefaultBinderForBrowserConnection(
442 base::Bind(&MojoShellConnectionImpl::GetInterface, 442 base::Bind(&ServiceManagerConnectionImpl::GetInterface,
443 weak_factory_.GetWeakPtr(), registry)); 443 weak_factory_.GetWeakPtr(), registry));
444 444
445 // TODO(beng): remove provider parameter. 445 // TODO(beng): remove provider parameter.
446 } 446 }
447 447
448 int MojoShellConnectionImpl::AddConnectionFilter( 448 int ServiceManagerConnectionImpl::AddConnectionFilter(
449 std::unique_ptr<ConnectionFilter> filter) { 449 std::unique_ptr<ConnectionFilter> filter) {
450 return context_->AddConnectionFilter(std::move(filter)); 450 return context_->AddConnectionFilter(std::move(filter));
451 } 451 }
452 452
453 void MojoShellConnectionImpl::RemoveConnectionFilter(int filter_id) { 453 void ServiceManagerConnectionImpl::RemoveConnectionFilter(int filter_id) {
454 context_->RemoveConnectionFilter(filter_id); 454 context_->RemoveConnectionFilter(filter_id);
455 } 455 }
456 456
457 void MojoShellConnectionImpl::AddEmbeddedService( 457 void ServiceManagerConnectionImpl::AddEmbeddedService(const std::string& name,
458 const std::string& name, 458 const ServiceInfo& info) {
459 const MojoApplicationInfo& info) { 459 std::unique_ptr<EmbeddedServiceRunner> service(
460 std::unique_ptr<EmbeddedApplicationRunner> app( 460 new EmbeddedServiceRunner(name, info));
461 new EmbeddedApplicationRunner(name, info));
462 AddServiceRequestHandler( 461 AddServiceRequestHandler(
463 name, base::Bind(&EmbeddedApplicationRunner::BindServiceRequest, 462 name, base::Bind(&EmbeddedServiceRunner::BindServiceRequest,
464 base::Unretained(app.get()))); 463 base::Unretained(service.get())));
465 auto result = embedded_apps_.insert(std::make_pair(name, std::move(app))); 464 auto result =
465 embedded_services_.insert(std::make_pair(name, std::move(service)));
466 DCHECK(result.second); 466 DCHECK(result.second);
467 } 467 }
468 468
469 void MojoShellConnectionImpl::AddServiceRequestHandler( 469 void ServiceManagerConnectionImpl::AddServiceRequestHandler(
470 const std::string& name, 470 const std::string& name,
471 const ServiceRequestHandler& handler) { 471 const ServiceRequestHandler& handler) {
472 auto result = request_handlers_.insert(std::make_pair(name, handler)); 472 auto result = request_handlers_.insert(std::make_pair(name, handler));
473 DCHECK(result.second); 473 DCHECK(result.second);
474 } 474 }
475 475
476 void MojoShellConnectionImpl::CreateService( 476 void ServiceManagerConnectionImpl::CreateService(
477 shell::mojom::ServiceRequest request, 477 shell::mojom::ServiceRequest request,
478 const std::string& name) { 478 const std::string& name) {
479 auto it = request_handlers_.find(name); 479 auto it = request_handlers_.find(name);
480 if (it != request_handlers_.end()) 480 if (it != request_handlers_.end())
481 it->second.Run(std::move(request)); 481 it->second.Run(std::move(request));
482 } 482 }
483 483
484 void MojoShellConnectionImpl::OnContextInitialized( 484 void ServiceManagerConnectionImpl::OnContextInitialized(
485 const shell::Identity& identity) { 485 const shell::Identity& identity) {
486 identity_ = identity; 486 identity_ = identity;
487 if (!initialize_handler_.is_null()) 487 if (!initialize_handler_.is_null())
488 base::ResetAndReturn(&initialize_handler_).Run(); 488 base::ResetAndReturn(&initialize_handler_).Run();
489 } 489 }
490 490
491 void MojoShellConnectionImpl::OnConnectionLost() { 491 void ServiceManagerConnectionImpl::OnConnectionLost() {
492 if (!connection_lost_handler_.is_null()) 492 if (!connection_lost_handler_.is_null())
493 connection_lost_handler_.Run(); 493 connection_lost_handler_.Run();
494 } 494 }
495 495
496 void MojoShellConnectionImpl::GetInterface( 496 void ServiceManagerConnectionImpl::GetInterface(
497 shell::mojom::InterfaceProvider* provider, 497 shell::mojom::InterfaceProvider* provider,
498 const std::string& interface_name, 498 const std::string& interface_name,
499 mojo::ScopedMessagePipeHandle request_handle) { 499 mojo::ScopedMessagePipeHandle request_handle) {
500 provider->GetInterface(interface_name, std::move(request_handle)); 500 provider->GetInterface(interface_name, std::move(request_handle));
501 } 501 }
502 502
503 } // namespace content 503 } // namespace content
504 504
OLDNEW
« no previous file with comments | « content/common/service_manager/service_manager_connection_impl.h ('k') | content/gpu/gpu_child_thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698