| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |