Index: components/arc/intent_helper/arc_intent_helper_bridge.cc |
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.cc b/components/arc/intent_helper/arc_intent_helper_bridge.cc |
index b691412c6e00863612c455b2230e235936bf3f83..bffc4a4111b51840250a2c8c6a8e5b1bfb1074a6 100644 |
--- a/components/arc/intent_helper/arc_intent_helper_bridge.cc |
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.cc |
@@ -23,6 +23,9 @@ |
namespace arc { |
+// TODO(oka): Avoid to assume the class is singleton. |
+ArcIntentHelperBridge* g_arc_intent_helper_bridge = nullptr; |
+ |
// static |
const char ArcIntentHelperBridge::kArcIntentHelperPackageName[] = |
"org.chromium.arc.intent_helper"; |
@@ -36,12 +39,25 @@ ArcIntentHelperBridge::ArcIntentHelperBridge( |
icon_loader_(icon_loader), |
activity_resolver_(activity_resolver) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(!g_arc_intent_helper_bridge); |
+ |
arc_bridge_service()->intent_helper()->AddObserver(this); |
+ |
+ g_arc_intent_helper_bridge = this; |
} |
ArcIntentHelperBridge::~ArcIntentHelperBridge() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK_EQ(this, g_arc_intent_helper_bridge); |
+ |
arc_bridge_service()->intent_helper()->RemoveObserver(this); |
+ |
+ g_arc_intent_helper_bridge = nullptr; |
+} |
+ |
+// static |
+ArcIntentHelperBridge* ArcIntentHelperBridge::Get() { |
+ return g_arc_intent_helper_bridge; |
} |
void ArcIntentHelperBridge::OnInstanceReady() { |
@@ -90,6 +106,14 @@ void ArcIntentHelperBridge::SetWallpaperDeprecated( |
LOG(ERROR) << "IntentHelper.SetWallpaper is deprecated"; |
} |
+void ArcIntentHelperBridge::AddObserver(Observer* observer) { |
+ observer_list_.AddObserver(observer); |
+} |
+ |
+void ArcIntentHelperBridge::RemoveObserver(Observer* observer) { |
+ observer_list_.RemoveObserver(observer); |
+} |
+ |
std::unique_ptr<ash::LinkHandlerModel> ArcIntentHelperBridge::CreateModel( |
const GURL& url) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -168,6 +192,9 @@ void ArcIntentHelperBridge::OnIntentFiltersUpdated( |
mojo::Array<mojom::IntentFilterPtr> filters) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
activity_resolver_->UpdateIntentFilters(std::move(filters)); |
+ |
+ for (auto& observer : observer_list_) |
+ observer.OnAppsUpdated(); |
} |
} // namespace arc |