| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/ntp_snippets/remote/remote_suggestions_provider.h" | 5 #include "components/ntp_snippets/remote/remote_suggestions_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 bool interactive_request) { | 323 bool interactive_request) { |
| 324 // TODO(tschumann): FetchSnippets() and FetchSnippetsFromHost() implement the | 324 // TODO(tschumann): FetchSnippets() and FetchSnippetsFromHost() implement the |
| 325 // fetch logic when called by the background fetcher or interactive "reload" | 325 // fetch logic when called by the background fetcher or interactive "reload" |
| 326 // requests. Fetch() is right now only called for the fetch-more use case. | 326 // requests. Fetch() is right now only called for the fetch-more use case. |
| 327 // The names are confusing and we need to clean them up. | 327 // The names are confusing and we need to clean them up. |
| 328 if (!ready()) { | 328 if (!ready()) { |
| 329 return; | 329 return; |
| 330 } | 330 } |
| 331 MarkEmptyCategoriesAsLoading(); | 331 MarkEmptyCategoriesAsLoading(); |
| 332 | 332 |
| 333 NTPSnippetsFetcher::Params params = | 333 NTPSnippetsFetcher::Params params = BuildFetchParams(); |
| 334 BuildFetchParams(/*exclude_archived_suggestions=*/true); | |
| 335 params.hosts = hosts; | 334 params.hosts = hosts; |
| 336 params.interactive_request = interactive_request; | 335 params.interactive_request = interactive_request; |
| 337 snippets_fetcher_->FetchSnippets( | 336 snippets_fetcher_->FetchSnippets( |
| 338 params, base::BindOnce(&RemoteSuggestionsProvider::OnFetchFinished, | 337 params, base::BindOnce(&RemoteSuggestionsProvider::OnFetchFinished, |
| 339 base::Unretained(this))); | 338 base::Unretained(this))); |
| 340 } | 339 } |
| 341 | 340 |
| 342 void RemoteSuggestionsProvider::Fetch( | 341 void RemoteSuggestionsProvider::Fetch( |
| 343 const Category& category, | 342 const Category& category, |
| 344 const std::set<std::string>& known_suggestion_ids, | 343 const std::set<std::string>& known_suggestion_ids, |
| 345 const FetchDoneCallback& callback) { | 344 const FetchDoneCallback& callback) { |
| 346 if (!ready()) { | 345 if (!ready()) { |
| 347 CallWithEmptyResults(callback, | 346 CallWithEmptyResults(callback, |
| 348 Status(StatusCode::TEMPORARY_ERROR, | 347 Status(StatusCode::TEMPORARY_ERROR, |
| 349 "RemoteSuggestionsProvider is not ready!")); | 348 "RemoteSuggestionsProvider is not ready!")); |
| 350 return; | 349 return; |
| 351 } | 350 } |
| 352 NTPSnippetsFetcher::Params params = | 351 NTPSnippetsFetcher::Params params = BuildFetchParams(); |
| 353 BuildFetchParams(/*exclude_archived_suggestions=*/false); | |
| 354 params.excluded_ids.insert(known_suggestion_ids.begin(), | 352 params.excluded_ids.insert(known_suggestion_ids.begin(), |
| 355 known_suggestion_ids.end()); | 353 known_suggestion_ids.end()); |
| 356 params.interactive_request = true; | 354 params.interactive_request = true; |
| 357 params.exclusive_category = category; | 355 params.exclusive_category = category; |
| 358 | 356 |
| 359 // TODO(tschumann): NTPSnippetsFetcher does not support concurrent requests | 357 // TODO(tschumann): NTPSnippetsFetcher does not support concurrent requests |
| 360 // yet. If a background fetch happens while we fetch-more data, the callback | 358 // yet. If a background fetch happens while we fetch-more data, the callback |
| 361 // will never get called. | 359 // will never get called. |
| 362 snippets_fetcher_->FetchSnippets( | 360 snippets_fetcher_->FetchSnippets( |
| 363 params, base::BindOnce(&RemoteSuggestionsProvider::OnFetchMoreFinished, | 361 params, base::BindOnce(&RemoteSuggestionsProvider::OnFetchMoreFinished, |
| 364 base::Unretained(this), callback)); | 362 base::Unretained(this), callback)); |
| 365 } | 363 } |
| 366 | 364 |
| 367 // Builds default fetcher params. | 365 // Builds default fetcher params. |
| 368 NTPSnippetsFetcher::Params RemoteSuggestionsProvider::BuildFetchParams( | 366 NTPSnippetsFetcher::Params RemoteSuggestionsProvider::BuildFetchParams() const { |
| 369 bool exclude_archived_suggestions) const { | |
| 370 NTPSnippetsFetcher::Params result; | 367 NTPSnippetsFetcher::Params result; |
| 371 result.language_code = application_language_code_; | 368 result.language_code = application_language_code_; |
| 372 result.count_to_fetch = kMaxSnippetCount; | 369 result.count_to_fetch = kMaxSnippetCount; |
| 373 for (const auto& map_entry : category_contents_) { | 370 for (const auto& map_entry : category_contents_) { |
| 374 const CategoryContent& content = map_entry.second; | 371 const CategoryContent& content = map_entry.second; |
| 375 for (const auto& dismissed_snippet : content.dismissed) { | 372 for (const auto& dismissed_snippet : content.dismissed) { |
| 376 result.excluded_ids.insert(dismissed_snippet->id()); | 373 result.excluded_ids.insert(dismissed_snippet->id()); |
| 377 } | 374 } |
| 378 if (exclude_archived_suggestions) { | |
| 379 for (const auto& archived_snippet : content.archived) { | |
| 380 result.excluded_ids.insert(archived_snippet->id()); | |
| 381 } | |
| 382 } | |
| 383 } | 375 } |
| 384 return result; | 376 return result; |
| 385 } | 377 } |
| 386 | 378 |
| 387 void RemoteSuggestionsProvider::MarkEmptyCategoriesAsLoading() { | 379 void RemoteSuggestionsProvider::MarkEmptyCategoriesAsLoading() { |
| 388 for (const auto& item : category_contents_) { | 380 for (const auto& item : category_contents_) { |
| 389 Category category = item.first; | 381 Category category = item.first; |
| 390 const CategoryContent& content = item.second; | 382 const CategoryContent& content = item.second; |
| 391 if (content.snippets.empty()) { | 383 if (content.snippets.empty()) { |
| 392 UpdateCategoryStatus(category, CategoryStatus::AVAILABLE_LOADING); | 384 UpdateCategoryStatus(category, CategoryStatus::AVAILABLE_LOADING); |
| (...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 RemoteSuggestionsProvider::CategoryContent::CategoryContent(CategoryContent&&) = | 1328 RemoteSuggestionsProvider::CategoryContent::CategoryContent(CategoryContent&&) = |
| 1337 default; | 1329 default; |
| 1338 | 1330 |
| 1339 RemoteSuggestionsProvider::CategoryContent::~CategoryContent() = default; | 1331 RemoteSuggestionsProvider::CategoryContent::~CategoryContent() = default; |
| 1340 | 1332 |
| 1341 RemoteSuggestionsProvider::CategoryContent& | 1333 RemoteSuggestionsProvider::CategoryContent& |
| 1342 RemoteSuggestionsProvider::CategoryContent::operator=(CategoryContent&&) = | 1334 RemoteSuggestionsProvider::CategoryContent::operator=(CategoryContent&&) = |
| 1343 default; | 1335 default; |
| 1344 | 1336 |
| 1345 } // namespace ntp_snippets | 1337 } // namespace ntp_snippets |
| OLD | NEW |