Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2762673002: predictors: Pass manifests from Bork to store in ResourcePrefetchPredictor. (Closed)
Patch Set: Add delegate tests for PrecacheFetcher. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <memory> 10 #include <memory>
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { 110 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
111 public: 111 public:
112 TestPrecacheDelegate() 112 TestPrecacheDelegate()
113 : on_done_was_called_(false) {} 113 : on_done_was_called_(false) {}
114 114
115 void OnDone() override { 115 void OnDone() override {
116 LOG(INFO) << "OnDone"; 116 LOG(INFO) << "OnDone";
117 on_done_was_called_ = true; 117 on_done_was_called_ = true;
118 } 118 }
119 119
120 void OnManifestFetched(const std::string& host,
121 const PrecacheManifest& manifest) override {
122 hosts.push_back(host);
123 }
124
120 bool was_on_done_called() const { 125 bool was_on_done_called() const {
121 return on_done_was_called_; 126 return on_done_was_called_;
122 } 127 }
123 128
129 void clear_manifest_hosts() { hosts.clear(); }
130
131 std::vector<std::string> get_manifest_hosts() const { return hosts; }
132
124 private: 133 private:
125 bool on_done_was_called_; 134 bool on_done_was_called_;
135 std::vector<std::string> hosts;
126 }; 136 };
127 137
128 class MockURLFetcherFactory : public net::URLFetcherFactory { 138 class MockURLFetcherFactory : public net::URLFetcherFactory {
129 public: 139 public:
130 typedef net::URLFetcher* DoURLFetcher( 140 typedef net::URLFetcher* DoURLFetcher(
131 int id, 141 int id,
132 const GURL& url, 142 const GURL& url,
133 net::URLFetcher::RequestType request_type, 143 net::URLFetcher::RequestType request_type,
134 net::URLFetcherDelegate* delegate); 144 net::URLFetcherDelegate* delegate);
135 145
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 expected_requested_urls.emplace_back(kConfigURL); 571 expected_requested_urls.emplace_back(kConfigURL);
562 expected_requested_urls.emplace_back(kManifestFetchFailureURL); 572 expected_requested_urls.emplace_back(kManifestFetchFailureURL);
563 expected_requested_urls.emplace_back(kBadManifestURL); 573 expected_requested_urls.emplace_back(kBadManifestURL);
564 expected_requested_urls.emplace_back(kGoodManifestURL); 574 expected_requested_urls.emplace_back(kGoodManifestURL);
565 expected_requested_urls.emplace_back(kForcedStartingURLManifestURL); 575 expected_requested_urls.emplace_back(kForcedStartingURLManifestURL);
566 expected_requested_urls.emplace_back(kResourceFetchFailureURL); 576 expected_requested_urls.emplace_back(kResourceFetchFailureURL);
567 expected_requested_urls.emplace_back(kGoodResourceURL); 577 expected_requested_urls.emplace_back(kGoodResourceURL);
568 578
569 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 579 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
570 580
581 std::vector<std::string> expected_manifest_hosts = {
582 "good-manifest.com", "forced-starting-url.com"};
583 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
571 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 584 EXPECT_TRUE(precache_delegate_.was_on_done_called());
572 585
573 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 586 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
574 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 587 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
575 url_callback_.total_response_bytes(), 1); 588 url_callback_.total_response_bytes(), 1);
576 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 589 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
577 } 590 }
578 591
579 class PrecacheFetcherResourceSelectionTest 592 class PrecacheFetcherResourceSelectionTest
580 : public PrecacheFetcherTest, 593 : public PrecacheFetcherTest,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 660
648 std::vector<GURL> expected_requested_urls; 661 std::vector<GURL> expected_requested_urls;
649 expected_requested_urls.emplace_back(kConfigURL); 662 expected_requested_urls.emplace_back(kConfigURL);
650 expected_requested_urls.emplace_back(kGoodManifestURL); 663 expected_requested_urls.emplace_back(kGoodManifestURL);
651 expected_requested_urls.emplace_back(kGoodResourceURL); 664 expected_requested_urls.emplace_back(kGoodResourceURL);
652 expected_requested_urls.emplace_back(kGoodResourceURLC); 665 expected_requested_urls.emplace_back(kGoodResourceURLC);
653 expected_requested_urls.emplace_back(kGoodResourceURLD); 666 expected_requested_urls.emplace_back(kGoodResourceURLD);
654 667
655 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 668 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
656 669
670 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
671 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
657 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 672 EXPECT_TRUE(precache_delegate_.was_on_done_called());
658 673
659 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 674 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
660 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 675 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
661 url_callback_.total_response_bytes(), 1); 676 url_callback_.total_response_bytes(), 1);
662 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 677 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
663 } 678 }
664 679
665 TEST_P(PrecacheFetcherResourceSelectionTest, MissingBitset) { 680 TEST_P(PrecacheFetcherResourceSelectionTest, MissingBitset) {
666 SetDefaultFlags(); 681 SetDefaultFlags();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 expected_requested_urls.emplace_back(kConfigURL); 736 expected_requested_urls.emplace_back(kConfigURL);
722 expected_requested_urls.emplace_back(kGoodManifestURL); 737 expected_requested_urls.emplace_back(kGoodManifestURL);
723 expected_requested_urls.emplace_back(kGoodResourceURL); 738 expected_requested_urls.emplace_back(kGoodResourceURL);
724 expected_requested_urls.emplace_back(kGoodResourceURLA); 739 expected_requested_urls.emplace_back(kGoodResourceURLA);
725 expected_requested_urls.emplace_back(kGoodResourceURLB); 740 expected_requested_urls.emplace_back(kGoodResourceURLB);
726 expected_requested_urls.emplace_back(kGoodResourceURLC); 741 expected_requested_urls.emplace_back(kGoodResourceURLC);
727 expected_requested_urls.emplace_back(kGoodResourceURLD); 742 expected_requested_urls.emplace_back(kGoodResourceURLD);
728 743
729 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 744 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
730 745
746 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
747 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
731 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 748 EXPECT_TRUE(precache_delegate_.was_on_done_called());
732 749
733 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 750 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
734 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 751 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
735 url_callback_.total_response_bytes(), 1); 752 url_callback_.total_response_bytes(), 1);
736 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 753 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
737 } 754 }
738 755
739 INSTANTIATE_TEST_CASE_P( 756 INSTANTIATE_TEST_CASE_P(
740 PrecacheFetcherResourceSelectionTest, 757 PrecacheFetcherResourceSelectionTest,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 std::move(unfinished_work), kExperimentID, 804 std::move(unfinished_work), kExperimentID,
788 precache_database_.GetWeakPtr(), task_runner(), 805 precache_database_.GetWeakPtr(), task_runner(),
789 &precache_delegate_); 806 &precache_delegate_);
790 second_fetcher.Start(); 807 second_fetcher.Start();
791 base::RunLoop().RunUntilIdle(); 808 base::RunLoop().RunUntilIdle();
792 expected_requested_urls.emplace_back( 809 expected_requested_urls.emplace_back(
793 "http://manifest-url-prefix.com/manifest1.com"); 810 "http://manifest-url-prefix.com/manifest1.com");
794 expected_requested_urls.emplace_back( 811 expected_requested_urls.emplace_back(
795 "http://manifest-url-prefix.com/manifest2.com"); 812 "http://manifest-url-prefix.com/manifest2.com");
796 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 813 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
814
815 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
797 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 816 EXPECT_TRUE(precache_delegate_.was_on_done_called());
798 } 817 }
799 818
800 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { 819 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
801 SetDefaultFlags(); 820 SetDefaultFlags();
802 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 821 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
803 new PrecacheUnfinishedWork()); 822 new PrecacheUnfinishedWork());
804 unfinished_work->mutable_config_settings()->add_forced_site( 823 unfinished_work->mutable_config_settings()->add_forced_site(
805 "good-manifest.com"); 824 "good-manifest.com");
806 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); 825 unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
(...skipping 13 matching lines...) Expand all
820 precache_fetcher.Start(); 839 precache_fetcher.Start();
821 840
822 base::RunLoop().RunUntilIdle(); 841 base::RunLoop().RunUntilIdle();
823 } 842 }
824 843
825 std::vector<GURL> expected_requested_urls; 844 std::vector<GURL> expected_requested_urls;
826 expected_requested_urls.emplace_back(kGoodManifestURL); 845 expected_requested_urls.emplace_back(kGoodManifestURL);
827 expected_requested_urls.emplace_back(kGoodResourceURL); 846 expected_requested_urls.emplace_back(kGoodResourceURL);
828 847
829 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 848 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
849
850 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
851 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
830 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 852 EXPECT_TRUE(precache_delegate_.was_on_done_called());
831 } 853 }
832 854
833 855
834 TEST_F(PrecacheFetcherTest, CustomURLs) { 856 TEST_F(PrecacheFetcherTest, CustomURLs) {
835 SetDefaultFlags(); 857 SetDefaultFlags();
836 858
837 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 859 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
838 new PrecacheUnfinishedWork()); 860 new PrecacheUnfinishedWork());
839 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 861 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
(...skipping 19 matching lines...) Expand all
859 881
860 base::RunLoop().RunUntilIdle(); 882 base::RunLoop().RunUntilIdle();
861 883
862 std::vector<GURL> expected_requested_urls; 884 std::vector<GURL> expected_requested_urls;
863 expected_requested_urls.emplace_back(kCustomConfigURL); 885 expected_requested_urls.emplace_back(kCustomConfigURL);
864 expected_requested_urls.emplace_back(kCustomGoodManifestURL); 886 expected_requested_urls.emplace_back(kCustomGoodManifestURL);
865 expected_requested_urls.emplace_back(kGoodResourceURL); 887 expected_requested_urls.emplace_back(kGoodResourceURL);
866 888
867 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 889 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
868 890
891 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
892 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
869 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 893 EXPECT_TRUE(precache_delegate_.was_on_done_called());
870 } 894 }
871 895
872 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { 896 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
873 SetDefaultFlags(); 897 SetDefaultFlags();
874 898
875 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 899 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
876 new PrecacheUnfinishedWork()); 900 new PrecacheUnfinishedWork());
877 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 901 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
878 902
879 factory_.SetFakeResponse(GURL(kConfigURL), "", 903 factory_.SetFakeResponse(GURL(kConfigURL), "",
880 net::HTTP_INTERNAL_SERVER_ERROR, 904 net::HTTP_INTERNAL_SERVER_ERROR,
881 net::URLRequestStatus::FAILED); 905 net::URLRequestStatus::FAILED);
882 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 906 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
883 net::URLRequestStatus::SUCCESS); 907 net::URLRequestStatus::SUCCESS);
884 908
885 PrecacheFetcher precache_fetcher( 909 PrecacheFetcher precache_fetcher(
886 request_context_.get(), GURL(), std::string(), std::move(unfinished_work), 910 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
887 kExperimentID, precache_database_.GetWeakPtr(), task_runner(), 911 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
888 &precache_delegate_); 912 &precache_delegate_);
889 precache_fetcher.Start(); 913 precache_fetcher.Start();
890 914
891 base::RunLoop().RunUntilIdle(); 915 base::RunLoop().RunUntilIdle();
892 916
893 std::vector<GURL> expected_requested_urls; 917 std::vector<GURL> expected_requested_urls;
894 expected_requested_urls.emplace_back(kConfigURL); 918 expected_requested_urls.emplace_back(kConfigURL);
895 expected_requested_urls.emplace_back(kGoodManifestURL); 919 expected_requested_urls.emplace_back(kGoodManifestURL);
896 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 920 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
897 921
922 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
923 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
898 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 924 EXPECT_TRUE(precache_delegate_.was_on_done_called());
899 } 925 }
900 926
901 TEST_F(PrecacheFetcherTest, BadConfig) { 927 TEST_F(PrecacheFetcherTest, BadConfig) {
902 SetDefaultFlags(); 928 SetDefaultFlags();
903 929
904 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 930 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
905 new PrecacheUnfinishedWork()); 931 new PrecacheUnfinishedWork());
906 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 932 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
907 933
908 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, 934 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
909 net::URLRequestStatus::SUCCESS); 935 net::URLRequestStatus::SUCCESS);
910 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 936 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
911 net::URLRequestStatus::SUCCESS); 937 net::URLRequestStatus::SUCCESS);
912 938
913 PrecacheFetcher precache_fetcher( 939 PrecacheFetcher precache_fetcher(
914 request_context_.get(), GURL(), std::string(), std::move(unfinished_work), 940 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
915 kExperimentID, precache_database_.GetWeakPtr(), task_runner(), 941 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
916 &precache_delegate_); 942 &precache_delegate_);
917 precache_fetcher.Start(); 943 precache_fetcher.Start();
918 944
919 base::RunLoop().RunUntilIdle(); 945 base::RunLoop().RunUntilIdle();
920 946
921 std::vector<GURL> expected_requested_urls; 947 std::vector<GURL> expected_requested_urls;
922 expected_requested_urls.emplace_back(kConfigURL); 948 expected_requested_urls.emplace_back(kConfigURL);
923 expected_requested_urls.emplace_back(kGoodManifestURL); 949 expected_requested_urls.emplace_back(kGoodManifestURL);
924 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 950 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
925 951
952 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
953 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
926 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 954 EXPECT_TRUE(precache_delegate_.was_on_done_called());
927 } 955 }
928 956
929 TEST_F(PrecacheFetcherTest, Cancel) { 957 TEST_F(PrecacheFetcherTest, Cancel) {
930 SetDefaultFlags(); 958 SetDefaultFlags();
931 959
932 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 960 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
933 new PrecacheUnfinishedWork()); 961 new PrecacheUnfinishedWork());
934 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 962 unfinished_work->add_top_host()->set_hostname("starting-url.com");
935 963
(...skipping 16 matching lines...) Expand all
952 // should be recorded because this should not cause OnDone to be 980 // should be recorded because this should not cause OnDone to be
953 // called on the precache delegate. 981 // called on the precache delegate.
954 } 982 }
955 983
956 base::RunLoop().RunUntilIdle(); 984 base::RunLoop().RunUntilIdle();
957 985
958 std::vector<GURL> expected_requested_urls; 986 std::vector<GURL> expected_requested_urls;
959 expected_requested_urls.emplace_back(kConfigURL); 987 expected_requested_urls.emplace_back(kConfigURL);
960 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 988 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
961 989
990 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
962 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 991 EXPECT_FALSE(precache_delegate_.was_on_done_called());
963 992
964 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0); 993 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0);
965 } 994 }
966 995
967 #if defined(PRECACHE_CONFIG_SETTINGS_URL) 996 #if defined(PRECACHE_CONFIG_SETTINGS_URL)
968 997
969 // If the default precache configuration settings URL is defined, then test that 998 // If the default precache configuration settings URL is defined, then test that
970 // it works with the PrecacheFetcher. 999 // it works with the PrecacheFetcher.
971 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { 1000 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
(...skipping 13 matching lines...) Expand all
985 kExperimentID, precache_database_.GetWeakPtr(), task_runner(), 1014 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
986 &precache_delegate_); 1015 &precache_delegate_);
987 precache_fetcher.Start(); 1016 precache_fetcher.Start();
988 1017
989 base::RunLoop().RunUntilIdle(); 1018 base::RunLoop().RunUntilIdle();
990 1019
991 std::vector<GURL> expected_requested_urls; 1020 std::vector<GURL> expected_requested_urls;
992 expected_requested_urls.emplace_back(PRECACHE_CONFIG_SETTINGS_URL); 1021 expected_requested_urls.emplace_back(PRECACHE_CONFIG_SETTINGS_URL);
993 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1022 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
994 1023
1024 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
995 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1025 EXPECT_TRUE(precache_delegate_.was_on_done_called());
996 } 1026 }
997 1027
998 #endif // PRECACHE_CONFIG_SETTINGS_URL 1028 #endif // PRECACHE_CONFIG_SETTINGS_URL
999 1029
1000 #if defined(PRECACHE_MANIFEST_URL_PREFIX) 1030 #if defined(PRECACHE_MANIFEST_URL_PREFIX)
1001 1031
1002 // If the default precache manifest URL prefix is defined, then test that it 1032 // If the default precache manifest URL prefix is defined, then test that it
1003 // works with the PrecacheFetcher. 1033 // works with the PrecacheFetcher.
1004 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) { 1034 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
(...skipping 20 matching lines...) Expand all
1025 &precache_delegate_); 1055 &precache_delegate_);
1026 precache_fetcher.Start(); 1056 precache_fetcher.Start();
1027 1057
1028 base::RunLoop().RunUntilIdle(); 1058 base::RunLoop().RunUntilIdle();
1029 1059
1030 std::vector<GURL> expected_requested_urls; 1060 std::vector<GURL> expected_requested_urls;
1031 expected_requested_urls.emplace_back(kConfigURL); 1061 expected_requested_urls.emplace_back(kConfigURL);
1032 expected_requested_urls.push_back(manifest_url); 1062 expected_requested_urls.push_back(manifest_url);
1033 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1063 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1034 1064
1065 std::vector<std::string> expected_manifest_hosts = {"starting-url.com"};
1066 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1035 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1067 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1036 } 1068 }
1037 1069
1038 #endif // PRECACHE_MANIFEST_URL_PREFIX 1070 #endif // PRECACHE_MANIFEST_URL_PREFIX
1039 1071
1040 TEST_F(PrecacheFetcherTest, TopResourcesCount) { 1072 TEST_F(PrecacheFetcherTest, TopResourcesCount) {
1041 SetDefaultFlags(); 1073 SetDefaultFlags();
1042 1074
1043 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1075 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1044 new PrecacheUnfinishedWork()); 1076 new PrecacheUnfinishedWork());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 1111
1080 std::vector<GURL> expected_requested_urls; 1112 std::vector<GURL> expected_requested_urls;
1081 expected_requested_urls.emplace_back(kConfigURL); 1113 expected_requested_urls.emplace_back(kConfigURL);
1082 expected_requested_urls.emplace_back(kGoodManifestURL); 1114 expected_requested_urls.emplace_back(kGoodManifestURL);
1083 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); 1115 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved");
1084 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); 1116 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved");
1085 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); 1117 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved");
1086 1118
1087 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1119 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1088 1120
1121 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
1122 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1089 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1123 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1090 1124
1091 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 1125 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
1092 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 1126 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
1093 url_callback_.total_response_bytes(), 1); 1127 url_callback_.total_response_bytes(), 1);
1094 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1128 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1095 } 1129 }
1096 1130
1097 TEST_F(PrecacheFetcherTest, TopResourcesCount_ResourceBitset) { 1131 TEST_F(PrecacheFetcherTest, TopResourcesCount_ResourceBitset) {
1098 SetDefaultFlags(); 1132 SetDefaultFlags();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 } 1172 }
1139 1173
1140 std::vector<GURL> expected_requested_urls; 1174 std::vector<GURL> expected_requested_urls;
1141 expected_requested_urls.emplace_back(kConfigURL); 1175 expected_requested_urls.emplace_back(kConfigURL);
1142 expected_requested_urls.emplace_back(kGoodManifestURL); 1176 expected_requested_urls.emplace_back(kGoodManifestURL);
1143 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); 1177 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved");
1144 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); 1178 expected_requested_urls.emplace_back("http://good-manifest.com/retrieved");
1145 1179
1146 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1180 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1147 1181
1182 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
1183 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1148 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1184 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1149 1185
1150 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 1186 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
1151 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 1187 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
1152 url_callback_.total_response_bytes(), 1); 1188 url_callback_.total_response_bytes(), 1);
1153 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1189 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1154 } 1190 }
1155 1191
1156 // MaxBytesPerResource is impossible to test with net::FakeURLFetcherFactory: 1192 // MaxBytesPerResource is impossible to test with net::FakeURLFetcherFactory:
1157 // 1193 //
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1259 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1224 precache_fetcher.Start(); 1260 precache_fetcher.Start();
1225 1261
1226 base::RunLoop().RunUntilIdle(); 1262 base::RunLoop().RunUntilIdle();
1227 } 1263 }
1228 1264
1229 // Fetcher should request config, manifest, and all but 3 resources. For some 1265 // Fetcher should request config, manifest, and all but 3 resources. For some
1230 // reason, we are seeing it fetch all but 4 resources. Meh, close enough. 1266 // reason, we are seeing it fetch all but 4 resources. Meh, close enough.
1231 EXPECT_EQ(1 + 1 + kNumResources - 4, url_callback_.requested_urls().size()); 1267 EXPECT_EQ(1 + 1 + kNumResources - 4, url_callback_.requested_urls().size());
1232 1268
1269 std::vector<std::string> expected_manifest_hosts = {"good-manifest.com"};
1270 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1233 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1271 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1234 1272
1235 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 1); 1273 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 1);
1236 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1274 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1237 1275
1238 const double expected_min_weight = 1276 const double expected_min_weight =
1239 good_manifest.resource(kNumResources - 3).weight_ratio() * 1277 good_manifest.resource(kNumResources - 3).weight_ratio() *
1240 1 /* # of visits to good-manifest.com */; 1278 1 /* # of visits to good-manifest.com */;
1241 histogram.ExpectBucketCount("Precache.Fetch.MinWeight", 1279 histogram.ExpectBucketCount("Precache.Fetch.MinWeight",
1242 1000.0 * expected_min_weight, 1); 1280 1000.0 * expected_min_weight, 1);
1243 } 1281 }
1244 1282
1245 // Tests the parallel fetch behaviour when more precache resource and manifest 1283 // Tests the parallel fetch behaviour when more precache resource and manifest
1246 // requests are available than the maximum capacity of fetcher pool. 1284 // requests are available than the maximum capacity of fetcher pool.
1247 TEST_F(PrecacheFetcherTest, FetcherPoolMaxLimitReached) { 1285 TEST_F(PrecacheFetcherTest, FetcherPoolMaxLimitReached) {
1248 SetDefaultFlags(); 1286 SetDefaultFlags();
1249 1287
1250 const size_t kNumTopHosts = 5; 1288 const size_t kNumTopHosts = 5;
1251 const size_t kNumResources = kMaxParallelFetches + 5; 1289 const size_t kNumResources = kMaxParallelFetches + 5;
1252 1290
1253 PrecacheConfigurationSettings config; 1291 PrecacheConfigurationSettings config;
1254 std::vector<GURL> expected_requested_urls; 1292 std::vector<GURL> expected_requested_urls;
1293 std::vector<std::string> expected_manifest_hosts;
1255 1294
1256 config.set_top_sites_count(kNumTopHosts); 1295 config.set_top_sites_count(kNumTopHosts);
1257 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1296 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1258 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1297 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1259 expected_requested_urls.emplace_back(kConfigURL); 1298 expected_requested_urls.emplace_back(kConfigURL);
1260 1299
1261 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1300 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1262 new PrecacheUnfinishedWork()); 1301 new PrecacheUnfinishedWork());
1263 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1302 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1264 1303
1265 for (size_t i = 0; i < kNumTopHosts; ++i) { 1304 for (size_t i = 0; i < kNumTopHosts; ++i) {
1266 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1305 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1267 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url); 1306 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url);
1307 expected_manifest_hosts.push_back(top_host_url);
1268 } 1308 }
1269 1309
1270 for (size_t i = 0; i < kNumTopHosts; ++i) { 1310 for (size_t i = 0; i < kNumTopHosts; ++i) {
1271 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1311 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1272 unfinished_work->add_top_host()->set_hostname(top_host_url); 1312 unfinished_work->add_top_host()->set_hostname(top_host_url);
1273 1313
1274 PrecacheManifest manifest; 1314 PrecacheManifest manifest;
1275 for (size_t j = 0; j < kNumResources; ++j) { 1315 for (size_t j = 0; j < kNumResources; ++j) {
1276 const std::string resource_url = 1316 const std::string resource_url =
1277 base::StringPrintf("http://top-host-%zu.com/resource-%zu", i, j); 1317 base::StringPrintf("http://top-host-%zu.com/resource-%zu", i, j);
(...skipping 21 matching lines...) Expand all
1299 1339
1300 base::RunLoop().RunUntilIdle(); 1340 base::RunLoop().RunUntilIdle();
1301 1341
1302 // Destroy the PrecacheFetcher after it has finished, to record metrics. 1342 // Destroy the PrecacheFetcher after it has finished, to record metrics.
1303 } 1343 }
1304 1344
1305 EXPECT_TRUE(parallel_fetches_beyond_capacity_); 1345 EXPECT_TRUE(parallel_fetches_beyond_capacity_);
1306 1346
1307 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1347 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1308 1348
1349 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1309 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1350 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1310 1351
1311 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 1352 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
1312 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 1353 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
1313 url_callback_.total_response_bytes(), 1); 1354 url_callback_.total_response_bytes(), 1);
1314 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1355 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1315 } 1356 }
1316 1357
1317 TEST_F(PrecacheFetcherTest, FilterInvalidManifestUrls) { 1358 TEST_F(PrecacheFetcherTest, FilterInvalidManifestUrls) {
1318 SetDefaultFlags(); 1359 SetDefaultFlags();
(...skipping 16 matching lines...) Expand all
1335 std::move(unfinished_work), kExperimentID, 1376 std::move(unfinished_work), kExperimentID,
1336 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1377 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1337 precache_fetcher.Start(); 1378 precache_fetcher.Start();
1338 1379
1339 base::RunLoop().RunUntilIdle(); 1380 base::RunLoop().RunUntilIdle();
1340 } 1381 }
1341 1382
1342 // The config is fetched, but not the invalid manifest URL. 1383 // The config is fetched, but not the invalid manifest URL.
1343 EXPECT_EQ(1UL, url_callback_.requested_urls().size()); 1384 EXPECT_EQ(1UL, url_callback_.requested_urls().size());
1344 1385
1386 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
1345 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1387 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1346 1388
1347 // manifest.com will have been failed to complete, in this case. 1389 // manifest.com will have been failed to complete, in this case.
1348 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1390 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1349 ElementsAre(base::Bucket(101, 1))); 1391 ElementsAre(base::Bucket(101, 1)));
1350 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1392 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1351 } 1393 }
1352 1394
1353 TEST_F(PrecacheFetcherTest, FilterInvalidResourceUrls) { 1395 TEST_F(PrecacheFetcherTest, FilterInvalidResourceUrls) {
1354 SetDefaultFlags(); 1396 SetDefaultFlags();
(...skipping 20 matching lines...) Expand all
1375 std::move(unfinished_work), kExperimentID, 1417 std::move(unfinished_work), kExperimentID,
1376 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1418 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1377 precache_fetcher.Start(); 1419 precache_fetcher.Start();
1378 1420
1379 base::RunLoop().RunUntilIdle(); 1421 base::RunLoop().RunUntilIdle();
1380 } 1422 }
1381 1423
1382 // The config and manifest are fetched, but not the invalid resource URL. 1424 // The config and manifest are fetched, but not the invalid resource URL.
1383 EXPECT_EQ(2UL, url_callback_.requested_urls().size()); 1425 EXPECT_EQ(2UL, url_callback_.requested_urls().size());
1384 1426
1427 std::vector<std::string> expected_manifest_hosts = {"bad-manifest.com"};
1428 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1385 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1429 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1386 1430
1387 // bad-manifest.com will have been completed. 1431 // bad-manifest.com will have been completed.
1388 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1432 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1389 ElementsAre(base::Bucket(101, 1))); 1433 ElementsAre(base::Bucket(101, 1)));
1390 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1434 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1391 } 1435 }
1392 1436
1393 TEST(PrecacheFetcherStandaloneTest, GetResourceURLBase64Hash) { 1437 TEST(PrecacheFetcherStandaloneTest, GetResourceURLBase64Hash) {
1394 // Expected base64 hash for some selected URLs. 1438 // Expected base64 hash for some selected URLs.
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 public testing::WithParamInterface< 1583 public testing::WithParamInterface<
1540 PrecacheConfigurationSettings::ResourceWeightFunction> {}; 1584 PrecacheConfigurationSettings::ResourceWeightFunction> {};
1541 1585
1542 TEST_P(PrecacheFetcherGlobalRankingTest, GloballyRankResources) { 1586 TEST_P(PrecacheFetcherGlobalRankingTest, GloballyRankResources) {
1543 SetDefaultFlags(); 1587 SetDefaultFlags();
1544 1588
1545 const size_t kNumTopHosts = 5; 1589 const size_t kNumTopHosts = 5;
1546 const size_t kNumResources = 5; 1590 const size_t kNumResources = 5;
1547 1591
1548 std::vector<GURL> expected_requested_urls; 1592 std::vector<GURL> expected_requested_urls;
1593 std::vector<std::string> expected_manifest_hosts;
1549 1594
1550 PrecacheConfigurationSettings config; 1595 PrecacheConfigurationSettings config;
1551 config.set_top_sites_count(kNumTopHosts); 1596 config.set_top_sites_count(kNumTopHosts);
1552 config.set_global_ranking(true); 1597 config.set_global_ranking(true);
1553 config.set_resource_weight_function(GetParam()); 1598 config.set_resource_weight_function(GetParam());
1554 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1599 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1555 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1600 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1556 expected_requested_urls.emplace_back(kConfigURL); 1601 expected_requested_urls.emplace_back(kConfigURL);
1557 1602
1558 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1603 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1559 new PrecacheUnfinishedWork()); 1604 new PrecacheUnfinishedWork());
1560 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1605 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1561 1606
1562 for (size_t i = 0; i < kNumTopHosts; ++i) { 1607 for (size_t i = 0; i < kNumTopHosts; ++i) {
1563 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1608 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1564 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url); 1609 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url);
1610 expected_manifest_hosts.push_back(top_host_url);
1565 } 1611 }
1566 1612
1567 // Visit counts and weights are chosen in such a way that resource requests 1613 // Visit counts and weights are chosen in such a way that resource requests
1568 // between different hosts will be interleaved. 1614 // between different hosts will be interleaved.
1569 std::vector<std::pair<std::string, float>> resources; 1615 std::vector<std::pair<std::string, float>> resources;
1570 for (size_t i = 0; i < kNumTopHosts; ++i) { 1616 for (size_t i = 0; i < kNumTopHosts; ++i) {
1571 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1617 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1572 TopHost* top_host = unfinished_work->add_top_host(); 1618 TopHost* top_host = unfinished_work->add_top_host();
1573 top_host->set_hostname(top_host_url); 1619 top_host->set_hostname(top_host_url);
1574 top_host->set_visits(kNumTopHosts - i); 1620 top_host->set_visits(kNumTopHosts - i);
(...skipping 28 matching lines...) Expand all
1603 { 1649 {
1604 PrecacheFetcher precache_fetcher( 1650 PrecacheFetcher precache_fetcher(
1605 request_context_.get(), GURL(), std::string(), 1651 request_context_.get(), GURL(), std::string(),
1606 std::move(unfinished_work), kExperimentID, 1652 std::move(unfinished_work), kExperimentID,
1607 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1653 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1608 precache_fetcher.Start(); 1654 precache_fetcher.Start();
1609 base::RunLoop().RunUntilIdle(); 1655 base::RunLoop().RunUntilIdle();
1610 } 1656 }
1611 1657
1612 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1658 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1659 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1613 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1660 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1614 } 1661 }
1615 1662
1616 INSTANTIATE_TEST_CASE_P( 1663 INSTANTIATE_TEST_CASE_P(
1617 PrecacheFetcherGlobalRankingTest, 1664 PrecacheFetcherGlobalRankingTest,
1618 PrecacheFetcherGlobalRankingTest, 1665 PrecacheFetcherGlobalRankingTest,
1619 testing::Values(PrecacheConfigurationSettings::FUNCTION_NAIVE, 1666 testing::Values(PrecacheConfigurationSettings::FUNCTION_NAIVE,
1620 PrecacheConfigurationSettings::FUNCTION_GEOMETRIC)); 1667 PrecacheConfigurationSettings::FUNCTION_GEOMETRIC));
1621 1668
1622 TEST_F(PrecacheFetcherTest, GloballyRankResourcesAfterPauseResume) { 1669 TEST_F(PrecacheFetcherTest, GloballyRankResourcesAfterPauseResume) {
1623 SetDefaultFlags(); 1670 SetDefaultFlags();
1624 1671
1625 const size_t kNumTopHosts = 5; 1672 const size_t kNumTopHosts = 5;
1626 const size_t kNumResources = 5; 1673 const size_t kNumResources = 5;
1627 1674
1628 std::vector<GURL> expected_requested_urls; 1675 std::vector<GURL> expected_requested_urls;
1676 std::vector<std::string> expected_manifest_hosts;
1629 1677
1630 PrecacheConfigurationSettings config; 1678 PrecacheConfigurationSettings config;
1631 config.set_top_sites_count(kNumTopHosts); 1679 config.set_top_sites_count(kNumTopHosts);
1632 config.set_global_ranking(true); 1680 config.set_global_ranking(true);
1633 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1681 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1634 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1682 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1635 1683
1636 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1684 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1637 new PrecacheUnfinishedWork()); 1685 new PrecacheUnfinishedWork());
1638 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1686 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1639 1687
1640 // Visit counts and weights are chosen in such a way that resource requests 1688 // Visit counts and weights are chosen in such a way that resource requests
1641 // between different hosts will be interleaved. 1689 // between different hosts will be interleaved.
1642 std::vector<std::pair<std::string, float>> resources; 1690 std::vector<std::pair<std::string, float>> resources;
1643 for (size_t i = 0; i < kNumTopHosts; ++i) { 1691 for (size_t i = 0; i < kNumTopHosts; ++i) {
1644 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1692 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1693 expected_manifest_hosts.push_back(top_host_url);
1645 TopHost* top_host = unfinished_work->add_top_host(); 1694 TopHost* top_host = unfinished_work->add_top_host();
1646 top_host->set_hostname(top_host_url); 1695 top_host->set_hostname(top_host_url);
1647 top_host->set_visits(kNumTopHosts - i); 1696 top_host->set_visits(kNumTopHosts - i);
1648 1697
1649 PrecacheManifest manifest; 1698 PrecacheManifest manifest;
1650 for (size_t j = 0; j < kNumResources; ++j) { 1699 for (size_t j = 0; j < kNumResources; ++j) {
1651 const float weight = 1 - static_cast<float>(j) / kNumResources; 1700 const float weight = 1 - static_cast<float>(j) / kNumResources;
1652 const std::string resource_url = 1701 const std::string resource_url =
1653 base::StringPrintf("http://top-host-%zu.com/resource-%zu-weight-%.1f", 1702 base::StringPrintf("http://top-host-%zu.com/resource-%zu-weight-%.1f",
1654 i, j, top_host->visits() * weight); 1703 i, j, top_host->visits() * weight);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 1746
1698 // Cancel precaching. 1747 // Cancel precaching.
1699 cancelled_work = precache_fetcher.CancelPrecaching(); 1748 cancelled_work = precache_fetcher.CancelPrecaching();
1700 EXPECT_TRUE(precache_fetcher.top_hosts_to_fetch_.empty()); 1749 EXPECT_TRUE(precache_fetcher.top_hosts_to_fetch_.empty());
1701 EXPECT_TRUE(precache_fetcher.resources_to_fetch_.empty()); 1750 EXPECT_TRUE(precache_fetcher.resources_to_fetch_.empty());
1702 } 1751 }
1703 EXPECT_NE(cancelled_work, nullptr); 1752 EXPECT_NE(cancelled_work, nullptr);
1704 EXPECT_TRUE(cancelled_work->top_host().empty()); 1753 EXPECT_TRUE(cancelled_work->top_host().empty());
1705 EXPECT_EQ(kNumTopHosts * kNumResources, 1754 EXPECT_EQ(kNumTopHosts * kNumResources,
1706 static_cast<size_t>(cancelled_work->resource().size())); 1755 static_cast<size_t>(cancelled_work->resource().size()));
1756 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1707 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 1757 EXPECT_FALSE(precache_delegate_.was_on_done_called());
1708 1758
1709 url_callback_.clear_requested_urls(); 1759 url_callback_.clear_requested_urls();
1760 precache_delegate_.clear_manifest_hosts();
1710 1761
1711 // Continuing with the precache should fetch all resources, as the previous 1762 // Continuing with the precache should fetch all resources, as the previous
1712 // run was cancelled before any finished. They should be fetched in global 1763 // run was cancelled before any finished. They should be fetched in global
1713 // ranking order. 1764 // ranking order.
1714 1765
1715 base::HistogramTester histogram; 1766 base::HistogramTester histogram;
1716 1767
1717 { 1768 {
1718 PrecacheFetcher precache_fetcher( 1769 PrecacheFetcher precache_fetcher(
1719 request_context_.get(), GURL(), std::string(), 1770 request_context_.get(), GURL(), std::string(),
1720 std::move(cancelled_work), kExperimentID, 1771 std::move(cancelled_work), kExperimentID,
1721 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1772 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1722 LOG(INFO) << "Resuming prefetch."; 1773 LOG(INFO) << "Resuming prefetch.";
1723 precache_fetcher.Start(); 1774 precache_fetcher.Start();
1724 base::RunLoop().RunUntilIdle(); 1775 base::RunLoop().RunUntilIdle();
1725 } 1776 }
1726 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1777 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1778 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
1727 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1779 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1728 1780
1729 histogram.ExpectBucketCount("Precache.Fetch.MinWeight", 1781 histogram.ExpectBucketCount("Precache.Fetch.MinWeight",
1730 1000.0 * resources.back().second, 1); 1782 1000.0 * resources.back().second, 1);
1731 } 1783 }
1732 1784
1733 TEST_F(PrecacheFetcherTest, MaxTotalResources) { 1785 TEST_F(PrecacheFetcherTest, MaxTotalResources) {
1734 SetDefaultFlags(); 1786 SetDefaultFlags();
1735 1787
1736 const size_t kNumResources = 5; 1788 const size_t kNumResources = 5;
1737 1789
1738 std::vector<GURL> expected_requested_urls; 1790 std::vector<GURL> expected_requested_urls;
1791 std::vector<std::string> expected_manifest_hosts;
1739 1792
1740 PrecacheConfigurationSettings config; 1793 PrecacheConfigurationSettings config;
1741 config.set_total_resources_count(2); 1794 config.set_total_resources_count(2);
1742 config.set_global_ranking(true); 1795 config.set_global_ranking(true);
1743 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1796 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1744 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1797 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1745 expected_requested_urls.emplace_back(kConfigURL); 1798 expected_requested_urls.emplace_back(kConfigURL);
1746 1799
1747 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1800 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1748 new PrecacheUnfinishedWork()); 1801 new PrecacheUnfinishedWork());
1749 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1802 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1750 1803
1751 TopHost* top_host = unfinished_work->add_top_host(); 1804 TopHost* top_host = unfinished_work->add_top_host();
1752 top_host->set_hostname("top-host.com"); 1805 top_host->set_hostname("top-host.com");
1753 top_host->set_visits(1); 1806 top_host->set_visits(1);
1754 1807
1755 expected_requested_urls.emplace_back(kManifestURLPrefix + 1808 expected_requested_urls.emplace_back(kManifestURLPrefix +
1756 top_host->hostname()); 1809 top_host->hostname());
1810 expected_manifest_hosts.push_back(top_host->hostname());
1757 1811
1758 PrecacheManifest manifest; 1812 PrecacheManifest manifest;
1759 for (size_t i = 0; i < kNumResources; ++i) { 1813 for (size_t i = 0; i < kNumResources; ++i) {
1760 const float weight = 1 - static_cast<float>(i) / kNumResources; 1814 const float weight = 1 - static_cast<float>(i) / kNumResources;
1761 const std::string resource_url = 1815 const std::string resource_url =
1762 base::StringPrintf("http://top-host.com/resource-%zu-weight-%.1f", i, 1816 base::StringPrintf("http://top-host.com/resource-%zu-weight-%.1f", i,
1763 top_host->visits() * weight); 1817 top_host->visits() * weight);
1764 PrecacheResource* resource = manifest.add_resource(); 1818 PrecacheResource* resource = manifest.add_resource();
1765 resource->set_url(resource_url); 1819 resource->set_url(resource_url);
1766 resource->set_weight_ratio(weight); 1820 resource->set_weight_ratio(weight);
(...skipping 11 matching lines...) Expand all
1778 { 1832 {
1779 PrecacheFetcher precache_fetcher( 1833 PrecacheFetcher precache_fetcher(
1780 request_context_.get(), GURL(), std::string(), 1834 request_context_.get(), GURL(), std::string(),
1781 std::move(unfinished_work), kExperimentID, 1835 std::move(unfinished_work), kExperimentID,
1782 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1836 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1783 precache_fetcher.Start(); 1837 precache_fetcher.Start();
1784 base::RunLoop().RunUntilIdle(); 1838 base::RunLoop().RunUntilIdle();
1785 } 1839 }
1786 1840
1787 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1841 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1842 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1788 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1843 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1789 1844
1790 const float expected_min_weight = 1845 const float expected_min_weight =
1791 manifest.resource(config.total_resources_count() - 1).weight_ratio(); 1846 manifest.resource(config.total_resources_count() - 1).weight_ratio();
1792 histogram.ExpectUniqueSample("Precache.Fetch.MinWeight", 1847 histogram.ExpectUniqueSample("Precache.Fetch.MinWeight",
1793 1000.0 * expected_min_weight, 1); 1848 1000.0 * expected_min_weight, 1);
1794 } 1849 }
1795 1850
1796 TEST_F(PrecacheFetcherTest, MinWeight) { 1851 TEST_F(PrecacheFetcherTest, MinWeight) {
1797 SetDefaultFlags(); 1852 SetDefaultFlags();
1798 1853
1799 const size_t kNumResources = 5; 1854 const size_t kNumResources = 5;
1800 1855
1801 std::vector<GURL> expected_requested_urls; 1856 std::vector<GURL> expected_requested_urls;
1857 std::vector<std::string> expected_manifest_hosts;
1802 1858
1803 PrecacheConfigurationSettings config; 1859 PrecacheConfigurationSettings config;
1804 config.set_min_weight(3); 1860 config.set_min_weight(3);
1805 config.set_global_ranking(true); 1861 config.set_global_ranking(true);
1806 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1862 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1807 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1863 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1808 expected_requested_urls.emplace_back(kConfigURL); 1864 expected_requested_urls.emplace_back(kConfigURL);
1809 1865
1810 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1866 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1811 new PrecacheUnfinishedWork()); 1867 new PrecacheUnfinishedWork());
1812 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1868 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1813 1869
1814 TopHost* top_host = unfinished_work->add_top_host(); 1870 TopHost* top_host = unfinished_work->add_top_host();
1815 top_host->set_hostname("top-host.com"); 1871 top_host->set_hostname("top-host.com");
1816 top_host->set_visits(5); 1872 top_host->set_visits(5);
1817 1873
1818 expected_requested_urls.emplace_back(kManifestURLPrefix + 1874 expected_requested_urls.emplace_back(kManifestURLPrefix +
1819 top_host->hostname()); 1875 top_host->hostname());
1876 expected_manifest_hosts.push_back(top_host->hostname());
1820 1877
1821 PrecacheManifest manifest; 1878 PrecacheManifest manifest;
1822 for (size_t i = 0; i < kNumResources; ++i) { 1879 for (size_t i = 0; i < kNumResources; ++i) {
1823 const float weight = 1 - static_cast<float>(i) / kNumResources; 1880 const float weight = 1 - static_cast<float>(i) / kNumResources;
1824 const std::string resource_url = 1881 const std::string resource_url =
1825 base::StringPrintf("http://top-host.com/resource-%zu-weight-%.1f", i, 1882 base::StringPrintf("http://top-host.com/resource-%zu-weight-%.1f", i,
1826 top_host->visits() * weight); 1883 top_host->visits() * weight);
1827 PrecacheResource* resource = manifest.add_resource(); 1884 PrecacheResource* resource = manifest.add_resource();
1828 resource->set_url(resource_url); 1885 resource->set_url(resource_url);
1829 resource->set_weight_ratio(weight); 1886 resource->set_weight_ratio(weight);
(...skipping 10 matching lines...) Expand all
1840 { 1897 {
1841 PrecacheFetcher precache_fetcher( 1898 PrecacheFetcher precache_fetcher(
1842 request_context_.get(), GURL(), std::string(), 1899 request_context_.get(), GURL(), std::string(),
1843 std::move(unfinished_work), kExperimentID, 1900 std::move(unfinished_work), kExperimentID,
1844 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 1901 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1845 precache_fetcher.Start(); 1902 precache_fetcher.Start();
1846 base::RunLoop().RunUntilIdle(); 1903 base::RunLoop().RunUntilIdle();
1847 } 1904 }
1848 1905
1849 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1906 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1907 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1850 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1908 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1851 } 1909 }
1852 1910
1853 // Tests cancel precaching when all tophost manifests are fetched, but some 1911 // Tests cancel precaching when all tophost manifests are fetched, but some
1854 // resource fetches are pending. 1912 // resource fetches are pending.
1855 TEST_F(PrecacheFetcherTest, CancelPrecachingAfterAllManifestFetch) { 1913 TEST_F(PrecacheFetcherTest, CancelPrecachingAfterAllManifestFetch) {
1856 SetDefaultFlags(); 1914 SetDefaultFlags();
1857 1915
1858 const size_t kNumTopHosts = 5; 1916 const size_t kNumTopHosts = 5;
1859 const size_t kNumResources = 5; 1917 const size_t kNumResources = 5;
1860 1918
1861 PrecacheConfigurationSettings config; 1919 PrecacheConfigurationSettings config;
1862 std::vector<GURL> expected_requested_urls; 1920 std::vector<GURL> expected_requested_urls;
1921 std::vector<std::string> expected_manifest_hosts;
1863 std::unique_ptr<PrecacheUnfinishedWork> cancelled_work; 1922 std::unique_ptr<PrecacheUnfinishedWork> cancelled_work;
1864 1923
1865 config.set_top_sites_count(kNumTopHosts); 1924 config.set_top_sites_count(kNumTopHosts);
1866 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 1925 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1867 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1926 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1868 expected_requested_urls.emplace_back(kConfigURL); 1927 expected_requested_urls.emplace_back(kConfigURL);
1869 1928
1870 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 1929 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1871 new PrecacheUnfinishedWork()); 1930 new PrecacheUnfinishedWork());
1872 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1931 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1873 1932
1874 for (size_t i = 0; i < kNumTopHosts; ++i) { 1933 for (size_t i = 0; i < kNumTopHosts; ++i) {
1875 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1934 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1876 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url); 1935 expected_requested_urls.emplace_back(kManifestURLPrefix + top_host_url);
1936 expected_manifest_hosts.push_back(top_host_url);
1877 } 1937 }
1878 1938
1879 int num_resources = 0; 1939 int num_resources = 0;
1880 for (size_t i = 0; i < kNumTopHosts; ++i) { 1940 for (size_t i = 0; i < kNumTopHosts; ++i) {
1881 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 1941 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1882 TopHost* top_host = unfinished_work->add_top_host(); 1942 TopHost* top_host = unfinished_work->add_top_host();
1883 top_host->set_hostname(top_host_url); 1943 top_host->set_hostname(top_host_url);
1884 top_host->set_visits(kNumTopHosts - i); 1944 top_host->set_visits(kNumTopHosts - i);
1885 1945
1886 PrecacheManifest manifest; 1946 PrecacheManifest manifest;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 cancelled_work = precache_fetcher.CancelPrecaching(); 1985 cancelled_work = precache_fetcher.CancelPrecaching();
1926 EXPECT_TRUE(precache_fetcher.top_hosts_to_fetch_.empty()); 1986 EXPECT_TRUE(precache_fetcher.top_hosts_to_fetch_.empty());
1927 EXPECT_TRUE(precache_fetcher.resources_to_fetch_.empty()); 1987 EXPECT_TRUE(precache_fetcher.resources_to_fetch_.empty());
1928 } 1988 }
1929 ASSERT_NE(nullptr, cancelled_work); 1989 ASSERT_NE(nullptr, cancelled_work);
1930 EXPECT_TRUE(cancelled_work->top_host().empty()); 1990 EXPECT_TRUE(cancelled_work->top_host().empty());
1931 EXPECT_EQ(kNumTopHosts * kNumResources, 1991 EXPECT_EQ(kNumTopHosts * kNumResources,
1932 static_cast<size_t>(cancelled_work->resource().size())); 1992 static_cast<size_t>(cancelled_work->resource().size()));
1933 1993
1934 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1994 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1935 1995 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
1936 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 1996 EXPECT_FALSE(precache_delegate_.was_on_done_called());
1937 1997
1938 // Continuing with the precache should fetch all resources, as the previous 1998 // Continuing with the precache should fetch all resources, as the previous
1939 // run was cancelled before any finished. 1999 // run was cancelled before any finished.
1940 expected_requested_urls.clear(); 2000 expected_requested_urls.clear();
1941 url_callback_.clear_requested_urls(); 2001 url_callback_.clear_requested_urls();
2002 precache_delegate_.clear_manifest_hosts();
1942 for (size_t i = 0; i < kNumTopHosts; ++i) { 2003 for (size_t i = 0; i < kNumTopHosts; ++i) {
1943 for (size_t j = 0; j < kNumResources; ++j) { 2004 for (size_t j = 0; j < kNumResources; ++j) {
1944 expected_requested_urls.emplace_back( 2005 expected_requested_urls.emplace_back(
1945 base::StringPrintf("http://top-host-%zu.com/resource-%zu", i, j)); 2006 base::StringPrintf("http://top-host-%zu.com/resource-%zu", i, j));
1946 } 2007 }
1947 } 2008 }
1948 { 2009 {
1949 PrecacheFetcher precache_fetcher( 2010 PrecacheFetcher precache_fetcher(
1950 request_context_.get(), GURL(), std::string(), 2011 request_context_.get(), GURL(), std::string(),
1951 std::move(cancelled_work), kExperimentID, 2012 std::move(cancelled_work), kExperimentID,
1952 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 2013 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1953 LOG(INFO) << "Resuming prefetch."; 2014 LOG(INFO) << "Resuming prefetch.";
1954 precache_fetcher.Start(); 2015 precache_fetcher.Start();
1955 base::RunLoop().RunUntilIdle(); 2016 base::RunLoop().RunUntilIdle();
1956 } 2017 }
1957 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 2018 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
2019 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
1958 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 2020 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1959 } 2021 }
1960 2022
1961 TEST_F(PrecacheFetcherTest, DailyQuota) { 2023 TEST_F(PrecacheFetcherTest, DailyQuota) {
1962 SetDefaultFlags(); 2024 SetDefaultFlags();
1963 2025
1964 const size_t kNumTopHosts = 3; 2026 const size_t kNumTopHosts = 3;
1965 2027
1966 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 2028 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
1967 new PrecacheUnfinishedWork()); 2029 new PrecacheUnfinishedWork());
1968 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 2030 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1969 2031
1970 PrecacheConfigurationSettings config; 2032 PrecacheConfigurationSettings config;
1971 config.set_top_sites_count(kNumTopHosts); 2033 config.set_top_sites_count(kNumTopHosts);
1972 config.set_daily_quota_total(10000); 2034 config.set_daily_quota_total(10000);
1973 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 2035 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
1974 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 2036 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1975 std::vector<GURL> expected_requested_urls; 2037 std::vector<GURL> expected_requested_urls;
2038 std::vector<std::string> expected_manifest_hosts;
1976 expected_requested_urls.emplace_back(kConfigURL); 2039 expected_requested_urls.emplace_back(kConfigURL);
1977 2040
1978 for (size_t i = 0; i < kNumTopHosts; ++i) { 2041 for (size_t i = 0; i < kNumTopHosts; ++i) {
1979 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 2042 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1980 expected_requested_urls.emplace_back(std::string(kManifestURLPrefix) + 2043 expected_requested_urls.emplace_back(std::string(kManifestURLPrefix) +
1981 top_host_url); 2044 top_host_url);
2045 expected_manifest_hosts.push_back(top_host_url);
1982 } 2046 }
1983 2047
1984 for (size_t i = 0; i < kNumTopHosts; ++i) { 2048 for (size_t i = 0; i < kNumTopHosts; ++i) {
1985 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i); 2049 const std::string top_host_url = base::StringPrintf("top-host-%zu.com", i);
1986 const std::string resource_url = 2050 const std::string resource_url =
1987 base::StringPrintf("http://top-host-%zu.com/resource.html", i); 2051 base::StringPrintf("http://top-host-%zu.com/resource.html", i);
1988 PrecacheManifest manifest; 2052 PrecacheManifest manifest;
1989 manifest.add_resource()->set_url(resource_url); 2053 manifest.add_resource()->set_url(resource_url);
1990 2054
1991 unfinished_work->add_top_host()->set_hostname(top_host_url); 2055 unfinished_work->add_top_host()->set_hostname(top_host_url);
(...skipping 17 matching lines...) Expand all
2009 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 2073 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
2010 precache_fetcher.Start(); 2074 precache_fetcher.Start();
2011 2075
2012 base::RunLoop().RunUntilIdle(); 2076 base::RunLoop().RunUntilIdle();
2013 2077
2014 EXPECT_EQ(0U, precache_fetcher.quota_.remaining()); 2078 EXPECT_EQ(0U, precache_fetcher.quota_.remaining());
2015 unfinished_work = precache_fetcher.CancelPrecaching(); 2079 unfinished_work = precache_fetcher.CancelPrecaching();
2016 } 2080 }
2017 2081
2018 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 2082 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
2019 2083 EXPECT_EQ(expected_manifest_hosts, precache_delegate_.get_manifest_hosts());
2020 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 2084 EXPECT_TRUE(precache_delegate_.was_on_done_called());
2021 2085
2022 EXPECT_EQ(0, unfinished_work->top_host_size()); 2086 EXPECT_EQ(0, unfinished_work->top_host_size());
2023 EXPECT_EQ(1, unfinished_work->resource_size()); 2087 EXPECT_EQ(1, unfinished_work->resource_size());
2024 2088
2025 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 1); 2089 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 1);
2026 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 1); 2090 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 1);
2027 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 2091 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
2028 2092
2029 // Continuing with the precache when quota limit is reached, will not fetch 2093 // Continuing with the precache when quota limit is reached, will not fetch
2030 // any resources. 2094 // any resources.
2031 expected_requested_urls.clear(); 2095 expected_requested_urls.clear();
2032 url_callback_.clear_requested_urls(); 2096 url_callback_.clear_requested_urls();
2097 precache_delegate_.clear_manifest_hosts();
2033 { 2098 {
2034 PrecacheFetcher precache_fetcher( 2099 PrecacheFetcher precache_fetcher(
2035 request_context_.get(), GURL(), std::string(), 2100 request_context_.get(), GURL(), std::string(),
2036 std::move(unfinished_work), kExperimentID, 2101 std::move(unfinished_work), kExperimentID,
2037 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 2102 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
2038 precache_fetcher.Start(); 2103 precache_fetcher.Start();
2039 base::RunLoop().RunUntilIdle(); 2104 base::RunLoop().RunUntilIdle();
2040 2105
2041 EXPECT_EQ(0U, precache_fetcher.quota_.remaining()); 2106 EXPECT_EQ(0U, precache_fetcher.quota_.remaining());
2042 } 2107 }
2043 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 2108 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
2044 2109 EXPECT_TRUE(precache_delegate_.get_manifest_hosts().empty());
2045 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 2110 EXPECT_TRUE(precache_delegate_.was_on_done_called());
2046 2111
2047 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); 2112 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2);
2048 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); 2113 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2);
2049 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); 2114 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2);
2050 } 2115 }
2051 2116
2052 } // namespace precache 2117 } // namespace precache
OLDNEW
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698