Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(683)

Unified Diff: components/ntp_snippets/content_suggestions_service.h

Issue 2187233002: Add ContentSuggestionsCategoryFactory; Store categories as ints (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/ntp_snippets/content_suggestions_service.h
diff --git a/components/ntp_snippets/content_suggestions_service.h b/components/ntp_snippets/content_suggestions_service.h
index 56666f23a559f6cc14c59d50fee7ace8c9fb75ea..747284ad032f1e9546fee9b53b251f5fae7a55a9 100644
--- a/components/ntp_snippets/content_suggestions_service.h
+++ b/components/ntp_snippets/content_suggestions_service.h
@@ -14,6 +14,7 @@
#include "base/callback_forward.h"
#include "base/observer_list.h"
#include "components/keyed_service/core/keyed_service.h"
+#include "components/ntp_snippets/content_suggestions_category_factory.h"
#include "components/ntp_snippets/content_suggestions_category_status.h"
#include "components/ntp_snippets/content_suggestions_provider.h"
@@ -62,6 +63,13 @@ class ContentSuggestionsService : public KeyedService,
DISABLED,
};
+ // This is just an arbitrary ordering by ID, used by the maps in this class,
+ // because the ordering needs to be constant for maps.
+ struct CompareCategoriesByID {
Marc Treib 2016/07/28 11:41:46 This should be private.
Philipp Keck 2016/07/28 13:50:55 Done.
+ bool operator()(const ContentSuggestionsCategory& left,
+ const ContentSuggestionsCategory& right) const;
+ };
+
ContentSuggestionsService(State state);
~ContentSuggestionsService() override;
@@ -119,6 +127,10 @@ class ContentSuggestionsService : public KeyedService,
// dismissed suggestions reappear (only for certain providers).
void ClearDismissedSuggestionsForDebugging();
+ ContentSuggestionsCategoryFactory* category_factory() {
Marc Treib 2016/07/28 11:41:46 Clients aren't supposed to register new categories
Philipp Keck 2016/07/28 13:50:54 Yes, the providers use this to register categories
Marc Treib 2016/07/28 14:31:17 Ah - technically the providers just get a Factory
Philipp Keck 2016/07/28 14:55:47 Acknowledged.
+ return &category_factory_;
+ }
+
private:
friend class ContentSuggestionsServiceTest;
@@ -139,22 +151,29 @@ class ContentSuggestionsService : public KeyedService,
// Whether the content suggestions feature is enabled.
State state_;
+ // Provides new categories and an order for them.
Marc Treib 2016/07/28 11:41:46 Provides all categories really, no?
Philipp Keck 2016/07/28 13:50:55 True. I put "new and existing" because "all" could
+ ContentSuggestionsCategoryFactory category_factory_;
+
// All registered providers. A provider may be contained multiple times, if it
// provides multiple categories. The keys of this map are exactly the entries
// of |categories_|.
- std::map<ContentSuggestionsCategory, ContentSuggestionsProvider*> providers_;
-
- // All current suggestion categories, in an order determined by the service.
- // Currently, this is simply the order in which the providers were registered.
- // This vector contains exactly the same categories as |providers_|.
- // TODO(pke): Implement a useful and consistent ordering for categories.
+ std::map<ContentSuggestionsCategory,
+ ContentSuggestionsProvider*,
+ CompareCategoriesByID>
+ providers_;
+
+ // All current suggestion categories, in an order determined by the
+ // |category_factory_|. This vector contains exactly the same categories as
+ // |providers_|.
std::vector<ContentSuggestionsCategory> categories_;
// All current suggestions grouped by category. This contains an entry for
// every category in |categories_| whose status is an available status. It may
// contain an empty vector if the category is available but empty (or still
// loading).
- std::map<ContentSuggestionsCategory, std::vector<ContentSuggestion>>
+ std::map<ContentSuggestionsCategory,
+ std::vector<ContentSuggestion>,
+ CompareCategoriesByID>
suggestions_by_category_;
// Map used to determine the category of a suggestion (of which only the ID

Powered by Google App Engine
This is Rietveld 408576698