Chromium Code Reviews| 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 30022cd3a62ccacf3ce438962fd5531d9e2ee6a2..544f8262e0971d68d8e2d1958d28ce2919a1f17f 100644 |
| --- a/chrome/browser/ui/app_list/apps_model_builder.cc |
| +++ b/chrome/browser/ui/app_list/apps_model_builder.cc |
| @@ -24,10 +24,15 @@ |
| #include "ui/gfx/image/image_skia.h" |
| using extensions::Extension; |
| +using app_list::AppListItemModel; |
| namespace { |
| bool AppPrecedes(const ExtensionAppItem* app1, const ExtensionAppItem* app2) { |
| + if (!app1) |
| + return app2; // non-ExtensionAppItem follows ExtensionAppItem |
| + if (!app2) |
| + return true; // ExtensionAppItem preceeds non-ExtensionAppItem |
|
jennyz
2013/10/03 20:45:51
Do you mean we should pass null for non-ExtensionA
|
| const syncer::StringOrdinal& page1 = app1->GetPageOrdinal(); |
| const syncer::StringOrdinal& page2 = app2->GetPageOrdinal(); |
| if (page1.LessThan(page2)) |
| @@ -108,7 +113,7 @@ void AppsModelBuilder::OnExtensionLoaded(const Extension* extension) { |
| const int existing_index = FindApp(extension->id()); |
| if (existing_index != -1) { |
| - GetAppAt(existing_index)->Reload(); |
| + GetAppAt(existing_index)->Update(); |
| return; |
| } |
| @@ -125,7 +130,7 @@ void AppsModelBuilder::OnExtensionUnloaded(const Extension* extension) { |
| int index = FindApp(extension->id()); |
| if (index < 0) |
| return; |
| - GetAppAt(index)->UpdateIcon(); |
| + GetAppAt(index)->Update(); |
| } |
| void AppsModelBuilder::OnExtensionUninstalled(const Extension* extension) { |
| @@ -151,7 +156,8 @@ void AppsModelBuilder::OnShutdown() { |
| } |
| } |
| -void AppsModelBuilder::AddApps(const ExtensionSet* extensions, Apps* apps) { |
| +void AppsModelBuilder::AddApps(const ExtensionSet* extensions, |
| + ExtensionApps* apps) { |
| for (ExtensionSet::const_iterator app = extensions->begin(); |
| app != extensions->end(); ++app) { |
| if (ShouldDisplayInAppLauncher(profile_, *app)) |
| @@ -190,7 +196,7 @@ void AppsModelBuilder::PopulateApps() { |
| if (!service) |
| return; |
| - Apps apps; |
| + ExtensionApps apps; |
| AddApps(service->extensions(), &apps); |
| AddApps(service->disabled_extensions(), &apps); |
| AddApps(service->terminated_extensions(), &apps); |
| @@ -211,10 +217,10 @@ void AppsModelBuilder::ResortApps() { |
| // terminated app case, where there is no unload notification and uninstall |
| // notification comes in after the app's ordinals are cleared. |
| // See http://crbug.com/256749. |
| - Apps apps; |
| - Apps invalid_ordinal_apps; |
| + ExtensionApps apps; |
| + ExtensionApps invalid_ordinal_apps; |
| for (size_t i = 0; i < model_->item_count(); ++i) { |
| - ExtensionAppItem* app = GetAppAt(i); |
| + ExtensionAppItem* app = GetExtensionAppAt(i); |
| if (app->GetPageOrdinal().IsValid() && app->GetAppLaunchOrdinal().IsValid()) |
| apps.push_back(app); |
| else |
| @@ -249,7 +255,7 @@ void AppsModelBuilder::InsertApp(ExtensionAppItem* app) { |
| while (start < end) { |
| size_t mid = (start + end) / 2; |
| - if (AppPrecedes(GetAppAt(mid), app)) |
| + if (AppPrecedes(GetExtensionAppAt(mid), app)) |
| start = mid + 1; |
| else |
| end = mid; |
| @@ -261,7 +267,7 @@ int AppsModelBuilder::FindApp(const std::string& app_id) { |
| DCHECK(model_); |
| for (size_t i = 0; i < model_->item_count(); ++i) { |
| - if (GetAppAt(i)->extension_id() == app_id) |
| + if (GetAppAt(i)->app_id() == app_id) |
| return i; |
| } |
| @@ -271,17 +277,17 @@ int AppsModelBuilder::FindApp(const std::string& app_id) { |
| void AppsModelBuilder::SetHighlightedApp(const std::string& extension_id) { |
| if (extension_id == highlight_app_id_) |
| return; |
| - ExtensionAppItem* old_app = GetApp(highlight_app_id_); |
| + AppListItemModel* old_app = GetApp(highlight_app_id_); |
| if (old_app) |
| old_app->SetHighlighted(false); |
| highlight_app_id_ = extension_id; |
| - ExtensionAppItem* new_app = GetApp(highlight_app_id_); |
| + AppListItemModel* new_app = GetApp(highlight_app_id_); |
| highlighted_app_pending_ = !new_app; |
| if (new_app) |
| new_app->SetHighlighted(true); |
| } |
| -ExtensionAppItem* AppsModelBuilder::GetApp( |
| +AppListItemModel* AppsModelBuilder::GetApp( |
| const std::string& extension_id) { |
| DCHECK(model_); |
| if (extension_id.empty()) |
| @@ -306,13 +312,16 @@ void AppsModelBuilder::UpdateHighlight() { |
| highlighted_app_pending_ = false; |
| } |
| -ExtensionAppItem* AppsModelBuilder::GetAppAt(size_t index) { |
| +AppListItemModel* AppsModelBuilder::GetAppAt(size_t index) { |
| DCHECK_LT(index, model_->item_count()); |
| - ChromeAppListItem* item = |
| - static_cast<ChromeAppListItem*>(model_->GetItemAt(index)); |
| - DCHECK_EQ(item->type(), ChromeAppListItem::TYPE_APP); |
| + return model_->GetItemAt(index); |
| +} |
| - return static_cast<ExtensionAppItem*>(item); |
| +ExtensionAppItem* AppsModelBuilder::GetExtensionAppAt(size_t index) { |
| + AppListItemModel* app = GetAppAt(index); |
| + if (app->AppType() != ExtensionAppItem::ExtensionAppType()) |
| + return NULL; |
| + return static_cast<ExtensionAppItem*>(app); |
| } |
| void AppsModelBuilder::ListItemsAdded(size_t start, size_t count) { |
| @@ -325,10 +334,12 @@ void AppsModelBuilder::ListItemMoved(size_t index, size_t target_index) { |
| if (ignore_changes_) |
| return; |
| - ExtensionAppItem* prev = target_index > 0 ? GetAppAt(target_index - 1) : NULL; |
| + ExtensionAppItem* prev = target_index > 0 ? |
| + GetExtensionAppAt(target_index - 1) : NULL; |
| ExtensionAppItem* next = target_index + 1 < model_->item_count() ? |
| - GetAppAt(target_index + 1) : NULL; |
| - GetAppAt(target_index)->Move(prev, next); |
| + GetExtensionAppAt(target_index + 1) : NULL; |
| + ExtensionAppItem* target_app = GetExtensionAppAt(target_index); |
| + target_app->Move(prev, next); |
| } |
| void AppsModelBuilder::ListItemsChanged(size_t start, size_t count) { |