Index: chrome/browser/ui/app_list/extension_app_item.cc |
diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc |
index 07b0c607080eba0a9e3c7bdbb8c019cab611619e..6d1f9aa9e67cda8815dc473cc34145f0e810f99b 100644 |
--- a/chrome/browser/ui/app_list/extension_app_item.cc |
+++ b/chrome/browser/ui/app_list/extension_app_item.cc |
@@ -144,6 +144,35 @@ void ExtensionAppItem::UpdateIcon() { |
SetIcon(icon, !HasOverlay()); |
} |
+void ExtensionAppItem::Move(const ExtensionAppItem* prev, |
+ const ExtensionAppItem* next) { |
+ if (!prev && !next) |
+ return; // No reordering necessary |
+ |
+ ExtensionService* service = |
+ extensions::ExtensionSystem::Get(profile_)->extension_service(); |
+ ExtensionSorting* sorting = service->extension_prefs()->extension_sorting(); |
+ |
+ syncer::StringOrdinal page; |
+ std::string prev_id, next_id; |
+ if (!prev) { |
+ next_id = next->extension_id(); |
+ page = sorting->GetPageOrdinal(next_id); |
+ } else if (!next) { |
+ prev_id = prev->extension_id(); |
+ page = sorting->GetPageOrdinal(prev_id); |
+ } else { |
+ prev_id = prev->extension_id(); |
+ page = sorting->GetPageOrdinal(prev_id); |
+ // Only set |next_id| if on the same page, otherwise just insert after prev. |
+ if (page.Equals(sorting->GetPageOrdinal(next->extension_id()))) |
+ next_id = next->extension_id(); |
+ } |
+ service->extension_prefs()->SetAppDraggedByUser(extension_id_); |
+ sorting->SetPageOrdinal(extension_id_, page); |
+ service->OnExtensionMoved(extension_id_, prev_id, next_id); |
+} |
+ |
const Extension* ExtensionAppItem::GetExtension() const { |
const ExtensionService* service = |
extensions::ExtensionSystem::Get(profile_)->extension_service(); |