OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/resource_coordinator/coordination_unit/coordination_unit_prov
ider_impl.h" | 5 #include "services/resource_coordinator/coordination_unit/coordination_unit_prov
ider_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "mojo/public/cpp/bindings/strong_binding.h" | 11 #include "mojo/public/cpp/bindings/strong_binding.h" |
12 #include "services/resource_coordinator/coordination_unit/coordination_unit_fact
ory.h" | 12 #include "services/resource_coordinator/coordination_unit/coordination_unit_fact
ory.h" |
| 13 #include "services/resource_coordinator/coordination_unit/coordination_unit_grap
h_observer.h" |
13 #include "services/resource_coordinator/coordination_unit/coordination_unit_impl
.h" | 14 #include "services/resource_coordinator/coordination_unit/coordination_unit_impl
.h" |
14 #include "services/service_manager/public/cpp/service_context_ref.h" | 15 #include "services/service_manager/public/cpp/service_context_ref.h" |
15 | 16 |
16 namespace resource_coordinator { | 17 namespace resource_coordinator { |
17 | 18 |
18 CoordinationUnitProviderImpl::CoordinationUnitProviderImpl( | 19 CoordinationUnitProviderImpl::CoordinationUnitProviderImpl( |
19 service_manager::ServiceContextRefFactory* service_ref_factory) | 20 service_manager::ServiceContextRefFactory* service_ref_factory, |
20 : service_ref_factory_(service_ref_factory) { | 21 CoordinationUnitManager* coordination_unit_manager) |
| 22 : service_ref_factory_(service_ref_factory), |
| 23 coordination_unit_manager_(coordination_unit_manager) { |
21 DCHECK(service_ref_factory); | 24 DCHECK(service_ref_factory); |
22 service_ref_ = service_ref_factory->CreateRef(); | 25 service_ref_ = service_ref_factory->CreateRef(); |
23 } | 26 } |
24 | 27 |
25 CoordinationUnitProviderImpl::~CoordinationUnitProviderImpl() = default; | 28 CoordinationUnitProviderImpl::~CoordinationUnitProviderImpl() = default; |
26 | 29 |
27 void CoordinationUnitProviderImpl::CreateCoordinationUnit( | 30 void CoordinationUnitProviderImpl::CreateCoordinationUnit( |
28 mojom::CoordinationUnitRequest request, | 31 mojom::CoordinationUnitRequest request, |
29 const CoordinationUnitID& id) { | 32 const CoordinationUnitID& id) { |
30 std::unique_ptr<CoordinationUnitImpl> coordination_unit = | 33 std::unique_ptr<CoordinationUnitImpl> coordination_unit = |
31 coordination_unit_factory::CreateCoordinationUnit( | 34 coordination_unit_factory::CreateCoordinationUnit( |
32 id, service_ref_factory_->CreateRef()); | 35 id, service_ref_factory_->CreateRef()); |
33 | 36 |
34 mojo::MakeStrongBinding(std::move(coordination_unit), std::move(request)); | 37 CoordinationUnitImpl* coordination_unit_impl = coordination_unit.get(); |
| 38 |
| 39 auto coordination_unit_binding = |
| 40 mojo::MakeStrongBinding(std::move(coordination_unit), std::move(request)); |
| 41 |
| 42 coordination_unit_manager_->NotifyObserversCoordinationUnitCreated( |
| 43 coordination_unit_impl); |
| 44 |
| 45 coordination_unit_binding->set_connection_error_handler(base::Bind( |
| 46 &CoordinationUnitManager::NotifyObserversCoordinationUnitWillBeDestroyed, |
| 47 base::Unretained(coordination_unit_manager_), |
| 48 base::Unretained(coordination_unit_impl))); |
35 } | 49 } |
36 | 50 |
37 // static | 51 // static |
38 void CoordinationUnitProviderImpl::Create( | 52 void CoordinationUnitProviderImpl::Create( |
39 service_manager::ServiceContextRefFactory* service_ref_factory, | 53 service_manager::ServiceContextRefFactory* service_ref_factory, |
| 54 CoordinationUnitManager* coordination_unit_manager, |
40 const service_manager::BindSourceInfo& source_info, | 55 const service_manager::BindSourceInfo& source_info, |
41 resource_coordinator::mojom::CoordinationUnitProviderRequest request) { | 56 resource_coordinator::mojom::CoordinationUnitProviderRequest request) { |
42 mojo::MakeStrongBinding( | 57 mojo::MakeStrongBinding(base::MakeUnique<CoordinationUnitProviderImpl>( |
43 base::MakeUnique<CoordinationUnitProviderImpl>(service_ref_factory), | 58 service_ref_factory, coordination_unit_manager), |
44 std::move(request)); | 59 std::move(request)); |
45 } | 60 } |
46 | 61 |
47 } // namespace resource_coordinator | 62 } // namespace resource_coordinator |
OLD | NEW |