Index: components/precache/core/precache_fetcher_unittest.cc |
diff --git a/components/precache/core/precache_fetcher_unittest.cc b/components/precache/core/precache_fetcher_unittest.cc |
index 4a86682e012c15d1311f45a15d52fa28522006a2..afc9ab9c45037c6d8853d4e92f94bf62e0a5ea25 100644 |
--- a/components/precache/core/precache_fetcher_unittest.cc |
+++ b/components/precache/core/precache_fetcher_unittest.cc |
@@ -21,6 +21,7 @@ |
#include "base/memory/ptr_util.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/rand_util.h" |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/stringprintf.h" |
@@ -1289,4 +1290,101 @@ TEST_F(PrecacheFetcherTest, SendUsedUnusedResourceHash) { |
} |
} |
+TEST_F(PrecacheFetcherTest, DailyQuota) { |
+ SetDefaultFlags(); |
+ |
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
+ new PrecacheUnfinishedWork()); |
+ unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); |
+ unfinished_work->add_top_host()->set_hostname("top-host-1.com"); |
+ unfinished_work->add_top_host()->set_hostname("top-host-2.com"); |
+ unfinished_work->add_top_host()->set_hostname("top-host-3.com"); |
+ |
+ PrecacheConfigurationSettings config; |
+ config.set_top_sites_count(3); |
+ config.set_daily_quota_total(10000000); |
+ |
+ PrecacheManifest good_manifest; |
+ good_manifest.add_resource()->set_url(kGoodResourceURL); |
+ std::string resource_data = base::RandBytesAsString(5000000); |
+ |
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + "top-host-1.com"), |
+ good_manifest.SerializeAsString(), net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), resource_data, net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + "top-host-2.com"), |
+ good_manifest.SerializeAsString(), net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), resource_data, net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + "top-host-3.com"), |
+ good_manifest.SerializeAsString(), net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), resource_data, net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ |
+ base::HistogramTester histogram; |
+ |
+ { |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
+ precache_fetcher.Start(); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(0U, precache_fetcher.quota_.remaining()); |
+ unfinished_work = precache_fetcher.CancelPrecaching(); |
+ } |
+ |
+ std::multiset<GURL> expected_requested_urls; |
+ expected_requested_urls.insert(GURL(kConfigURL)); |
+ expected_requested_urls.insert( |
+ GURL((std::string(kManifestURLPrefix) + "top-host-1.com"))); |
+ expected_requested_urls.insert( |
+ GURL((std::string(kManifestURLPrefix) + "top-host-2.com"))); |
+ expected_requested_urls.insert( |
+ GURL((std::string(kManifestURLPrefix) + "top-host-3.com"))); |
+ expected_requested_urls.insert(GURL(kGoodResourceURL)); |
+ expected_requested_urls.insert(GURL(kGoodResourceURL)); |
+ expected_requested_urls.insert(GURL(kGoodResourceURL)); |
+ |
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
+ |
+ EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
+ |
+ histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 1); |
+ histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 1); |
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
+ |
+ // Continuing with the precache when quota limit is reached ,will not fetch |
+ // any resources. |
+ expected_requested_urls.clear(); |
+ url_callback_.clear_requested_urls(); |
+ { |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
+ precache_fetcher.Start(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(0U, precache_fetcher.quota_.remaining()); |
+ } |
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
+ |
+ EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
+ |
+ histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); |
+ histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); |
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); |
+} |
+ |
} // namespace precache |