diff --git a/chrome/browser/extensions/app_sync_bundle.cc b/chrome/browser/extensions/app_sync_bundle.cc index d14665eb910884..d8e2cdd3d38ab5 100644 --- a/chrome/browser/extensions/app_sync_bundle.cc +++ b/chrome/browser/extensions/app_sync_bundle.cc @@ -5,10 +5,10 @@ #include "chrome/browser/extensions/app_sync_bundle.h" #include "base/location.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_sync_service.h" #include "chrome/common/extensions/extension_set.h" #include "chrome/common/extensions/sync_helper.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/extension.h" #include "sync/api/sync_change_processor.h" #include "sync/api/sync_error_factory.h" @@ -92,7 +92,7 @@ void AppSyncBundle::ProcessSyncChange(AppSyncData app_sync_data) { void AppSyncBundle::ProcessSyncChangeList( syncer::SyncChangeList sync_change_list) { sync_processor_->ProcessSyncChanges(FROM_HERE, sync_change_list); - extension_sync_service_->extension_prefs().extension_sorting()-> + extension_sync_service_->extension_prefs().app_sorting()-> FixNTPOrdinalCollisions(); } diff --git a/chrome/browser/extensions/extension_sorting.cc b/chrome/browser/extensions/chrome_app_sorting.cc similarity index 90% rename from chrome/browser/extensions/extension_sorting.cc rename to chrome/browser/extensions/chrome_app_sorting.cc index 1d5edcb4e58484..fa6967ebf7291a 100644 --- a/chrome/browser/extensions/extension_sorting.cc +++ b/chrome/browser/extensions/chrome_app_sorting.cc @@ -1,8 +1,8 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/extensions/extension_sorting.h" +#include "chrome/browser/extensions/chrome_app_sorting.h" #include #include @@ -18,7 +18,7 @@ #include "chrome/browser/chromeos/extensions/default_app_order.h" #endif -using extensions::ExtensionPrefs; +namespace extensions { namespace { @@ -37,37 +37,37 @@ const char kPrefPageOrdinal[] = "page_ordinal"; } // namespace //////////////////////////////////////////////////////////////////////////////// -// ExtensionSorting::AppOrdinals +// ChromeAppSorting::AppOrdinals -ExtensionSorting::AppOrdinals::AppOrdinals() {} +ChromeAppSorting::AppOrdinals::AppOrdinals() {} -ExtensionSorting::AppOrdinals::~AppOrdinals() {} +ChromeAppSorting::AppOrdinals::~AppOrdinals() {} //////////////////////////////////////////////////////////////////////////////// -// ExtensionSorting +// ChromeAppSorting -ExtensionSorting::ExtensionSorting(ExtensionScopedPrefs* extension_scoped_prefs) +ChromeAppSorting::ChromeAppSorting(ExtensionScopedPrefs* extension_scoped_prefs) : extension_scoped_prefs_(extension_scoped_prefs), extension_sync_service_(NULL), default_ordinals_created_(false) { } -ExtensionSorting::~ExtensionSorting() { +ChromeAppSorting::~ChromeAppSorting() { } -void ExtensionSorting::SetExtensionSyncService( +void ChromeAppSorting::SetExtensionSyncService( ExtensionSyncService* extension_sync_service) { extension_sync_service_ = extension_sync_service; } -void ExtensionSorting::Initialize( +void ChromeAppSorting::Initialize( const extensions::ExtensionIdList& extension_ids) { InitializePageOrdinalMap(extension_ids); MigrateAppIndex(extension_ids); } -void ExtensionSorting::CreateOrdinalsIfNecessary(size_t minimum_size) { +void ChromeAppSorting::CreateOrdinalsIfNecessary(size_t minimum_size) { // Create StringOrdinal values as required to ensure |ntp_ordinal_map_| has at // least |minimum_size| entries. if (ntp_ordinal_map_.empty() && minimum_size > 0) @@ -81,7 +81,7 @@ void ExtensionSorting::CreateOrdinalsIfNecessary(size_t minimum_size) { } } -void ExtensionSorting::MigrateAppIndex( +void ChromeAppSorting::MigrateAppIndex( const extensions::ExtensionIdList& extension_ids) { if (extension_ids.empty()) return; @@ -169,7 +169,7 @@ void ExtensionSorting::MigrateAppIndex( } } -void ExtensionSorting::FixNTPOrdinalCollisions() { +void ChromeAppSorting::FixNTPOrdinalCollisions() { for (PageOrdinalMap::iterator page_it = ntp_ordinal_map_.begin(); page_it != ntp_ordinal_map_.end(); ++page_it) { AppLaunchOrdinalMap& page = page_it->second; @@ -215,11 +215,11 @@ void ExtensionSorting::FixNTPOrdinalCollisions() { content::NotificationService::current()->Notify( chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, - content::Source(this), + content::Source(this), content::NotificationService::NoDetails()); } -void ExtensionSorting::EnsureValidOrdinals( +void ChromeAppSorting::EnsureValidOrdinals( const std::string& extension_id, const syncer::StringOrdinal& suggested_page) { syncer::StringOrdinal page_ordinal = GetPageOrdinal(extension_id); @@ -247,7 +247,7 @@ void ExtensionSorting::EnsureValidOrdinals( } } -void ExtensionSorting::OnExtensionMoved( +void ChromeAppSorting::OnExtensionMoved( const std::string& moved_extension_id, const std::string& predecessor_extension_id, const std::string& successor_extension_id) { @@ -276,12 +276,12 @@ void ExtensionSorting::OnExtensionMoved( content::NotificationService::current()->Notify( chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, - content::Source(this), + content::Source(this), content::Details(&moved_extension_id)); } -syncer::StringOrdinal ExtensionSorting::GetAppLaunchOrdinal( +syncer::StringOrdinal ChromeAppSorting::GetAppLaunchOrdinal( const std::string& extension_id) const { std::string raw_value; // If the preference read fails then raw_value will still be unset and we @@ -292,7 +292,7 @@ syncer::StringOrdinal ExtensionSorting::GetAppLaunchOrdinal( return syncer::StringOrdinal(raw_value); } -void ExtensionSorting::SetAppLaunchOrdinal( +void ChromeAppSorting::SetAppLaunchOrdinal( const std::string& extension_id, const syncer::StringOrdinal& new_app_launch_ordinal) { // No work is required if the old and new values are the same. @@ -317,11 +317,11 @@ void ExtensionSorting::SetAppLaunchOrdinal( SyncIfNeeded(extension_id); } -syncer::StringOrdinal ExtensionSorting::CreateFirstAppLaunchOrdinal( +syncer::StringOrdinal ChromeAppSorting::CreateFirstAppLaunchOrdinal( const syncer::StringOrdinal& page_ordinal) const { const syncer::StringOrdinal& min_ordinal = GetMinOrMaxAppLaunchOrdinalsOnPage(page_ordinal, - ExtensionSorting::MIN_ORDINAL); + ChromeAppSorting::MIN_ORDINAL); if (min_ordinal.IsValid()) return min_ordinal.CreateBefore(); @@ -329,11 +329,11 @@ syncer::StringOrdinal ExtensionSorting::CreateFirstAppLaunchOrdinal( return syncer::StringOrdinal::CreateInitialOrdinal(); } -syncer::StringOrdinal ExtensionSorting::CreateNextAppLaunchOrdinal( +syncer::StringOrdinal ChromeAppSorting::CreateNextAppLaunchOrdinal( const syncer::StringOrdinal& page_ordinal) const { const syncer::StringOrdinal& max_ordinal = GetMinOrMaxAppLaunchOrdinalsOnPage(page_ordinal, - ExtensionSorting::MAX_ORDINAL); + ChromeAppSorting::MAX_ORDINAL); if (max_ordinal.IsValid()) return max_ordinal.CreateAfter(); @@ -341,14 +341,14 @@ syncer::StringOrdinal ExtensionSorting::CreateNextAppLaunchOrdinal( return syncer::StringOrdinal::CreateInitialOrdinal(); } -syncer::StringOrdinal ExtensionSorting::CreateFirstAppPageOrdinal() const { +syncer::StringOrdinal ChromeAppSorting::CreateFirstAppPageOrdinal() const { if (ntp_ordinal_map_.empty()) return syncer::StringOrdinal::CreateInitialOrdinal(); return ntp_ordinal_map_.begin()->first; } -syncer::StringOrdinal ExtensionSorting::GetNaturalAppPageOrdinal() const { +syncer::StringOrdinal ChromeAppSorting::GetNaturalAppPageOrdinal() const { if (ntp_ordinal_map_.empty()) return syncer::StringOrdinal::CreateInitialOrdinal(); @@ -363,7 +363,7 @@ syncer::StringOrdinal ExtensionSorting::GetNaturalAppPageOrdinal() const { return last_element.CreateAfter(); } -syncer::StringOrdinal ExtensionSorting::GetPageOrdinal( +syncer::StringOrdinal ChromeAppSorting::GetPageOrdinal( const std::string& extension_id) const { std::string raw_data; // If the preference read fails then raw_data will still be unset and we will @@ -373,7 +373,7 @@ syncer::StringOrdinal ExtensionSorting::GetPageOrdinal( return syncer::StringOrdinal(raw_data); } -void ExtensionSorting::SetPageOrdinal( +void ChromeAppSorting::SetPageOrdinal( const std::string& extension_id, const syncer::StringOrdinal& new_page_ordinal) { // No work is required if the old and new values are the same. @@ -396,7 +396,7 @@ void ExtensionSorting::SetPageOrdinal( SyncIfNeeded(extension_id); } -void ExtensionSorting::ClearOrdinals(const std::string& extension_id) { +void ChromeAppSorting::ClearOrdinals(const std::string& extension_id) { RemoveOrdinalMapping(extension_id, GetPageOrdinal(extension_id), GetAppLaunchOrdinal(extension_id)); @@ -407,7 +407,7 @@ void ExtensionSorting::ClearOrdinals(const std::string& extension_id) { extension_id, kPrefAppLaunchOrdinal, NULL); } -int ExtensionSorting::PageStringOrdinalAsInteger( +int ChromeAppSorting::PageStringOrdinalAsInteger( const syncer::StringOrdinal& page_ordinal) const { if (!page_ordinal.IsValid()) return -1; @@ -417,7 +417,7 @@ int ExtensionSorting::PageStringOrdinalAsInteger( std::distance(ntp_ordinal_map_.begin(), it) : -1; } -syncer::StringOrdinal ExtensionSorting::PageIntegerAsStringOrdinal( +syncer::StringOrdinal ChromeAppSorting::PageIntegerAsStringOrdinal( size_t page_index) { if (page_index < ntp_ordinal_map_.size()) { PageOrdinalMap::const_iterator it = ntp_ordinal_map_.begin(); @@ -429,11 +429,11 @@ syncer::StringOrdinal ExtensionSorting::PageIntegerAsStringOrdinal( return ntp_ordinal_map_.rbegin()->first; } -void ExtensionSorting::MarkExtensionAsHidden(const std::string& extension_id) { +void ChromeAppSorting::MarkExtensionAsHidden(const std::string& extension_id) { ntp_hidden_extensions_.insert(extension_id); } -syncer::StringOrdinal ExtensionSorting::GetMinOrMaxAppLaunchOrdinalsOnPage( +syncer::StringOrdinal ChromeAppSorting::GetMinOrMaxAppLaunchOrdinalsOnPage( const syncer::StringOrdinal& target_page_ordinal, AppLaunchOrdinalReturn return_type) const { CHECK(target_page_ordinal.IsValid()); @@ -448,16 +448,16 @@ syncer::StringOrdinal ExtensionSorting::GetMinOrMaxAppLaunchOrdinalsOnPage( if (app_list.empty()) return syncer::StringOrdinal(); - if (return_type == ExtensionSorting::MAX_ORDINAL) + if (return_type == ChromeAppSorting::MAX_ORDINAL) return_value = app_list.rbegin()->first; - else if (return_type == ExtensionSorting::MIN_ORDINAL) + else if (return_type == ChromeAppSorting::MIN_ORDINAL) return_value = app_list.begin()->first; } return return_value; } -void ExtensionSorting::InitializePageOrdinalMap( +void ChromeAppSorting::InitializePageOrdinalMap( const extensions::ExtensionIdList& extension_ids) { for (extensions::ExtensionIdList::const_iterator ext_it = extension_ids.begin(); ext_it != extension_ids.end(); ++ext_it) { @@ -489,7 +489,7 @@ void ExtensionSorting::InitializePageOrdinalMap( } } -void ExtensionSorting::AddOrdinalMapping( +void ChromeAppSorting::AddOrdinalMapping( const std::string& extension_id, const syncer::StringOrdinal& page_ordinal, const syncer::StringOrdinal& app_launch_ordinal) { @@ -500,7 +500,7 @@ void ExtensionSorting::AddOrdinalMapping( std::make_pair(app_launch_ordinal, extension_id)); } -void ExtensionSorting::RemoveOrdinalMapping( +void ChromeAppSorting::RemoveOrdinalMapping( const std::string& extension_id, const syncer::StringOrdinal& page_ordinal, const syncer::StringOrdinal& app_launch_ordinal) { @@ -523,12 +523,12 @@ void ExtensionSorting::RemoveOrdinalMapping( } } -void ExtensionSorting::SyncIfNeeded(const std::string& extension_id) { +void ChromeAppSorting::SyncIfNeeded(const std::string& extension_id) { if (extension_sync_service_) extension_sync_service_->SyncOrderingChange(extension_id); } -void ExtensionSorting::CreateDefaultOrdinals() { +void ChromeAppSorting::CreateDefaultOrdinals() { if (default_ordinals_created_) return; default_ordinals_created_ = true; @@ -557,7 +557,7 @@ void ExtensionSorting::CreateDefaultOrdinals() { } } -bool ExtensionSorting::GetDefaultOrdinals( +bool ChromeAppSorting::GetDefaultOrdinals( const std::string& extension_id, syncer::StringOrdinal* page_ordinal, syncer::StringOrdinal* app_launch_ordinal) { @@ -573,7 +573,7 @@ bool ExtensionSorting::GetDefaultOrdinals( return true; } -syncer::StringOrdinal ExtensionSorting::ResolveCollision( +syncer::StringOrdinal ChromeAppSorting::ResolveCollision( const syncer::StringOrdinal& page_ordinal, const syncer::StringOrdinal& app_launch_ordinal) const { DCHECK(page_ordinal.IsValid() && app_launch_ordinal.IsValid()); @@ -602,7 +602,7 @@ syncer::StringOrdinal ExtensionSorting::ResolveCollision( return app_launch_ordinal.CreateBetween(app_it->first); } -size_t ExtensionSorting::CountItemsVisibleOnNtp( +size_t ChromeAppSorting::CountItemsVisibleOnNtp( const AppLaunchOrdinalMap& m) const { size_t result = 0; for (AppLaunchOrdinalMap::const_iterator it = m.begin(); it != m.end(); @@ -613,3 +613,5 @@ size_t ExtensionSorting::CountItemsVisibleOnNtp( } return result; } + +} // namespace extensions diff --git a/chrome/browser/extensions/extension_sorting.h b/chrome/browser/extensions/chrome_app_sorting.h similarity index 53% rename from chrome/browser/extensions/extension_sorting.h rename to chrome/browser/extensions/chrome_app_sorting.h index 5c02d4aa46d06c..5d16ed3cf253e5 100644 --- a/chrome/browser/extensions/extension_sorting.h +++ b/chrome/browser/extensions/chrome_app_sorting.h @@ -1,9 +1,9 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SORTING_H_ -#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SORTING_H_ +#ifndef CHROME_BROWSER_EXTENSIONS_CHROME_APP_SORTING_H_ +#define CHROME_BROWSER_EXTENSIONS_CHROME_APP_SORTING_H_ #include #include @@ -11,98 +11,57 @@ #include "base/basictypes.h" #include "chrome/browser/extensions/extension_prefs.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/extension.h" #include "sync/api/string_ordinal.h" -class ExtensionScopedPrefs; class ExtensionSyncService; class PrefService; -class ExtensionSorting { - public: - explicit ExtensionSorting(ExtensionScopedPrefs* extension_scoped_prefs); - ~ExtensionSorting(); - - // Set up the ExtensionSyncService to inform of changes that require syncing. - void SetExtensionSyncService(ExtensionSyncService* extension_sync_service); +namespace extensions { - // Properly initialize ExtensionSorting internal values that require - // |extension_ids|. - void Initialize( - const extensions::ExtensionIdList& extension_ids); +class ExtensionScopedPrefs; - // Resolves any conflicts the might be created as a result of syncing that - // results in two icons having the same page and app launch ordinal. After - // this is called it is guaranteed that there are no collisions of NTP icons. - void FixNTPOrdinalCollisions(); - - // This ensures that the extension has valid ordinals, and if it doesn't then - // properly initialize them. |suggested_page| will be used if it is valid and - // the extension has no valid user-set page ordinal. - void EnsureValidOrdinals(const std::string& extension_id, - const syncer::StringOrdinal& suggested_page); - - // Updates the app launcher value for the moved extension so that it is now - // located after the given predecessor and before the successor. - // Empty strings are used to indicate no successor or predecessor. - void OnExtensionMoved(const std::string& moved_extension_id, - const std::string& predecessor_extension_id, - const std::string& successor_extension_id); - - // Get the application launch ordinal for an app with |extension_id|. This - // determines the order in which the app appears on the page it's on in the - // New Tab Page (Note that you can compare app launch ordinals only if the - // apps are on the same page). A string value close to |a*| generally - // indicates top left. If the extension has no launch ordinal, an invalid - // StringOrdinal is returned. - syncer::StringOrdinal GetAppLaunchOrdinal( - const std::string& extension_id) const; - - // Sets a specific launch ordinal for an app with |extension_id|. - void SetAppLaunchOrdinal(const std::string& extension_id, - const syncer::StringOrdinal& new_app_launch_ordinal); - - // Returns a StringOrdinal that is lower than any app launch ordinal for the - // given page. - syncer::StringOrdinal CreateFirstAppLaunchOrdinal( - const syncer::StringOrdinal& page_ordinal) const; - - // Returns a StringOrdinal that is higher than any app launch ordinal for the - // given page. - syncer::StringOrdinal CreateNextAppLaunchOrdinal( - const syncer::StringOrdinal& page_ordinal) const; - - // Returns a StringOrdinal that is lower than any existing page ordinal. - syncer::StringOrdinal CreateFirstAppPageOrdinal() const; - - // Gets the page a new app should install to, which is the earliest non-full - // page. The returned ordinal may correspond to a page that doesn't yet exist - // if all pages are full. - syncer::StringOrdinal GetNaturalAppPageOrdinal() const; - - // Get the page ordinal for an app with |extension_id|. This determines - // which page an app will appear on in page-based NTPs. If the app has no - // page specified, an invalid StringOrdinal is returned. - syncer::StringOrdinal GetPageOrdinal(const std::string& extension_id) const; - - // Sets a specific page ordinal for an app with |extension_id|. - void SetPageOrdinal(const std::string& extension_id, - const syncer::StringOrdinal& new_page_ordinal); - - // Removes the ordinal values for an app. - void ClearOrdinals(const std::string& extension_id); - - // Convert the page StringOrdinal value to its integer equivalent. This takes - // O(# of apps) worst-case. - int PageStringOrdinalAsInteger( - const syncer::StringOrdinal& page_ordinal) const; - - // Converts the page index integer to its StringOrdinal equivalent. This takes - // O(# of apps) worst-case. - syncer::StringOrdinal PageIntegerAsStringOrdinal(size_t page_index); - - // Hidden extensions don't appear in the new tab page. - void MarkExtensionAsHidden(const std::string& extension_id); +class ChromeAppSorting : public AppSorting { + public: + explicit ChromeAppSorting(ExtensionScopedPrefs* extension_scoped_prefs); + virtual ~ChromeAppSorting(); + + // AppSorting implementation: + virtual void SetExtensionSyncService( + ExtensionSyncService* extension_sync_service) OVERRIDE; + virtual void Initialize( + const extensions::ExtensionIdList& extension_ids) OVERRIDE; + virtual void FixNTPOrdinalCollisions() OVERRIDE; + virtual void EnsureValidOrdinals( + const std::string& extension_id, + const syncer::StringOrdinal& suggested_page) OVERRIDE; + virtual void OnExtensionMoved( + const std::string& moved_extension_id, + const std::string& predecessor_extension_id, + const std::string& successor_extension_id) OVERRIDE; + virtual syncer::StringOrdinal GetAppLaunchOrdinal( + const std::string& extension_id) const OVERRIDE; + virtual void SetAppLaunchOrdinal( + const std::string& extension_id, + const syncer::StringOrdinal& new_app_launch_ordinal) OVERRIDE; + virtual syncer::StringOrdinal CreateFirstAppLaunchOrdinal( + const syncer::StringOrdinal& page_ordinal) const OVERRIDE; + virtual syncer::StringOrdinal CreateNextAppLaunchOrdinal( + const syncer::StringOrdinal& page_ordinal) const OVERRIDE; + virtual syncer::StringOrdinal CreateFirstAppPageOrdinal() const OVERRIDE; + virtual syncer::StringOrdinal GetNaturalAppPageOrdinal() const OVERRIDE; + virtual syncer::StringOrdinal GetPageOrdinal( + const std::string& extension_id) const OVERRIDE; + virtual void SetPageOrdinal( + const std::string& extension_id, + const syncer::StringOrdinal& new_page_ordinal) OVERRIDE; + virtual void ClearOrdinals(const std::string& extension_id) OVERRIDE; + virtual int PageStringOrdinalAsInteger( + const syncer::StringOrdinal& page_ordinal) const OVERRIDE; + virtual syncer::StringOrdinal PageIntegerAsStringOrdinal( + size_t page_index) OVERRIDE; + virtual void MarkExtensionAsHidden(const std::string& extension_id) OVERRIDE; private: // The StringOrdinal is the app launch ordinal and the string is the extension @@ -117,10 +76,10 @@ class ExtensionSorting { syncer::StringOrdinal::LessThanFn> PageOrdinalMap; // Unit tests. - friend class ExtensionSortingDefaultOrdinalsBase; - friend class ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage; - friend class ExtensionSortingInitializeWithNoApps; - friend class ExtensionSortingPageOrdinalMapping; + friend class ChromeAppSortingDefaultOrdinalsBase; + friend class ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage; + friend class ChromeAppSortingInitializeWithNoApps; + friend class ChromeAppSortingPageOrdinalMapping; // An enum used by GetMinOrMaxAppLaunchOrdinalsOnPage to specify which // value should be returned. @@ -218,7 +177,9 @@ class ExtensionSorting { // The set of extensions that don't appear in the new tab page. std::set ntp_hidden_extensions_; - DISALLOW_COPY_AND_ASSIGN(ExtensionSorting); + DISALLOW_COPY_AND_ASSIGN(ChromeAppSorting); }; -#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SORTING_H_ +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_CHROME_APP_SORTING_H_ diff --git a/chrome/browser/extensions/extension_sorting_unittest.cc b/chrome/browser/extensions/chrome_app_sorting_unittest.cc similarity index 50% rename from chrome/browser/extensions/extension_sorting_unittest.cc rename to chrome/browser/extensions/chrome_app_sorting_unittest.cc index 658868992efc30..d5737f80517769 100644 --- a/chrome/browser/extensions/extension_sorting_unittest.cc +++ b/chrome/browser/extensions/chrome_app_sorting_unittest.cc @@ -1,8 +1,8 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/extensions/extension_sorting.h" +#include "chrome/browser/extensions/chrome_app_sorting.h" #include @@ -12,19 +12,18 @@ #include "sync/api/string_ordinal.h" #include "testing/gtest/include/gtest/gtest.h" -using extensions::Extension; -using extensions::Manifest; +namespace extensions { -namespace keys = extensions::manifest_keys; +namespace keys = manifest_keys; -class ExtensionSortingTest : public extensions::ExtensionPrefsTest { +class ChromeAppSortingTest : public ExtensionPrefsTest { protected: - ExtensionSorting* extension_sorting() { - return prefs()->extension_sorting(); + ChromeAppSorting* app_sorting() { + return static_cast(prefs()->app_sorting()); } }; -class ExtensionSortingAppLocation : public ExtensionSortingTest { +class ChromeAppSortingAppLocation : public ChromeAppSortingTest { public: virtual void Initialize() OVERRIDE { extension_ = prefs_.AddExtension("not_an_app"); @@ -37,23 +36,23 @@ class ExtensionSortingAppLocation : public ExtensionSortingTest { virtual void Verify() OVERRIDE { EXPECT_FALSE( - extension_sorting()->GetAppLaunchOrdinal(extension_->id()).IsValid()); + app_sorting()->GetAppLaunchOrdinal(extension_->id()).IsValid()); EXPECT_FALSE( - extension_sorting()->GetPageOrdinal(extension_->id()).IsValid()); + app_sorting()->GetPageOrdinal(extension_->id()).IsValid()); } private: scoped_refptr extension_; }; -TEST_F(ExtensionSortingAppLocation, ExtensionSortingAppLocation) {} +TEST_F(ChromeAppSortingAppLocation, ChromeAppSortingAppLocation) {} -class ExtensionSortingAppLaunchOrdinal : public ExtensionSortingTest { +class ChromeAppSortingAppLaunchOrdinal : public ChromeAppSortingTest { public: virtual void Initialize() OVERRIDE { // No extensions yet. syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); EXPECT_TRUE(syncer::StringOrdinal::CreateInitialOrdinal().Equals( - extension_sorting()->CreateNextAppLaunchOrdinal(page))); + app_sorting()->CreateNextAppLaunchOrdinal(page))); extension_ = prefs_.AddApp("on_extension_installed"); EXPECT_FALSE(prefs()->IsExtensionDisabled(extension_->id())); @@ -65,45 +64,45 @@ class ExtensionSortingAppLaunchOrdinal : public ExtensionSortingTest { virtual void Verify() OVERRIDE { syncer::StringOrdinal launch_ordinal = - extension_sorting()->GetAppLaunchOrdinal(extension_->id()); + app_sorting()->GetAppLaunchOrdinal(extension_->id()); syncer::StringOrdinal page_ordinal = syncer::StringOrdinal::CreateInitialOrdinal(); // Extension should have been assigned a valid StringOrdinal. EXPECT_TRUE(launch_ordinal.IsValid()); EXPECT_TRUE(launch_ordinal.LessThan( - extension_sorting()->CreateNextAppLaunchOrdinal(page_ordinal))); + app_sorting()->CreateNextAppLaunchOrdinal(page_ordinal))); // Set a new launch ordinal of and verify it comes after. - extension_sorting()->SetAppLaunchOrdinal( + app_sorting()->SetAppLaunchOrdinal( extension_->id(), - extension_sorting()->CreateNextAppLaunchOrdinal(page_ordinal)); + app_sorting()->CreateNextAppLaunchOrdinal(page_ordinal)); syncer::StringOrdinal new_launch_ordinal = - extension_sorting()->GetAppLaunchOrdinal(extension_->id()); + app_sorting()->GetAppLaunchOrdinal(extension_->id()); EXPECT_TRUE(launch_ordinal.LessThan(new_launch_ordinal)); // This extension doesn't exist, so it should return an invalid // StringOrdinal. syncer::StringOrdinal invalid_app_launch_ordinal = - extension_sorting()->GetAppLaunchOrdinal("foo"); + app_sorting()->GetAppLaunchOrdinal("foo"); EXPECT_FALSE(invalid_app_launch_ordinal.IsValid()); - EXPECT_EQ(-1, extension_sorting()->PageStringOrdinalAsInteger( + EXPECT_EQ(-1, app_sorting()->PageStringOrdinalAsInteger( invalid_app_launch_ordinal)); // The second page doesn't have any apps so its next launch ordinal should // be the first launch ordinal. syncer::StringOrdinal next_page = page_ordinal.CreateAfter(); syncer::StringOrdinal next_page_app_launch_ordinal = - extension_sorting()->CreateNextAppLaunchOrdinal(next_page); + app_sorting()->CreateNextAppLaunchOrdinal(next_page); EXPECT_TRUE(next_page_app_launch_ordinal.Equals( - extension_sorting()->CreateFirstAppLaunchOrdinal(next_page))); + app_sorting()->CreateFirstAppLaunchOrdinal(next_page))); } private: scoped_refptr extension_; }; -TEST_F(ExtensionSortingAppLaunchOrdinal, ExtensionSortingAppLaunchOrdinal) {} +TEST_F(ChromeAppSortingAppLaunchOrdinal, ChromeAppSortingAppLaunchOrdinal) {} -class ExtensionSortingPageOrdinal : public ExtensionSortingTest { +class ChromeAppSortingPageOrdinal : public ChromeAppSortingTest { public: virtual void Initialize() OVERRIDE { extension_ = prefs_.AddApp("page_ordinal"); @@ -114,8 +113,8 @@ class ExtensionSortingPageOrdinal : public ExtensionSortingTest { false, first_page_); EXPECT_TRUE(first_page_.Equals( - extension_sorting()->GetPageOrdinal(extension_->id()))); - EXPECT_EQ(0, extension_sorting()->PageStringOrdinalAsInteger(first_page_)); + app_sorting()->GetPageOrdinal(extension_->id()))); + EXPECT_EQ(0, app_sorting()->PageStringOrdinalAsInteger(first_page_)); scoped_refptr extension2 = prefs_.AddApp("page_ordinal_2"); // Install without any page preference. @@ -124,35 +123,34 @@ class ExtensionSortingPageOrdinal : public ExtensionSortingTest { false, syncer::StringOrdinal()); EXPECT_TRUE(first_page_.Equals( - extension_sorting()->GetPageOrdinal(extension2->id()))); + app_sorting()->GetPageOrdinal(extension2->id()))); } virtual void Verify() OVERRIDE { // Set the page ordinal. syncer::StringOrdinal new_page = first_page_.CreateAfter(); - extension_sorting()->SetPageOrdinal(extension_->id(), new_page); + app_sorting()->SetPageOrdinal(extension_->id(), new_page); // Verify the page ordinal. EXPECT_TRUE( - new_page.Equals(extension_sorting()->GetPageOrdinal(extension_->id()))); - EXPECT_EQ(1, extension_sorting()->PageStringOrdinalAsInteger(new_page)); + new_page.Equals(app_sorting()->GetPageOrdinal(extension_->id()))); + EXPECT_EQ(1, app_sorting()->PageStringOrdinalAsInteger(new_page)); // This extension doesn't exist, so it should return an invalid // StringOrdinal. - EXPECT_FALSE(extension_sorting()->GetPageOrdinal("foo").IsValid()); + EXPECT_FALSE(app_sorting()->GetPageOrdinal("foo").IsValid()); } private: syncer::StringOrdinal first_page_; scoped_refptr extension_; }; -TEST_F(ExtensionSortingPageOrdinal, ExtensionSortingPageOrdinal) {} +TEST_F(ChromeAppSortingPageOrdinal, ChromeAppSortingPageOrdinal) {} -// Ensure that ExtensionSorting is able to properly initialize off a set +// Ensure that ChromeAppSorting is able to properly initialize off a set // of old page and app launch indices and properly convert them. -class ExtensionSortingInitialize - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingInitialize : public PrefsPrepopulatedTestBase { public: - ExtensionSortingInitialize() {} - virtual ~ExtensionSortingInitialize() {} + ChromeAppSortingInitialize() {} + virtual ~ChromeAppSortingInitialize() {} virtual void Initialize() OVERRIDE { // A preference determining the order of which the apps appear on the NTP. @@ -186,89 +184,89 @@ class ExtensionSortingInitialize // We insert the ids in reserve order so that we have to deal with the // element on the 2nd page before the 1st page is seen. - extensions::ExtensionIdList ids; + ExtensionIdList ids; ids.push_back(extension3()->id()); ids.push_back(extension2()->id()); ids.push_back(extension1()->id()); - prefs()->extension_sorting()->Initialize(ids); + prefs()->app_sorting()->Initialize(ids); } virtual void Verify() OVERRIDE { syncer::StringOrdinal first_ordinal = syncer::StringOrdinal::CreateInitialOrdinal(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); EXPECT_TRUE(first_ordinal.Equals( - extension_sorting->GetAppLaunchOrdinal(extension1()->id()))); + app_sorting->GetAppLaunchOrdinal(extension1()->id()))); EXPECT_TRUE(first_ordinal.LessThan( - extension_sorting->GetAppLaunchOrdinal(extension2()->id()))); + app_sorting->GetAppLaunchOrdinal(extension2()->id()))); EXPECT_TRUE(first_ordinal.Equals( - extension_sorting->GetAppLaunchOrdinal(extension3()->id()))); + app_sorting->GetAppLaunchOrdinal(extension3()->id()))); EXPECT_TRUE(first_ordinal.Equals( - extension_sorting->GetPageOrdinal(extension1()->id()))); + app_sorting->GetPageOrdinal(extension1()->id()))); EXPECT_TRUE(first_ordinal.Equals( - extension_sorting->GetPageOrdinal(extension2()->id()))); + app_sorting->GetPageOrdinal(extension2()->id()))); EXPECT_TRUE(first_ordinal.LessThan( - extension_sorting->GetPageOrdinal(extension3()->id()))); + app_sorting->GetPageOrdinal(extension3()->id()))); } }; -TEST_F(ExtensionSortingInitialize, ExtensionSortingInitialize) {} +TEST_F(ChromeAppSortingInitialize, ChromeAppSortingInitialize) {} // Make sure that initialization still works when no extensions are present // (i.e. make sure that the web store icon is still loaded into the map). -class ExtensionSortingInitializeWithNoApps - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingInitializeWithNoApps : public PrefsPrepopulatedTestBase { public: - ExtensionSortingInitializeWithNoApps() {} - virtual ~ExtensionSortingInitializeWithNoApps() {} + ChromeAppSortingInitializeWithNoApps() {} + virtual ~ChromeAppSortingInitializeWithNoApps() {} virtual void Initialize() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Make sure that the web store has valid ordinals. syncer::StringOrdinal initial_ordinal = syncer::StringOrdinal::CreateInitialOrdinal(); - extension_sorting->SetPageOrdinal(extension_misc::kWebStoreAppId, - initial_ordinal); - extension_sorting->SetAppLaunchOrdinal(extension_misc::kWebStoreAppId, - initial_ordinal); + app_sorting->SetPageOrdinal(extension_misc::kWebStoreAppId, + initial_ordinal); + app_sorting->SetAppLaunchOrdinal(extension_misc::kWebStoreAppId, + initial_ordinal); - extensions::ExtensionIdList ids; - extension_sorting->Initialize(ids); + ExtensionIdList ids; + app_sorting->Initialize(ids); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + ChromeAppSorting* app_sorting = + static_cast(prefs()->app_sorting()); syncer::StringOrdinal page = - extension_sorting->GetPageOrdinal(extension_misc::kWebStoreAppId); + app_sorting->GetPageOrdinal(extension_misc::kWebStoreAppId); EXPECT_TRUE(page.IsValid()); - ExtensionSorting::PageOrdinalMap::iterator page_it = - extension_sorting->ntp_ordinal_map_.find(page); - EXPECT_TRUE(page_it != extension_sorting->ntp_ordinal_map_.end()); + ChromeAppSorting::PageOrdinalMap::iterator page_it = + app_sorting->ntp_ordinal_map_.find(page); + EXPECT_TRUE(page_it != app_sorting->ntp_ordinal_map_.end()); syncer::StringOrdinal app_launch = - extension_sorting->GetPageOrdinal(extension_misc::kWebStoreAppId); + app_sorting->GetPageOrdinal(extension_misc::kWebStoreAppId); EXPECT_TRUE(app_launch.IsValid()); - ExtensionSorting::AppLaunchOrdinalMap::iterator app_launch_it = + ChromeAppSorting::AppLaunchOrdinalMap::iterator app_launch_it = page_it->second.find(app_launch); EXPECT_TRUE(app_launch_it != page_it->second.end()); } }; -TEST_F(ExtensionSortingInitializeWithNoApps, - ExtensionSortingInitializeWithNoApps) {} +TEST_F(ChromeAppSortingInitializeWithNoApps, + ChromeAppSortingInitializeWithNoApps) {} // Tests the application index to ordinal migration code for values that // shouldn't be converted. This should be removed when the migrate code // is taken out. // http://crbug.com/107376 -class ExtensionSortingMigrateAppIndexInvalid - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingMigrateAppIndexInvalid + : public PrefsPrepopulatedTestBase { public: - ExtensionSortingMigrateAppIndexInvalid() {} - virtual ~ExtensionSortingMigrateAppIndexInvalid() {} + ChromeAppSortingMigrateAppIndexInvalid() {} + virtual ~ChromeAppSortingMigrateAppIndexInvalid() {} virtual void Initialize() OVERRIDE { // A preference determining the order of which the apps appear on the NTP. @@ -286,53 +284,51 @@ class ExtensionSortingMigrateAppIndexInvalid kPrefPageIndexDeprecated, new base::FundamentalValue(-1)); - extensions::ExtensionIdList ids; + ExtensionIdList ids; ids.push_back(extension1()->id()); - prefs()->extension_sorting()->Initialize(ids); + prefs()->app_sorting()->Initialize(ids); } virtual void Verify() OVERRIDE { // Make sure that the invalid page_index wasn't converted over. - EXPECT_FALSE(prefs()->extension_sorting()->GetAppLaunchOrdinal( + EXPECT_FALSE(prefs()->app_sorting()->GetAppLaunchOrdinal( extension1()->id()).IsValid()); } }; -TEST_F(ExtensionSortingMigrateAppIndexInvalid, - ExtensionSortingMigrateAppIndexInvalid) {} +TEST_F(ChromeAppSortingMigrateAppIndexInvalid, + ChromeAppSortingMigrateAppIndexInvalid) {} -class ExtensionSortingFixNTPCollisionsAllCollide - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingFixNTPCollisionsAllCollide + : public PrefsPrepopulatedTestBase { public: - ExtensionSortingFixNTPCollisionsAllCollide() {} - virtual ~ExtensionSortingFixNTPCollisionsAllCollide() {} + ChromeAppSortingFixNTPCollisionsAllCollide() {} + virtual ~ChromeAppSortingFixNTPCollisionsAllCollide() {} virtual void Initialize() OVERRIDE { repeated_ordinal_ = syncer::StringOrdinal::CreateInitialOrdinal(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); - extension_sorting->SetAppLaunchOrdinal(extension1()->id(), - repeated_ordinal_); - extension_sorting->SetPageOrdinal(extension1()->id(), repeated_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension1()->id(), + repeated_ordinal_); + app_sorting->SetPageOrdinal(extension1()->id(), repeated_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension2()->id(), - repeated_ordinal_); - extension_sorting->SetPageOrdinal(extension2()->id(), repeated_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension2()->id(), repeated_ordinal_); + app_sorting->SetPageOrdinal(extension2()->id(), repeated_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension3()->id(), - repeated_ordinal_); - extension_sorting->SetPageOrdinal(extension3()->id(), repeated_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension3()->id(), repeated_ordinal_); + app_sorting->SetPageOrdinal(extension3()->id(), repeated_ordinal_); - extension_sorting->FixNTPOrdinalCollisions(); + app_sorting->FixNTPOrdinalCollisions(); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal extension1_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension1()->id()); + app_sorting->GetAppLaunchOrdinal(extension1()->id()); syncer::StringOrdinal extension2_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension2()->id()); + app_sorting->GetAppLaunchOrdinal(extension2()->id()); syncer::StringOrdinal extension3_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension3()->id()); + app_sorting->GetAppLaunchOrdinal(extension3()->id()); // The overlapping extensions should have be adjusted so that they are // sorted by their id. @@ -344,54 +340,54 @@ class ExtensionSortingFixNTPCollisionsAllCollide extension2_app_launch.LessThan(extension3_app_launch)); // The page ordinal should be unchanged. - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension1()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension1()->id()).Equals( repeated_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension2()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension2()->id()).Equals( repeated_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension3()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension3()->id()).Equals( repeated_ordinal_)); } private: syncer::StringOrdinal repeated_ordinal_; }; -TEST_F(ExtensionSortingFixNTPCollisionsAllCollide, - ExtensionSortingFixNTPCollisionsAllCollide) {} +TEST_F(ChromeAppSortingFixNTPCollisionsAllCollide, + ChromeAppSortingFixNTPCollisionsAllCollide) {} -class ExtensionSortingFixNTPCollisionsSomeCollideAtStart - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingFixNTPCollisionsSomeCollideAtStart + : public PrefsPrepopulatedTestBase { public: - ExtensionSortingFixNTPCollisionsSomeCollideAtStart() {} - virtual ~ExtensionSortingFixNTPCollisionsSomeCollideAtStart() {} + ChromeAppSortingFixNTPCollisionsSomeCollideAtStart() {} + virtual ~ChromeAppSortingFixNTPCollisionsSomeCollideAtStart() {} virtual void Initialize() OVERRIDE { first_ordinal_ = syncer::StringOrdinal::CreateInitialOrdinal(); syncer::StringOrdinal second_ordinal = first_ordinal_.CreateAfter(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Have the first two extension in the same position, with a third // (non-colliding) extension after. - extension_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension2()->id(), first_ordinal_); - extension_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension2()->id(), first_ordinal_); + app_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); - extension_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); + app_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); - extension_sorting->FixNTPOrdinalCollisions(); + app_sorting->FixNTPOrdinalCollisions(); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal extension1_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension1()->id()); + app_sorting->GetAppLaunchOrdinal(extension1()->id()); syncer::StringOrdinal extension2_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension2()->id()); + app_sorting->GetAppLaunchOrdinal(extension2()->id()); syncer::StringOrdinal extension3_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension3()->id()); + app_sorting->GetAppLaunchOrdinal(extension3()->id()); // The overlapping extensions should have be adjusted so that they are // sorted by their id, but they both should be before ext3, which wasn't @@ -402,54 +398,54 @@ class ExtensionSortingFixNTPCollisionsSomeCollideAtStart EXPECT_TRUE(extension2_app_launch.LessThan(extension3_app_launch)); // The page ordinal should be unchanged. - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension1()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension1()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension2()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension2()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension3()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension3()->id()).Equals( first_ordinal_)); } private: syncer::StringOrdinal first_ordinal_; }; -TEST_F(ExtensionSortingFixNTPCollisionsSomeCollideAtStart, - ExtensionSortingFixNTPCollisionsSomeCollideAtStart) {} +TEST_F(ChromeAppSortingFixNTPCollisionsSomeCollideAtStart, + ChromeAppSortingFixNTPCollisionsSomeCollideAtStart) {} -class ExtensionSortingFixNTPCollisionsSomeCollideAtEnd - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingFixNTPCollisionsSomeCollideAtEnd + : public PrefsPrepopulatedTestBase { public: - ExtensionSortingFixNTPCollisionsSomeCollideAtEnd() {} - virtual ~ExtensionSortingFixNTPCollisionsSomeCollideAtEnd() {} + ChromeAppSortingFixNTPCollisionsSomeCollideAtEnd() {} + virtual ~ChromeAppSortingFixNTPCollisionsSomeCollideAtEnd() {} virtual void Initialize() OVERRIDE { first_ordinal_ = syncer::StringOrdinal::CreateInitialOrdinal(); syncer::StringOrdinal second_ordinal = first_ordinal_.CreateAfter(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Have the first extension in a non-colliding position, followed by two // two extension in the same position. - extension_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension2()->id(), second_ordinal); - extension_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension2()->id(), second_ordinal); + app_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); - extension_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); + app_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); - extension_sorting->FixNTPOrdinalCollisions(); + app_sorting->FixNTPOrdinalCollisions(); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal extension1_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension1()->id()); + app_sorting->GetAppLaunchOrdinal(extension1()->id()); syncer::StringOrdinal extension2_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension2()->id()); + app_sorting->GetAppLaunchOrdinal(extension2()->id()); syncer::StringOrdinal extension3_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension3()->id()); + app_sorting->GetAppLaunchOrdinal(extension3()->id()); // The overlapping extensions should have be adjusted so that they are // sorted by their id, but they both should be after ext1, which wasn't @@ -460,57 +456,57 @@ class ExtensionSortingFixNTPCollisionsSomeCollideAtEnd extension2_app_launch.LessThan(extension3_app_launch)); // The page ordinal should be unchanged. - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension1()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension1()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension2()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension2()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension3()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension3()->id()).Equals( first_ordinal_)); } private: syncer::StringOrdinal first_ordinal_; }; -TEST_F(ExtensionSortingFixNTPCollisionsSomeCollideAtEnd, - ExtensionSortingFixNTPCollisionsSomeCollideAtEnd) {} +TEST_F(ChromeAppSortingFixNTPCollisionsSomeCollideAtEnd, + ChromeAppSortingFixNTPCollisionsSomeCollideAtEnd) {} -class ExtensionSortingFixNTPCollisionsTwoCollisions - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingFixNTPCollisionsTwoCollisions + : public PrefsPrepopulatedTestBase { public: - ExtensionSortingFixNTPCollisionsTwoCollisions() {} - virtual ~ExtensionSortingFixNTPCollisionsTwoCollisions() {} + ChromeAppSortingFixNTPCollisionsTwoCollisions() {} + virtual ~ChromeAppSortingFixNTPCollisionsTwoCollisions() {} virtual void Initialize() OVERRIDE { first_ordinal_ = syncer::StringOrdinal::CreateInitialOrdinal(); syncer::StringOrdinal second_ordinal = first_ordinal_.CreateAfter(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Have two extensions colliding, followed by two more colliding extensions. - extension_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension1()->id(), first_ordinal_); + app_sorting->SetPageOrdinal(extension1()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension2()->id(), first_ordinal_); - extension_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension2()->id(), first_ordinal_); + app_sorting->SetPageOrdinal(extension2()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); - extension_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension3()->id(), second_ordinal); + app_sorting->SetPageOrdinal(extension3()->id(), first_ordinal_); - extension_sorting->SetAppLaunchOrdinal(extension4()->id(), second_ordinal); - extension_sorting->SetPageOrdinal(extension4()->id(), first_ordinal_); + app_sorting->SetAppLaunchOrdinal(extension4()->id(), second_ordinal); + app_sorting->SetPageOrdinal(extension4()->id(), first_ordinal_); - extension_sorting->FixNTPOrdinalCollisions(); + app_sorting->FixNTPOrdinalCollisions(); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal extension1_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension1()->id()); + app_sorting->GetAppLaunchOrdinal(extension1()->id()); syncer::StringOrdinal extension2_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension2()->id()); + app_sorting->GetAppLaunchOrdinal(extension2()->id()); syncer::StringOrdinal extension3_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension3()->id()); + app_sorting->GetAppLaunchOrdinal(extension3()->id()); syncer::StringOrdinal extension4_app_launch = - extension_sorting->GetAppLaunchOrdinal(extension4()->id()); + app_sorting->GetAppLaunchOrdinal(extension4()->id()); // The overlapping extensions should have be adjusted so that they are // sorted by their id, with |ext1| and |ext2| appearing before |ext3| and @@ -526,115 +522,107 @@ class ExtensionSortingFixNTPCollisionsTwoCollisions extension3_app_launch.LessThan(extension4_app_launch)); // The page ordinal should be unchanged. - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension1()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension1()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension2()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension2()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension3()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension3()->id()).Equals( first_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(extension4()->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension4()->id()).Equals( first_ordinal_)); } private: syncer::StringOrdinal first_ordinal_; }; -TEST_F(ExtensionSortingFixNTPCollisionsTwoCollisions, - ExtensionSortingFixNTPCollisionsTwoCollisions) {} +TEST_F(ChromeAppSortingFixNTPCollisionsTwoCollisions, + ChromeAppSortingFixNTPCollisionsTwoCollisions) {} -class ExtensionSortingEnsureValidOrdinals - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingEnsureValidOrdinals + : public PrefsPrepopulatedTestBase { public : - ExtensionSortingEnsureValidOrdinals() {} - virtual ~ExtensionSortingEnsureValidOrdinals() {} + ChromeAppSortingEnsureValidOrdinals() {} + virtual ~ChromeAppSortingEnsureValidOrdinals() {} virtual void Initialize() OVERRIDE {} virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Give ext1 invalid ordinals and then check that EnsureValidOrdinals fixes // them. - extension_sorting->SetAppLaunchOrdinal(extension1()->id(), - syncer::StringOrdinal()); - extension_sorting->SetPageOrdinal(extension1()->id(), - syncer::StringOrdinal()); + app_sorting->SetAppLaunchOrdinal(extension1()->id(), + syncer::StringOrdinal()); + app_sorting->SetPageOrdinal(extension1()->id(), syncer::StringOrdinal()); - extension_sorting->EnsureValidOrdinals(extension1()->id(), - syncer::StringOrdinal()); + app_sorting->EnsureValidOrdinals(extension1()->id(), + syncer::StringOrdinal()); - EXPECT_TRUE( - extension_sorting->GetAppLaunchOrdinal(extension1()->id()).IsValid()); - EXPECT_TRUE( - extension_sorting->GetPageOrdinal(extension1()->id()).IsValid()); + EXPECT_TRUE(app_sorting->GetAppLaunchOrdinal(extension1()->id()).IsValid()); + EXPECT_TRUE(app_sorting->GetPageOrdinal(extension1()->id()).IsValid()); } }; -TEST_F(ExtensionSortingEnsureValidOrdinals, - ExtensionSortingEnsureValidOrdinals) {} +TEST_F(ChromeAppSortingEnsureValidOrdinals, + ChromeAppSortingEnsureValidOrdinals) {} -class ExtensionSortingPageOrdinalMapping - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingPageOrdinalMapping : public PrefsPrepopulatedTestBase { public: - ExtensionSortingPageOrdinalMapping() {} - virtual ~ExtensionSortingPageOrdinalMapping() {} + ChromeAppSortingPageOrdinalMapping() {} + virtual ~ChromeAppSortingPageOrdinalMapping() {} virtual void Initialize() OVERRIDE {} virtual void Verify() OVERRIDE { std::string ext_1 = "ext_1"; std::string ext_2 = "ext_2"; - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + ChromeAppSorting* app_sorting = + static_cast(prefs()->app_sorting()); syncer::StringOrdinal first_ordinal = syncer::StringOrdinal::CreateInitialOrdinal(); // Ensure attempting to removing a mapping with an invalid page doesn't // modify the map. - EXPECT_TRUE(extension_sorting->ntp_ordinal_map_.empty()); - extension_sorting->RemoveOrdinalMapping( + EXPECT_TRUE(app_sorting->ntp_ordinal_map_.empty()); + app_sorting->RemoveOrdinalMapping( ext_1, first_ordinal, first_ordinal); - EXPECT_TRUE(extension_sorting->ntp_ordinal_map_.empty()); + EXPECT_TRUE(app_sorting->ntp_ordinal_map_.empty()); // Add new mappings. - extension_sorting->AddOrdinalMapping(ext_1, first_ordinal, first_ordinal); - extension_sorting->AddOrdinalMapping(ext_2, first_ordinal, first_ordinal); + app_sorting->AddOrdinalMapping(ext_1, first_ordinal, first_ordinal); + app_sorting->AddOrdinalMapping(ext_2, first_ordinal, first_ordinal); - EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_.size()); - EXPECT_EQ(2U, extension_sorting->ntp_ordinal_map_[first_ordinal].size()); + EXPECT_EQ(1U, app_sorting->ntp_ordinal_map_.size()); + EXPECT_EQ(2U, app_sorting->ntp_ordinal_map_[first_ordinal].size()); - ExtensionSorting::AppLaunchOrdinalMap::iterator it = - extension_sorting->ntp_ordinal_map_[first_ordinal].find(first_ordinal); + ChromeAppSorting::AppLaunchOrdinalMap::iterator it = + app_sorting->ntp_ordinal_map_[first_ordinal].find(first_ordinal); EXPECT_EQ(ext_1, it->second); ++it; EXPECT_EQ(ext_2, it->second); - extension_sorting->RemoveOrdinalMapping(ext_1, - first_ordinal, - first_ordinal); - EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_.size()); - EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_[first_ordinal].size()); + app_sorting->RemoveOrdinalMapping(ext_1, first_ordinal, first_ordinal); + EXPECT_EQ(1U, app_sorting->ntp_ordinal_map_.size()); + EXPECT_EQ(1U, app_sorting->ntp_ordinal_map_[first_ordinal].size()); - it = extension_sorting->ntp_ordinal_map_[first_ordinal].find( - first_ordinal); + it = app_sorting->ntp_ordinal_map_[first_ordinal].find(first_ordinal); EXPECT_EQ(ext_2, it->second); // Ensure that attempting to remove an extension with a valid page and app // launch ordinals, but a unused id has no effect. - extension_sorting->RemoveOrdinalMapping( + app_sorting->RemoveOrdinalMapping( "invalid_ext", first_ordinal, first_ordinal); - EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_.size()); - EXPECT_EQ(1U, extension_sorting->ntp_ordinal_map_[first_ordinal].size()); + EXPECT_EQ(1U, app_sorting->ntp_ordinal_map_.size()); + EXPECT_EQ(1U, app_sorting->ntp_ordinal_map_[first_ordinal].size()); - it = extension_sorting->ntp_ordinal_map_[first_ordinal].find( - first_ordinal); + it = app_sorting->ntp_ordinal_map_[first_ordinal].find(first_ordinal); EXPECT_EQ(ext_2, it->second); } }; -TEST_F(ExtensionSortingPageOrdinalMapping, - ExtensionSortingPageOrdinalMapping) {} +TEST_F(ChromeAppSortingPageOrdinalMapping, + ChromeAppSortingPageOrdinalMapping) {} -class ExtensionSortingPreinstalledAppsBase - : public extensions::PrefsPrepopulatedTestBase { +class ChromeAppSortingPreinstalledAppsBase : public PrefsPrepopulatedTestBase { public: - ExtensionSortingPreinstalledAppsBase() { + ChromeAppSortingPreinstalledAppsBase() { DictionaryValue simple_dict; simple_dict.SetString(keys::kVersion, "1.0.0.0"); simple_dict.SetString(keys::kName, "unused"); @@ -661,7 +649,7 @@ class ExtensionSortingPreinstalledAppsBase app1_ = app1_scoped_.get(); app2_ = app2_scoped_.get(); } - virtual ~ExtensionSortingPreinstalledAppsBase() {} + virtual ~ChromeAppSortingPreinstalledAppsBase() {} protected: // Weak references, for convenience. @@ -673,25 +661,26 @@ class ExtensionSortingPreinstalledAppsBase scoped_refptr app2_scoped_; }; -class ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage - : public ExtensionSortingPreinstalledAppsBase { +class ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage + : public ChromeAppSortingPreinstalledAppsBase { public: - ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} - virtual ~ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} + ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} + virtual ~ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage() {} virtual void Initialize() OVERRIDE {} virtual void Verify() OVERRIDE { syncer::StringOrdinal page = syncer::StringOrdinal::CreateInitialOrdinal(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + ChromeAppSorting* app_sorting = + static_cast(prefs()->app_sorting()); syncer::StringOrdinal min = - extension_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( + app_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( page, - ExtensionSorting::MIN_ORDINAL); + ChromeAppSorting::MIN_ORDINAL); syncer::StringOrdinal max = - extension_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( + app_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( page, - ExtensionSorting::MAX_ORDINAL); + ChromeAppSorting::MAX_ORDINAL); EXPECT_TRUE(min.IsValid()); EXPECT_TRUE(max.IsValid()); EXPECT_TRUE(min.LessThan(max)); @@ -702,108 +691,107 @@ class ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage syncer::StringOrdinal empty_page = page.CreateAfter(); EXPECT_FALSE(min.IsValid()); EXPECT_FALSE(max.IsValid()); - min = extension_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( + min = app_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( empty_page, - ExtensionSorting::MIN_ORDINAL); - max = extension_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( + ChromeAppSorting::MIN_ORDINAL); + max = app_sorting->GetMinOrMaxAppLaunchOrdinalsOnPage( empty_page, - ExtensionSorting::MAX_ORDINAL); + ChromeAppSorting::MAX_ORDINAL); EXPECT_FALSE(min.IsValid()); EXPECT_FALSE(max.IsValid()); } }; -TEST_F(ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage, - ExtensionSortingGetMinOrMaxAppLaunchOrdinalsOnPage) {} +TEST_F(ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage, + ChromeAppSortingGetMinOrMaxAppLaunchOrdinalsOnPage) {} // Make sure that empty pages aren't removed from the integer to ordinal // mapping. See http://crbug.com/109802 for details. -class ExtensionSortingKeepEmptyStringOrdinalPages - : public ExtensionSortingPreinstalledAppsBase { +class ChromeAppSortingKeepEmptyStringOrdinalPages + : public ChromeAppSortingPreinstalledAppsBase { public: - ExtensionSortingKeepEmptyStringOrdinalPages() {} - virtual ~ExtensionSortingKeepEmptyStringOrdinalPages() {} + ChromeAppSortingKeepEmptyStringOrdinalPages() {} + virtual ~ChromeAppSortingKeepEmptyStringOrdinalPages() {} virtual void Initialize() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal first_page = syncer::StringOrdinal::CreateInitialOrdinal(); - extension_sorting->SetPageOrdinal(app1_->id(), first_page); - EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); + app_sorting->SetPageOrdinal(app1_->id(), first_page); + EXPECT_EQ(0, app_sorting->PageStringOrdinalAsInteger(first_page)); last_page_ = first_page.CreateAfter(); - extension_sorting->SetPageOrdinal(app2_->id(), last_page_); - EXPECT_EQ(1, extension_sorting->PageStringOrdinalAsInteger(last_page_)); + app_sorting->SetPageOrdinal(app2_->id(), last_page_); + EXPECT_EQ(1, app_sorting->PageStringOrdinalAsInteger(last_page_)); // Move the second app to create an empty page. - extension_sorting->SetPageOrdinal(app2_->id(), first_page); - EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); + app_sorting->SetPageOrdinal(app2_->id(), first_page); + EXPECT_EQ(0, app_sorting->PageStringOrdinalAsInteger(first_page)); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Move the second app to a new empty page at the end, skipping over // the current empty page. last_page_ = last_page_.CreateAfter(); - extension_sorting->SetPageOrdinal(app2_->id(), last_page_); - EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(last_page_)); - EXPECT_TRUE( - last_page_.Equals(extension_sorting->PageIntegerAsStringOrdinal(2))); + app_sorting->SetPageOrdinal(app2_->id(), last_page_); + EXPECT_EQ(2, app_sorting->PageStringOrdinalAsInteger(last_page_)); + EXPECT_TRUE(last_page_.Equals(app_sorting->PageIntegerAsStringOrdinal(2))); } private: syncer::StringOrdinal last_page_; }; -TEST_F(ExtensionSortingKeepEmptyStringOrdinalPages, - ExtensionSortingKeepEmptyStringOrdinalPages) {} +TEST_F(ChromeAppSortingKeepEmptyStringOrdinalPages, + ChromeAppSortingKeepEmptyStringOrdinalPages) {} -class ExtensionSortingMakesFillerOrdinals - : public ExtensionSortingPreinstalledAppsBase { +class ChromeAppSortingMakesFillerOrdinals + : public ChromeAppSortingPreinstalledAppsBase { public: - ExtensionSortingMakesFillerOrdinals() {} - virtual ~ExtensionSortingMakesFillerOrdinals() {} + ChromeAppSortingMakesFillerOrdinals() {} + virtual ~ChromeAppSortingMakesFillerOrdinals() {} virtual void Initialize() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); syncer::StringOrdinal first_page = syncer::StringOrdinal::CreateInitialOrdinal(); - extension_sorting->SetPageOrdinal(app1_->id(), first_page); - EXPECT_EQ(0, extension_sorting->PageStringOrdinalAsInteger(first_page)); + app_sorting->SetPageOrdinal(app1_->id(), first_page); + EXPECT_EQ(0, app_sorting->PageStringOrdinalAsInteger(first_page)); } virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Because the UI can add an unlimited number of empty pages without an app // on them, this test simulates dropping of an app on the 1st and 4th empty // pages (3rd and 6th pages by index) to ensure we don't crash and that // filler ordinals are created as needed. See: http://crbug.com/122214 syncer::StringOrdinal page_three = - extension_sorting->PageIntegerAsStringOrdinal(2); - extension_sorting->SetPageOrdinal(app1_->id(), page_three); - EXPECT_EQ(2, extension_sorting->PageStringOrdinalAsInteger(page_three)); + app_sorting->PageIntegerAsStringOrdinal(2); + app_sorting->SetPageOrdinal(app1_->id(), page_three); + EXPECT_EQ(2, app_sorting->PageStringOrdinalAsInteger(page_three)); - syncer::StringOrdinal page_six = - extension_sorting->PageIntegerAsStringOrdinal(5); - extension_sorting->SetPageOrdinal(app1_->id(), page_six); - EXPECT_EQ(5, extension_sorting->PageStringOrdinalAsInteger(page_six)); + syncer::StringOrdinal page_six = app_sorting->PageIntegerAsStringOrdinal(5); + app_sorting->SetPageOrdinal(app1_->id(), page_six); + EXPECT_EQ(5, app_sorting->PageStringOrdinalAsInteger(page_six)); } }; -TEST_F(ExtensionSortingMakesFillerOrdinals, - ExtensionSortingMakesFillerOrdinals) {} +TEST_F(ChromeAppSortingMakesFillerOrdinals, + ChromeAppSortingMakesFillerOrdinals) {} -class ExtensionSortingDefaultOrdinalsBase : public ExtensionSortingTest { +class ChromeAppSortingDefaultOrdinalsBase : public ChromeAppSortingTest { public: - ExtensionSortingDefaultOrdinalsBase() {} - virtual ~ExtensionSortingDefaultOrdinalsBase() {} + ChromeAppSortingDefaultOrdinalsBase() {} + virtual ~ChromeAppSortingDefaultOrdinalsBase() {} virtual void Initialize() OVERRIDE { app_ = CreateApp("app"); InitDefaultOrdinals(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); - ExtensionSorting::AppOrdinalsMap& sorting_defaults = - extension_sorting->default_ordinals_; + ChromeAppSorting* app_sorting = + static_cast(prefs()->app_sorting()); + ChromeAppSorting::AppOrdinalsMap& sorting_defaults = + app_sorting->default_ordinals_; sorting_defaults[app_->id()].page_ordinal = default_page_ordinal_; sorting_defaults[app_->id()].app_launch_ordinal = default_app_launch_ordinal_; @@ -851,37 +839,36 @@ class ExtensionSortingDefaultOrdinalsBase : public ExtensionSortingTest { }; // Tests that the app gets its default ordinals. -class ExtensionSortingDefaultOrdinals - : public ExtensionSortingDefaultOrdinalsBase { +class ChromeAppSortingDefaultOrdinals + : public ChromeAppSortingDefaultOrdinalsBase { public: - ExtensionSortingDefaultOrdinals() {} - virtual ~ExtensionSortingDefaultOrdinals() {} + ChromeAppSortingDefaultOrdinals() {} + virtual ~ChromeAppSortingDefaultOrdinals() {} virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( + AppSorting* app_sorting = prefs()->app_sorting(); + EXPECT_TRUE(app_sorting->GetPageOrdinal(app_->id()).Equals( default_page_ordinal_)); - EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( + EXPECT_TRUE(app_sorting->GetAppLaunchOrdinal(app_->id()).Equals( default_app_launch_ordinal_)); } }; -TEST_F(ExtensionSortingDefaultOrdinals, - ExtensionSortingDefaultOrdinals) {} +TEST_F(ChromeAppSortingDefaultOrdinals, + ChromeAppSortingDefaultOrdinals) {} // Tests that the default page ordinal is overridden by install page ordinal. -class ExtensionSortingDefaultOrdinalOverriddenByInstallPage - : public ExtensionSortingDefaultOrdinalsBase { +class ChromeAppSortingDefaultOrdinalOverriddenByInstallPage + : public ChromeAppSortingDefaultOrdinalsBase { public: - ExtensionSortingDefaultOrdinalOverriddenByInstallPage() {} - virtual ~ExtensionSortingDefaultOrdinalOverriddenByInstallPage() {} + ChromeAppSortingDefaultOrdinalOverriddenByInstallPage() {} + virtual ~ChromeAppSortingDefaultOrdinalOverriddenByInstallPage() {} virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); - EXPECT_FALSE(extension_sorting->GetPageOrdinal(app_->id()).Equals( + EXPECT_FALSE(app_sorting->GetPageOrdinal(app_->id()).Equals( default_page_ordinal_)); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( - install_page_)); + EXPECT_TRUE(app_sorting->GetPageOrdinal(app_->id()).Equals(install_page_)); } protected: @@ -896,22 +883,22 @@ class ExtensionSortingDefaultOrdinalOverriddenByInstallPage private: syncer::StringOrdinal install_page_; }; -TEST_F(ExtensionSortingDefaultOrdinalOverriddenByInstallPage, - ExtensionSortingDefaultOrdinalOverriddenByInstallPage) {} +TEST_F(ChromeAppSortingDefaultOrdinalOverriddenByInstallPage, + ChromeAppSortingDefaultOrdinalOverriddenByInstallPage) {} // Tests that the default ordinals are overridden by user values. -class ExtensionSortingDefaultOrdinalOverriddenByUserValue - : public ExtensionSortingDefaultOrdinalsBase { +class ChromeAppSortingDefaultOrdinalOverriddenByUserValue + : public ChromeAppSortingDefaultOrdinalsBase { public: - ExtensionSortingDefaultOrdinalOverriddenByUserValue() {} - virtual ~ExtensionSortingDefaultOrdinalOverriddenByUserValue() {} + ChromeAppSortingDefaultOrdinalOverriddenByUserValue() {} + virtual ~ChromeAppSortingDefaultOrdinalOverriddenByUserValue() {} virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); - EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(app_->id()).Equals( user_page_ordinal_)); - EXPECT_TRUE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( + EXPECT_TRUE(app_sorting->GetAppLaunchOrdinal(app_->id()).Equals( user_app_launch_ordinal_)); } @@ -920,34 +907,33 @@ class ExtensionSortingDefaultOrdinalOverriddenByUserValue user_page_ordinal_ = default_page_ordinal_.CreateAfter(); user_app_launch_ordinal_ = default_app_launch_ordinal_.CreateBefore(); - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); - extension_sorting->SetPageOrdinal(app_->id(), user_page_ordinal_); - extension_sorting->SetAppLaunchOrdinal(app_->id(), - user_app_launch_ordinal_); + AppSorting* app_sorting = prefs()->app_sorting(); + app_sorting->SetPageOrdinal(app_->id(), user_page_ordinal_); + app_sorting->SetAppLaunchOrdinal(app_->id(), user_app_launch_ordinal_); } private: syncer::StringOrdinal user_page_ordinal_; syncer::StringOrdinal user_app_launch_ordinal_; }; -TEST_F(ExtensionSortingDefaultOrdinalOverriddenByUserValue, - ExtensionSortingDefaultOrdinalOverriddenByUserValue) {} +TEST_F(ChromeAppSortingDefaultOrdinalOverriddenByUserValue, + ChromeAppSortingDefaultOrdinalOverriddenByUserValue) {} // Tests that the default app launch ordinal is changed to avoid collision. -class ExtensionSortingDefaultOrdinalNoCollision - : public ExtensionSortingDefaultOrdinalsBase { +class ChromeAppSortingDefaultOrdinalNoCollision + : public ChromeAppSortingDefaultOrdinalsBase { public: - ExtensionSortingDefaultOrdinalNoCollision() {} - virtual ~ExtensionSortingDefaultOrdinalNoCollision() {} + ChromeAppSortingDefaultOrdinalNoCollision() {} + virtual ~ChromeAppSortingDefaultOrdinalNoCollision() {} virtual void Verify() OVERRIDE { - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); + AppSorting* app_sorting = prefs()->app_sorting(); // Use the default page. - EXPECT_TRUE(extension_sorting->GetPageOrdinal(app_->id()).Equals( + EXPECT_TRUE(app_sorting->GetPageOrdinal(app_->id()).Equals( default_page_ordinal_)); // Not using the default app launch ordinal because of the collision. - EXPECT_FALSE(extension_sorting->GetAppLaunchOrdinal(app_->id()).Equals( + EXPECT_FALSE(app_sorting->GetAppLaunchOrdinal(app_->id()).Equals( default_app_launch_ordinal_)); } @@ -955,21 +941,22 @@ class ExtensionSortingDefaultOrdinalNoCollision virtual void SetupUserOrdinals() OVERRIDE { other_app_ = prefs_.AddApp("other_app"); // Creates a collision. - ExtensionSorting* extension_sorting = prefs()->extension_sorting(); - extension_sorting->SetPageOrdinal(other_app_->id(), default_page_ordinal_); - extension_sorting->SetAppLaunchOrdinal(other_app_->id(), - default_app_launch_ordinal_); + AppSorting* app_sorting = prefs()->app_sorting(); + app_sorting->SetPageOrdinal(other_app_->id(), default_page_ordinal_); + app_sorting->SetAppLaunchOrdinal(other_app_->id(), + default_app_launch_ordinal_); yet_another_app_ = prefs_.AddApp("yet_aother_app"); - extension_sorting->SetPageOrdinal(yet_another_app_->id(), - default_page_ordinal_); - extension_sorting->SetAppLaunchOrdinal(yet_another_app_->id(), - default_app_launch_ordinal_); + app_sorting->SetPageOrdinal(yet_another_app_->id(), default_page_ordinal_); + app_sorting->SetAppLaunchOrdinal(yet_another_app_->id(), + default_app_launch_ordinal_); } private: scoped_refptr other_app_; scoped_refptr yet_another_app_; }; -TEST_F(ExtensionSortingDefaultOrdinalNoCollision, - ExtensionSortingDefaultOrdinalNoCollision) {} +TEST_F(ChromeAppSortingDefaultOrdinalNoCollision, + ChromeAppSortingDefaultOrdinalNoCollision) {} + +} // namespace extensions diff --git a/chrome/browser/extensions/extension_install_ui_browsertest.cc b/chrome/browser/extensions/extension_install_ui_browsertest.cc index dc938016aba86b..72d806946f1127 100644 --- a/chrome/browser/extensions/extension_install_ui_browsertest.cc +++ b/chrome/browser/extensions/extension_install_ui_browsertest.cc @@ -8,7 +8,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/infobars/confirm_infobar_delegate.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/profiles/profile.h" @@ -24,9 +23,11 @@ #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test_utils.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/id_util.h" using content::WebContents; +using extensions::AppSorting; using extensions::Extension; class ExtensionInstallUIBrowserTest : public ExtensionBrowserTest { @@ -225,11 +226,11 @@ IN_PROC_BROWSER_TEST_F(NewTabUISortingBrowserTest, const extensions::Extension* webstore_extension = service->GetInstalledExtension(extension_misc::kWebStoreAppId); EXPECT_TRUE(webstore_extension); - ExtensionSorting* sorting = service->extension_prefs()->extension_sorting(); + AppSorting* sorting = service->extension_prefs()->app_sorting(); // Register for notifications in the same way as AppLauncherHandler. registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, - content::Source(sorting)); + content::Source(sorting)); // ExtensionAppItem calls this when an app install starts. sorting->EnsureValidOrdinals(app_id, syncer::StringOrdinal()); // Vefify the app is not actually installed yet. diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 7649f134d2cd56..6b32db0d077700 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -14,10 +14,10 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/api/content_settings/content_settings_store.h" #include "chrome/browser/extensions/api/preference/preference_api.h" +#include "chrome/browser/extensions/chrome_app_sorting.h" #include "chrome/browser/extensions/event_router.h" #include "chrome/browser/extensions/extension_pref_store.h" #include "chrome/browser/extensions/extension_prefs_factory.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/host_desktop.h" #include "chrome/common/chrome_switches.h" @@ -1225,7 +1225,7 @@ void ExtensionPrefs::OnExtensionInstalled( void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, const Manifest::Location& location, bool external_uninstall) { - extension_sorting_->ClearOrdinals(extension_id); + app_sorting_->ClearOrdinals(extension_id); // For external extensions, we save a preference reminding ourself not to try // and install the extension anymore (except when |external_uninstall| is @@ -1702,7 +1702,7 @@ void ExtensionPrefs::InitPrefStore() { FixMissingPrefs(extension_ids); MigratePermissions(extension_ids); MigrateDisableReasons(extension_ids); - extension_sorting_->Initialize(extension_ids); + app_sorting_->Initialize(extension_ids); PreferenceAPI::InitExtensionControlledPrefs(this, extension_pref_value_map_); @@ -1781,7 +1781,7 @@ ExtensionPrefs::ExtensionPrefs( : prefs_(prefs), install_directory_(root_dir), extension_pref_value_map_(extension_pref_value_map), - extension_sorting_(new ExtensionSorting(this)), + app_sorting_(new ChromeAppSorting(this)), content_settings_store_(new ContentSettingsStore()), time_provider_(time_provider.Pass()), extensions_disabled_(extensions_disabled) { @@ -1963,15 +1963,12 @@ void ExtensionPrefs::FinishExtensionInfoPrefs( // Clear state that may be registered from a previous install. extension_dict->Remove(EventRouter::kRegisteredEvents, NULL); - // FYI, all code below here races on sudden shutdown because - // |extension_dict|, |extension_sorting_|, |extension_pref_value_map_|, - // and |content_settings_store_| are updated non-transactionally. This is - // probably not fixable without nested transactional updates to pref - // dictionaries. - if (needs_sort_ordinal) { - extension_sorting_->EnsureValidOrdinals(extension_id, - suggested_page_ordinal); - } + // FYI, all code below here races on sudden shutdown because |extension_dict|, + // |app_sorting_|, |extension_pref_value_map_|, and |content_settings_store_| + // are updated non-transactionally. This is probably not fixable without + // nested transactional updates to pref dictionaries. + if (needs_sort_ordinal) + app_sorting_->EnsureValidOrdinals(extension_id, suggested_page_ordinal); bool is_enabled = false; int initial_state; diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h index ab895aab4ed082..f5e3bc26eaa984 100644 --- a/chrome/browser/extensions/extension_prefs.h +++ b/chrome/browser/extensions/extension_prefs.h @@ -16,13 +16,13 @@ #include "base/values.h" #include "chrome/browser/extensions/extension_scoped_prefs.h" #include "components/browser_context_keyed_service/browser_context_keyed_service.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" #include "extensions/common/url_pattern_set.h" #include "sync/api/string_ordinal.h" class ExtensionPrefValueMap; -class ExtensionSorting; class PrefService; class Profile; @@ -31,6 +31,7 @@ class PrefRegistrySyncable; } namespace extensions { +class AppSorting; class ContentSettingsStore; class ExtensionPrefsUninstallExtension; class URLPatternSet; @@ -493,10 +494,8 @@ class ExtensionPrefs : public ExtensionScopedPrefs, // The underlying PrefService. PrefService* pref_service() const { return prefs_; } - // The underlying ExtensionSorting. - ExtensionSorting* extension_sorting() const { - return extension_sorting_.get(); - } + // The underlying AppSorting. + AppSorting* app_sorting() const { return app_sorting_.get(); } // Describes the URLs that are able to install extensions. See // prefs::kExtensionAllowedInstallSites for more information. @@ -639,7 +638,7 @@ class ExtensionPrefs : public ExtensionScopedPrefs, // Contains all the logic for handling the order for various extension // properties. - scoped_ptr extension_sorting_; + scoped_ptr app_sorting_; scoped_refptr content_settings_store_; diff --git a/chrome/browser/extensions/extension_scoped_prefs.h b/chrome/browser/extensions/extension_scoped_prefs.h index 6917e5cfe232de..75b27cc2d52cab 100644 --- a/chrome/browser/extensions/extension_scoped_prefs.h +++ b/chrome/browser/extensions/extension_scoped_prefs.h @@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SCOPED_PREFS_H_ #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SCOPED_PREFS_H_ +namespace extensions { + class ExtensionScopedPrefs { public: ExtensionScopedPrefs() {} @@ -49,4 +51,6 @@ class ExtensionScopedPrefs { virtual bool HasPrefForExtension(const std::string& extension_id) const = 0; }; +} // namespace extensions + #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SCOPED_PREFS_H_ diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 2671bf93110065..f9dbb59e6eee49 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -44,7 +44,6 @@ #include "chrome/browser/extensions/extension_error_ui.h" #include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/extensions/extension_install_ui.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_special_storage_policy.h" #include "chrome/browser/extensions/extension_sync_service.h" #include "chrome/browser/extensions/extension_system.h" @@ -88,6 +87,7 @@ #include "content/public/browser/site_instance.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/url_data_source.h" +#include "extensions/browser/app_sorting.h" #include "extensions/browser/process_manager.h" #include "extensions/common/constants.h" #include "extensions/common/error_utils.h" @@ -392,8 +392,8 @@ ExtensionService::ExtensionService(Profile* profile, this, profile_, &external_extension_providers_); } - // Set this as the ExtensionService for extension sorting to ensure it - // cause syncs if required. + // Set this as the ExtensionService for app sorting to ensure it causes syncs + // if required. is_first_run_ = !extension_prefs_->SetAlertSystemFirstRun(); #if defined(ENABLE_EXTENSIONS) @@ -1262,7 +1262,7 @@ void ExtensionService::OnExtensionMoved( const std::string& moved_extension_id, const std::string& predecessor_extension_id, const std::string& successor_extension_id) { - extension_prefs_->extension_sorting()->OnExtensionMoved( + extension_prefs_->app_sorting()->OnExtensionMoved( moved_extension_id, predecessor_extension_id, successor_extension_id); @@ -1755,10 +1755,9 @@ void ExtensionService::AddExtension(const Extension* extension) { // so we must ensure they have valid ordinals. if (extension->RequiresSortOrdinal()) { if (!extension->ShouldDisplayInNewTabPage()) { - extension_prefs_->extension_sorting()->MarkExtensionAsHidden( - extension->id()); + extension_prefs_->app_sorting()->MarkExtensionAsHidden(extension->id()); } - extension_prefs_->extension_sorting()->EnsureValidOrdinals( + extension_prefs_->app_sorting()->EnsureValidOrdinals( extension->id(), syncer::StringOrdinal()); } diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 78fad9ec0e7f65..b9471151788aee 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc @@ -33,6 +33,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/app_sync_data.h" #include "chrome/browser/extensions/blacklist.h" +#include "chrome/browser/extensions/chrome_app_sorting.h" #include "chrome/browser/extensions/component_loader.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/default_apps.h" @@ -41,7 +42,6 @@ #include "chrome/browser/extensions/extension_error_ui.h" #include "chrome/browser/extensions/extension_notification_observer.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_special_storage_policy.h" #include "chrome/browser/extensions/extension_sync_data.h" #include "chrome/browser/extensions/extension_system.h" @@ -145,6 +145,7 @@ using content::IndexedDBContext; using content::PluginService; using extensions::APIPermission; using extensions::APIPermissionSet; +using extensions::AppSorting; using extensions::Blacklist; using extensions::CrxInstaller; using extensions::Extension; @@ -2657,7 +2658,7 @@ TEST_F(ExtensionServiceTest, UpdateApps) { // Verifies that the NTP page and launch ordinals are kept when updating apps. TEST_F(ExtensionServiceTest, UpdateAppsRetainOrdinals) { InitializeEmptyExtensionService(); - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + AppSorting* sorting = service_->extension_prefs()->app_sorting(); base::FilePath extensions_path = data_dir_.AppendASCII("app_update"); // First install v1 of a hosted app. @@ -2693,7 +2694,7 @@ TEST_F(ExtensionServiceTest, EnsureCWSOrdinalsInitialized) { IDR_WEBSTORE_MANIFEST, base::FilePath(FILE_PATH_LITERAL("web_store"))); service_->Init(); - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + AppSorting* sorting = service_->extension_prefs()->app_sorting(); EXPECT_TRUE( sorting->GetPageOrdinal(extension_misc::kWebStoreAppId).IsValid()); EXPECT_TRUE( @@ -5591,7 +5592,7 @@ TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettings) { EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal())); } - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + AppSorting* sorting = service_->extension_prefs()->app_sorting(); sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter()); { syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( diff --git a/chrome/browser/extensions/extension_sync_bundle.cc b/chrome/browser/extensions/extension_sync_bundle.cc index ab133b58cb71f9..47860915f16074 100644 --- a/chrome/browser/extensions/extension_sync_bundle.cc +++ b/chrome/browser/extensions/extension_sync_bundle.cc @@ -5,7 +5,6 @@ #include "chrome/browser/extensions/extension_sync_bundle.h" #include "base/location.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_sync_service.h" #include "chrome/common/extensions/extension_set.h" #include "chrome/common/extensions/sync_helper.h" diff --git a/chrome/browser/extensions/extension_sync_service.cc b/chrome/browser/extensions/extension_sync_service.cc index 670c73d4a062a2..9aa0dd3240073c 100644 --- a/chrome/browser/extensions/extension_sync_service.cc +++ b/chrome/browser/extensions/extension_sync_service.cc @@ -13,7 +13,6 @@ #include "chrome/browser/extensions/extension_error_ui.h" #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_sync_data.h" #include "chrome/browser/extensions/extension_sync_service_factory.h" #include "chrome/browser/extensions/extension_util.h" @@ -22,6 +21,7 @@ #include "chrome/browser/sync/sync_prefs.h" #include "chrome/common/extensions/sync_helper.h" #include "content/public/browser/browser_thread.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/extension.h" #include "extensions/common/feature_switch.h" #include "extensions/common/manifest_constants.h" @@ -54,7 +54,7 @@ ExtensionSyncService::ExtensionSyncService(Profile* profile, profile_->GetPath())); extension_service_->set_extension_sync_service(this); - extension_prefs_->extension_sorting()->SetExtensionSyncService(this); + extension_prefs_->app_sorting()->SetExtensionSyncService(this); } ExtensionSyncService::~ExtensionSyncService() {} @@ -219,7 +219,7 @@ syncer::SyncError ExtensionSyncService::ProcessSyncChanges( } } - extension_prefs_->extension_sorting()->FixNTPOrdinalCollisions(); + extension_prefs_->app_sorting()->FixNTPOrdinalCollisions(); return syncer::SyncError(); } @@ -238,9 +238,8 @@ extensions::AppSyncData ExtensionSyncService::GetAppSyncData( extension, extension_service_->IsExtensionEnabled(extension.id()), extension_util::IsIncognitoEnabled(extension.id(), extension_service_), - extension_prefs_->extension_sorting()->GetAppLaunchOrdinal( - extension.id()), - extension_prefs_->extension_sorting()->GetPageOrdinal(extension.id())); + extension_prefs_->app_sorting()->GetAppLaunchOrdinal(extension.id()), + extension_prefs_->app_sorting()->GetPageOrdinal(extension.id())); } std::vector @@ -300,10 +299,10 @@ bool ExtensionSyncService::ProcessAppSyncData( if (app_sync_data.app_launch_ordinal().IsValid() && app_sync_data.page_ordinal().IsValid()) { - extension_prefs_->extension_sorting()->SetAppLaunchOrdinal( + extension_prefs_->app_sorting()->SetAppLaunchOrdinal( id, app_sync_data.app_launch_ordinal()); - extension_prefs_->extension_sorting()->SetPageOrdinal( + extension_prefs_->app_sorting()->SetPageOrdinal( id, app_sync_data.page_ordinal()); } diff --git a/chrome/browser/extensions/install_tracker.cc b/chrome/browser/extensions/install_tracker.cc index 7f70cac84fe6de..b84af2b0914767 100644 --- a/chrome/browser/extensions/install_tracker.cc +++ b/chrome/browser/extensions/install_tracker.cc @@ -14,7 +14,7 @@ namespace extensions { InstallTracker::InstallTracker(Profile* profile, extensions::ExtensionPrefs* prefs) { - ExtensionSorting* sorting = prefs->extension_sorting(); + AppSorting* sorting = prefs->app_sorting(); registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, content::Source(profile)); @@ -25,7 +25,7 @@ InstallTracker::InstallTracker(Profile* profile, registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, content::Source(profile)); registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, - content::Source(sorting)); + content::Source(sorting)); registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_APPLIST, content::Source(profile)); diff --git a/chrome/browser/sync/test/integration/sync_app_helper.cc b/chrome/browser/sync/test/integration/sync_app_helper.cc index 897764e207058e..4ca8b6370471d6 100644 --- a/chrome/browser/sync/test/integration/sync_app_helper.cc +++ b/chrome/browser/sync/test/integration/sync_app_helper.cc @@ -5,13 +5,13 @@ #include "chrome/browser/sync/test/integration/sync_app_helper.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/test/integration/extensions_helper.h" #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" #include "chrome/browser/sync/test/integration/sync_extension_helper.h" #include "chrome/common/extensions/sync_helper.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/id_util.h" namespace { @@ -46,9 +46,9 @@ void LoadApp(ExtensionService* extension_service, const std::string& id, AppState* app_state) { app_state->app_launch_ordinal = extension_service->extension_prefs()-> - extension_sorting()->GetAppLaunchOrdinal(id); + app_sorting()->GetAppLaunchOrdinal(id); app_state->page_ordinal = extension_service->extension_prefs()-> - extension_sorting()->GetPageOrdinal(id); + app_sorting()->GetPageOrdinal(id); } // Returns a map from |profile|'s installed extensions to their state. @@ -147,15 +147,14 @@ syncer::StringOrdinal SyncAppHelper::GetPageOrdinalForApp( Profile* profile, const std::string& name) { return profile->GetExtensionService()->extension_prefs()-> - extension_sorting()->GetPageOrdinal( - extensions::id_util::GenerateId(name)); + app_sorting()->GetPageOrdinal(extensions::id_util::GenerateId(name)); } void SyncAppHelper::SetPageOrdinalForApp( Profile* profile, const std::string& name, const syncer::StringOrdinal& page_ordinal) { - profile->GetExtensionService()->extension_prefs()->extension_sorting()-> + profile->GetExtensionService()->extension_prefs()->app_sorting()-> SetPageOrdinal(extensions::id_util::GenerateId(name), page_ordinal); } @@ -163,21 +162,20 @@ syncer::StringOrdinal SyncAppHelper::GetAppLaunchOrdinalForApp( Profile* profile, const std::string& name) { return profile->GetExtensionService()->extension_prefs()-> - extension_sorting()->GetAppLaunchOrdinal( - extensions::id_util::GenerateId(name)); + app_sorting()->GetAppLaunchOrdinal(extensions::id_util::GenerateId(name)); } void SyncAppHelper::SetAppLaunchOrdinalForApp( Profile* profile, const std::string& name, const syncer::StringOrdinal& app_launch_ordinal) { - profile->GetExtensionService()->extension_prefs()->extension_sorting()-> + profile->GetExtensionService()->extension_prefs()->app_sorting()-> SetAppLaunchOrdinal(extensions::id_util::GenerateId(name), app_launch_ordinal); } void SyncAppHelper::FixNTPOrdinalCollisions(Profile* profile) { - profile->GetExtensionService()->extension_prefs()->extension_sorting()-> + profile->GetExtensionService()->extension_prefs()->app_sorting()-> FixNTPOrdinalCollisions(); } diff --git a/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc index 475759a5465de7..9087961cb00f7d 100644 --- a/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_apps_sync_test.cc @@ -4,13 +4,13 @@ #include "base/basictypes.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/profile_sync_service_harness.h" #include "chrome/browser/sync/test/integration/apps_helper.h" #include "chrome/browser/sync/test/integration/sync_app_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/common/extensions/extension_constants.h" +#include "extensions/browser/app_sorting.h" #include "sync/api/string_ordinal.h" using apps_helper::AllProfilesHaveSameAppsAsVerifier; @@ -395,12 +395,12 @@ IN_PROC_BROWSER_TEST_F(TwoClientAppsSyncTest, UpdateCWSOrdinals) { // Change the app launch ordinal. syncer::StringOrdinal cws_app_launch_ordinal = GetProfile(0)->GetExtensionService()-> - extension_prefs()->extension_sorting()->GetAppLaunchOrdinal( + extension_prefs()->app_sorting()->GetAppLaunchOrdinal( extension_misc::kWebStoreAppId); - GetProfile(0)->GetExtensionService()->extension_prefs()->extension_sorting()-> + GetProfile(0)->GetExtensionService()->extension_prefs()->app_sorting()-> SetAppLaunchOrdinal( extension_misc::kWebStoreAppId, cws_app_launch_ordinal.CreateAfter()); - verifier()->GetExtensionService()->extension_prefs()->extension_sorting()-> + verifier()->GetExtensionService()->extension_prefs()->app_sorting()-> SetAppLaunchOrdinal( extension_misc::kWebStoreAppId, cws_app_launch_ordinal.CreateAfter()); ASSERT_TRUE(AwaitQuiescence()); @@ -409,14 +409,14 @@ IN_PROC_BROWSER_TEST_F(TwoClientAppsSyncTest, UpdateCWSOrdinals) { // Change the page ordinal. syncer::StringOrdinal cws_page_ordinal = GetProfile(1)->GetExtensionService()-> - extension_prefs()->extension_sorting()->GetPageOrdinal( + extension_prefs()->app_sorting()->GetPageOrdinal( extension_misc::kWebStoreAppId); GetProfile(1)->GetExtensionService()->extension_prefs()-> - extension_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId, - cws_page_ordinal.CreateAfter()); + app_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId, + cws_page_ordinal.CreateAfter()); verifier()->GetExtensionService()->extension_prefs()-> - extension_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId, - cws_page_ordinal.CreateAfter()); + app_sorting()->SetPageOrdinal(extension_misc::kWebStoreAppId, + cws_page_ordinal.CreateAfter()); ASSERT_TRUE(AwaitQuiescence()); ASSERT_TRUE(AllProfilesHaveSameAppsAsVerifier()); } diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc index f8a3240092370e..94ae775ddcb5ce 100644 --- a/chrome/browser/ui/app_list/extension_app_item.cc +++ b/chrome/browser/ui/app_list/extension_app_item.cc @@ -7,7 +7,6 @@ #include "base/prefs/pref_service.h" #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_context_menu.h" @@ -21,6 +20,7 @@ #include "chrome/common/extensions/manifest_handlers/icons_handler.h" #include "chrome/common/extensions/manifest_url_handler.h" #include "content/public/browser/user_metrics.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/extension.h" #include "grit/theme_resources.h" #include "sync/api/string_ordinal.h" @@ -59,10 +59,10 @@ class ShortcutOverlayImageSource : public gfx::CanvasImageSource { DISALLOW_COPY_AND_ASSIGN(ShortcutOverlayImageSource); }; -ExtensionSorting* GetExtensionSorting(Profile* profile) { +extensions::AppSorting* GetAppSorting(Profile* profile) { ExtensionService* service = extensions::ExtensionSystem::Get(profile)->extension_service(); - return service->extension_prefs()->extension_sorting(); + return service->extension_prefs()->app_sorting(); } const color_utils::HSL shift = {-1, 0, 0.6}; @@ -84,8 +84,8 @@ ExtensionAppItem::ExtensionAppItem(Profile* profile, shift)), is_platform_app_(is_platform_app) { Reload(); - GetExtensionSorting(profile_)->EnsureValidOrdinals(extension_id_, - syncer::StringOrdinal()); + GetAppSorting(profile_)->EnsureValidOrdinals(extension_id_, + syncer::StringOrdinal()); UpdatePositionFromExtensionOrdering(); } @@ -144,7 +144,7 @@ void ExtensionAppItem::Move(const ExtensionAppItem* prev, ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - ExtensionSorting* sorting = service->extension_prefs()->extension_sorting(); + extensions::AppSorting* sorting = service->extension_prefs()->app_sorting(); syncer::StringOrdinal page; std::string prev_id, next_id; @@ -279,9 +279,9 @@ void ExtensionAppItem::ExecuteLaunchCommand(int event_flags) { void ExtensionAppItem::UpdatePositionFromExtensionOrdering() { const syncer::StringOrdinal& page = - GetExtensionSorting(profile_)->GetPageOrdinal(extension_id_); + GetAppSorting(profile_)->GetPageOrdinal(extension_id_); const syncer::StringOrdinal& launch = - GetExtensionSorting(profile_)->GetAppLaunchOrdinal(extension_id_); + GetAppSorting(profile_)->GetAppLaunchOrdinal(extension_id_); set_position(syncer::StringOrdinal( page.ToInternalValue() + launch.ToInternalValue())); } diff --git a/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc b/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc index 53c9200a66368c..be9fb94a936212 100644 --- a/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc +++ b/chrome/browser/ui/app_list/extension_app_model_builder_unittest.cc @@ -13,13 +13,13 @@ #include "base/values.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_service_unittest.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/install_tracker.h" #include "chrome/browser/extensions/install_tracker_factory.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate_impl.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/manifest.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/app_list/app_list_item_model.h" @@ -230,7 +230,7 @@ TEST_F(ExtensionAppModelBuilderTest, Reinstall) { } TEST_F(ExtensionAppModelBuilderTest, OrdinalPrefsChange) { - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting(); syncer::StringOrdinal package_app_page = sorting->GetPageOrdinal(kPackagedApp1Id); @@ -252,7 +252,7 @@ TEST_F(ExtensionAppModelBuilderTest, OrdinalPrefsChange) { } TEST_F(ExtensionAppModelBuilderTest, OnExtensionMoved) { - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting(); sorting->SetPageOrdinal(kHostedAppId, sorting->GetPageOrdinal(kPackagedApp1Id)); @@ -274,11 +274,11 @@ TEST_F(ExtensionAppModelBuilderTest, OnExtensionMoved) { TEST_F(ExtensionAppModelBuilderTest, InvalidOrdinal) { // Creates a no-ordinal case. - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting(); sorting->ClearOrdinals(kPackagedApp1Id); // Creates an corrupted ordinal case. - ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs(); + extensions::ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs(); scoped_prefs->UpdateExtensionPref( kHostedAppId, "page_ordinal", @@ -294,7 +294,7 @@ TEST_F(ExtensionAppModelBuilderTest, OrdinalConfilicts) { syncer::StringOrdinal conflict_ordinal = syncer::StringOrdinal::CreateInitialOrdinal(); - ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); + extensions::AppSorting* sorting = service_->extension_prefs()->app_sorting(); sorting->SetPageOrdinal(kHostedAppId, conflict_ordinal); sorting->SetAppLaunchOrdinal(kHostedAppId, conflict_ordinal); diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index aa33c087a80f5f..b867e5c7be392d 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc @@ -21,7 +21,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_sorting.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/extensions/management_policy.h" #include "chrome/browser/favicon/favicon_service_factory.h" @@ -48,6 +47,7 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/web_ui.h" #include "content/public/common/favicon_url.h" +#include "extensions/browser/app_sorting.h" #include "extensions/common/constants.h" #include "extensions/common/extension.h" #include "grit/browser_resources.h" @@ -58,6 +58,7 @@ #include "url/gurl.h" using content::WebContents; +using extensions::AppSorting; using extensions::CrxInstaller; using extensions::Extension; using extensions::ExtensionPrefs; @@ -161,7 +162,7 @@ void AppLauncherHandler::CreateAppInfo( value->SetBoolean("is_webstore", extension->id() == extension_misc::kWebStoreAppId); - ExtensionSorting* sorting = prefs->extension_sorting(); + AppSorting* sorting = prefs->app_sorting(); syncer::StringOrdinal page_ordinal = sorting->GetPageOrdinal(extension->id()); if (!page_ordinal.IsValid()) { // Make sure every app has a page ordinal (some predate the page ordinal). @@ -466,8 +467,8 @@ void AppLauncherHandler::HandleGetApps(const ListValue* args) { registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, content::Source(profile)); registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, - content::Source( - extension_service_->extension_prefs()->extension_sorting())); + content::Source( + extension_service_->extension_prefs()->app_sorting())); registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR, content::Source(NULL)); registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR, @@ -640,20 +641,19 @@ void AppLauncherHandler::HandleReorderApps(const ListValue* args) { } void AppLauncherHandler::HandleSetPageIndex(const ListValue* args) { - ExtensionSorting* extension_sorting = - extension_service_->extension_prefs()->extension_sorting(); + AppSorting* app_sorting = + extension_service_->extension_prefs()->app_sorting(); std::string extension_id; double page_index; CHECK(args->GetString(0, &extension_id)); CHECK(args->GetDouble(1, &page_index)); const syncer::StringOrdinal& page_ordinal = - extension_sorting->PageIntegerAsStringOrdinal( - static_cast(page_index)); + app_sorting->PageIntegerAsStringOrdinal(static_cast(page_index)); // Don't update the page; it already knows the apps have been reordered. base::AutoReset auto_reset(&ignore_changes_, true); - extension_sorting->SetPageOrdinal(extension_id, page_ordinal); + app_sorting->SetPageOrdinal(extension_id, page_ordinal); } void AppLauncherHandler::HandleSaveAppPageName(const ListValue* args) { @@ -680,11 +680,10 @@ void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) { double page_index; CHECK(args->GetDouble(2, &page_index)); - ExtensionSorting* extension_sorting = - extension_service_->extension_prefs()->extension_sorting(); + AppSorting* app_sorting = + extension_service_->extension_prefs()->app_sorting(); const syncer::StringOrdinal& page_ordinal = - extension_sorting->PageIntegerAsStringOrdinal( - static_cast(page_index)); + app_sorting->PageIntegerAsStringOrdinal(static_cast(page_index)); Profile* profile = Profile::FromWebUI(web_ui()); FaviconService* favicon_service = diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index 8014ba50f6cce5..ccf681afeba927 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -634,6 +634,8 @@ 'browser/extensions/browser_permissions_policy_delegate.h', 'browser/extensions/bundle_installer.cc', 'browser/extensions/bundle_installer.h', + 'browser/extensions/chrome_app_sorting.cc', + 'browser/extensions/chrome_app_sorting.h', 'browser/extensions/chrome_extension_function.cc', 'browser/extensions/chrome_extension_function.h', 'browser/extensions/chrome_extensions_browser_client.cc', @@ -734,8 +736,6 @@ 'browser/extensions/extension_scoped_prefs.h', 'browser/extensions/extension_service.cc', 'browser/extensions/extension_service.h', - 'browser/extensions/extension_sorting.cc', - 'browser/extensions/extension_sorting.h', 'browser/extensions/extension_special_storage_policy.cc', 'browser/extensions/extension_special_storage_policy.h', 'browser/extensions/extension_sync_service.cc', diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index 69423e6dbaba4a..0177056bc6c506 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi @@ -876,6 +876,7 @@ 'browser/extensions/app_sync_data_unittest.cc', 'browser/extensions/blacklist_unittest.cc', 'browser/extensions/browser_permissions_policy_delegate_unittest.cc', + 'browser/extensions/chrome_app_sorting_unittest.cc', 'browser/extensions/component_loader_unittest.cc', 'browser/extensions/convert_user_script_unittest.cc', 'browser/extensions/convert_web_app_unittest.cc', @@ -898,7 +899,6 @@ 'browser/extensions/extension_protocols_unittest.cc', 'browser/extensions/extension_service_unittest.cc', 'browser/extensions/extension_service_unittest.h', - 'browser/extensions/extension_sorting_unittest.cc', 'browser/extensions/extension_special_storage_policy_unittest.cc', 'browser/extensions/extension_sync_data_unittest.cc', 'browser/extensions/extension_ui_unittest.cc', diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS index b56134444b6b73..cf696c765fc76e 100644 --- a/extensions/browser/DEPS +++ b/extensions/browser/DEPS @@ -1,5 +1,6 @@ include_rules = [ "+content/public/browser", + "+sync", # Temporarily allowed includes as part of the app shell/extensions refactor. # @@ -14,6 +15,7 @@ include_rules = [ "+chrome/browser/extensions/extension_function_histogram_value.h", "+chrome/browser/extensions/extension_host.h", "+chrome/browser/extensions/extension_host_mac.h", + "+chrome/browser/extensions/extension_prefs.h", "+chrome/browser/extensions/extension_service.h", "+chrome/browser/extensions/extension_system.h", "+chrome/browser/extensions/extension_util.h", diff --git a/extensions/browser/app_sorting.h b/extensions/browser/app_sorting.h new file mode 100644 index 00000000000000..46b90e18a24ccc --- /dev/null +++ b/extensions/browser/app_sorting.h @@ -0,0 +1,116 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef EXTENSIONS_BROWSER_APP_SORTING_H_ +#define EXTENSIONS_BROWSER_APP_SORTING_H_ + +#include + +#include "base/basictypes.h" +#include "chrome/browser/extensions/extension_prefs.h" +#include "extensions/common/extension.h" +#include "sync/api/string_ordinal.h" + +class ExtensionSyncService; + +namespace extensions { + +// An interface that provides a fixed ordering for a set of apps. +class AppSorting { + public: + AppSorting() {} + virtual ~AppSorting() {} + + // Set up the ExtensionSyncService to inform of changes that require syncing. + virtual void SetExtensionSyncService( + ExtensionSyncService* extension_sync_service) = 0; + + // Properly initialize internal values that require |extension_ids|. + virtual void Initialize(const extensions::ExtensionIdList& extension_ids) = 0; + + // Resolves any conflicts the might be created as a result of syncing that + // results in two icons having the same page and app launch ordinal. After + // this is called it is guaranteed that there are no collisions of NTP icons. + virtual void FixNTPOrdinalCollisions() = 0; + + // This ensures that the extension has valid ordinals, and if it doesn't then + // properly initialize them. |suggested_page| will be used if it is valid and + // the extension has no valid user-set page ordinal. + virtual void EnsureValidOrdinals( + const std::string& extension_id, + const syncer::StringOrdinal& suggested_page) = 0; + + // Updates the app launcher value for the moved extension so that it is now + // located after the given predecessor and before the successor. + // Empty strings are used to indicate no successor or predecessor. + virtual void OnExtensionMoved(const std::string& moved_extension_id, + const std::string& predecessor_extension_id, + const std::string& successor_extension_id) = 0; + + // Get the application launch ordinal for an app with |extension_id|. This + // determines the order in which the app appears on the page it's on in the + // New Tab Page (Note that you can compare app launch ordinals only if the + // apps are on the same page). A string value close to |a*| generally + // indicates top left. If the extension has no launch ordinal, an invalid + // StringOrdinal is returned. + virtual syncer::StringOrdinal GetAppLaunchOrdinal( + const std::string& extension_id) const = 0; + + // Sets a specific launch ordinal for an app with |extension_id|. + virtual void SetAppLaunchOrdinal( + const std::string& extension_id, + const syncer::StringOrdinal& new_app_launch_ordinal) = 0; + + // Returns a StringOrdinal that is lower than any app launch ordinal for the + // given page. + virtual syncer::StringOrdinal CreateFirstAppLaunchOrdinal( + const syncer::StringOrdinal& page_ordinal) const = 0; + + // Returns a StringOrdinal that is higher than any app launch ordinal for the + // given page. + virtual syncer::StringOrdinal CreateNextAppLaunchOrdinal( + const syncer::StringOrdinal& page_ordinal) const = 0; + + // Returns a StringOrdinal that is lower than any existing page ordinal. + virtual syncer::StringOrdinal CreateFirstAppPageOrdinal() const = 0; + + // Gets the page a new app should install to, which is the earliest non-full + // page. The returned ordinal may correspond to a page that doesn't yet exist + // if all pages are full. + virtual syncer::StringOrdinal GetNaturalAppPageOrdinal() const = 0; + + // Get the page ordinal for an app with |extension_id|. This determines + // which page an app will appear on in page-based NTPs. If the app has no + // page specified, an invalid StringOrdinal is returned. + virtual syncer::StringOrdinal GetPageOrdinal( + const std::string& extension_id) const = 0; + + // Sets a specific page ordinal for an app with |extension_id|. + virtual void SetPageOrdinal( + const std::string& extension_id, + const syncer::StringOrdinal& new_page_ordinal) = 0; + + // Removes the ordinal values for an app. + virtual void ClearOrdinals(const std::string& extension_id) = 0; + + // Convert the page StringOrdinal value to its integer equivalent. This takes + // O(# of apps) worst-case. + virtual int PageStringOrdinalAsInteger( + const syncer::StringOrdinal& page_ordinal) const = 0; + + // Converts the page index integer to its StringOrdinal equivalent. This takes + // O(# of apps) worst-case. + virtual syncer::StringOrdinal PageIntegerAsStringOrdinal( + size_t page_index) = 0; + + // Hidden extensions don't appear in the new tab page. + virtual void MarkExtensionAsHidden(const std::string& extension_id) = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(AppSorting); +}; + +} // namespace extensions + +#endif // EXTENSIONS_BROWSER_APP_SORTING_H_ diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index b9ae281f004630..af642d49c4020d 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -156,6 +156,7 @@ 'sources': [ 'browser/admin_policy.cc', 'browser/admin_policy.h', + 'browser/app_sorting.h', 'browser/event_listener_map.cc', 'browser/event_listener_map.h', 'browser/extension_prefs_scope.h',