OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/arc/arc_bridge_service.h" | 5 #include "components/arc/arc_bridge_service.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/sequenced_task_runner.h" | 10 #include "base/sequenced_task_runner.h" |
11 #include "base/thread_task_runner_handle.h" | 11 #include "base/thread_task_runner_handle.h" |
12 #include "chromeos/chromeos_switches.h" | 12 #include "chromeos/chromeos_switches.h" |
13 #include "components/arc/arc_bridge_service_impl.h" | 13 #include "components/arc/arc_bridge_service_impl.h" |
14 | 14 |
15 namespace arc { | 15 namespace arc { |
16 | 16 |
17 namespace { | 17 namespace { |
18 | 18 |
19 // Weak pointer. This class is owned by ArcServiceManager. | 19 // Weak pointer. This class is owned by ArcServiceManager. |
20 ArcBridgeService* g_arc_bridge_service = nullptr; | 20 ArcBridgeService* g_arc_bridge_service = nullptr; |
21 | 21 |
22 } // namespace | 22 } // namespace |
23 | 23 |
24 ArcBridgeService::ArcBridgeService() | 24 ArcBridgeService::ArcBridgeService() |
25 : available_(false), state_(State::STOPPED) { | 25 : available_(false), state_(State::STOPPED), weak_factory_(this) { |
26 DCHECK(!g_arc_bridge_service); | 26 DCHECK(!g_arc_bridge_service); |
27 g_arc_bridge_service = this; | 27 g_arc_bridge_service = this; |
28 } | 28 } |
29 | 29 |
30 ArcBridgeService::~ArcBridgeService() { | 30 ArcBridgeService::~ArcBridgeService() { |
31 DCHECK(CalledOnValidThread()); | 31 DCHECK(CalledOnValidThread()); |
32 DCHECK(state() == State::STOPPING || state() == State::STOPPED); | 32 DCHECK(state() == State::STOPPING || state() == State::STOPPED); |
33 DCHECK(g_arc_bridge_service == this); | 33 DCHECK(g_arc_bridge_service == this); |
34 g_arc_bridge_service = nullptr; | 34 g_arc_bridge_service = nullptr; |
35 } | 35 } |
(...skipping 15 matching lines...) Expand all Loading... |
51 observer_list_.AddObserver(observer); | 51 observer_list_.AddObserver(observer); |
52 } | 52 } |
53 | 53 |
54 void ArcBridgeService::RemoveObserver(Observer* observer) { | 54 void ArcBridgeService::RemoveObserver(Observer* observer) { |
55 DCHECK(CalledOnValidThread()); | 55 DCHECK(CalledOnValidThread()); |
56 observer_list_.RemoveObserver(observer); | 56 observer_list_.RemoveObserver(observer); |
57 } | 57 } |
58 | 58 |
59 void ArcBridgeService::OnAppInstanceReady(AppInstancePtr app_ptr) { | 59 void ArcBridgeService::OnAppInstanceReady(AppInstancePtr app_ptr) { |
60 DCHECK(CalledOnValidThread()); | 60 DCHECK(CalledOnValidThread()); |
61 app_ptr_ = std::move(app_ptr); | 61 temporary_app_ptr_ = std::move(app_ptr); |
| 62 temporary_app_ptr_.QueryVersion(base::Bind( |
| 63 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); |
| 64 } |
| 65 |
| 66 void ArcBridgeService::OnAppVersionReady(int32_t version) { |
| 67 DCHECK(CalledOnValidThread()); |
| 68 app_ptr_ = std::move(temporary_app_ptr_); |
62 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); | 69 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); |
63 } | 70 } |
64 | 71 |
65 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { | 72 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { |
66 DCHECK(CalledOnValidThread()); | 73 DCHECK(CalledOnValidThread()); |
67 input_ptr_ = std::move(input_ptr); | 74 temporary_input_ptr_ = std::move(input_ptr); |
| 75 temporary_input_ptr_.QueryVersion(base::Bind( |
| 76 &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr())); |
| 77 } |
| 78 |
| 79 void ArcBridgeService::OnInputVersionReady(int32_t version) { |
| 80 DCHECK(CalledOnValidThread()); |
| 81 input_ptr_ = std::move(temporary_input_ptr_); |
68 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); | 82 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); |
69 } | 83 } |
70 | 84 |
71 void ArcBridgeService::OnNotificationsInstanceReady( | 85 void ArcBridgeService::OnNotificationsInstanceReady( |
72 NotificationsInstancePtr notifications_ptr) { | 86 NotificationsInstancePtr notifications_ptr) { |
73 DCHECK(CalledOnValidThread()); | 87 DCHECK(CalledOnValidThread()); |
74 notifications_ptr_ = std::move(notifications_ptr); | 88 temporary_notifications_ptr_ = std::move(notifications_ptr); |
| 89 temporary_notifications_ptr_.QueryVersion( |
| 90 base::Bind(&ArcBridgeService::OnNotificationsVersionReady, |
| 91 weak_factory_.GetWeakPtr())); |
| 92 } |
| 93 |
| 94 void ArcBridgeService::OnNotificationsVersionReady(int32_t version) { |
| 95 DCHECK(CalledOnValidThread()); |
| 96 notifications_ptr_ = std::move(temporary_notifications_ptr_); |
75 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); | 97 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); |
76 } | 98 } |
77 | 99 |
78 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { | 100 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { |
79 DCHECK(CalledOnValidThread()); | 101 DCHECK(CalledOnValidThread()); |
80 power_ptr_ = std::move(power_ptr); | 102 temporary_power_ptr_ = std::move(power_ptr); |
| 103 temporary_power_ptr_.QueryVersion(base::Bind( |
| 104 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); |
| 105 } |
| 106 |
| 107 void ArcBridgeService::OnPowerVersionReady(int32_t version) { |
| 108 DCHECK(CalledOnValidThread()); |
| 109 power_ptr_ = std::move(temporary_power_ptr_); |
81 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); | 110 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); |
82 } | 111 } |
83 | 112 |
84 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { | 113 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { |
85 DCHECK(CalledOnValidThread()); | 114 DCHECK(CalledOnValidThread()); |
86 process_ptr_ = std::move(process_ptr); | 115 temporary_process_ptr_ = std::move(process_ptr); |
| 116 temporary_process_ptr_.QueryVersion(base::Bind( |
| 117 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); |
| 118 } |
| 119 |
| 120 void ArcBridgeService::OnProcessVersionReady(int32_t version) { |
| 121 DCHECK(CalledOnValidThread()); |
| 122 process_ptr_ = std::move(temporary_process_ptr_); |
87 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); | 123 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); |
88 } | 124 } |
89 | 125 |
90 void ArcBridgeService::OnSettingsInstanceReady( | 126 void ArcBridgeService::OnSettingsInstanceReady( |
91 SettingsInstancePtr settings_ptr) { | 127 SettingsInstancePtr settings_ptr) { |
92 DCHECK(CalledOnValidThread()); | 128 DCHECK(CalledOnValidThread()); |
93 settings_ptr_ = std::move(settings_ptr); | 129 temporary_settings_ptr_ = std::move(settings_ptr); |
| 130 temporary_settings_ptr_.QueryVersion(base::Bind( |
| 131 &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr())); |
| 132 } |
| 133 |
| 134 void ArcBridgeService::OnSettingsVersionReady(int32_t version) { |
| 135 settings_ptr_ = std::move(temporary_settings_ptr_); |
94 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); | 136 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); |
95 } | 137 } |
96 | 138 |
97 void ArcBridgeService::SetState(State state) { | 139 void ArcBridgeService::SetState(State state) { |
98 DCHECK(CalledOnValidThread()); | 140 DCHECK(CalledOnValidThread()); |
99 // DCHECK on enum classes not supported. | 141 // DCHECK on enum classes not supported. |
100 DCHECK(state_ != state); | 142 DCHECK(state_ != state); |
101 state_ = state; | 143 state_ = state; |
102 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); | 144 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); |
103 } | 145 } |
104 | 146 |
105 void ArcBridgeService::SetAvailable(bool available) { | 147 void ArcBridgeService::SetAvailable(bool available) { |
106 DCHECK(CalledOnValidThread()); | 148 DCHECK(CalledOnValidThread()); |
107 DCHECK(available_ != available); | 149 DCHECK(available_ != available); |
108 available_ = available; | 150 available_ = available; |
109 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_)); | 151 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_)); |
110 } | 152 } |
111 | 153 |
112 bool ArcBridgeService::CalledOnValidThread() { | 154 bool ArcBridgeService::CalledOnValidThread() { |
113 return thread_checker_.CalledOnValidThread(); | 155 return thread_checker_.CalledOnValidThread(); |
114 } | 156 } |
115 | 157 |
116 } // namespace arc | 158 } // namespace arc |
OLD | NEW |