| 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
|
|
|