| 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());
|
| }
|
|
|
|
|