Chromium Code Reviews| 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; |
|
Marc Treib
2016/08/25 16:33:11
Is this the correct way to break the line?
sfiera
2016/08/26 09:16:15
Apparently. I tried breaking it after the return t
|
| + |
| 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_; |