// Copyright (c) 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 <string> #include "base/basictypes.h" #include "extensions/common/extension.h" #include "sync/api/string_ordinal.h" class ExtensionSyncService; namespace extensions { class ExtensionScopedPrefs; // An interface that provides a fixed ordering for a set of apps. class AppSorting { public: AppSorting() {} virtual ~AppSorting() {} // Sets the object used to look up preferences. Ownership remains with the // caller. virtual void SetExtensionScopedPrefs(ExtensionScopedPrefs* prefs) = 0; // Sets up the ExtensionSyncService to inform of changes that require syncing. virtual void SetExtensionSyncService( ExtensionSyncService* extension_sync_service) = 0; // Properly initializes 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_