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/ntp_snippets_service.h" | 5 #include "components/ntp_snippets/remote/ntp_snippets_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 ClearOrphanedImages(); | 492 ClearOrphanedImages(); |
493 FinishInitialization(); | 493 FinishInitialization(); |
494 } | 494 } |
495 | 495 |
496 void NTPSnippetsService::OnDatabaseError() { | 496 void NTPSnippetsService::OnDatabaseError() { |
497 EnterState(State::ERROR_OCCURRED); | 497 EnterState(State::ERROR_OCCURRED); |
498 UpdateAllCategoryStatus(CategoryStatus::LOADING_ERROR); | 498 UpdateAllCategoryStatus(CategoryStatus::LOADING_ERROR); |
499 } | 499 } |
500 | 500 |
501 void NTPSnippetsService::OnFetchFinished( | 501 void NTPSnippetsService::OnFetchFinished( |
502 NTPSnippetsFetcher::OptionalSnippets snippets) { | 502 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories) { |
503 if (!ready()) | 503 if (!ready()) |
504 return; | 504 return; |
505 | 505 |
506 for (auto& item : categories_) { | 506 for (auto& item : categories_) { |
507 CategoryContent* content = &item.second; | 507 CategoryContent* content = &item.second; |
508 content->provided_by_server = false; | 508 content->provided_by_server = false; |
509 } | 509 } |
510 | 510 |
511 // Clear up expired dismissed snippets before we use them to filter new ones. | 511 // Clear up expired dismissed snippets before we use them to filter new ones. |
512 ClearExpiredDismissedSnippets(); | 512 ClearExpiredDismissedSnippets(); |
513 | 513 |
514 // If snippets were fetched successfully, update our |categories_| from each | 514 // If snippets were fetched successfully, update our |categories_| from each |
515 // category provided by the server. | 515 // category provided by the server. |
516 if (snippets) { | 516 if (fetched_categories) { |
517 // TODO(jkrcal): A bit hard to understand with so many variables called | 517 // TODO(jkrcal): A bit hard to understand with so many variables called |
518 // "*categor*". Isn't here some room for simplification? | 518 // "*categor*". Isn't here some room for simplification? |
519 for (NTPSnippetsFetcher::FetchedCategory& fetched_category : *snippets) { | 519 for (NTPSnippetsFetcher::FetchedCategory& fetched_category : |
| 520 *fetched_categories) { |
520 Category category = fetched_category.category; | 521 Category category = fetched_category.category; |
521 | 522 |
522 // TODO(sfiera): Avoid hard-coding articles category checks in so many | 523 // TODO(sfiera): Avoid hard-coding articles category checks in so many |
523 // places. | 524 // places. |
524 if (category != articles_category_) { | 525 if (category != articles_category_) { |
525 // Only update titles from server-side provided categories. | 526 // Only update titles from server-side provided categories. |
526 categories_[category].localized_title = | 527 categories_[category].localized_title = |
527 fetched_category.localized_title; | 528 fetched_category.localized_title; |
528 } | 529 } |
529 categories_[category].provided_by_server = true; | 530 categories_[category].provided_by_server = true; |
530 | 531 |
531 DCHECK_LE(snippets->size(), static_cast<size_t>(kMaxSnippetCount)); | 532 // TODO(tschumann): Remove this histogram once we only talk to the content |
532 // TODO(sfiera): histograms for server categories. | 533 // suggestions cloud backend. |
533 // Sparse histogram used because the number of snippets is small (bound by | |
534 // kMaxSnippetCount). | |
535 if (category == articles_category_) { | 534 if (category == articles_category_) { |
536 UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.Snippets.NumArticlesFetched", | 535 UMA_HISTOGRAM_SPARSE_SLOWLY( |
537 fetched_category.snippets.size()); | 536 "NewTabPage.Snippets.NumArticlesFetched", |
| 537 std::min(fetched_category.snippets.size(), |
| 538 static_cast<size_t>(kMaxSnippetCount + 1))); |
538 } | 539 } |
539 ReplaceSnippets(category, std::move(fetched_category.snippets)); | 540 ReplaceSnippets(category, std::move(fetched_category.snippets)); |
540 } | 541 } |
541 } | 542 } |
542 | 543 |
543 for (const auto& item : categories_) { | 544 for (const auto& item : categories_) { |
544 Category category = item.first; | 545 Category category = item.first; |
545 UpdateCategoryStatus(category, CategoryStatus::AVAILABLE); | 546 UpdateCategoryStatus(category, CategoryStatus::AVAILABLE); |
546 } | 547 } |
547 | 548 |
548 // TODO(sfiera): equivalent metrics for non-articles. | 549 // TODO(sfiera): equivalent metrics for non-articles. |
549 const CategoryContent& content = categories_[articles_category_]; | 550 const CategoryContent& content = categories_[articles_category_]; |
550 UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.Snippets.NumArticles", | 551 UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.Snippets.NumArticles", |
551 content.snippets.size()); | 552 content.snippets.size()); |
552 if (content.snippets.empty() && !content.dismissed.empty()) { | 553 if (content.snippets.empty() && !content.dismissed.empty()) { |
553 UMA_HISTOGRAM_COUNTS("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded", | 554 UMA_HISTOGRAM_COUNTS("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded", |
554 content.dismissed.size()); | 555 content.dismissed.size()); |
555 } | 556 } |
556 | 557 |
557 // TODO(sfiera): notify only when a category changed above. | 558 // TODO(sfiera): notify only when a category changed above. |
558 NotifyNewSuggestions(); | 559 NotifyNewSuggestions(); |
559 | 560 |
560 // Reschedule after a successful fetch. This resets all currently scheduled | 561 // Reschedule after a successful fetch. This resets all currently scheduled |
561 // fetches, to make sure the fallback interval triggers only if no wifi fetch | 562 // fetches, to make sure the fallback interval triggers only if no wifi fetch |
562 // succeeded, and also that we don't do a background fetch immediately after | 563 // succeeded, and also that we don't do a background fetch immediately after |
563 // a user-initiated one. | 564 // a user-initiated one. |
564 if (snippets) | 565 if (fetched_categories) |
565 RescheduleFetching(true); | 566 RescheduleFetching(true); |
566 } | 567 } |
567 | 568 |
568 void NTPSnippetsService::ArchiveSnippets(Category category, | 569 void NTPSnippetsService::ArchiveSnippets(Category category, |
569 NTPSnippet::PtrVector* to_archive) { | 570 NTPSnippet::PtrVector* to_archive) { |
570 CategoryContent* content = &categories_[category]; | 571 CategoryContent* content = &categories_[category]; |
571 | 572 |
572 // TODO(sfiera): handle DB for non-articles too. | 573 // TODO(sfiera): handle DB for non-articles too. |
573 if (category == articles_category_) { | 574 if (category == articles_category_) { |
574 database_->DeleteSnippets(GetSnippetIDVector(*to_archive)); | 575 database_->DeleteSnippets(GetSnippetIDVector(*to_archive)); |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 } | 1004 } |
1004 | 1005 |
1005 NTPSnippetsService::CategoryContent::CategoryContent() = default; | 1006 NTPSnippetsService::CategoryContent::CategoryContent() = default; |
1006 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) = | 1007 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) = |
1007 default; | 1008 default; |
1008 NTPSnippetsService::CategoryContent::~CategoryContent() = default; | 1009 NTPSnippetsService::CategoryContent::~CategoryContent() = default; |
1009 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent:: | 1010 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent:: |
1010 operator=(CategoryContent&&) = default; | 1011 operator=(CategoryContent&&) = default; |
1011 | 1012 |
1012 } // namespace ntp_snippets | 1013 } // namespace ntp_snippets |
OLD | NEW |