Index: components/ntp_snippets/ntp_snippets_fetcher.cc |
diff --git a/components/ntp_snippets/ntp_snippets_fetcher.cc b/components/ntp_snippets/ntp_snippets_fetcher.cc |
index f114f39c5994d6ce8e1998d77a9ee4177bf093ca..99b8a3554339435867147ab8632d18ea1b7d4eef 100644 |
--- a/components/ntp_snippets/ntp_snippets_fetcher.cc |
+++ b/components/ntp_snippets/ntp_snippets_fetcher.cc |
@@ -17,6 +17,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "base/time/default_tick_clock.h" |
#include "base/values.h" |
#include "components/data_use_measurement/core/data_use_user_data.h" |
@@ -151,6 +152,15 @@ std::string PosixLocaleFromBCP47Language(const std::string& language_code) { |
} // namespace |
+NTPSnippetsFetcher::FetchedCategory::FetchedCategory(Category c) |
+ : category(c) {} |
+ |
+NTPSnippetsFetcher::FetchedCategory::FetchedCategory(FetchedCategory&&) = |
+ default; |
+NTPSnippetsFetcher::FetchedCategory::~FetchedCategory() = default; |
+NTPSnippetsFetcher::FetchedCategory& NTPSnippetsFetcher::FetchedCategory:: |
+operator=(FetchedCategory&&) = default; |
+ |
NTPSnippetsFetcher::NTPSnippetsFetcher( |
SigninManagerBase* signin_manager, |
OAuth2TokenService* token_service, |
@@ -526,7 +536,7 @@ void NTPSnippetsFetcher::OnURLFetchComplete(const URLFetcher* source) { |
} |
bool NTPSnippetsFetcher::JsonToSnippets(const base::Value& parsed, |
- NTPSnippet::CategoryMap* snippets) { |
+ FetchedCategoriesVector* categories) { |
const base::DictionaryValue* top_dict = nullptr; |
if (!parsed.GetAsDictionary(&top_dict)) { |
return false; |
@@ -534,39 +544,44 @@ bool NTPSnippetsFetcher::JsonToSnippets(const base::Value& parsed, |
switch (fetch_api_) { |
case CHROME_READER_API: { |
- Category category = |
- category_factory_->FromKnownCategory(KnownCategories::ARTICLES); |
- NTPSnippet::PtrVector* articles = &(*snippets)[category]; |
+ categories->push_back(FetchedCategory( |
+ category_factory_->FromKnownCategory(KnownCategories::ARTICLES))); |
const base::ListValue* recos = nullptr; |
return top_dict->GetList("recos", &recos) && |
AddSnippetsFromListValue(/* content_suggestions_api = */ false, |
- *recos, articles); |
+ *recos, &categories->back().snippets); |
} |
case CHROME_CONTENT_SUGGESTIONS_API: { |
- const base::ListValue* categories = nullptr; |
- if (!top_dict->GetList("categories", &categories)) { |
+ const base::ListValue* categories_value = nullptr; |
+ if (!top_dict->GetList("categories", &categories_value)) { |
return false; |
} |
- for (const auto& v : *categories) { |
+ for (const auto& v : *categories_value) { |
+ std::string utf8_title; |
int category_id = -1; |
const base::DictionaryValue* category_value = nullptr; |
if (!(v->GetAsDictionary(&category_value) && |
+ category_value->GetString("localizedTitle", &utf8_title) && |
category_value->GetInteger("id", &category_id) && |
(category_id > 0))) { |
return false; |
} |
- Category category = category_factory_->FromRemoteCategory(category_id); |
+ |
+ categories->push_back(FetchedCategory( |
+ category_factory_->FromRemoteCategory(category_id))); |
+ categories->back().localized_title = base::UTF8ToUTF16(utf8_title); |
+ |
const base::ListValue* suggestions = nullptr; |
- NTPSnippet::PtrVector* articles = &(*snippets)[category]; |
if (!category_value->GetList("suggestions", &suggestions)) { |
// Absence of a list of suggestions is treated as an empty list, which |
// is permissible. |
continue; |
} |
if (!AddSnippetsFromListValue( |
- /* content_suggestions_api = */ true, *suggestions, articles)) { |
+ /* content_suggestions_api = */ true, *suggestions, |
+ &categories->back().snippets)) { |
return false; |
} |
} |
@@ -578,9 +593,9 @@ bool NTPSnippetsFetcher::JsonToSnippets(const base::Value& parsed, |
} |
void NTPSnippetsFetcher::OnJsonParsed(std::unique_ptr<base::Value> parsed) { |
- NTPSnippet::CategoryMap snippets; |
- if (JsonToSnippets(*parsed, &snippets)) { |
- FetchFinished(OptionalSnippets(std::move(snippets)), FetchResult::SUCCESS, |
+ FetchedCategoriesVector categories; |
+ if (JsonToSnippets(*parsed, &categories)) { |
+ FetchFinished(OptionalSnippets(std::move(categories)), FetchResult::SUCCESS, |
/*extra_message=*/std::string()); |
} else { |
LOG(WARNING) << "Received invalid snippets: " << last_fetch_json_; |