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) { |