Index: chrome/browser/ui/app_list/apps_model_builder.cc |
diff --git a/chrome/browser/ui/app_list/apps_model_builder.cc b/chrome/browser/ui/app_list/apps_model_builder.cc |
index b662b4537f18f1e81c044f4cd06ae4d4126915d1..30022cd3a62ccacf3ce438962fd5531d9e2ee6a2 100644 |
--- a/chrome/browser/ui/app_list/apps_model_builder.cc |
+++ b/chrome/browser/ui/app_list/apps_model_builder.cc |
@@ -54,13 +54,15 @@ bool ShouldDisplayInAppLauncher(Profile* profile, |
AppsModelBuilder::AppsModelBuilder(Profile* profile, |
app_list::AppListModel::Apps* model, |
AppListControllerDelegate* controller) |
- : profile_(profile), |
+ : profile_(NULL), |
controller_(controller), |
model_(model), |
highlighted_app_pending_(false), |
ignore_changes_(false), |
- tracker_(extensions::InstallTrackerFactory::GetForProfile(profile_)) { |
+ tracker_(NULL) { |
model_->AddObserver(this); |
+ // Build the model. |
+ SwitchProfile(profile); |
} |
AppsModelBuilder::~AppsModelBuilder() { |
@@ -68,16 +70,6 @@ AppsModelBuilder::~AppsModelBuilder() { |
model_->RemoveObserver(this); |
} |
-void AppsModelBuilder::Build() { |
- DCHECK(model_ && model_->item_count() == 0); |
- |
- PopulateApps(); |
- UpdateHighlight(); |
- |
- // Start observing after model is built. |
- tracker_->AddObserver(this); |
-} |
- |
void AppsModelBuilder::OnBeginExtensionInstall( |
const std::string& extension_id, |
const std::string& extension_name, |
@@ -172,6 +164,26 @@ void AppsModelBuilder::AddApps(const ExtensionSet* extensions, Apps* apps) { |
} |
} |
+void AppsModelBuilder::SwitchProfile(Profile* profile) { |
+ if (profile_ == profile) |
+ return; |
+ |
+ profile_ = profile; |
+ model_->DeleteAll(); |
+ if (tracker_) |
+ tracker_->RemoveObserver(this); |
+ |
+ tracker_ = extensions::InstallTrackerFactory::GetForProfile(profile_); |
+ |
+ DCHECK(model_ && model_->item_count() == 0); |
+ |
+ PopulateApps(); |
+ UpdateHighlight(); |
+ |
+ // Start observing after model is built. |
+ tracker_->AddObserver(this); |
+} |
+ |
void AppsModelBuilder::PopulateApps() { |
ExtensionService* service = |
extensions::ExtensionSystem::Get(profile_)->extension_service(); |