| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 } | 49 } |
| 50 | 50 |
| 51 // static | 51 // static |
| 52 bool ArcBridgeService::GetEnabled(const base::CommandLine* command_line) { | 52 bool ArcBridgeService::GetEnabled(const base::CommandLine* command_line) { |
| 53 return command_line->HasSwitch(chromeos::switches::kEnableArc); | 53 return command_line->HasSwitch(chromeos::switches::kEnableArc); |
| 54 } | 54 } |
| 55 | 55 |
| 56 void ArcBridgeService::AddObserver(Observer* observer) { | 56 void ArcBridgeService::AddObserver(Observer* observer) { |
| 57 DCHECK(CalledOnValidThread()); | 57 DCHECK(CalledOnValidThread()); |
| 58 observer_list_.AddObserver(observer); | 58 observer_list_.AddObserver(observer); |
| 59 | |
| 60 // If any of the instances were ready before the call to AddObserver(), the | |
| 61 // |observer| won't get any readiness events. For such cases, we have to call | |
| 62 // them explicitly now to avoid a race. | |
| 63 if (app_instance()) | |
| 64 observer->OnAppInstanceReady(); | |
| 65 if (audio_instance()) | |
| 66 observer->OnAudioInstanceReady(); | |
| 67 if (auth_instance()) | |
| 68 observer->OnAuthInstanceReady(); | |
| 69 if (bluetooth_instance()) | |
| 70 observer->OnBluetoothInstanceReady(); | |
| 71 if (clipboard_instance()) | |
| 72 observer->OnClipboardInstanceReady(); | |
| 73 if (crash_collector_instance()) | |
| 74 observer->OnCrashCollectorInstanceReady(); | |
| 75 if (file_system_instance()) | |
| 76 observer->OnFileSystemInstanceReady(); | |
| 77 if (ime_instance()) | |
| 78 observer->OnImeInstanceReady(); | |
| 79 if (metrics_instance()) | |
| 80 observer->OnMetricsInstanceReady(); | |
| 81 if (net_instance()) | |
| 82 observer->OnNetInstanceReady(); | |
| 83 if (notifications_instance()) | |
| 84 observer->OnNotificationsInstanceReady(); | |
| 85 if (obb_mounter_instance()) | |
| 86 observer->OnObbMounterInstanceReady(); | |
| 87 if (policy_instance()) | |
| 88 observer->OnPolicyInstanceReady(); | |
| 89 if (power_instance()) | |
| 90 observer->OnPowerInstanceReady(); | |
| 91 if (process_instance()) | |
| 92 observer->OnProcessInstanceReady(); | |
| 93 if (storage_manager_instance()) | |
| 94 observer->OnStorageManagerInstanceReady(); | |
| 95 if (video_instance()) | |
| 96 observer->OnVideoInstanceReady(); | |
| 97 if (window_manager_instance()) | |
| 98 observer->OnWindowManagerInstanceReady(); | |
| 99 } | 59 } |
| 100 | 60 |
| 101 void ArcBridgeService::RemoveObserver(Observer* observer) { | 61 void ArcBridgeService::RemoveObserver(Observer* observer) { |
| 102 DCHECK(CalledOnValidThread()); | 62 DCHECK(CalledOnValidThread()); |
| 103 observer_list_.RemoveObserver(observer); | 63 observer_list_.RemoveObserver(observer); |
| 104 } | 64 } |
| 105 | 65 |
| 106 void ArcBridgeService::OnAppInstanceReady(mojom::AppInstancePtr app_ptr) { | 66 void ArcBridgeService::OnAppInstanceReady(mojom::AppInstancePtr app_ptr) { |
| 107 DCHECK(CalledOnValidThread()); | 67 DCHECK(CalledOnValidThread()); |
| 108 temporary_app_ptr_ = std::move(app_ptr); | 68 app_.OnInstanceReady(std::move(app_ptr)); |
| 109 temporary_app_ptr_.QueryVersion(base::Bind( | |
| 110 &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); | |
| 111 } | |
| 112 | |
| 113 void ArcBridgeService::OnAppVersionReady(uint32_t version) { | |
| 114 DCHECK(CalledOnValidThread()); | |
| 115 app_ptr_ = std::move(temporary_app_ptr_); | |
| 116 app_ptr_.set_connection_error_handler(base::Bind( | |
| 117 &ArcBridgeService::CloseAppChannel, weak_factory_.GetWeakPtr())); | |
| 118 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); | |
| 119 } | |
| 120 | |
| 121 void ArcBridgeService::CloseAppChannel() { | |
| 122 DCHECK(CalledOnValidThread()); | |
| 123 if (!app_ptr_) | |
| 124 return; | |
| 125 | |
| 126 app_ptr_.reset(); | |
| 127 FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceClosed()); | |
| 128 } | 69 } |
| 129 | 70 |
| 130 void ArcBridgeService::OnAudioInstanceReady(mojom::AudioInstancePtr audio_ptr) { | 71 void ArcBridgeService::OnAudioInstanceReady(mojom::AudioInstancePtr audio_ptr) { |
| 131 DCHECK(CalledOnValidThread()); | 72 DCHECK(CalledOnValidThread()); |
| 132 temporary_audio_ptr_ = std::move(audio_ptr); | 73 audio_.OnInstanceReady(std::move(audio_ptr)); |
| 133 temporary_audio_ptr_.QueryVersion(base::Bind( | |
| 134 &ArcBridgeService::OnAudioVersionReady, weak_factory_.GetWeakPtr())); | |
| 135 } | |
| 136 | |
| 137 void ArcBridgeService::OnAudioVersionReady(uint32_t version) { | |
| 138 DCHECK(CalledOnValidThread()); | |
| 139 audio_ptr_ = std::move(temporary_audio_ptr_); | |
| 140 audio_ptr_.set_connection_error_handler(base::Bind( | |
| 141 &ArcBridgeService::CloseAudioChannel, weak_factory_.GetWeakPtr())); | |
| 142 FOR_EACH_OBSERVER(Observer, observer_list(), OnAudioInstanceReady()); | |
| 143 } | |
| 144 | |
| 145 void ArcBridgeService::CloseAudioChannel() { | |
| 146 if (!audio_ptr_) | |
| 147 return; | |
| 148 | |
| 149 audio_ptr_.reset(); | |
| 150 FOR_EACH_OBSERVER(Observer, observer_list(), OnAudioInstanceClosed()); | |
| 151 } | 74 } |
| 152 | 75 |
| 153 void ArcBridgeService::OnAuthInstanceReady(mojom::AuthInstancePtr auth_ptr) { | 76 void ArcBridgeService::OnAuthInstanceReady(mojom::AuthInstancePtr auth_ptr) { |
| 154 DCHECK(CalledOnValidThread()); | 77 DCHECK(CalledOnValidThread()); |
| 155 temporary_auth_ptr_ = std::move(auth_ptr); | 78 auth_.OnInstanceReady(std::move(auth_ptr)); |
| 156 temporary_auth_ptr_.QueryVersion(base::Bind( | |
| 157 &ArcBridgeService::OnAuthVersionReady, weak_factory_.GetWeakPtr())); | |
| 158 } | |
| 159 | |
| 160 void ArcBridgeService::OnAuthVersionReady(uint32_t version) { | |
| 161 DCHECK(CalledOnValidThread()); | |
| 162 auth_ptr_ = std::move(temporary_auth_ptr_); | |
| 163 auth_ptr_.set_connection_error_handler(base::Bind( | |
| 164 &ArcBridgeService::CloseAuthChannel, weak_factory_.GetWeakPtr())); | |
| 165 FOR_EACH_OBSERVER(Observer, observer_list(), OnAuthInstanceReady()); | |
| 166 } | |
| 167 | |
| 168 void ArcBridgeService::CloseAuthChannel() { | |
| 169 DCHECK(CalledOnValidThread()); | |
| 170 if (!auth_ptr_) | |
| 171 return; | |
| 172 | |
| 173 auth_ptr_.reset(); | |
| 174 FOR_EACH_OBSERVER(Observer, observer_list(), OnAuthInstanceClosed()); | |
| 175 } | 79 } |
| 176 | 80 |
| 177 void ArcBridgeService::OnBluetoothInstanceReady( | 81 void ArcBridgeService::OnBluetoothInstanceReady( |
| 178 mojom::BluetoothInstancePtr bluetooth_ptr) { | 82 mojom::BluetoothInstancePtr bluetooth_ptr) { |
| 179 DCHECK(CalledOnValidThread()); | 83 DCHECK(CalledOnValidThread()); |
| 180 temporary_bluetooth_ptr_ = std::move(bluetooth_ptr); | 84 bluetooth_.OnInstanceReady(std::move(bluetooth_ptr)); |
| 181 temporary_bluetooth_ptr_.QueryVersion(base::Bind( | |
| 182 &ArcBridgeService::OnBluetoothVersionReady, weak_factory_.GetWeakPtr())); | |
| 183 } | |
| 184 | |
| 185 void ArcBridgeService::OnBluetoothVersionReady(uint32_t version) { | |
| 186 DCHECK(CalledOnValidThread()); | |
| 187 bluetooth_ptr_ = std::move(temporary_bluetooth_ptr_); | |
| 188 bluetooth_ptr_.set_connection_error_handler(base::Bind( | |
| 189 &ArcBridgeService::CloseBluetoothChannel, weak_factory_.GetWeakPtr())); | |
| 190 FOR_EACH_OBSERVER(Observer, observer_list(), OnBluetoothInstanceReady()); | |
| 191 } | |
| 192 | |
| 193 void ArcBridgeService::CloseBluetoothChannel() { | |
| 194 DCHECK(CalledOnValidThread()); | |
| 195 if (!bluetooth_ptr_) | |
| 196 return; | |
| 197 | |
| 198 bluetooth_ptr_.reset(); | |
| 199 FOR_EACH_OBSERVER(Observer, observer_list(), OnBluetoothInstanceClosed()); | |
| 200 } | 85 } |
| 201 | 86 |
| 202 void ArcBridgeService::OnClipboardInstanceReady( | 87 void ArcBridgeService::OnClipboardInstanceReady( |
| 203 mojom::ClipboardInstancePtr clipboard_ptr) { | 88 mojom::ClipboardInstancePtr clipboard_ptr) { |
| 204 DCHECK(CalledOnValidThread()); | 89 DCHECK(CalledOnValidThread()); |
| 205 temporary_clipboard_ptr_ = std::move(clipboard_ptr); | 90 clipboard_.OnInstanceReady(std::move(clipboard_ptr)); |
| 206 temporary_clipboard_ptr_.QueryVersion(base::Bind( | |
| 207 &ArcBridgeService::OnClipboardVersionReady, weak_factory_.GetWeakPtr())); | |
| 208 } | |
| 209 | |
| 210 void ArcBridgeService::OnClipboardVersionReady(uint32_t version) { | |
| 211 DCHECK(CalledOnValidThread()); | |
| 212 clipboard_ptr_ = std::move(temporary_clipboard_ptr_); | |
| 213 clipboard_ptr_.set_connection_error_handler(base::Bind( | |
| 214 &ArcBridgeService::CloseClipboardChannel, weak_factory_.GetWeakPtr())); | |
| 215 FOR_EACH_OBSERVER(Observer, observer_list(), OnClipboardInstanceReady()); | |
| 216 } | |
| 217 | |
| 218 void ArcBridgeService::CloseClipboardChannel() { | |
| 219 DCHECK(CalledOnValidThread()); | |
| 220 if (!clipboard_ptr_) | |
| 221 return; | |
| 222 | |
| 223 clipboard_ptr_.reset(); | |
| 224 FOR_EACH_OBSERVER(Observer, observer_list(), OnClipboardInstanceClosed()); | |
| 225 } | 91 } |
| 226 | 92 |
| 227 void ArcBridgeService::OnCrashCollectorInstanceReady( | 93 void ArcBridgeService::OnCrashCollectorInstanceReady( |
| 228 mojom::CrashCollectorInstancePtr crash_collector_ptr) { | 94 mojom::CrashCollectorInstancePtr crash_collector_ptr) { |
| 229 DCHECK(CalledOnValidThread()); | 95 DCHECK(CalledOnValidThread()); |
| 230 temporary_crash_collector_ptr_ = std::move(crash_collector_ptr); | 96 crash_collector_.OnInstanceReady(std::move(crash_collector_ptr)); |
| 231 temporary_crash_collector_ptr_.QueryVersion( | |
| 232 base::Bind(&ArcBridgeService::OnCrashCollectorVersionReady, | |
| 233 weak_factory_.GetWeakPtr())); | |
| 234 } | |
| 235 | |
| 236 void ArcBridgeService::OnCrashCollectorVersionReady(uint32_t version) { | |
| 237 DCHECK(CalledOnValidThread()); | |
| 238 crash_collector_ptr_ = std::move(temporary_crash_collector_ptr_); | |
| 239 crash_collector_ptr_.set_connection_error_handler( | |
| 240 base::Bind(&ArcBridgeService::CloseCrashCollectorChannel, | |
| 241 weak_factory_.GetWeakPtr())); | |
| 242 FOR_EACH_OBSERVER(Observer, observer_list(), OnCrashCollectorInstanceReady()); | |
| 243 } | |
| 244 | |
| 245 void ArcBridgeService::CloseCrashCollectorChannel() { | |
| 246 DCHECK(CalledOnValidThread()); | |
| 247 if (!crash_collector_ptr_) | |
| 248 return; | |
| 249 | |
| 250 crash_collector_ptr_.reset(); | |
| 251 FOR_EACH_OBSERVER(Observer, observer_list(), | |
| 252 OnCrashCollectorInstanceClosed()); | |
| 253 } | 97 } |
| 254 | 98 |
| 255 void ArcBridgeService::OnFileSystemInstanceReady( | 99 void ArcBridgeService::OnFileSystemInstanceReady( |
| 256 mojom::FileSystemInstancePtr file_system_ptr) { | 100 mojom::FileSystemInstancePtr file_system_ptr) { |
| 257 DCHECK(CalledOnValidThread()); | 101 DCHECK(CalledOnValidThread()); |
| 258 temporary_file_system_ptr_ = std::move(file_system_ptr); | 102 file_system_.OnInstanceReady(std::move(file_system_ptr)); |
| 259 temporary_file_system_ptr_.QueryVersion( | |
| 260 base::Bind(&ArcBridgeService::OnFileSystemVersionReady, | |
| 261 weak_factory_.GetWeakPtr())); | |
| 262 } | |
| 263 | |
| 264 void ArcBridgeService::OnFileSystemVersionReady(uint32_t version) { | |
| 265 DCHECK(CalledOnValidThread()); | |
| 266 file_system_ptr_ = std::move(temporary_file_system_ptr_); | |
| 267 file_system_ptr_.set_connection_error_handler( | |
| 268 base::Bind(&ArcBridgeService::CloseFileSystemChannel, | |
| 269 weak_factory_.GetWeakPtr())); | |
| 270 FOR_EACH_OBSERVER(Observer, observer_list(), OnFileSystemInstanceReady()); | |
| 271 } | |
| 272 | |
| 273 void ArcBridgeService::CloseFileSystemChannel() { | |
| 274 DCHECK(CalledOnValidThread()); | |
| 275 if (!file_system_ptr_) | |
| 276 return; | |
| 277 | |
| 278 file_system_ptr_.reset(); | |
| 279 FOR_EACH_OBSERVER(Observer, observer_list(), | |
| 280 OnFileSystemInstanceClosed()); | |
| 281 } | 103 } |
| 282 | 104 |
| 283 void ArcBridgeService::OnImeInstanceReady(mojom::ImeInstancePtr ime_ptr) { | 105 void ArcBridgeService::OnImeInstanceReady(mojom::ImeInstancePtr ime_ptr) { |
| 284 DCHECK(CalledOnValidThread()); | 106 DCHECK(CalledOnValidThread()); |
| 285 temporary_ime_ptr_ = std::move(ime_ptr); | 107 ime_.OnInstanceReady(std::move(ime_ptr)); |
| 286 temporary_ime_ptr_.QueryVersion(base::Bind( | |
| 287 &ArcBridgeService::OnImeVersionReady, weak_factory_.GetWeakPtr())); | |
| 288 } | |
| 289 | |
| 290 void ArcBridgeService::OnImeVersionReady(uint32_t version) { | |
| 291 DCHECK(CalledOnValidThread()); | |
| 292 ime_ptr_ = std::move(temporary_ime_ptr_); | |
| 293 ime_ptr_.set_connection_error_handler(base::Bind( | |
| 294 &ArcBridgeService::CloseImeChannel, weak_factory_.GetWeakPtr())); | |
| 295 FOR_EACH_OBSERVER(Observer, observer_list(), OnImeInstanceReady()); | |
| 296 } | |
| 297 | |
| 298 void ArcBridgeService::CloseImeChannel() { | |
| 299 DCHECK(CalledOnValidThread()); | |
| 300 if (!ime_ptr_) | |
| 301 return; | |
| 302 | |
| 303 ime_ptr_.reset(); | |
| 304 FOR_EACH_OBSERVER(Observer, observer_list(), OnImeInstanceClosed()); | |
| 305 } | 108 } |
| 306 | 109 |
| 307 void ArcBridgeService::OnIntentHelperInstanceReady( | 110 void ArcBridgeService::OnIntentHelperInstanceReady( |
| 308 mojom::IntentHelperInstancePtr intent_helper_ptr) { | 111 mojom::IntentHelperInstancePtr intent_helper_ptr) { |
| 309 DCHECK(CalledOnValidThread()); | 112 DCHECK(CalledOnValidThread()); |
| 310 temporary_intent_helper_ptr_ = std::move(intent_helper_ptr); | 113 intent_helper_.OnInstanceReady(std::move(intent_helper_ptr)); |
| 311 temporary_intent_helper_ptr_.QueryVersion( | |
| 312 base::Bind(&ArcBridgeService::OnIntentHelperVersionReady, | |
| 313 weak_factory_.GetWeakPtr())); | |
| 314 } | |
| 315 | |
| 316 void ArcBridgeService::OnIntentHelperVersionReady(uint32_t version) { | |
| 317 DCHECK(CalledOnValidThread()); | |
| 318 intent_helper_ptr_ = std::move(temporary_intent_helper_ptr_); | |
| 319 intent_helper_ptr_.set_connection_error_handler(base::Bind( | |
| 320 &ArcBridgeService::CloseIntentHelperChannel, weak_factory_.GetWeakPtr())); | |
| 321 FOR_EACH_OBSERVER(Observer, observer_list(), OnIntentHelperInstanceReady()); | |
| 322 } | |
| 323 | |
| 324 void ArcBridgeService::CloseIntentHelperChannel() { | |
| 325 DCHECK(CalledOnValidThread()); | |
| 326 if (!intent_helper_ptr_) | |
| 327 return; | |
| 328 | |
| 329 intent_helper_ptr_.reset(); | |
| 330 FOR_EACH_OBSERVER(Observer, observer_list(), OnIntentHelperInstanceClosed()); | |
| 331 } | 114 } |
| 332 | 115 |
| 333 void ArcBridgeService::OnMetricsInstanceReady( | 116 void ArcBridgeService::OnMetricsInstanceReady( |
| 334 mojom::MetricsInstancePtr metrics_ptr) { | 117 mojom::MetricsInstancePtr metrics_ptr) { |
| 335 DCHECK(CalledOnValidThread()); | 118 DCHECK(CalledOnValidThread()); |
| 336 temporary_metrics_ptr_ = std::move(metrics_ptr); | 119 metrics_.OnInstanceReady(std::move(metrics_ptr)); |
| 337 temporary_metrics_ptr_.QueryVersion(base::Bind( | |
| 338 &ArcBridgeService::OnMetricsVersionReady, weak_factory_.GetWeakPtr())); | |
| 339 } | |
| 340 | |
| 341 void ArcBridgeService::OnMetricsVersionReady(uint32_t version) { | |
| 342 DCHECK(CalledOnValidThread()); | |
| 343 metrics_ptr_ = std::move(temporary_metrics_ptr_); | |
| 344 metrics_ptr_.set_connection_error_handler(base::Bind( | |
| 345 &ArcBridgeService::CloseMetricsChannel, weak_factory_.GetWeakPtr())); | |
| 346 FOR_EACH_OBSERVER(Observer, observer_list(), OnMetricsInstanceReady()); | |
| 347 } | |
| 348 | |
| 349 void ArcBridgeService::CloseMetricsChannel() { | |
| 350 DCHECK(CalledOnValidThread()); | |
| 351 if (!metrics_ptr_) | |
| 352 return; | |
| 353 | |
| 354 metrics_ptr_.reset(); | |
| 355 FOR_EACH_OBSERVER(Observer, observer_list(), OnMetricsInstanceClosed()); | |
| 356 } | 120 } |
| 357 | 121 |
| 358 void ArcBridgeService::OnNetInstanceReady(mojom::NetInstancePtr net_ptr) { | 122 void ArcBridgeService::OnNetInstanceReady(mojom::NetInstancePtr net_ptr) { |
| 359 DCHECK(CalledOnValidThread()); | 123 DCHECK(CalledOnValidThread()); |
| 360 temporary_net_ptr_ = std::move(net_ptr); | 124 net_.OnInstanceReady(std::move(net_ptr)); |
| 361 temporary_net_ptr_.QueryVersion(base::Bind( | |
| 362 &ArcBridgeService::OnNetVersionReady, weak_factory_.GetWeakPtr())); | |
| 363 } | |
| 364 | |
| 365 void ArcBridgeService::OnNetVersionReady(uint32_t version) { | |
| 366 DCHECK(CalledOnValidThread()); | |
| 367 net_ptr_ = std::move(temporary_net_ptr_); | |
| 368 net_ptr_.set_connection_error_handler(base::Bind( | |
| 369 &ArcBridgeService::CloseNetChannel, weak_factory_.GetWeakPtr())); | |
| 370 FOR_EACH_OBSERVER(Observer, observer_list(), OnNetInstanceReady()); | |
| 371 } | |
| 372 | |
| 373 void ArcBridgeService::CloseNetChannel() { | |
| 374 DCHECK(CalledOnValidThread()); | |
| 375 if (!net_ptr_) | |
| 376 return; | |
| 377 | |
| 378 net_ptr_.reset(); | |
| 379 FOR_EACH_OBSERVER(Observer, observer_list(), OnNetInstanceClosed()); | |
| 380 } | 125 } |
| 381 | 126 |
| 382 void ArcBridgeService::OnNotificationsInstanceReady( | 127 void ArcBridgeService::OnNotificationsInstanceReady( |
| 383 mojom::NotificationsInstancePtr notifications_ptr) { | 128 mojom::NotificationsInstancePtr notifications_ptr) { |
| 384 DCHECK(CalledOnValidThread()); | 129 DCHECK(CalledOnValidThread()); |
| 385 temporary_notifications_ptr_ = std::move(notifications_ptr); | 130 notifications_.OnInstanceReady(std::move(notifications_ptr)); |
| 386 temporary_notifications_ptr_.QueryVersion( | |
| 387 base::Bind(&ArcBridgeService::OnNotificationsVersionReady, | |
| 388 weak_factory_.GetWeakPtr())); | |
| 389 } | |
| 390 | |
| 391 void ArcBridgeService::OnNotificationsVersionReady(uint32_t version) { | |
| 392 DCHECK(CalledOnValidThread()); | |
| 393 notifications_ptr_ = std::move(temporary_notifications_ptr_); | |
| 394 notifications_ptr_.set_connection_error_handler( | |
| 395 base::Bind(&ArcBridgeService::CloseNotificationsChannel, | |
| 396 weak_factory_.GetWeakPtr())); | |
| 397 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); | |
| 398 } | |
| 399 | |
| 400 void ArcBridgeService::CloseNotificationsChannel() { | |
| 401 DCHECK(CalledOnValidThread()); | |
| 402 if (!notifications_ptr_) | |
| 403 return; | |
| 404 | |
| 405 notifications_ptr_.reset(); | |
| 406 FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceClosed()); | |
| 407 } | 131 } |
| 408 | 132 |
| 409 void ArcBridgeService::OnObbMounterInstanceReady( | 133 void ArcBridgeService::OnObbMounterInstanceReady( |
| 410 mojom::ObbMounterInstancePtr obb_mounter_ptr) { | 134 mojom::ObbMounterInstancePtr obb_mounter_ptr) { |
| 411 DCHECK(CalledOnValidThread()); | 135 DCHECK(CalledOnValidThread()); |
| 412 temporary_obb_mounter_ptr_ = std::move(obb_mounter_ptr); | 136 obb_mounter_.OnInstanceReady(std::move(obb_mounter_ptr)); |
| 413 temporary_obb_mounter_ptr_.QueryVersion(base::Bind( | |
| 414 &ArcBridgeService::OnObbMounterVersionReady, | |
| 415 weak_factory_.GetWeakPtr())); | |
| 416 } | |
| 417 | |
| 418 void ArcBridgeService::OnObbMounterVersionReady(uint32_t version) { | |
| 419 DCHECK(CalledOnValidThread()); | |
| 420 obb_mounter_ptr_ = std::move(temporary_obb_mounter_ptr_); | |
| 421 obb_mounter_ptr_.set_connection_error_handler(base::Bind( | |
| 422 &ArcBridgeService::CloseObbMounterChannel, | |
| 423 weak_factory_.GetWeakPtr())); | |
| 424 FOR_EACH_OBSERVER(Observer, observer_list(), OnObbMounterInstanceReady()); | |
| 425 } | |
| 426 | |
| 427 void ArcBridgeService::CloseObbMounterChannel() { | |
| 428 if (!obb_mounter_ptr_) | |
| 429 return; | |
| 430 | |
| 431 obb_mounter_ptr_.reset(); | |
| 432 FOR_EACH_OBSERVER(Observer, observer_list(), OnObbMounterInstanceClosed()); | |
| 433 } | 137 } |
| 434 | 138 |
| 435 void ArcBridgeService::OnPolicyInstanceReady( | 139 void ArcBridgeService::OnPolicyInstanceReady( |
| 436 mojom::PolicyInstancePtr policy_ptr) { | 140 mojom::PolicyInstancePtr policy_ptr) { |
| 437 DCHECK(CalledOnValidThread()); | 141 DCHECK(CalledOnValidThread()); |
| 438 temporary_policy_ptr_ = std::move(policy_ptr); | 142 policy_.OnInstanceReady(std::move(policy_ptr)); |
| 439 temporary_policy_ptr_.QueryVersion(base::Bind( | |
| 440 &ArcBridgeService::OnPolicyVersionReady, weak_factory_.GetWeakPtr())); | |
| 441 } | |
| 442 | |
| 443 void ArcBridgeService::OnPolicyVersionReady(uint32_t version) { | |
| 444 DCHECK(CalledOnValidThread()); | |
| 445 policy_ptr_ = std::move(temporary_policy_ptr_); | |
| 446 policy_ptr_.set_connection_error_handler(base::Bind( | |
| 447 &ArcBridgeService::ClosePolicyChannel, weak_factory_.GetWeakPtr())); | |
| 448 FOR_EACH_OBSERVER(Observer, observer_list(), OnPolicyInstanceReady()); | |
| 449 } | |
| 450 | |
| 451 void ArcBridgeService::ClosePolicyChannel() { | |
| 452 DCHECK(CalledOnValidThread()); | |
| 453 if (!policy_ptr_) | |
| 454 return; | |
| 455 | |
| 456 policy_ptr_.reset(); | |
| 457 FOR_EACH_OBSERVER(Observer, observer_list(), OnPolicyInstanceClosed()); | |
| 458 } | 143 } |
| 459 | 144 |
| 460 void ArcBridgeService::OnPowerInstanceReady(mojom::PowerInstancePtr power_ptr) { | 145 void ArcBridgeService::OnPowerInstanceReady(mojom::PowerInstancePtr power_ptr) { |
| 461 DCHECK(CalledOnValidThread()); | 146 DCHECK(CalledOnValidThread()); |
| 462 temporary_power_ptr_ = std::move(power_ptr); | 147 power_.OnInstanceReady(std::move(power_ptr)); |
| 463 temporary_power_ptr_.QueryVersion(base::Bind( | |
| 464 &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); | |
| 465 } | |
| 466 | |
| 467 void ArcBridgeService::OnPowerVersionReady(uint32_t version) { | |
| 468 DCHECK(CalledOnValidThread()); | |
| 469 power_ptr_ = std::move(temporary_power_ptr_); | |
| 470 power_ptr_.set_connection_error_handler(base::Bind( | |
| 471 &ArcBridgeService::ClosePowerChannel, weak_factory_.GetWeakPtr())); | |
| 472 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); | |
| 473 } | |
| 474 | |
| 475 void ArcBridgeService::ClosePowerChannel() { | |
| 476 DCHECK(CalledOnValidThread()); | |
| 477 if (!power_ptr_) | |
| 478 return; | |
| 479 | |
| 480 power_ptr_.reset(); | |
| 481 FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceClosed()); | |
| 482 } | 148 } |
| 483 | 149 |
| 484 void ArcBridgeService::OnProcessInstanceReady( | 150 void ArcBridgeService::OnProcessInstanceReady( |
| 485 mojom::ProcessInstancePtr process_ptr) { | 151 mojom::ProcessInstancePtr process_ptr) { |
| 486 DCHECK(CalledOnValidThread()); | 152 DCHECK(CalledOnValidThread()); |
| 487 temporary_process_ptr_ = std::move(process_ptr); | 153 process_.OnInstanceReady(std::move(process_ptr)); |
| 488 temporary_process_ptr_.QueryVersion(base::Bind( | |
| 489 &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); | |
| 490 } | |
| 491 | |
| 492 void ArcBridgeService::OnProcessVersionReady(uint32_t version) { | |
| 493 DCHECK(CalledOnValidThread()); | |
| 494 process_ptr_ = std::move(temporary_process_ptr_); | |
| 495 process_ptr_.set_connection_error_handler(base::Bind( | |
| 496 &ArcBridgeService::CloseProcessChannel, weak_factory_.GetWeakPtr())); | |
| 497 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); | |
| 498 } | |
| 499 | |
| 500 void ArcBridgeService::CloseProcessChannel() { | |
| 501 DCHECK(CalledOnValidThread()); | |
| 502 if (!process_ptr_) | |
| 503 return; | |
| 504 | |
| 505 process_ptr_.reset(); | |
| 506 FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceClosed()); | |
| 507 } | 154 } |
| 508 | 155 |
| 509 void ArcBridgeService::OnStorageManagerInstanceReady( | 156 void ArcBridgeService::OnStorageManagerInstanceReady( |
| 510 mojom::StorageManagerInstancePtr storage_manager_ptr) { | 157 mojom::StorageManagerInstancePtr storage_manager_ptr) { |
| 511 DCHECK(CalledOnValidThread()); | 158 DCHECK(CalledOnValidThread()); |
| 512 temporary_storage_manager_ptr_ = std::move(storage_manager_ptr); | 159 storage_manager_.OnInstanceReady(std::move(storage_manager_ptr)); |
| 513 temporary_storage_manager_ptr_.QueryVersion(base::Bind( | |
| 514 &ArcBridgeService::OnStorageManagerVersionReady, | |
| 515 weak_factory_.GetWeakPtr())); | |
| 516 } | |
| 517 | |
| 518 void ArcBridgeService::OnStorageManagerVersionReady(uint32_t version) { | |
| 519 DCHECK(CalledOnValidThread()); | |
| 520 storage_manager_ptr_ = std::move(temporary_storage_manager_ptr_); | |
| 521 storage_manager_ptr_.set_connection_error_handler(base::Bind( | |
| 522 &ArcBridgeService::CloseStorageManagerChannel, | |
| 523 weak_factory_.GetWeakPtr())); | |
| 524 FOR_EACH_OBSERVER( | |
| 525 Observer, observer_list(), OnStorageManagerInstanceReady()); | |
| 526 } | |
| 527 | |
| 528 void ArcBridgeService::CloseStorageManagerChannel() { | |
| 529 DCHECK(CalledOnValidThread()); | |
| 530 if (!storage_manager_ptr_) | |
| 531 return; | |
| 532 | |
| 533 storage_manager_ptr_.reset(); | |
| 534 FOR_EACH_OBSERVER( | |
| 535 Observer, observer_list(), OnStorageManagerInstanceClosed()); | |
| 536 } | 160 } |
| 537 | 161 |
| 538 void ArcBridgeService::OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) { | 162 void ArcBridgeService::OnVideoInstanceReady(mojom::VideoInstancePtr video_ptr) { |
| 539 DCHECK(CalledOnValidThread()); | 163 DCHECK(CalledOnValidThread()); |
| 540 temporary_video_ptr_ = std::move(video_ptr); | 164 video_.OnInstanceReady(std::move(video_ptr)); |
| 541 temporary_video_ptr_.QueryVersion(base::Bind( | |
| 542 &ArcBridgeService::OnVideoVersionReady, weak_factory_.GetWeakPtr())); | |
| 543 } | |
| 544 | |
| 545 void ArcBridgeService::OnVideoVersionReady(uint32_t version) { | |
| 546 DCHECK(CalledOnValidThread()); | |
| 547 video_ptr_ = std::move(temporary_video_ptr_); | |
| 548 video_ptr_.set_connection_error_handler(base::Bind( | |
| 549 &ArcBridgeService::CloseVideoChannel, weak_factory_.GetWeakPtr())); | |
| 550 FOR_EACH_OBSERVER(Observer, observer_list(), OnVideoInstanceReady()); | |
| 551 } | |
| 552 | |
| 553 void ArcBridgeService::CloseVideoChannel() { | |
| 554 DCHECK(CalledOnValidThread()); | |
| 555 if (!video_ptr_) | |
| 556 return; | |
| 557 | |
| 558 video_ptr_.reset(); | |
| 559 FOR_EACH_OBSERVER(Observer, observer_list(), OnVideoInstanceClosed()); | |
| 560 } | 165 } |
| 561 | 166 |
| 562 void ArcBridgeService::OnWindowManagerInstanceReady( | 167 void ArcBridgeService::OnWindowManagerInstanceReady( |
| 563 mojom::WindowManagerInstancePtr window_manager_ptr) { | 168 mojom::WindowManagerInstancePtr window_manager_ptr) { |
| 564 DCHECK(CalledOnValidThread()); | 169 DCHECK(CalledOnValidThread()); |
| 565 temporary_window_manager_ptr_ = std::move(window_manager_ptr); | 170 window_manager_.OnInstanceReady(std::move(window_manager_ptr)); |
| 566 temporary_window_manager_ptr_.QueryVersion(base::Bind( | |
| 567 &ArcBridgeService::OnWindowManagerVersionReady, | |
| 568 weak_factory_.GetWeakPtr())); | |
| 569 } | |
| 570 | |
| 571 void ArcBridgeService::OnWindowManagerVersionReady(uint32_t version) { | |
| 572 DCHECK(CalledOnValidThread()); | |
| 573 window_manager_ptr_ = std::move(temporary_window_manager_ptr_); | |
| 574 window_manager_ptr_.set_connection_error_handler(base::Bind( | |
| 575 &ArcBridgeService::CloseWindowManagerChannel, | |
| 576 weak_factory_.GetWeakPtr())); | |
| 577 FOR_EACH_OBSERVER(Observer, observer_list(), OnWindowManagerInstanceReady()); | |
| 578 } | |
| 579 | |
| 580 void ArcBridgeService::CloseWindowManagerChannel() { | |
| 581 if (!window_manager_ptr_) | |
| 582 return; | |
| 583 | |
| 584 window_manager_ptr_.reset(); | |
| 585 FOR_EACH_OBSERVER(Observer, observer_list(), OnWindowManagerInstanceClosed()); | |
| 586 } | 171 } |
| 587 | 172 |
| 588 void ArcBridgeService::SetState(State state) { | 173 void ArcBridgeService::SetState(State state) { |
| 589 DCHECK(CalledOnValidThread()); | 174 DCHECK(CalledOnValidThread()); |
| 590 // DCHECK on enum classes not supported. | 175 // DCHECK on enum classes not supported. |
| 591 DCHECK(state_ != state); | 176 DCHECK(state_ != state); |
| 592 state_ = state; | 177 state_ = state; |
| 593 VLOG(2) << "State: " << static_cast<uint32_t>(state_); | 178 VLOG(2) << "State: " << static_cast<uint32_t>(state_); |
| 594 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); | 179 FOR_EACH_OBSERVER(Observer, observer_list(), OnStateChanged(state_)); |
| 595 if (state_ == State::READY) | 180 if (state_ == State::READY) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 610 stop_reason_ = stop_reason; | 195 stop_reason_ = stop_reason; |
| 611 } | 196 } |
| 612 | 197 |
| 613 bool ArcBridgeService::CalledOnValidThread() { | 198 bool ArcBridgeService::CalledOnValidThread() { |
| 614 return thread_checker_.CalledOnValidThread(); | 199 return thread_checker_.CalledOnValidThread(); |
| 615 } | 200 } |
| 616 | 201 |
| 617 void ArcBridgeService::CloseAllChannels() { | 202 void ArcBridgeService::CloseAllChannels() { |
| 618 // Call all the error handlers of all the channels to both close the channel | 203 // Call all the error handlers of all the channels to both close the channel |
| 619 // and notify any observers that the channel is closed. | 204 // and notify any observers that the channel is closed. |
| 620 CloseAppChannel(); | 205 app_.CloseChannel(); |
| 621 CloseAudioChannel(); | 206 audio_.CloseChannel(); |
| 622 CloseAuthChannel(); | 207 auth_.CloseChannel(); |
| 623 CloseBluetoothChannel(); | 208 bluetooth_.CloseChannel(); |
| 624 CloseClipboardChannel(); | 209 clipboard_.CloseChannel(); |
| 625 CloseCrashCollectorChannel(); | 210 crash_collector_.CloseChannel(); |
| 626 CloseFileSystemChannel(); | 211 file_system_.CloseChannel(); |
| 627 CloseImeChannel(); | 212 ime_.CloseChannel(); |
| 628 CloseIntentHelperChannel(); | 213 intent_helper_.CloseChannel(); |
| 629 CloseMetricsChannel(); | 214 metrics_.CloseChannel(); |
| 630 CloseNetChannel(); | 215 net_.CloseChannel(); |
| 631 CloseNotificationsChannel(); | 216 notifications_.CloseChannel(); |
| 632 CloseObbMounterChannel(); | 217 obb_mounter_.CloseChannel(); |
| 633 ClosePolicyChannel(); | 218 policy_.CloseChannel(); |
| 634 ClosePowerChannel(); | 219 power_.CloseChannel(); |
| 635 CloseProcessChannel(); | 220 process_.CloseChannel(); |
| 636 CloseStorageManagerChannel(); | 221 storage_manager_.CloseChannel(); |
| 637 CloseVideoChannel(); | 222 video_.CloseChannel(); |
| 638 CloseWindowManagerChannel(); | 223 window_manager_.CloseChannel(); |
| 639 } | 224 } |
| 640 | 225 |
| 641 } // namespace arc | 226 } // namespace arc |
| OLD | NEW |