| 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 72cb27027c83590d8efbf00dc5c6c4709d445cc9..9b42551851550a54cde107a778b139b5d6cb15e4 100644
|
| --- a/components/precache/core/precache_fetcher_unittest.cc
|
| +++ b/components/precache/core/precache_fetcher_unittest.cc
|
| @@ -24,6 +24,7 @@
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "components/precache/core/precache_switches.h"
|
| #include "components/precache/core/proto/precache.pb.h"
|
| +#include "components/precache/core/proto/unfinished_work.pb.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/http/http_response_headers.h"
|
| #include "net/http/http_status_code.h"
|
| @@ -94,16 +95,17 @@ class TestURLFetcherCallback {
|
|
|
| class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
|
| public:
|
| - TestPrecacheDelegate() : was_on_done_called_(false) {}
|
| + TestPrecacheDelegate()
|
| + : on_done_was_called_(false) {}
|
|
|
| - void OnDone() override { was_on_done_called_ = true; }
|
| + void OnDone() override { on_done_was_called_ = true; }
|
|
|
| bool was_on_done_called() const {
|
| - return was_on_done_called_;
|
| + return on_done_was_called_;
|
| }
|
|
|
| private:
|
| - bool was_on_done_called_;
|
| + bool on_done_was_called_;
|
| };
|
|
|
| class MockURLFetcherFactory : public net::URLFetcherFactory {
|
| @@ -348,11 +350,12 @@ class PrecacheFetcherTest : public testing::Test {
|
| TEST_F(PrecacheFetcherTest, FullPrecache) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts;
|
| - starting_hosts.push_back("manifest-fetch-failure.com");
|
| - starting_hosts.push_back("bad-manifest.com");
|
| - starting_hosts.push_back("good-manifest.com");
|
| - starting_hosts.push_back("not-in-top-3.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("manifest-fetch-failure.com");
|
| + unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
| + unfinished_work->add_top_host()->set_hostname("not-in-top-3.com");
|
|
|
| PrecacheConfigurationSettings config;
|
| config.set_top_sites_count(3);
|
| @@ -387,8 +390,9 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
|
| base::HistogramTester histogram;
|
|
|
| {
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| @@ -416,11 +420,106 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
|
| histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
|
| }
|
|
|
| +TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
|
| + SetDefaultFlags();
|
| +
|
| + PrecacheConfigurationSettings config;
|
| + config.set_top_sites_count(3);
|
| +
|
| + std::unique_ptr<PrecacheUnfinishedWork> empty_unfinished_work(
|
| + new PrecacheUnfinishedWork);
|
| +
|
| + PrecacheFetcher first_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(empty_unfinished_work),
|
| + &precache_delegate_);
|
| + base::Time then = base::Time::Now() - base::TimeDelta::FromHours(1);
|
| + std::list<GURL> manifests, resources;
|
| + manifests.push_back(GURL("http://manifest-url-prefix.com/manifest1.com"));
|
| + manifests.push_back(GURL("http://manifest-url-prefix.com/manifest2.com"));
|
| + resources.push_back(GURL(kGoodResourceURL));
|
| + first_fetcher.AssignWorkForTest(
|
| + manifests, resources, 271828, 314159, 5, then);
|
| + loop_.RunUntilIdle();
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work =
|
| + first_fetcher.CancelPrecaching();
|
| +
|
| + std::multiset<GURL> expected_requested_urls;
|
| + EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
|
| +
|
| + factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
|
| + net::HTTP_OK, net::URLRequestStatus::SUCCESS);
|
| + factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"),
|
| + "bad protobuf", net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"),
|
| + "bad protobuf", net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + // Starting hosts should not be fetched.
|
| + unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
|
| + PrecacheFetcher second_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| + second_fetcher.Start();
|
| + loop_.RunUntilIdle();
|
| + expected_requested_urls.insert(GURL(kConfigURL));
|
| + expected_requested_urls.insert(
|
| + GURL("http://manifest-url-prefix.com/manifest1.com"));
|
| + expected_requested_urls.insert(
|
| + GURL("http://manifest-url-prefix.com/manifest2.com"));
|
| + expected_requested_urls.insert(GURL(kGoodResourceURL));
|
| + EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
|
| + EXPECT_TRUE(precache_delegate_.was_on_done_called());
|
| +}
|
| +
|
| +TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
|
| + SetDefaultFlags();
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->mutable_config_settings()->add_forced_site(
|
| + "good-manifest.com");
|
| + unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
|
| + PrecacheManifest good_manifest;
|
| + good_manifest.add_resource()->set_url(kGoodResourceURL);
|
| +
|
| + factory_.SetFakeResponse(GURL(kGoodManifestURL),
|
| + good_manifest.SerializeAsString(), net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| + {
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| + precache_fetcher.Start();
|
| +
|
| + loop_.RunUntilIdle();
|
| +
|
| + // Destroy the PrecacheFetcher after it has finished, to record metrics.
|
| + }
|
| +
|
| + std::multiset<GURL> expected_requested_urls;
|
| + expected_requested_urls.insert(GURL(kGoodManifestURL));
|
| + expected_requested_urls.insert(GURL(kGoodResourceURL));
|
| +
|
| + EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
|
| + EXPECT_TRUE(precache_delegate_.was_on_done_called());
|
| +
|
| +}
|
| +
|
| +
|
| TEST_F(PrecacheFetcherTest, CustomURLs) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts;
|
| - starting_hosts.push_back("good-manifest.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
|
|
| PrecacheConfigurationSettings config;
|
|
|
| @@ -436,8 +535,9 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| PrecacheFetcher precache_fetcher(
|
| - starting_hosts, request_context_.get(), GURL(kCustomConfigURL),
|
| - kCustomManifestURLPrefix, &precache_delegate_);
|
| + request_context_.get(), GURL(kCustomConfigURL),
|
| + kCustomManifestURLPrefix, std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -455,7 +555,9 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
|
| TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts(1, "good-manifest.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
|
|
| factory_.SetFakeResponse(GURL(kConfigURL), "",
|
| net::HTTP_INTERNAL_SERVER_ERROR,
|
| @@ -463,8 +565,10 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
|
| factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -480,15 +584,19 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
|
| TEST_F(PrecacheFetcherTest, BadConfig) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts(1, "good-manifest.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
|
|
| factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
|
| net::URLRequestStatus::SUCCESS);
|
| factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -504,7 +612,9 @@ TEST_F(PrecacheFetcherTest, BadConfig) {
|
| TEST_F(PrecacheFetcherTest, Cancel) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts(1, "starting-url.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("starting-url.com");
|
|
|
| PrecacheConfigurationSettings config;
|
| config.set_top_sites_count(1);
|
| @@ -515,8 +625,9 @@ TEST_F(PrecacheFetcherTest, Cancel) {
|
| base::HistogramTester histogram;
|
|
|
| {
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| @@ -542,7 +653,9 @@ TEST_F(PrecacheFetcherTest, Cancel) {
|
| // If the default precache configuration settings URL is defined, then test that
|
| // it works with the PrecacheFetcher.
|
| TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
|
| - std::vector<std::string> starting_hosts(1, "starting-url.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("starting-url.com");
|
|
|
| PrecacheConfigurationSettings config;
|
| config.set_top_sites_count(0);
|
| @@ -551,8 +664,10 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
|
| config.SerializeAsString(), net::HTTP_OK,
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -574,7 +689,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
|
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| switches::kPrecacheConfigSettingsURL, kConfigURL);
|
|
|
| - std::vector<std::string> starting_hosts(1, "starting-url.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("starting-url.com");
|
|
|
| PrecacheConfigurationSettings config;
|
| config.set_top_sites_count(1);
|
| @@ -586,8 +703,10 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
|
| factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
|
| net::HTTP_OK, net::URLRequestStatus::SUCCESS);
|
|
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| + GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -605,8 +724,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
|
| TEST_F(PrecacheFetcherTest, TopResourcesCount) {
|
| SetDefaultFlags();
|
|
|
| - std::vector<std::string> starting_hosts;
|
| - starting_hosts.push_back("good-manifest.com");
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
|
|
| PrecacheConfigurationSettings config;
|
| config.set_top_resources_count(3);
|
| @@ -629,8 +749,9 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
|
| base::HistogramTester histogram;
|
|
|
| {
|
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| + PrecacheFetcher precache_fetcher(request_context_.get(),
|
| GURL(), std::string(),
|
| + std::move(unfinished_work),
|
| &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| @@ -675,6 +796,10 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
|
|
|
| TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
|
| SetDefaultFlags();
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + unfinished_work->add_top_host()->set_hostname("good-manifest.com");
|
| +
|
| const size_t kNumResources = 15; // > kMaxParallelFetches.
|
| const size_t kMaxBytesTotal = 1000;
|
| const size_t kBytesPerResource = kMaxBytesTotal / 3;
|
| @@ -701,9 +826,10 @@ TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
|
| base::HistogramTester histogram;
|
|
|
| {
|
| - PrecacheFetcher precache_fetcher({"good-manifest.com"},
|
| - request_context_.get(), GURL(),
|
| - std::string(), &precache_delegate_);
|
| + PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
|
| + std::string(),
|
| + std::move(unfinished_work),
|
| + &precache_delegate_);
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
|
|