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

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

Issue 2576233002: Consolidating the mojo NativeRunner functionality. (Closed)
Patch Set: Clean-up. Created 4 years 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 connectors_.CloseAllBindings(); 111 connectors_.CloseAllBindings();
112 service_manager_bindings_.CloseAllBindings(); 112 service_manager_bindings_.CloseAllBindings();
113 service_manager_->OnInstanceUnreachable(this); 113 service_manager_->OnInstanceUnreachable(this);
114 114
115 if (state_ == State::STARTING) { 115 if (state_ == State::STARTING) {
116 service_manager_->NotifyServiceFailedToStart(identity_); 116 service_manager_->NotifyServiceFailedToStart(identity_);
117 } else { 117 } else {
118 // Notify the ServiceManager that this Instance is really going away. 118 // Notify the ServiceManager that this Instance is really going away.
119 service_manager_->OnInstanceStopped(identity_); 119 service_manager_->OnInstanceStopped(identity_);
120 } 120 }
121
122 // Release |runner_| so that if we are called back to OnRunnerCompleted()
123 // we know we're in the destructor.
124 std::unique_ptr<NativeRunner> runner = std::move(runner_);
125 runner.reset();
126 } 121 }
127 122
128 Instance* parent() const { return parent_; } 123 Instance* parent() const { return parent_; }
129 124
130 void AddChild(std::unique_ptr<Instance> child) { 125 void AddChild(std::unique_ptr<Instance> child) {
131 child->parent_ = this; 126 child->parent_ = this;
132 children_.insert(std::make_pair(child.get(), std::move(child))); 127 children_.insert(std::make_pair(child.get(), std::move(child)));
133 } 128 }
134 129
135 void RemoveChild(Instance* child) { 130 void RemoveChild(Instance* child) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 service.Bind(mojom::ServicePtrInfo( 181 service.Bind(mojom::ServicePtrInfo(
187 std::move(client_process_connection->service), 0)); 182 std::move(client_process_connection->service), 0));
188 pid_receiver_binding_.Bind( 183 pid_receiver_binding_.Bind(
189 std::move(client_process_connection->pid_receiver_request)); 184 std::move(client_process_connection->pid_receiver_request));
190 StartWithService(std::move(service)); 185 StartWithService(std::move(service));
191 } 186 }
192 187
193 bool StartWithFilePath(const base::FilePath& path) { 188 bool StartWithFilePath(const base::FilePath& path) {
194 DCHECK(!service_); 189 DCHECK(!service_);
195 DCHECK(!path.empty()); 190 DCHECK(!path.empty());
196 runner_ = service_manager_->native_runner_factory_->Create(path); 191 runner_ = service_manager_->service_process_launcher_factory_->Create(path);
197 if (!runner_) 192 if (!runner_)
198 return false; 193 return false;
199 bool start_sandboxed = false; 194 bool start_sandboxed = false;
200 mojom::ServicePtr service = runner_->Start( 195 mojom::ServicePtr service = runner_->Start(
201 identity_, start_sandboxed, 196 identity_, start_sandboxed,
202 base::Bind(&Instance::PIDAvailable, weak_factory_.GetWeakPtr()), 197 base::Bind(&Instance::PIDAvailable, weak_factory_.GetWeakPtr()));
203 base::Bind(&Instance::OnRunnerCompleted, weak_factory_.GetWeakPtr()));
204 StartWithService(std::move(service)); 198 StartWithService(std::move(service));
205 return true; 199 return true;
206 } 200 }
207 201
208 mojom::RunningServiceInfoPtr CreateRunningServiceInfo() const { 202 mojom::RunningServiceInfoPtr CreateRunningServiceInfo() const {
209 mojom::RunningServiceInfoPtr info(mojom::RunningServiceInfo::New()); 203 mojom::RunningServiceInfoPtr info(mojom::RunningServiceInfo::New());
210 info->id = id_; 204 info->id = id_;
211 info->identity = identity_; 205 info->identity = identity_;
212 info->pid = pid_; 206 info->pid = pid_;
213 return info; 207 return info;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 connectors_.AddBinding(this, std::move(connector_request)); 428 connectors_.AddBinding(this, std::move(connector_request));
435 connectors_.set_connection_error_handler( 429 connectors_.set_connection_error_handler(
436 base::Bind(&Instance::OnConnectionLost, base::Unretained(this), 430 base::Bind(&Instance::OnConnectionLost, base::Unretained(this),
437 service_manager_->GetWeakPtr())); 431 service_manager_->GetWeakPtr()));
438 } 432 }
439 if (control_request.is_pending()) 433 if (control_request.is_pending())
440 control_binding_.Bind(std::move(control_request)); 434 control_binding_.Bind(std::move(control_request));
441 service_manager_->NotifyServiceStarted(identity_, pid_); 435 service_manager_->NotifyServiceStarted(identity_, pid_);
442 } 436 }
443 437
444 // Callback when NativeRunner completes.
445 void OnRunnerCompleted() {
446 if (!runner_.get())
447 return; // We're in the destructor.
448
449 service_manager_->OnInstanceError(this);
450 }
451
452 // mojom::ServiceControl: 438 // mojom::ServiceControl:
453 void RequestQuit() override { 439 void RequestQuit() override {
454 // If quit is requested, oblige when there are no pending OnConnects. 440 // If quit is requested, oblige when there are no pending OnConnects.
455 if (!pending_service_connections_) 441 if (!pending_service_connections_)
456 OnServiceLost(service_manager_->GetWeakPtr()); 442 OnServiceLost(service_manager_->GetWeakPtr());
457 } 443 }
458 444
459 service_manager::ServiceManager* const service_manager_; 445 service_manager::ServiceManager* const service_manager_;
460 446
461 // An id that identifies this instance. Distinct from pid, as a single process 447 // An id that identifies this instance. Distinct from pid, as a single process
462 // may vend multiple application instances, and this object may exist before a 448 // may vend multiple application instances, and this object may exist before a
463 // process is launched. 449 // process is launched.
464 const uint32_t id_; 450 const uint32_t id_;
465 Identity identity_; 451 Identity identity_;
466 const InterfaceProviderSpecMap interface_provider_specs_; 452 const InterfaceProviderSpecMap interface_provider_specs_;
467 const InterfaceProviderSpec empty_spec_; 453 const InterfaceProviderSpec empty_spec_;
468 const bool allow_any_application_; 454 const bool allow_any_application_;
469 std::unique_ptr<NativeRunner> runner_; 455 std::unique_ptr<ServiceProcessLauncher> runner_;
470 mojom::ServicePtr service_; 456 mojom::ServicePtr service_;
471 mojo::Binding<mojom::PIDReceiver> pid_receiver_binding_; 457 mojo::Binding<mojom::PIDReceiver> pid_receiver_binding_;
472 mojo::BindingSet<mojom::Connector> connectors_; 458 mojo::BindingSet<mojom::Connector> connectors_;
473 mojo::BindingSet<mojom::ServiceManager> service_manager_bindings_; 459 mojo::BindingSet<mojom::ServiceManager> service_manager_bindings_;
474 mojo::AssociatedBinding<mojom::ServiceControl> control_binding_; 460 mojo::AssociatedBinding<mojom::ServiceControl> control_binding_;
475 base::ProcessId pid_ = base::kNullProcessId; 461 base::ProcessId pid_ = base::kNullProcessId;
476 Instance* parent_ = nullptr; 462 Instance* parent_ = nullptr;
477 InstanceMap children_; 463 InstanceMap children_;
478 State state_; 464 State state_;
479 465
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 if (entry.first.name() == name) 513 if (entry.first.name() == name)
528 return true; 514 return true;
529 } 515 }
530 return false; 516 return false;
531 } 517 }
532 518
533 //////////////////////////////////////////////////////////////////////////////// 519 ////////////////////////////////////////////////////////////////////////////////
534 // ServiceManager, public: 520 // ServiceManager, public:
535 521
536 ServiceManager::ServiceManager( 522 ServiceManager::ServiceManager(
537 std::unique_ptr<NativeRunnerFactory> native_runner_factory, 523 std::unique_ptr<ServiceProcessLauncherFactory>
524 service_process_launcher_factory,
538 mojom::ServicePtr catalog) 525 mojom::ServicePtr catalog)
539 : native_runner_factory_(std::move(native_runner_factory)), 526 : service_process_launcher_factory_(
527 std::move(service_process_launcher_factory)),
540 weak_ptr_factory_(this) { 528 weak_ptr_factory_(this) {
541 mojom::ServicePtr service; 529 mojom::ServicePtr service;
542 mojom::ServiceRequest request = mojo::GetProxy(&service); 530 mojom::ServiceRequest request = mojo::GetProxy(&service);
543 531
544 InterfaceProviderSpec spec; 532 InterfaceProviderSpec spec;
545 spec.provides[kCapability_ServiceManager].insert( 533 spec.provides[kCapability_ServiceManager].insert(
546 "service_manager::mojom::ServiceManager"); 534 "service_manager::mojom::ServiceManager");
547 spec.requires["*"].insert("service_manager:service_factory"); 535 spec.requires["*"].insert("service_manager:service_factory");
548 spec.requires[catalog::mojom::kServiceName].insert( 536 spec.requires[catalog::mojom::kServiceName].insert(
549 "service_manager:resolver"); 537 "service_manager:resolver");
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 // Now that the instance has a Service, we can connect to it. 949 // Now that the instance has a Service, we can connect to it.
962 bool connected = instance->ConnectToService(&params); 950 bool connected = instance->ConnectToService(&params);
963 DCHECK(connected); 951 DCHECK(connected);
964 } 952 }
965 953
966 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() { 954 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() {
967 return weak_ptr_factory_.GetWeakPtr(); 955 return weak_ptr_factory_.GetWeakPtr();
968 } 956 }
969 957
970 } // namespace service_manager 958 } // namespace service_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698