Chromium Code Reviews| Index: components/ntp_snippets/remote/ntp_snippets_service.cc |
| diff --git a/components/ntp_snippets/remote/ntp_snippets_service.cc b/components/ntp_snippets/remote/ntp_snippets_service.cc |
| index 167bed2887a140ccdb79d895df07da2e29a78779..4f459f6bd9538296175f76123eef34f783de1869 100644 |
| --- a/components/ntp_snippets/remote/ntp_snippets_service.cc |
| +++ b/components/ntp_snippets/remote/ntp_snippets_service.cc |
| @@ -183,12 +183,12 @@ void RemoveIncompleteSnippets(NTPSnippet::PtrVector* snippets) { |
| return !snippet->is_complete(); |
| }), |
| snippets->end()); |
| - int num_snippets_dismissed = num_snippets - snippets->size(); |
| + int num_snippets_removed = num_snippets - snippets->size(); |
| UMA_HISTOGRAM_BOOLEAN("NewTabPage.Snippets.IncompleteSnippetsAfterFetch", |
| - num_snippets_dismissed > 0); |
| - if (num_snippets_dismissed > 0) { |
| + num_snippets_removed > 0); |
| + if (num_snippets_removed > 0) { |
| UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.Snippets.NumIncompleteSnippets", |
| - num_snippets_dismissed); |
| + num_snippets_removed); |
| } |
| } |
| @@ -304,26 +304,30 @@ void NTPSnippetsService::FetchSnippetsFromHosts( |
| const std::set<std::string>& hosts, |
| bool interactive_request) { |
| FetchSnippetsFromHostsImpl(hosts, interactive_request, |
| - /*fetch_more=*/false, FetchedMoreCallback(), |
| - base::Optional<Category>()); |
| + /*fetch_more=*/false, std::set<std::string>(), |
| + base::Optional<Category>(), FetchingCallback()); |
| } |
| -void NTPSnippetsService::FetchMore(const Category& category, |
| - FetchedMoreCallback callback) { |
| +void NTPSnippetsService::Fetch(const Category& category, |
| + std::set<std::string> known_suggestion_ids, |
| + FetchingCallback callback) { |
| FetchSnippetsFromHostsImpl(std::set<std::string>(), |
| /*interactive_request=*/true, |
| - /*fetch_more=*/true, callback, |
| - base::Optional<Category>(category)); |
| + /*fetch_more=*/true, |
| + std::move(known_suggestion_ids), |
| + base::Optional<Category>(category), callback); |
| } |
| void NTPSnippetsService::FetchSnippetsFromHostsImpl( |
| const std::set<std::string>& hosts, |
| bool interactive_request, |
| bool fetch_more, |
| - FetchedMoreCallback callback, |
| - base::Optional<Category> exclusive_category) { |
| + std::set<std::string> known_suggestion_ids, |
| + base::Optional<Category> exclusive_category, |
| + FetchingCallback callback) { |
| if (!ready()) { |
| - // TODO(fhorschig): Call |callback| if it's non-null. |
| + if (!callback.is_null()) |
| + std::move(callback).Run(std::vector<ContentSuggestion>()); |
|
dgn
2016/11/02 11:10:11
why is std::move necessary here?
dgn
2016/11/02 12:04:33
Okay, this is explained in https://chromium.google
fhorschig
2016/11/03 01:53:14
Thank you very much!
You discovered (maybe unwilli
|
| return; |
| } |
| @@ -331,7 +335,8 @@ void NTPSnippetsService::FetchSnippetsFromHostsImpl( |
| NTPSnippetsFetcher::Params params; |
| params.language_code = application_language_code_; |
| - params.excluded_ids = CollectIdsToExclude(fetch_more); |
| + params.excluded_ids = |
| + CollectIdsToExclude(fetch_more, std::move(known_suggestion_ids)); |
| params.count_to_fetch = kMaxSnippetCount; |
| params.hosts = hosts; |
| params.interactive_request = interactive_request; |
| @@ -343,7 +348,8 @@ void NTPSnippetsService::FetchSnippetsFromHostsImpl( |
| } |
| std::set<std::string> NTPSnippetsService::CollectIdsToExclude( |
| - bool fetch_more) const { |
| + bool fetch_more, |
| + std::set<std::string> additional_ids) const { |
| std::set<std::string> ids; |
| for (const auto& item : categories_) { |
| const CategoryContent& content = item.second; |
| @@ -353,9 +359,9 @@ std::set<std::string> NTPSnippetsService::CollectIdsToExclude( |
| continue; |
| for (const auto& snippet : content.archived) |
| ids.insert(snippet->id()); |
| - for (const auto& snippet : content.snippets) |
| - ids.insert(snippet->id()); |
| } |
| + std::move(additional_ids.begin(), additional_ids.end(), |
| + std::insert_iterator<std::set<std::string>>(ids, ids.end())); |
| return ids; |
| } |
| @@ -631,7 +637,7 @@ void NTPSnippetsService::OnDatabaseError() { |
| void NTPSnippetsService::OnFetchFinished( |
| bool fetched_more, |
| - FetchedMoreCallback fetched_more_callback, |
| + FetchingCallback fetched_more_callback, |
|
dgn
2016/11/02 11:10:11
Can this argument be a base::Optional<FetchingCall
fhorschig
2016/11/03 01:53:14
Done.
Yes. This whole set of parameters is planne
|
| NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories) { |
| if (!ready()) |
| return; |
| @@ -1072,7 +1078,7 @@ void NTPSnippetsService::NotifyNewSuggestions(Category category) { |
| } |
| void NTPSnippetsService::NotifyMoreSuggestions(Category category, |
| - FetchedMoreCallback callback) { |
| + FetchingCallback callback) { |
| DCHECK(base::ContainsKey(categories_, category)); |
| const CategoryContent& content = categories_[category]; |
| DCHECK(IsCategoryStatusAvailable(content.status)); |