diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-21 12:03:54 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-21 12:03:54 +0000 |
commit | 7447404904e60de7a488f2a756cf24d9383f2fd9 (patch) | |
tree | 961345b427e44812f4dc46adf19e6870f65074b7 /extensions | |
parent | 082e9183d709313d54afed91f39d47fa692dc38d (diff) | |
download | chromium_src-7447404904e60de7a488f2a756cf24d9383f2fd9.zip chromium_src-7447404904e60de7a488f2a756cf24d9383f2fd9.tar.gz chromium_src-7447404904e60de7a488f2a756cf24d9383f2fd9.tar.bz2 |
extensions: Create AppSorting interface.
Create an AppSorting interface in extensions/browser/ and
make ChromeAppSorting (formerly ExtensionSorting) implement
it.
BUG=313284
Review URL: https://codereview.chromium.org/74613003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236500 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/browser/DEPS | 2 | ||||
-rw-r--r-- | extensions/browser/app_sorting.h | 116 | ||||
-rw-r--r-- | extensions/extensions.gyp | 1 |
3 files changed, 119 insertions, 0 deletions
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS index b561344..cf696c7 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 0000000..46b90e1 --- /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 <string> + +#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 b9ae281..af642d4 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', |