| OLD | NEW |
| 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/shell/service_manager.h" | 5 #include "services/shell/service_manager.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 CHECK_NE(mojom::kInvalidInstanceID, id); | 406 CHECK_NE(mojom::kInvalidInstanceID, id); |
| 407 return id; | 407 return id; |
| 408 } | 408 } |
| 409 | 409 |
| 410 void PIDAvailable(base::ProcessId pid) { | 410 void PIDAvailable(base::ProcessId pid) { |
| 411 if (pid == base::kNullProcessId) { | 411 if (pid == base::kNullProcessId) { |
| 412 service_manager_->OnInstanceError(this); | 412 service_manager_->OnInstanceError(this); |
| 413 return; | 413 return; |
| 414 } | 414 } |
| 415 pid_ = pid; | 415 pid_ = pid; |
| 416 service_manager_->NotifyPIDAvailable(id_, pid_); | 416 service_manager_->NotifyPIDAvailable(identity_, pid_); |
| 417 } | 417 } |
| 418 | 418 |
| 419 void OnServiceLost(base::WeakPtr<shell::ServiceManager> service_manager) { | 419 void OnServiceLost(base::WeakPtr<shell::ServiceManager> service_manager) { |
| 420 service_.reset(); | 420 service_.reset(); |
| 421 OnConnectionLost(service_manager); | 421 OnConnectionLost(service_manager); |
| 422 } | 422 } |
| 423 | 423 |
| 424 void OnConnectionLost(base::WeakPtr<shell::ServiceManager> service_manager) { | 424 void OnConnectionLost(base::WeakPtr<shell::ServiceManager> service_manager) { |
| 425 // Any time a Connector is lost or we lose the Service connection, it | 425 // Any time a Connector is lost or we lose the Service connection, it |
| 426 // may have been the last pipe using this Instance. If so, clean up. | 426 // may have been the last pipe using this Instance. If so, clean up. |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 Instance* instance = GetExistingInstance(CreateServiceManagerIdentity()); | 587 Instance* instance = GetExistingInstance(CreateServiceManagerIdentity()); |
| 588 DCHECK(instance); | 588 DCHECK(instance); |
| 589 OnInstanceError(instance); | 589 OnInstanceError(instance); |
| 590 } | 590 } |
| 591 | 591 |
| 592 void ServiceManager::OnInstanceError(Instance* instance) { | 592 void ServiceManager::OnInstanceError(Instance* instance) { |
| 593 const Identity identity = instance->identity(); | 593 const Identity identity = instance->identity(); |
| 594 // Remove the Service Manager. | 594 // Remove the Service Manager. |
| 595 auto it = identity_to_instance_.find(identity); | 595 auto it = identity_to_instance_.find(identity); |
| 596 DCHECK(it != identity_to_instance_.end()); | 596 DCHECK(it != identity_to_instance_.end()); |
| 597 int id = instance->id(); | |
| 598 identity_to_instance_.erase(it); | 597 identity_to_instance_.erase(it); |
| 599 listeners_.ForAllPtrs([this, id](mojom::ServiceManagerListener* listener) { | 598 listeners_.ForAllPtrs( |
| 600 listener->OnServiceStopped(id); | 599 [this, identity](mojom::ServiceManagerListener* listener) { |
| 601 }); | 600 listener->OnServiceStopped(mojom::Identity::From(identity)); |
| 601 }); |
| 602 delete instance; | 602 delete instance; |
| 603 if (!instance_quit_callback_.is_null()) | 603 if (!instance_quit_callback_.is_null()) |
| 604 instance_quit_callback_.Run(identity); | 604 instance_quit_callback_.Run(identity); |
| 605 } | 605 } |
| 606 | 606 |
| 607 void ServiceManager::Connect(std::unique_ptr<ConnectParams> params, | 607 void ServiceManager::Connect(std::unique_ptr<ConnectParams> params, |
| 608 mojom::ServicePtr service) { | 608 mojom::ServicePtr service) { |
| 609 TRACE_EVENT_INSTANT1("mojo_shell", "ServiceManager::Connect", | 609 TRACE_EVENT_INSTANT1("mojo_shell", "ServiceManager::Connect", |
| 610 TRACE_EVENT_SCOPE_THREAD, "original_name", | 610 TRACE_EVENT_SCOPE_THREAD, "original_name", |
| 611 params->target().name()); | 611 params->target().name()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 for (auto entry : identity_to_instance_) { | 643 for (auto entry : identity_to_instance_) { |
| 644 if (entry.first.name() == identity.name() && | 644 if (entry.first.name() == identity.name() && |
| 645 entry.first.instance() == identity.instance()) { | 645 entry.first.instance() == identity.instance()) { |
| 646 return entry.second; | 646 return entry.second; |
| 647 } | 647 } |
| 648 } | 648 } |
| 649 } | 649 } |
| 650 return nullptr; | 650 return nullptr; |
| 651 } | 651 } |
| 652 | 652 |
| 653 void ServiceManager::NotifyPIDAvailable(uint32_t id, base::ProcessId pid) { | 653 void ServiceManager::NotifyPIDAvailable(const Identity& identity, |
| 654 listeners_.ForAllPtrs([id, pid](mojom::ServiceManagerListener* listener) { | 654 base::ProcessId pid) { |
| 655 listener->OnServiceStarted(id, pid); | 655 listeners_.ForAllPtrs( |
| 656 }); | 656 [identity, pid](mojom::ServiceManagerListener* listener) { |
| 657 listener->OnServiceStarted(mojom::Identity::From(identity), pid); |
| 658 }); |
| 657 } | 659 } |
| 658 | 660 |
| 659 bool ServiceManager::ConnectToExistingInstance( | 661 bool ServiceManager::ConnectToExistingInstance( |
| 660 std::unique_ptr<ConnectParams>* params) { | 662 std::unique_ptr<ConnectParams>* params) { |
| 661 Instance* instance = GetExistingInstance((*params)->target()); | 663 Instance* instance = GetExistingInstance((*params)->target()); |
| 662 return !!instance && instance->ConnectToService(params); | 664 return !!instance && instance->ConnectToService(params); |
| 663 } | 665 } |
| 664 | 666 |
| 665 ServiceManager::Instance* ServiceManager::CreateInstance( | 667 ServiceManager::Instance* ServiceManager::CreateInstance( |
| 666 const Identity& source, | 668 const Identity& source, |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 798 // Now that the instance has a Service, we can connect to it. | 800 // Now that the instance has a Service, we can connect to it. |
| 799 bool connected = instance->ConnectToService(¶ms); | 801 bool connected = instance->ConnectToService(¶ms); |
| 800 DCHECK(connected); | 802 DCHECK(connected); |
| 801 } | 803 } |
| 802 | 804 |
| 803 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() { | 805 base::WeakPtr<ServiceManager> ServiceManager::GetWeakPtr() { |
| 804 return weak_ptr_factory_.GetWeakPtr(); | 806 return weak_ptr_factory_.GetWeakPtr(); |
| 805 } | 807 } |
| 806 | 808 |
| 807 } // namespace shell | 809 } // namespace shell |
| OLD | NEW |