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/ntp_snippets_service.h" | 5 #include "components/ntp_snippets/ntp_snippets_service.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 LoadFromJSONString(GetTestJson({GetSnippet()})); | 484 LoadFromJSONString(GetTestJson({GetSnippet()})); |
485 ASSERT_THAT(service()->snippets(), SizeIs(1)); | 485 ASSERT_THAT(service()->snippets(), SizeIs(1)); |
486 | 486 |
487 LoadFromJSONString(GetTestJson({GetIncompleteSnippet()})); | 487 LoadFromJSONString(GetTestJson({GetIncompleteSnippet()})); |
488 EXPECT_EQ("Invalid / empty list.", | 488 EXPECT_EQ("Invalid / empty list.", |
489 service()->snippets_fetcher()->last_status()); | 489 service()->snippets_fetcher()->last_status()); |
490 // This should not have changed the existing snippets. | 490 // This should not have changed the existing snippets. |
491 EXPECT_THAT(service()->snippets(), SizeIs(1)); | 491 EXPECT_THAT(service()->snippets(), SizeIs(1)); |
492 } | 492 } |
493 | 493 |
494 TEST_F(NTPSnippetsServiceTest, Discard) { | 494 TEST_F(NTPSnippetsServiceTest, Dismiss) { |
495 std::vector<std::string> source_urls, publishers, amp_urls; | 495 std::vector<std::string> source_urls, publishers, amp_urls; |
496 source_urls.push_back(std::string("http://site.com")); | 496 source_urls.push_back(std::string("http://site.com")); |
497 publishers.push_back(std::string("Source 1")); | 497 publishers.push_back(std::string("Source 1")); |
498 amp_urls.push_back(std::string()); | 498 amp_urls.push_back(std::string()); |
499 std::string json_str( | 499 std::string json_str( |
500 GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); | 500 GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
501 | 501 |
502 LoadFromJSONString(json_str); | 502 LoadFromJSONString(json_str); |
503 | 503 |
504 ASSERT_THAT(service()->snippets(), SizeIs(1)); | 504 ASSERT_THAT(service()->snippets(), SizeIs(1)); |
505 | 505 |
506 // Discarding a non-existent snippet shouldn't do anything. | 506 // Dismissing a non-existent snippet shouldn't do anything. |
507 service()->DiscardSuggestion(MakeUniqueID("http://othersite.com")); | 507 service()->DismissSuggestion(MakeUniqueID("http://othersite.com")); |
508 EXPECT_THAT(service()->snippets(), SizeIs(1)); | 508 EXPECT_THAT(service()->snippets(), SizeIs(1)); |
509 | 509 |
510 // Discard the snippet. | 510 // Dismiss the snippet. |
511 service()->DiscardSuggestion(MakeUniqueID(kSnippetUrl)); | 511 service()->DismissSuggestion(MakeUniqueID(kSnippetUrl)); |
512 EXPECT_THAT(service()->snippets(), IsEmpty()); | 512 EXPECT_THAT(service()->snippets(), IsEmpty()); |
513 | 513 |
514 // Make sure that fetching the same snippet again does not re-add it. | 514 // Make sure that fetching the same snippet again does not re-add it. |
515 LoadFromJSONString(json_str); | 515 LoadFromJSONString(json_str); |
516 EXPECT_THAT(service()->snippets(), IsEmpty()); | 516 EXPECT_THAT(service()->snippets(), IsEmpty()); |
517 | 517 |
518 // The snippet should stay discarded even after re-creating the service. | 518 // The snippet should stay dismissed even after re-creating the service. |
519 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 519 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
520 CreateSnippetsService(/*enabled=*/true); | 520 CreateSnippetsService(/*enabled=*/true); |
521 LoadFromJSONString(json_str); | 521 LoadFromJSONString(json_str); |
522 EXPECT_THAT(service()->snippets(), IsEmpty()); | 522 EXPECT_THAT(service()->snippets(), IsEmpty()); |
523 | 523 |
524 // The snippet can be added again after clearing discarded snippets. | 524 // The snippet can be added again after clearing dismissed snippets. |
525 service()->ClearDiscardedSuggestionsForDebugging(); | 525 service()->ClearDismissedSuggestionsForDebugging(); |
526 EXPECT_THAT(service()->snippets(), IsEmpty()); | 526 EXPECT_THAT(service()->snippets(), IsEmpty()); |
527 LoadFromJSONString(json_str); | 527 LoadFromJSONString(json_str); |
528 EXPECT_THAT(service()->snippets(), SizeIs(1)); | 528 EXPECT_THAT(service()->snippets(), SizeIs(1)); |
529 } | 529 } |
530 | 530 |
531 TEST_F(NTPSnippetsServiceTest, GetDiscarded) { | 531 TEST_F(NTPSnippetsServiceTest, GetDismissed) { |
532 LoadFromJSONString(GetTestJson({GetSnippet()})); | 532 LoadFromJSONString(GetTestJson({GetSnippet()})); |
533 | 533 |
534 service()->DiscardSuggestion(MakeUniqueID(kSnippetUrl)); | 534 service()->DismissSuggestion(MakeUniqueID(kSnippetUrl)); |
535 const NTPSnippet::PtrVector& snippets = service()->discarded_snippets(); | 535 const NTPSnippet::PtrVector& snippets = service()->dismissed_snippets(); |
536 EXPECT_EQ(1u, snippets.size()); | 536 EXPECT_EQ(1u, snippets.size()); |
537 for (auto& snippet : snippets) { | 537 for (auto& snippet : snippets) { |
538 EXPECT_EQ(kSnippetUrl, snippet->id()); | 538 EXPECT_EQ(kSnippetUrl, snippet->id()); |
539 } | 539 } |
540 | 540 |
541 // There should be no discarded snippet after clearing the list. | 541 // There should be no dismissed snippet after clearing the list. |
542 service()->ClearDiscardedSuggestionsForDebugging(); | 542 service()->ClearDismissedSuggestionsForDebugging(); |
543 EXPECT_EQ(0u, service()->discarded_snippets().size()); | 543 EXPECT_EQ(0u, service()->dismissed_snippets().size()); |
544 } | 544 } |
545 | 545 |
546 TEST_F(NTPSnippetsServiceTest, CreationTimestampParseFail) { | 546 TEST_F(NTPSnippetsServiceTest, CreationTimestampParseFail) { |
547 std::string json_str(GetTestJson({GetSnippetWithTimes( | 547 std::string json_str(GetTestJson({GetSnippetWithTimes( |
548 "aaa1448459205", | 548 "aaa1448459205", |
549 NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()))})); | 549 NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()))})); |
550 | 550 |
551 LoadFromJSONString(json_str); | 551 LoadFromJSONString(json_str); |
552 ASSERT_THAT(service()->snippets(), SizeIs(1)); | 552 ASSERT_THAT(service()->snippets(), SizeIs(1)); |
553 const NTPSnippet& snippet = *service()->snippets().front(); | 553 const NTPSnippet& snippet = *service()->snippets().front(); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 LoadFromJSONString(GetTestJson({GetSnippet()})); | 808 LoadFromJSONString(GetTestJson({GetSnippet()})); |
809 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), | 809 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), |
810 ElementsAre(base::Bucket(/*min=*/0, /*count=*/2), | 810 ElementsAre(base::Bucket(/*min=*/0, /*count=*/2), |
811 base::Bucket(/*min=*/1, /*count=*/2))); | 811 base::Bucket(/*min=*/1, /*count=*/2))); |
812 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), | 812 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), |
813 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), | 813 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), |
814 base::Bucket(/*min=*/1, /*count=*/2))); | 814 base::Bucket(/*min=*/1, /*count=*/2))); |
815 EXPECT_THAT( | 815 EXPECT_THAT( |
816 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), | 816 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), |
817 IsEmpty()); | 817 IsEmpty()); |
818 // Discarding a snippet should decrease the list size. This will only be | 818 // Dismissing a snippet should decrease the list size. This will only be |
819 // logged after the next fetch. | 819 // logged after the next fetch. |
820 service()->DiscardSuggestion(MakeUniqueID(kSnippetUrl)); | 820 service()->DismissSuggestion(MakeUniqueID(kSnippetUrl)); |
821 LoadFromJSONString(GetTestJson({GetSnippet()})); | 821 LoadFromJSONString(GetTestJson({GetSnippet()})); |
822 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), | 822 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), |
823 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3), | 823 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3), |
824 base::Bucket(/*min=*/1, /*count=*/2))); | 824 base::Bucket(/*min=*/1, /*count=*/2))); |
825 // Discarded snippets shouldn't influence NumArticlesFetched. | 825 // Dismissed snippets shouldn't influence NumArticlesFetched. |
826 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), | 826 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), |
827 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), | 827 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), |
828 base::Bucket(/*min=*/1, /*count=*/3))); | 828 base::Bucket(/*min=*/1, /*count=*/3))); |
829 EXPECT_THAT( | 829 EXPECT_THAT( |
830 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), | 830 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), |
831 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); | 831 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); |
832 // Recreating the service and loading from prefs shouldn't count as fetched | 832 // Recreating the service and loading from prefs shouldn't count as fetched |
833 // articles. | 833 // articles. |
834 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 834 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
835 CreateSnippetsService(/*enabled=*/true); | 835 CreateSnippetsService(/*enabled=*/true); |
836 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4); | 836 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4); |
837 } | 837 } |
838 | 838 |
839 TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) { | 839 TEST_F(NTPSnippetsServiceTest, DismissShouldRespectAllKnownUrls) { |
840 const std::string creation = | 840 const std::string creation = |
841 NTPSnippet::TimeToJsonString(GetDefaultCreationTime()); | 841 NTPSnippet::TimeToJsonString(GetDefaultCreationTime()); |
842 const std::string expiry = | 842 const std::string expiry = |
843 NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()); | 843 NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()); |
844 const std::vector<std::string> source_urls = { | 844 const std::vector<std::string> source_urls = { |
845 "http://mashable.com/2016/05/11/stolen", | 845 "http://mashable.com/2016/05/11/stolen", |
846 "http://www.aol.com/article/2016/05/stolen-doggie", | 846 "http://www.aol.com/article/2016/05/stolen-doggie", |
847 "http://mashable.com/2016/05/11/stolen?utm_cid=1"}; | 847 "http://mashable.com/2016/05/11/stolen?utm_cid=1"}; |
848 const std::vector<std::string> publishers = {"Mashable", "AOL", "Mashable"}; | 848 const std::vector<std::string> publishers = {"Mashable", "AOL", "Mashable"}; |
849 const std::vector<std::string> amp_urls = { | 849 const std::vector<std::string> amp_urls = { |
850 "http://mashable-amphtml.googleusercontent.com/1", | 850 "http://mashable-amphtml.googleusercontent.com/1", |
851 "http://t2.gstatic.com/images?q=tbn:3", | 851 "http://t2.gstatic.com/images?q=tbn:3", |
852 "http://t2.gstatic.com/images?q=tbn:3"}; | 852 "http://t2.gstatic.com/images?q=tbn:3"}; |
853 | 853 |
854 // Add the snippet from the mashable domain. | 854 // Add the snippet from the mashable domain. |
855 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( | 855 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( |
856 source_urls[0], creation, expiry, source_urls, publishers, amp_urls)})); | 856 source_urls[0], creation, expiry, source_urls, publishers, amp_urls)})); |
857 ASSERT_THAT(service()->snippets(), SizeIs(1)); | 857 ASSERT_THAT(service()->snippets(), SizeIs(1)); |
858 // Discard the snippet via the mashable source corpus ID. | 858 // Dismiss the snippet via the mashable source corpus ID. |
859 service()->DiscardSuggestion(MakeUniqueID(source_urls[0])); | 859 service()->DismissSuggestion(MakeUniqueID(source_urls[0])); |
860 EXPECT_THAT(service()->snippets(), IsEmpty()); | 860 EXPECT_THAT(service()->snippets(), IsEmpty()); |
861 | 861 |
862 // The same article from the AOL domain should now be detected as discarded. | 862 // The same article from the AOL domain should now be detected as dismissed. |
863 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( | 863 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( |
864 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)})); | 864 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)})); |
865 ASSERT_THAT(service()->snippets(), IsEmpty()); | 865 ASSERT_THAT(service()->snippets(), IsEmpty()); |
866 } | 866 } |
867 | 867 |
868 TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { | 868 TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { |
869 MockServiceObserver mock_observer; | 869 MockServiceObserver mock_observer; |
870 service()->AddObserver(&mock_observer); | 870 service()->AddObserver(&mock_observer); |
871 | 871 |
872 // Simulate user signed out | 872 // Simulate user signed out |
(...skipping 12 matching lines...) Expand all Loading... |
885 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 885 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
886 service()->OnDisabledReasonChanged(DisabledReason::NONE); | 886 service()->OnDisabledReasonChanged(DisabledReason::NONE); |
887 base::RunLoop().RunUntilIdle(); | 887 base::RunLoop().RunUntilIdle(); |
888 EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_); | 888 EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_); |
889 EXPECT_FALSE(service()->snippets().empty()); | 889 EXPECT_FALSE(service()->snippets().empty()); |
890 | 890 |
891 service()->RemoveObserver(&mock_observer); | 891 service()->RemoveObserver(&mock_observer); |
892 } | 892 } |
893 | 893 |
894 } // namespace ntp_snippets | 894 } // namespace ntp_snippets |
OLD | NEW |