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 374e0b092cb334ed4896c1e572c9ec9d2f741e35..ec5689ca1431e1be680aaeade0e2d517e3f5741c 100644 |
--- a/components/precache/core/precache_fetcher_unittest.cc |
+++ b/components/precache/core/precache_fetcher_unittest.cc |
@@ -1094,6 +1094,65 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) { |
histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
} |
+TEST_F(PrecacheFetcherTest, TopResourcesCount_ResourceBitset) { |
+ 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("good-manifest.com"); |
+ |
+ PrecacheConfigurationSettings config; |
+ config.set_top_resources_count(2); |
+ |
+ PrecacheManifest good_manifest; |
+ good_manifest.add_resource()->set_url("http://good-manifest.com/retrieved"); |
+ good_manifest.add_resource()->set_url("http://good-manifest.com/skipped"); |
+ good_manifest.add_resource()->set_url("http://good-manifest.com/retrieved"); |
+ good_manifest.add_resource()->set_url("http://good-manifest.com/skipped"); |
+ good_manifest.add_resource()->set_url("http://good-manifest.com/retrieved"); |
+ (*good_manifest.mutable_experiments() |
+ ->mutable_resources_by_experiment_group())[kExperimentID] |
+ .set_deprecated_bitset(0b10101); |
+ |
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse(GURL(kGoodManifestURL), |
+ good_manifest.SerializeAsString(), net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", |
+ 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(); |
+ |
+ // Destroy the PrecacheFetcher after it has finished, to record metrics. |
+ } |
+ |
+ std::vector<GURL> expected_requested_urls; |
+ expected_requested_urls.emplace_back(kConfigURL); |
+ expected_requested_urls.emplace_back(kGoodManifestURL); |
+ expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); |
+ expected_requested_urls.emplace_back("http://good-manifest.com/retrieved"); |
+ |
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
+ |
+ EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
+ |
+ histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
+ histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
+ url_callback_.total_response_bytes(), 1); |
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
+} |
+ |
// MaxBytesPerResource is impossible to test with net::FakeURLFetcherFactory: |
// |
// - The PrecacheFetcher::Fetcher's max_bytes logic only applies to network |