Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(582)

Unified Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 1961153003: Add pause/resume functionality to precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698