Index: components/ntp_snippets/remote/remote_suggestions_provider.cc |
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider.cc b/components/ntp_snippets/remote/remote_suggestions_provider.cc |
index 3f8ce09352cb049d65d9ae44e45a984b32e0c6bb..ea4551e9518b6f0b9ee066d93f785de4b2c3a5bd 100644 |
--- a/components/ntp_snippets/remote/remote_suggestions_provider.cc |
+++ b/components/ntp_snippets/remote/remote_suggestions_provider.cc |
@@ -25,6 +25,7 @@ |
#include "components/history/core/browser/history_service.h" |
#include "components/image_fetcher/image_decoder.h" |
#include "components/image_fetcher/image_fetcher.h" |
+#include "components/ntp_snippets/category_rankers/category_ranker.h" |
#include "components/ntp_snippets/features.h" |
#include "components/ntp_snippets/pref_names.h" |
#include "components/ntp_snippets/remote/remote_suggestions_database.h" |
@@ -322,9 +323,9 @@ void CachedImageFetcher::FetchSnippetImageFromNetwork( |
RemoteSuggestionsProvider::RemoteSuggestionsProvider( |
Observer* observer, |
- CategoryFactory* category_factory, |
PrefService* pref_service, |
const std::string& application_language_code, |
+ CategoryRanker* category_ranker, |
const UserClassifier* user_classifier, |
NTPSnippetsScheduler* scheduler, |
std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher, |
@@ -332,12 +333,13 @@ RemoteSuggestionsProvider::RemoteSuggestionsProvider( |
std::unique_ptr<image_fetcher::ImageDecoder> image_decoder, |
std::unique_ptr<RemoteSuggestionsDatabase> database, |
std::unique_ptr<RemoteSuggestionsStatusService> status_service) |
- : ContentSuggestionsProvider(observer, category_factory), |
+ : ContentSuggestionsProvider(observer), |
state_(State::NOT_INITED), |
pref_service_(pref_service), |
articles_category_( |
- category_factory->FromKnownCategory(KnownCategories::ARTICLES)), |
+ Category::FromKnownCategory(KnownCategories::ARTICLES)), |
application_language_code_(application_language_code), |
+ category_ranker_(category_ranker), |
user_classifier_(user_classifier), |
scheduler_(scheduler), |
snippets_fetcher_(std::move(snippets_fetcher)), |
@@ -644,7 +646,7 @@ void RemoteSuggestionsProvider::OnDatabaseLoaded( |
NTPSnippet::PtrVector to_delete; |
for (std::unique_ptr<NTPSnippet>& snippet : snippets) { |
Category snippet_category = |
- category_factory()->FromRemoteCategory(snippet->remote_category_id()); |
+ Category::FromRemoteCategory(snippet->remote_category_id()); |
auto content_it = category_contents_.find(snippet_category); |
// We should already know about the category. |
if (content_it == category_contents_.end()) { |
@@ -790,6 +792,7 @@ void RemoteSuggestionsProvider::OnFetchFinished( |
std::min(fetched_category.snippets.size(), |
static_cast<size_t>(kMaxSnippetCount + 1))); |
} |
+ category_ranker_->AppendCategoryIfNecessary(fetched_category.category); |
CategoryContent* content = |
UpdateCategoryInfo(fetched_category.category, fetched_category.info); |
content->included_in_last_server_response = true; |
@@ -1280,7 +1283,9 @@ void RemoteSuggestionsProvider::RestoreCategoriesFromPrefs() { |
dict->GetBoolean(kCategoryContentAllowFetchingMore, |
&allow_fetching_more_results); |
- Category category = category_factory()->FromIDValue(id); |
+ Category category = Category::FromIDValue(id); |
+ // The ranker may not persist the order of remote categories. |
+ category_ranker_->AppendCategoryIfNecessary(category); |
// TODO(tschumann): The following has a bad smell that category |
// serialization / deserialization should not be done inside this |
// class. We should move that into a central place that also knows how to |
@@ -1301,12 +1306,11 @@ void RemoteSuggestionsProvider::StoreCategoriesToPrefs() { |
for (const auto& entry : category_contents_) { |
to_store.emplace_back(entry.first, &entry.second); |
} |
- // Sort them into the proper category order. |
+ // The ranker may not persist the order, thus, it is stored by the provider. |
std::sort(to_store.begin(), to_store.end(), |
[this](const std::pair<Category, const CategoryContent*>& left, |
const std::pair<Category, const CategoryContent*>& right) { |
- return category_factory()->CompareCategories(left.first, |
- right.first); |
+ return category_ranker_->Compare(left.first, right.first); |
}); |
// Convert the relevant info into a base::ListValue for storage. |
base::ListValue list; |