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(); |