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

Side by Side Diff: services/service_manager/service_manager.cc

Issue 2427443002: Replace remaining shell references with service manager (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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "services/service_manager/service_manager.h" 5 #include "services/service_manager/service_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 16 matching lines...) Expand all
27 #include "services/service_manager/public/cpp/service_context.h" 27 #include "services/service_manager/public/cpp/service_context.h"
28 #include "services/service_manager/public/interfaces/connector.mojom.h" 28 #include "services/service_manager/public/interfaces/connector.mojom.h"
29 #include "services/service_manager/public/interfaces/service.mojom.h" 29 #include "services/service_manager/public/interfaces/service.mojom.h"
30 #include "services/service_manager/public/interfaces/service_manager.mojom.h" 30 #include "services/service_manager/public/interfaces/service_manager.mojom.h"
31 31
32 namespace service_manager { 32 namespace service_manager {
33 33
34 namespace { 34 namespace {
35 35
36 const char kCatalogName[] = "service:catalog"; 36 const char kCatalogName[] = "service:catalog";
37 const char kServiceManagerName[] = "service:shell"; 37 const char kServiceManagerName[] = "service:service_manager";
38 const char kCapabilityClass_UserID[] = "shell:user_id"; 38 const char kCapabilityClass_UserID[] = "service_manager:user_id";
39 const char kCapabilityClass_ClientProcess[] = "shell:client_process"; 39 const char kCapabilityClass_ClientProcess[] = "service_manager:client_process";
40 const char kCapabilityClass_InstanceName[] = "shell:instance_name"; 40 const char kCapabilityClass_InstanceName[] = "service_manager:instance_name";
41 const char kCapabilityClass_AllUsers[] = "shell:all_users"; 41 const char kCapabilityClass_AllUsers[] = "service_manager:all_users";
42 const char kCapabilityClass_ExplicitClass[] = "shell:explicit_class"; 42 const char kCapabilityClass_ExplicitClass[] = "service_manager:explicit_class";
43 const char kCapabilityClass_ServiceManager[] = "shell:service_manager"; 43 const char kCapabilityClass_ServiceManager[] =
44 "service_manager:service_manager";
44 45
45 } // namespace 46 } // namespace
46 47
47 Identity CreateServiceManagerIdentity() { 48 Identity CreateServiceManagerIdentity() {
48 return Identity(kServiceManagerName, mojom::kRootUserID); 49 return Identity(kServiceManagerName, mojom::kRootUserID);
49 } 50 }
50 51
51 Identity CreateCatalogIdentity() { 52 Identity CreateCatalogIdentity() {
52 return Identity(kCatalogName, mojom::kRootUserID); 53 return Identity(kCatalogName, mojom::kRootUserID);
53 } 54 }
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 328
328 bool ValidateClientProcessConnection( 329 bool ValidateClientProcessConnection(
329 mojom::ClientProcessConnectionPtr* client_process_connection, 330 mojom::ClientProcessConnectionPtr* client_process_connection,
330 const Identity& target, 331 const Identity& target,
331 const ConnectCallback& callback) { 332 const ConnectCallback& callback) {
332 if (!client_process_connection->is_null()) { 333 if (!client_process_connection->is_null()) {
333 if (!HasClass(capability_spec_, kCapabilityClass_ClientProcess)) { 334 if (!HasClass(capability_spec_, kCapabilityClass_ClientProcess)) {
334 LOG(ERROR) << "Instance: " << identity_.name() << " attempting " 335 LOG(ERROR) << "Instance: " << identity_.name() << " attempting "
335 << "to register an instance for a process it created for " 336 << "to register an instance for a process it created for "
336 << "target: " << target.name() << " without the " 337 << "target: " << target.name() << " without the "
337 << "service:shell{client_process} capability class."; 338 << "service:service_manager{client_process} capability "
339 << "class.";
338 callback.Run(mojom::ConnectResult::ACCESS_DENIED, 340 callback.Run(mojom::ConnectResult::ACCESS_DENIED,
339 mojom::kInheritUserID); 341 mojom::kInheritUserID);
340 return false; 342 return false;
341 } 343 }
342 344
343 if (!(*client_process_connection)->service.is_valid() || 345 if (!(*client_process_connection)->service.is_valid() ||
344 !(*client_process_connection)->pid_receiver_request.is_valid()) { 346 !(*client_process_connection)->pid_receiver_request.is_valid()) {
345 LOG(ERROR) << "Must supply both service AND " 347 LOG(ERROR) << "Must supply both service AND "
346 << "pid_receiver_request when sending " 348 << "pid_receiver_request when sending "
347 << "client_process_connection."; 349 << "client_process_connection.";
(...skipping 14 matching lines...) Expand all
362 } 364 }
363 365
364 bool ValidateCapabilities(const Identity& target, 366 bool ValidateCapabilities(const Identity& target,
365 const ConnectCallback& callback) { 367 const ConnectCallback& callback) {
366 // TODO(beng): Need to do the following additional policy validation of 368 // TODO(beng): Need to do the following additional policy validation of
367 // whether this instance is allowed to connect using: 369 // whether this instance is allowed to connect using:
368 // - a non-null client_process_connection. 370 // - a non-null client_process_connection.
369 if (target.user_id() != identity_.user_id() && 371 if (target.user_id() != identity_.user_id() &&
370 target.user_id() != mojom::kRootUserID && 372 target.user_id() != mojom::kRootUserID &&
371 !HasClass(capability_spec_, kCapabilityClass_UserID)) { 373 !HasClass(capability_spec_, kCapabilityClass_UserID)) {
372 LOG(ERROR) << "Instance: " << identity_.name() << " running as: " 374 LOG(ERROR) << "Instance: " << identity_.name()
373 << identity_.user_id() << " attempting to connect to: " 375 << " running as: " << identity_.user_id()
374 << target.name() << " as: " << target.user_id() << " without " 376 << " attempting to connect to: " << target.name()
375 << " the service:shell{user_id} capability class."; 377 << " as: " << target.user_id() << " without "
378 << " the service:service_manager{user_id} capability class.";
376 callback.Run(mojom::ConnectResult::ACCESS_DENIED, 379 callback.Run(mojom::ConnectResult::ACCESS_DENIED,
377 mojom::kInheritUserID); 380 mojom::kInheritUserID);
378 return false; 381 return false;
379 } 382 }
380 if (!target.instance().empty() && 383 if (!target.instance().empty() &&
381 target.instance() != GetNamePath(target.name()) && 384 target.instance() != GetNamePath(target.name()) &&
382 !HasClass(capability_spec_, kCapabilityClass_InstanceName)) { 385 !HasClass(capability_spec_, kCapabilityClass_InstanceName)) {
383 LOG(ERROR) << "Instance: " << identity_.name() << " attempting to " 386 LOG(ERROR) << "Instance: " << identity_.name() << " attempting to "
384 << "connect to " << target.name() << " using Instance name: " 387 << "connect to " << target.name()
385 << target.instance() << " without the " 388 << " using Instance name: " << target.instance()
386 << "service:shell{instance_name} capability class."; 389 << " without the "
390 << "service:service_manager{instance_name} capability class.";
387 callback.Run(mojom::ConnectResult::ACCESS_DENIED, mojom::kInheritUserID); 391 callback.Run(mojom::ConnectResult::ACCESS_DENIED, mojom::kInheritUserID);
388 return false; 392 return false;
389 393
390 } 394 }
391 395
392 if (allow_any_application_ || 396 if (allow_any_application_ ||
393 capability_spec_.required.find(target.name()) != 397 capability_spec_.required.find(target.name()) !=
394 capability_spec_.required.end()) { 398 capability_spec_.required.end()) {
395 return true; 399 return true;
396 } 400 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 std::unique_ptr<NativeRunnerFactory> native_runner_factory, 498 std::unique_ptr<NativeRunnerFactory> native_runner_factory,
495 mojom::ServicePtr catalog) 499 mojom::ServicePtr catalog)
496 : native_runner_factory_(std::move(native_runner_factory)), 500 : native_runner_factory_(std::move(native_runner_factory)),
497 weak_ptr_factory_(this) { 501 weak_ptr_factory_(this) {
498 mojom::ServicePtr service; 502 mojom::ServicePtr service;
499 mojom::ServiceRequest request = mojo::GetProxy(&service); 503 mojom::ServiceRequest request = mojo::GetProxy(&service);
500 504
501 CapabilitySpec spec; 505 CapabilitySpec spec;
502 spec.provided[kCapabilityClass_ServiceManager].insert( 506 spec.provided[kCapabilityClass_ServiceManager].insert(
503 "service_manager::mojom::ServiceManager"); 507 "service_manager::mojom::ServiceManager");
504 spec.required["*"].insert("shell:service_factory"); 508 spec.required["*"].insert("service_manager:service_factory");
505 spec.required["service:catalog"].insert("shell:resolver"); 509 spec.required["service:catalog"].insert("service_manager:resolver");
506 510
507 service_manager_instance_ = 511 service_manager_instance_ =
508 CreateInstance(Identity(), CreateServiceManagerIdentity(), spec); 512 CreateInstance(Identity(), CreateServiceManagerIdentity(), spec);
509 service_manager_instance_->StartWithService(std::move(service)); 513 service_manager_instance_->StartWithService(std::move(service));
510 singletons_.insert(kServiceManagerName); 514 singletons_.insert(kServiceManagerName);
511 service_context_.reset(new ServiceContext(this, std::move(request))); 515 service_context_.reset(new ServiceContext(this, std::move(request)));
512 516
513 if (catalog) 517 if (catalog)
514 InitCatalog(std::move(catalog)); 518 InitCatalog(std::move(catalog));
515 } 519 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 581
578 //////////////////////////////////////////////////////////////////////////////// 582 ////////////////////////////////////////////////////////////////////////////////
579 // ServiceManager, private: 583 // ServiceManager, private:
580 584
581 void ServiceManager::InitCatalog(mojom::ServicePtr catalog) { 585 void ServiceManager::InitCatalog(mojom::ServicePtr catalog) {
582 // TODO(beng): It'd be great to build this from the manifest, however there's 586 // TODO(beng): It'd be great to build this from the manifest, however there's
583 // a bit of a chicken-and-egg problem. 587 // a bit of a chicken-and-egg problem.
584 CapabilitySpec spec; 588 CapabilitySpec spec;
585 spec.provided["app"].insert("filesystem::mojom::Directory"); 589 spec.provided["app"].insert("filesystem::mojom::Directory");
586 spec.provided["catalog:catalog"].insert("catalog::mojom::Catalog"); 590 spec.provided["catalog:catalog"].insert("catalog::mojom::Catalog");
587 spec.provided["shell:resolver"].insert("service_manager::mojom::Resolver"); 591 spec.provided["service_manager:resolver"].insert(
592 "service_manager::mojom::Resolver");
588 spec.provided["control"].insert("catalog::mojom::CatalogControl"); 593 spec.provided["control"].insert("catalog::mojom::CatalogControl");
589 Instance* instance = CreateInstance( 594 Instance* instance = CreateInstance(
590 CreateServiceManagerIdentity(), CreateCatalogIdentity(), spec); 595 CreateServiceManagerIdentity(), CreateCatalogIdentity(), spec);
591 singletons_.insert(kCatalogName); 596 singletons_.insert(kCatalogName);
592 instance->StartWithService(std::move(catalog)); 597 instance->StartWithService(std::move(catalog));
593 } 598 }
594 599
595 mojom::Resolver* ServiceManager::GetResolver(const Identity& identity) { 600 mojom::Resolver* ServiceManager::GetResolver(const Identity& identity) {
596 auto iter = identity_to_resolver_.find(identity); 601 auto iter = identity_to_resolver_.find(identity);
597 if (iter != identity_to_resolver_.end()) 602 if (iter != identity_to_resolver_.end())
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 listeners_.ForAllPtrs([identity](mojom::ServiceManagerListener* listener) { 640 listeners_.ForAllPtrs([identity](mojom::ServiceManagerListener* listener) {
636 listener->OnServiceStopped(identity); 641 listener->OnServiceStopped(identity);
637 }); 642 });
638 if (!instance_quit_callback_.is_null()) 643 if (!instance_quit_callback_.is_null())
639 instance_quit_callback_.Run(identity); 644 instance_quit_callback_.Run(identity);
640 } 645 }
641 646
642 void ServiceManager::Connect(std::unique_ptr<ConnectParams> params, 647 void ServiceManager::Connect(std::unique_ptr<ConnectParams> params,
643 mojom::ServicePtr service, 648 mojom::ServicePtr service,
644 base::WeakPtr<Instance> source_instance) { 649 base::WeakPtr<Instance> source_instance) {
645 TRACE_EVENT_INSTANT1("mojo_shell", "ServiceManager::Connect", 650 TRACE_EVENT_INSTANT1("service_manager", "ServiceManager::Connect",
646 TRACE_EVENT_SCOPE_THREAD, "original_name", 651 TRACE_EVENT_SCOPE_THREAD, "original_name",
647 params->target().name()); 652 params->target().name());
648 DCHECK(IsValidName(params->target().name())); 653 DCHECK(IsValidName(params->target().name()));
649 DCHECK(base::IsValidGUID(params->target().user_id())); 654 DCHECK(base::IsValidGUID(params->target().user_id()));
650 DCHECK_NE(mojom::kInheritUserID, params->target().user_id()); 655 DCHECK_NE(mojom::kInheritUserID, params->target().user_id());
651 DCHECK(!service.is_bound() || !identity_to_instance_.count(params->target())); 656 DCHECK(!service.is_bound() || !identity_to_instance_.count(params->target()));
652 657
653 // Connect to an existing matching instance, if possible. 658 // Connect to an existing matching instance, if possible.
654 if (!service.is_bound() && ConnectToExistingInstance(&params)) 659 if (!service.is_bound() && ConnectToExistingInstance(&params))
655 return; 660 return;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 // Now that the instance has a Service, we can connect to it. 881 // Now that the instance has a Service, we can connect to it.
877 bool connected = instance->ConnectToService(&params); 882 bool connected = instance->ConnectToService(&params);
878 DCHECK(connected); 883 DCHECK(connected);
879 } 884 }
880 885
881 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() { 886 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() {
882 return weak_ptr_factory_.GetWeakPtr(); 887 return weak_ptr_factory_.GetWeakPtr();
883 } 888 }
884 889
885 } // namespace service_manager 890 } // namespace service_manager
OLDNEW
« no previous file with comments | « services/service_manager/runner/host/mach_broker.cc ('k') | services/service_manager/standalone/context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698