Index: chrome/browser/ui/app_list/extension_app_model_builder.cc |
diff --git a/chrome/browser/ui/app_list/extension_app_model_builder.cc b/chrome/browser/ui/app_list/extension_app_model_builder.cc |
index 1a79a27077c091852e27e32ac368991851f6914a..ef0de9af8fbfd617fa33bb53f720141b75cd6111 100644 |
--- a/chrome/browser/ui/app_list/extension_app_model_builder.cc |
+++ b/chrome/browser/ui/app_list/extension_app_model_builder.cc |
@@ -19,6 +19,7 @@ |
#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" |
#include "chrome/browser/ui/app_list/extension_app_item.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/pref_names.h" |
#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/extension_system.h" |
@@ -56,7 +57,7 @@ void ExtensionAppModelBuilder::InitializeWithService( |
model_ = service->model(); |
service_ = service; |
profile_ = service->profile(); |
- InitializePrefChangeRegistrar(); |
+ InitializePrefChangeRegistrars(); |
BuildModel(); |
} |
@@ -68,12 +69,18 @@ void ExtensionAppModelBuilder::InitializeWithProfile( |
model_ = model; |
model_->top_level_item_list()->AddObserver(this); |
profile_ = profile; |
- InitializePrefChangeRegistrar(); |
+ InitializePrefChangeRegistrars(); |
BuildModel(); |
} |
-void ExtensionAppModelBuilder::InitializePrefChangeRegistrar() { |
+void ExtensionAppModelBuilder::InitializePrefChangeRegistrars() { |
+ profile_pref_change_registrar_.Init(profile_->GetPrefs()); |
+ profile_pref_change_registrar_.Add( |
+ prefs::kHideWebStoreIcon, |
+ base::Bind(&ExtensionAppModelBuilder::OnProfilePreferenceChanged, |
+ base::Unretained(this))); |
+ |
if (!CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableStreamlinedHostedApps)) |
return; |
@@ -90,6 +97,33 @@ void ExtensionAppModelBuilder::InitializePrefChangeRegistrar() { |
base::Unretained(this))); |
} |
+void ExtensionAppModelBuilder::OnProfilePreferenceChanged() { |
+ extensions::ExtensionSet extensions; |
+ controller_->GetApps(profile_, &extensions); |
+ |
+ for (extensions::ExtensionSet::const_iterator app = extensions.begin(); |
+ app != extensions.end(); ++app) { |
+ bool should_display = |
+ extensions::ui_util::ShouldDisplayInAppLauncher(*app, profile_); |
+ bool does_display = GetExtensionAppItem((*app)->id()) != NULL; |
+ |
+ if (should_display == does_display) |
+ continue; |
+ |
+ if (should_display) { |
+ InsertApp(CreateAppItem((*app)->id(), |
+ "", |
+ gfx::ImageSkia(), |
+ (*app)->is_platform_app())); |
+ } else { |
+ if (service_) |
+ service_->RemoveItem((*app)->id()); |
+ else |
+ model_->DeleteItem((*app)->id()); |
+ } |
+ } |
+} |
+ |
void ExtensionAppModelBuilder::OnExtensionPreferenceChanged() { |
model_->NotifyExtensionPreferenceChanged(); |
} |