| // Copyright 2016 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 COMPONENTS_NTP_SNIPPETS_CATEGORY_H_ | 
 | #define COMPONENTS_NTP_SNIPPETS_CATEGORY_H_ | 
 |  | 
 | #include <ostream> | 
 |  | 
 | namespace ntp_snippets { | 
 |  | 
 | // These are the categories that the client knows about. | 
 | // The values before LOCAL_CATEGORIES_COUNT are the categories that are provided | 
 | // locally on the device. Categories provided by the server (IDs strictly larger | 
 | // than REMOTE_CATEGORIES_OFFSET) only need to be hard-coded here if they need | 
 | // to be recognized by the client implementation. | 
 | // NOTE: These are persisted, so don't reorder or remove values, and insert new | 
 | // values only in the appropriate places marked below. | 
 | // On Android builds, a Java counterpart will be generated for this enum. | 
 | // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp.snippets | 
 | enum class KnownCategories { | 
 |   // Pages recently downloaded during normal navigation. | 
 |   RECENT_TABS_DEPRECATED, | 
 |  | 
 |   // Pages downloaded by the user for offline consumption. | 
 |   DOWNLOADS, | 
 |  | 
 |   // Recently used bookmarks. | 
 |   BOOKMARKS, | 
 |  | 
 |   // Physical Web page available in the vicinity. | 
 |   PHYSICAL_WEB_PAGES_DEPRECATED, | 
 |  | 
 |   // Pages recently browsed to on other devices. | 
 |   FOREIGN_TABS_DEPRECATED, | 
 |  | 
 |   // Pages from the user reading list. | 
 |   READING_LIST, | 
 |  | 
 |   // Contextual suggestion. | 
 |   CONTEXTUAL, | 
 |  | 
 |   // ****************** INSERT NEW LOCAL CATEGORIES HERE! ****************** | 
 |   // Existing categories are persisted and they must never be removed. This may | 
 |   // happen implicitly, e.g. when an older version without some local category | 
 |   // is installed. | 
 |  | 
 |   // Follows the last local category. | 
 |   LOCAL_CATEGORIES_COUNT, | 
 |  | 
 |   // Remote categories come after this. | 
 |   REMOTE_CATEGORIES_OFFSET = 10000, | 
 |  | 
 |   // Articles for you. | 
 |   ARTICLES = 10001, | 
 |  | 
 |   // Categories 10002-10008 are defined on the server. | 
 |  | 
 |   // ****************** INSERT NEW REMOTE CATEGORIES HERE! ****************** | 
 |   // Update the list on the server first. Here specify the ID explicitly. | 
 |  | 
 |   // Tracks the last known remote category | 
 |   LAST_KNOWN_REMOTE_CATEGORY = ARTICLES, | 
 | }; | 
 |  | 
 | // A category groups ContentSuggestions which belong together. Use the | 
 | // CategoryFactory to obtain instances. | 
 | class Category { | 
 |  public: | 
 |   // An arbitrary but consistent ordering. Can be used to look up categories in | 
 |   // a std::map, but should not be used to order categories for other purposes. | 
 |   struct CompareByID; | 
 |  | 
 |   // Creates a category from a KnownCategory value. The passed |known_category| | 
 |   // must not be one of the special values (LOCAL_CATEGORIES_COUNT or | 
 |   // REMOTE_CATEGORIES_OFFSET). | 
 |   static Category FromKnownCategory(KnownCategories known_category); | 
 |  | 
 |   // Creates a category from a category identifier delivered by the server. | 
 |   // |remote_category| must be positive. | 
 |   static Category FromRemoteCategory(int remote_category); | 
 |  | 
 |   // Creates a category from an ID as returned by |id()|. |id| must be a | 
 |   // non-negative value. Callers should make sure this is a valid id (if in | 
 |   // doubt, call IsValidIDValue()). | 
 |   static Category FromIDValue(int id); | 
 |  | 
 |   // Verifies if |id| is a valid ID value. Only checks that the value is within | 
 |   // a valid range -- not that the system actually knows about the corresponding | 
 |   // category. | 
 |   static bool IsValidIDValue(int id); | 
 |  | 
 |   // Returns a non-negative identifier that is unique for the category and can | 
 |   // be converted back to a Category instance using | 
 |   // |CategoryFactory::FromIDValue(id)|. | 
 |   int id() const { return id_; } | 
 |  | 
 |   // Returns a remote category identifier. Do not call for non-remote | 
 |   // categories. | 
 |   int remote_id() const; | 
 |  | 
 |   // Returns whether this category matches the given |known_category|. | 
 |   bool IsKnownCategory(KnownCategories known_category) const; | 
 |  | 
 |  private: | 
 |   explicit Category(int id); | 
 |  | 
 |   int id_; | 
 |  | 
 |   // Allow copy and assignment. | 
 | }; | 
 |  | 
 | bool operator==(const Category& left, const Category& right); | 
 |  | 
 | bool operator!=(const Category& left, const Category& right); | 
 |  | 
 | struct Category::CompareByID { | 
 |   bool operator()(const Category& left, const Category& right) const; | 
 | }; | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, const Category& obj); | 
 |  | 
 | }  // namespace ntp_snippets | 
 |  | 
 | #endif  // COMPONENTS_NTP_SNIPPETS_CATEGORY_H_ |