Index: components/arc/arc_bridge_service.cc |
diff --git a/components/arc/arc_bridge_service.cc b/components/arc/arc_bridge_service.cc |
index 3c5f391482c31b691da219c83ac3ec743abceacf..475f19e4199d5992d83a09f62b4e1705cf1bc9d9 100644 |
--- a/components/arc/arc_bridge_service.cc |
+++ b/components/arc/arc_bridge_service.cc |
@@ -22,7 +22,7 @@ ArcBridgeService* g_arc_bridge_service = nullptr; |
} // namespace |
ArcBridgeService::ArcBridgeService() |
- : available_(false), state_(State::STOPPED) { |
+ : available_(false), state_(State::STOPPED), weak_factory_(this) { |
DCHECK(!g_arc_bridge_service); |
g_arc_bridge_service = this; |
} |
@@ -58,39 +58,81 @@ void ArcBridgeService::RemoveObserver(Observer* observer) { |
void ArcBridgeService::OnAppInstanceReady(AppInstancePtr app_ptr) { |
DCHECK(CalledOnValidThread()); |
- app_ptr_ = std::move(app_ptr); |
+ temporary_app_ptr_ = std::move(app_ptr); |
+ temporary_app_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnAppVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnAppVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ app_ptr_ = std::move(temporary_app_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnAppInstanceReady()); |
} |
void ArcBridgeService::OnInputInstanceReady(InputInstancePtr input_ptr) { |
DCHECK(CalledOnValidThread()); |
- input_ptr_ = std::move(input_ptr); |
+ temporary_input_ptr_ = std::move(input_ptr); |
+ temporary_input_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnInputVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnInputVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ input_ptr_ = std::move(temporary_input_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnInputInstanceReady()); |
} |
void ArcBridgeService::OnNotificationsInstanceReady( |
NotificationsInstancePtr notifications_ptr) { |
DCHECK(CalledOnValidThread()); |
- notifications_ptr_ = std::move(notifications_ptr); |
+ temporary_notifications_ptr_ = std::move(notifications_ptr); |
+ temporary_notifications_ptr_.QueryVersion( |
+ base::Bind(&ArcBridgeService::OnNotificationsVersionReady, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnNotificationsVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ notifications_ptr_ = std::move(temporary_notifications_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceReady()); |
} |
void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { |
DCHECK(CalledOnValidThread()); |
- power_ptr_ = std::move(power_ptr); |
+ temporary_power_ptr_ = std::move(power_ptr); |
+ temporary_power_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnPowerVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnPowerVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ power_ptr_ = std::move(temporary_power_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceReady()); |
} |
void ArcBridgeService::OnProcessInstanceReady(ProcessInstancePtr process_ptr) { |
DCHECK(CalledOnValidThread()); |
- process_ptr_ = std::move(process_ptr); |
+ temporary_process_ptr_ = std::move(process_ptr); |
+ temporary_process_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnProcessVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnProcessVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ process_ptr_ = std::move(temporary_process_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnProcessInstanceReady()); |
} |
void ArcBridgeService::OnSettingsInstanceReady( |
SettingsInstancePtr settings_ptr) { |
DCHECK(CalledOnValidThread()); |
- settings_ptr_ = std::move(settings_ptr); |
+ temporary_settings_ptr_ = std::move(settings_ptr); |
+ temporary_settings_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnSettingsVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnSettingsVersionReady(int32_t version) { |
+ settings_ptr_ = std::move(temporary_settings_ptr_); |
FOR_EACH_OBSERVER(Observer, observer_list(), OnSettingsInstanceReady()); |
} |