| 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" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 DCHECK(CalledOnValidThread()); | 60 DCHECK(CalledOnValidThread()); |
| 61 temporary_app_ptr_ = std::move(app_ptr); | 61 temporary_app_ptr_ = std::move(app_ptr); |
| 62 temporary_app_ptr_.QueryVersion(base::Bind( | 62 temporary_app_ptr_.QueryVersion(base::Bind( |
| 63 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); | 63 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void ArcBridgeService::OnAppVersionReady(int32_t version) { | 66 void ArcBridgeService::OnAppVersionReady(int32_t version) { |
| 67 DCHECK(CalledOnValidThread()); | 67 DCHECK(CalledOnValidThread()); |
| 68 app_ptr_ = std::move(temporary_app_ptr_); | 68 app_ptr_ = std::move(temporary_app_ptr_); |
| 69 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); | 69 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); |
| 70 app_ptr_.set_connection_error_handler(base::Bind( |
| 71 &ArcBridgeService::CloseAppChannel, weak_factory_.GetWeakPtr())); |
| 72 } |
| 73 |
| 74 void ArcBridgeService::CloseAppChannel() { |
| 75 DCHECK(CalledOnValidThread()); |
| 76 if (!app_ptr_) |
| 77 return; |
| 78 |
| 79 app_ptr_.reset(); |
| 80 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceClosed()); |
| 70 } | 81 } |
| 71 | 82 |
| 72 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { | 83 void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { |
| 73 DCHECK(CalledOnValidThread()); | 84 DCHECK(CalledOnValidThread()); |
| 74 temporary_input_ptr_ = std::move(input_ptr); | 85 temporary_input_ptr_ = std::move(input_ptr); |
| 75 temporary_input_ptr_.QueryVersion(base::Bind( | 86 temporary_input_ptr_.QueryVersion(base::Bind( |
| 76 &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr())); | 87 &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr())); |
| 77 } | 88 } |
| 78 | 89 |
| 79 void ArcBridgeService::OnInputVersionReady(int32_t version) { | 90 void ArcBridgeService::OnInputVersionReady(int32_t version) { |
| 80 DCHECK(CalledOnValidThread()); | 91 DCHECK(CalledOnValidThread()); |
| 81 input_ptr_ = std::move(temporary_input_ptr_); | 92 input_ptr_ = std::move(temporary_input_ptr_); |
| 82 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); | 93 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); |
| 94 input_ptr_.set_connection_error_handler(base::Bind( |
| 95 &ArcBridgeService::CloseInputChannel, weak_factory_.GetWeakPtr())); |
| 96 } |
| 97 |
| 98 void ArcBridgeService::CloseInputChannel() { |
| 99 DCHECK(CalledOnValidThread()); |
| 100 if (!input_ptr_) |
| 101 return; |
| 102 |
| 103 input_ptr_.reset(); |
| 104 FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceClosed()); |
| 83 } | 105 } |
| 84 | 106 |
| 85 void ArcBridgeService::OnNotificationsInstanceReady( | 107 void ArcBridgeService::OnNotificationsInstanceReady( |
| 86 NotificationsInstancePtr notifications_ptr) { | 108 NotificationsInstancePtr notifications_ptr) { |
| 87 DCHECK(CalledOnValidThread()); | 109 DCHECK(CalledOnValidThread()); |
| 88 temporary_notifications_ptr_ = std::move(notifications_ptr); | 110 temporary_notifications_ptr_ = std::move(notifications_ptr); |
| 89 temporary_notifications_ptr_.QueryVersion( | 111 temporary_notifications_ptr_.QueryVersion( |
| 90 base::Bind(&ArcBridgeService::OnNotificationsVersionReady, | 112 base::Bind(&ArcBridgeService::OnNotificationsVersionReady, |
| 91 weak_factory_.GetWeakPtr())); | 113 weak_factory_.GetWeakPtr())); |
| 92 } | 114 } |
| 93 | 115 |
| 94 void ArcBridgeService::OnNotificationsVersionReady(int32_t version) { | 116 void ArcBridgeService::OnNotificationsVersionReady(int32_t version) { |
| 95 DCHECK(CalledOnValidThread()); | 117 DCHECK(CalledOnValidThread()); |
| 96 notifications_ptr_ = std::move(temporary_notifications_ptr_); | 118 notifications_ptr_ = std::move(temporary_notifications_ptr_); |
| 97 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); | 119 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); |
| 120 notifications_ptr_.set_connection_error_handler( |
| 121 base::Bind(&ArcBridgeService::CloseNotificationsChannel, |
| 122 weak_factory_.GetWeakPtr())); |
| 123 } |
| 124 |
| 125 void ArcBridgeService::CloseNotificationsChannel() { |
| 126 DCHECK(CalledOnValidThread()); |
| 127 if (!notifications_ptr_) |
| 128 return; |
| 129 |
| 130 notifications_ptr_.reset(); |
| 131 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceClosed()); |
| 98 } | 132 } |
| 99 | 133 |
| 100 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { | 134 void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { |
| 101 DCHECK(CalledOnValidThread()); | 135 DCHECK(CalledOnValidThread()); |
| 102 temporary_power_ptr_ = std::move(power_ptr); | 136 temporary_power_ptr_ = std::move(power_ptr); |
| 103 temporary_power_ptr_.QueryVersion(base::Bind( | 137 temporary_power_ptr_.QueryVersion(base::Bind( |
| 104 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); | 138 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); |
| 105 } | 139 } |
| 106 | 140 |
| 107 void ArcBridgeService::OnPowerVersionReady(int32_t version) { | 141 void ArcBridgeService::OnPowerVersionReady(int32_t version) { |
| 108 DCHECK(CalledOnValidThread()); | 142 DCHECK(CalledOnValidThread()); |
| 109 power_ptr_ = std::move(temporary_power_ptr_); | 143 power_ptr_ = std::move(temporary_power_ptr_); |
| 110 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); | 144 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); |
| 145 power_ptr_.set_connection_error_handler(base::Bind( |
| 146 &ArcBridgeService::ClosePowerChannel, weak_factory_.GetWeakPtr())); |
| 147 } |
| 148 |
| 149 void ArcBridgeService::ClosePowerChannel() { |
| 150 DCHECK(CalledOnValidThread()); |
| 151 if (!power_ptr_) |
| 152 return; |
| 153 |
| 154 power_ptr_.reset(); |
| 155 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceClosed()); |
| 111 } | 156 } |
| 112 | 157 |
| 113 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { | 158 void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { |
| 114 DCHECK(CalledOnValidThread()); | 159 DCHECK(CalledOnValidThread()); |
| 115 temporary_process_ptr_ = std::move(process_ptr); | 160 temporary_process_ptr_ = std::move(process_ptr); |
| 116 temporary_process_ptr_.QueryVersion(base::Bind( | 161 temporary_process_ptr_.QueryVersion(base::Bind( |
| 117 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); | 162 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); |
| 118 } | 163 } |
| 119 | 164 |
| 120 void ArcBridgeService::OnProcessVersionReady(int32_t version) { | 165 void ArcBridgeService::OnProcessVersionReady(int32_t version) { |
| 121 DCHECK(CalledOnValidThread()); | 166 DCHECK(CalledOnValidThread()); |
| 122 process_ptr_ = std::move(temporary_process_ptr_); | 167 process_ptr_ = std::move(temporary_process_ptr_); |
| 123 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); | 168 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); |
| 169 process_ptr_.set_connection_error_handler(base::Bind( |
| 170 &ArcBridgeService::CloseProcessChannel, weak_factory_.GetWeakPtr())); |
| 171 } |
| 172 |
| 173 void ArcBridgeService::CloseProcessChannel() { |
| 174 DCHECK(CalledOnValidThread()); |
| 175 if (!process_ptr_) |
| 176 return; |
| 177 |
| 178 process_ptr_.reset(); |
| 179 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceClosed()); |
| 124 } | 180 } |
| 125 | 181 |
| 126 void ArcBridgeService::OnSettingsInstanceReady( | 182 void ArcBridgeService::OnSettingsInstanceReady( |
| 127 SettingsInstancePtr settings_ptr) { | 183 SettingsInstancePtr settings_ptr) { |
| 128 DCHECK(CalledOnValidThread()); | 184 DCHECK(CalledOnValidThread()); |
| 129 temporary_settings_ptr_ = std::move(settings_ptr); | 185 temporary_settings_ptr_ = std::move(settings_ptr); |
| 130 temporary_settings_ptr_.QueryVersion(base::Bind( | 186 temporary_settings_ptr_.QueryVersion(base::Bind( |
| 131 &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr())); | 187 &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr())); |
| 132 } | 188 } |
| 133 | 189 |
| 134 void ArcBridgeService::OnSettingsVersionReady(int32_t version) { | 190 void ArcBridgeService::OnSettingsVersionReady(int32_t version) { |
| 135 settings_ptr_ = std::move(temporary_settings_ptr_); | 191 settings_ptr_ = std::move(temporary_settings_ptr_); |
| 136 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); | 192 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); |
| 193 settings_ptr_.set_connection_error_handler(base::Bind( |
| 194 &ArcBridgeService::CloseSettingsChannel, weak_factory_.GetWeakPtr())); |
| 195 } |
| 196 |
| 197 void ArcBridgeService::CloseSettingsChannel() { |
| 198 DCHECK(CalledOnValidThread()); |
| 199 if (!settings_ptr_) |
| 200 return; |
| 201 |
| 202 settings_ptr_.reset(); |
| 203 FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceClosed()); |
| 137 } | 204 } |
| 138 | 205 |
| 139 void ArcBridgeService::SetState(State state) { | 206 void ArcBridgeService::SetState(State state) { |
| 140 DCHECK(CalledOnValidThread()); | 207 DCHECK(CalledOnValidThread()); |
| 141 // DCHECK on enum classes not supported. | 208 // DCHECK on enum classes not supported. |
| 142 DCHECK(state_ != state); | 209 DCHECK(state_ != state); |
| 143 state_ = state; | 210 state_ = state; |
| 144 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); | 211 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); |
| 145 } | 212 } |
| 146 | 213 |
| 147 void ArcBridgeService::SetAvailable(bool available) { | 214 void ArcBridgeService::SetAvailable(bool available) { |
| 148 DCHECK(CalledOnValidThread()); | 215 DCHECK(CalledOnValidThread()); |
| 149 DCHECK(available_ != available); | 216 DCHECK(available_ != available); |
| 150 available_ = available; | 217 available_ = available; |
| 151 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_)); | 218 FOR_EACH_OBSERVER(Observer, observer_list(), OnAvailableChanged(available_)); |
| 152 } | 219 } |
| 153 | 220 |
| 154 bool ArcBridgeService::CalledOnValidThread() { | 221 bool ArcBridgeService::CalledOnValidThread() { |
| 155 return thread_checker_.CalledOnValidThread(); | 222 return thread_checker_.CalledOnValidThread(); |
| 156 } | 223 } |
| 157 | 224 |
| 225 void ArcBridgeService::CloseAllChannels() { |
| 226 // Call all the error handlers of all the channels to both close the channel |
| 227 // and notify any observers that the channel is closed. |
| 228 CloseAppChannel(); |
| 229 CloseInputChannel(); |
| 230 CloseNotificationsChannel(); |
| 231 ClosePowerChannel(); |
| 232 CloseProcessChannel(); |
| 233 CloseSettingsChannel(); |
| 234 } |
| 235 |
| 158 } // namespace arc | 236 } // namespace arc |
| OLD | NEW |