summaryrefslogtreecommitdiffstats
path: root/components/arc/arc_bridge_service.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/arc/arc_bridge_service.cc')
-rw-r--r--components/arc/arc_bridge_service.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/components/arc/arc_bridge_service.cc b/components/arc/arc_bridge_service.cc
index d3448c5..844f5c8 100644
--- a/components/arc/arc_bridge_service.cc
+++ b/components/arc/arc_bridge_service.cc
@@ -49,6 +49,30 @@ bool ArcBridgeService::GetEnabled(const base::CommandLine* command_line) {
void ArcBridgeService::AddObserver(Observer* observer) {
DCHECK(CalledOnValidThread());
observer_list_.AddObserver(observer);
+
+ // If any of the instances were ready before the call to AddObserver(), the
+ // |observer| won't get any readiness events. For such cases, we have to call
+ // them explicitly now to avoid a race.
+ if (app_instance())
+ observer->OnAppInstanceReady();
+ if (auth_instance())
+ observer->OnAuthInstanceReady();
+ if (clipboard_instance())
+ observer->OnClipboardInstanceReady();
+ if (ime_instance())
+ observer->OnImeInstanceReady();
+ if (input_instance())
+ observer->OnInputInstanceReady();
+ if (notifications_instance())
+ observer->OnNotificationsInstanceReady();
+ if (power_instance())
+ observer->OnPowerInstanceReady();
+ if (process_instance())
+ observer->OnProcessInstanceReady();
+ if (settings_instance())
+ observer->OnSettingsInstanceReady();
+ if (video_instance())
+ observer->OnVideoInstanceReady();
}
void ArcBridgeService::RemoveObserver(Observer* observer) {