| 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 3b8d356122dbc473e394ddeb77e1cd3e25a4337f..e12d42139407ecb90488d4a7cc39e07ea88a6e08 100644
|
| --- a/components/precache/core/precache_fetcher_unittest.cc
|
| +++ b/components/precache/core/precache_fetcher_unittest.cc
|
| @@ -16,12 +16,15 @@
|
| #include "base/callback.h"
|
| #include "base/command_line.h"
|
| #include "base/compiler_specific.h"
|
| +#include "base/files/file_path.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/run_loop.h"
|
| #include "base/test/histogram_tester.h"
|
| #include "base/thread_task_runner_handle.h"
|
| +#include "components/precache/core/precache_database.h"
|
| #include "components/precache/core/precache_switches.h"
|
| #include "components/precache/core/proto/precache.pb.h"
|
| #include "net/base/load_flags.h"
|
| @@ -94,16 +97,32 @@ class TestURLFetcherCallback {
|
|
|
| class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
|
| public:
|
| - TestPrecacheDelegate() : was_on_done_called_(false) {}
|
| + TestPrecacheDelegate()
|
| + : on_done_was_called_(false),
|
| + on_init_done_was_called_(false),
|
| + on_shutdown_done_was_called_(false) {}
|
| +
|
| + void OnDone() override { on_done_was_called_ = true; }
|
| + void OnInitDone() override { on_init_done_was_called_ = true; }
|
| + void OnShutdownDone() override { on_shutdown_done_was_called_ = true; }
|
|
|
| - void OnDone() override { was_on_done_called_ = true; }
|
|
|
| bool was_on_done_called() const {
|
| - return was_on_done_called_;
|
| + return on_done_was_called_;
|
| + }
|
| +
|
| + bool on_init_done_was_called() const {
|
| + return on_init_done_was_called_;
|
| + }
|
| +
|
| + bool on_shutdown_done_was_called() const {
|
| + return on_shutdown_done_was_called_;
|
| }
|
|
|
| private:
|
| - bool was_on_done_called_;
|
| + bool on_done_was_called_;
|
| + bool on_init_done_was_called_;
|
| + bool on_shutdown_done_was_called_;
|
| };
|
|
|
| class MockURLFetcherFactory : public net::URLFetcherFactory {
|
| @@ -329,6 +348,15 @@ class PrecacheFetcherTest : public testing::Test {
|
| base::Unretained(&url_callback_))),
|
| expected_total_response_bytes_(0) {}
|
|
|
| + void SetUp() override {
|
| + precache_database_.reset(new PrecacheDatabase());
|
| +
|
| + ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
|
| + base::FilePath db_path = scoped_temp_dir_.path().Append(
|
| + base::FilePath(FILE_PATH_LITERAL("precache_database")));
|
| + precache_database_->Init(db_path);
|
| + }
|
| +
|
| protected:
|
| void SetDefaultFlags() {
|
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| @@ -337,6 +365,9 @@ class PrecacheFetcherTest : public testing::Test {
|
| switches::kPrecacheManifestURLPrefix, kManifestURLPrefix);
|
| }
|
|
|
| + // Must be declared first so that it is destroyed last.
|
| + base::ScopedTempDir scoped_temp_dir_;
|
| + std::unique_ptr<PrecacheDatabase> precache_database_;
|
| base::MessageLoopForUI loop_;
|
| scoped_refptr<net::TestURLRequestContextGetter> request_context_;
|
| TestURLFetcherCallback url_callback_;
|
| @@ -389,7 +420,9 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
|
| {
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| GURL(), std::string(),
|
| - &precache_delegate_);
|
| + &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -416,6 +449,68 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
|
| histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
|
| }
|
|
|
| +TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
|
| + SetDefaultFlags();
|
| +
|
| + PrecacheConfigurationSettings config;
|
| + config.set_top_sites_count(3);
|
| + std::vector<std::string> starting_hosts;
|
| +
|
| + PrecacheFetcher first_fetcher(starting_hosts, request_context_.get(),
|
| + GURL(), std::string(),
|
| + &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + base::TimeTicks then = base::TimeTicks::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);
|
| + first_fetcher.Shutdown();
|
| + loop_.RunUntilIdle();
|
| +
|
| + 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.
|
| + starting_hosts.push_back("bad-manifest.com");
|
| +
|
| + PrecacheFetcher second_fetcher(starting_hosts, request_context_.get(),
|
| + GURL(), std::string(),
|
| + &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + second_fetcher.Init(base::TimeDelta::FromHours(2));
|
| + loop_.RunUntilIdle();
|
| + 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, CustomURLs) {
|
| SetDefaultFlags();
|
|
|
| @@ -437,7 +532,8 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
|
|
|
| PrecacheFetcher precache_fetcher(
|
| starting_hosts, request_context_.get(), GURL(kCustomConfigURL),
|
| - kCustomManifestURLPrefix, &precache_delegate_);
|
| + kCustomManifestURLPrefix, &precache_delegate_,
|
| + precache_database_->GetWeakPtr(), base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -464,7 +560,9 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + GURL(), std::string(), &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -488,7 +586,9 @@ TEST_F(PrecacheFetcherTest, BadConfig) {
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + GURL(), std::string(), &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -517,7 +617,9 @@ TEST_F(PrecacheFetcherTest, Cancel) {
|
| {
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| GURL(), std::string(),
|
| - &precache_delegate_);
|
| + &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| // Destroy the PrecacheFetcher, to cancel precaching and record metrics.
|
| @@ -552,7 +654,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
|
| net::URLRequestStatus::SUCCESS);
|
|
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + GURL(), std::string(), &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -587,7 +691,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
|
| net::HTTP_OK, net::URLRequestStatus::SUCCESS);
|
|
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| - GURL(), std::string(), &precache_delegate_);
|
| + GURL(), std::string(), &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -631,7 +737,9 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
|
| {
|
| PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
|
| GURL(), std::string(),
|
| - &precache_delegate_);
|
| + &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
| @@ -703,7 +811,9 @@ TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
|
| {
|
| PrecacheFetcher precache_fetcher({"good-manifest.com"},
|
| request_context_.get(), GURL(),
|
| - std::string(), &precache_delegate_);
|
| + std::string(), &precache_delegate_,
|
| + precache_database_->GetWeakPtr(),
|
| + base::ThreadTaskRunnerHandle::Get());
|
| precache_fetcher.Start();
|
|
|
| loop_.RunUntilIdle();
|
|
|