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 708476671a358989d686d2b94f30793d983c9790..3816f0f2bb17612f03e5717b2a6b1c43b0d21dd8 100644 |
--- a/components/precache/core/precache_fetcher_unittest.cc |
+++ b/components/precache/core/precache_fetcher_unittest.cc |
@@ -16,6 +16,8 @@ |
#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" |
@@ -24,11 +26,14 @@ |
#include "base/strings/stringprintf.h" |
#include "base/test/histogram_tester.h" |
#include "base/threading/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 "components/precache/core/proto/unfinished_work.pb.h" |
+#include "net/base/escape.h" |
#include "net/base/load_flags.h" |
#include "net/http/http_response_headers.h" |
+#include "net/http/http_response_info.h" |
#include "net/http/http_status_code.h" |
#include "net/url_request/test_url_fetcher_factory.h" |
#include "net/url_request/url_request_status.h" |
@@ -90,9 +95,9 @@ class TestURLFetcherCallback { |
return fetcher; |
} |
- const std::multiset<GURL>& requested_urls() const { |
- return requested_urls_; |
- } |
+ const std::multiset<GURL>& requested_urls() const { return requested_urls_; } |
+ |
+ void clear_requested_urls() { requested_urls_.clear(); } |
int total_response_bytes() const { return total_response_bytes_; } |
@@ -230,10 +235,10 @@ TEST_F(PrecacheFetcherFetcherTest, Config) { |
NotNull()))); |
PrecacheFetcher::Fetcher precache_fetcher( |
- request_context_.get(), url, callback_, false /* is_resource_request */, |
- SIZE_MAX); |
+ request_context_.get(), url, url.host(), callback_, |
+ false /* is_resource_request */, SIZE_MAX); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
ASSERT_NE(nullptr, fetcher); |
EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags()); |
@@ -252,10 +257,10 @@ TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) { |
.Times(1); |
PrecacheFetcher::Fetcher precache_fetcher( |
- request_context_.get(), url, callback_, true /* is_resource_request */, |
- SIZE_MAX); |
+ request_context_.get(), url, url.host(), callback_, |
+ true /* is_resource_request */, SIZE_MAX); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
ASSERT_NE(nullptr, fetcher1); |
EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); |
@@ -275,10 +280,10 @@ TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) { |
NotNull()))); |
PrecacheFetcher::Fetcher precache_fetcher( |
- request_context_.get(), url, callback_, true /* is_resource_request */, |
- SIZE_MAX); |
+ request_context_.get(), url, url.host(), callback_, |
+ true /* is_resource_request */, SIZE_MAX); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
ASSERT_NE(nullptr, fetcher1); |
EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); |
@@ -297,10 +302,10 @@ TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) { |
nullptr))); // It never reached the network. |
PrecacheFetcher::Fetcher precache_fetcher( |
- request_context_.get(), url, callback_, true /* is_resource_request */, |
- SIZE_MAX); |
+ request_context_.get(), url, url.host(), callback_, |
+ true /* is_resource_request */, SIZE_MAX); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher->GetLoadFlags()); |
} |
@@ -324,16 +329,17 @@ TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) { |
nullptr))); |
PrecacheFetcher::Fetcher precache_fetcher( |
- request_context_.get(), url, callback_, true /* is_resource_request */, |
- 99 /* max_bytes */); |
+ request_context_.get(), url, url.host(), callback_, |
+ true /* is_resource_request */, 99 /* max_bytes */); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
class PrecacheFetcherTest : public testing::Test { |
public: |
PrecacheFetcherTest() |
- : request_context_(new net::TestURLRequestContextGetter( |
+ : task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ request_context_(new net::TestURLRequestContextGetter( |
base::ThreadTaskRunnerHandle::Get())), |
factory_(NULL, |
base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
@@ -341,7 +347,34 @@ class PrecacheFetcherTest : public testing::Test { |
expected_total_response_bytes_(0), |
parallel_fetches_beyond_capacity_(false) {} |
+ void UpdatePrecacheReferrerHost(const std::string& hostname, |
+ int64_t manifest_id) { |
+ precache_database_.UpdatePrecacheReferrerHost(hostname, manifest_id, |
+ base::Time()); |
+ } |
+ |
+ void RecordURLPrefetch(const GURL& url, const std::string& referrer_host) { |
+ precache_database_.RecordURLPrefetch(url, referrer_host, base::Time::Now(), |
+ false /* was_cached */, |
+ 1000 /* size */); |
+ } |
+ |
+ void RecordURLNonPrefetch(const GURL& url) { |
+ net::HttpResponseInfo info; |
+ info.was_cached = true; |
+ info.headers = new net::HttpResponseHeaders(std::string()); |
+ precache_database_.RecordURLNonPrefetch( |
+ url, base::TimeDelta(), base::Time::Now(), info, 1000 /* size */, |
+ 0 /* host_rank */, false /* is_connection_cellular */); |
+ } |
+ |
protected: |
+ void SetUp() override { |
+ 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); |
+ } |
void SetDefaultFlags() { |
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
switches::kPrecacheConfigSettingsURL, kConfigURL); |
@@ -355,25 +388,34 @@ class PrecacheFetcherTest : public testing::Test { |
void CheckUntilParallelFetchesBeyondCapacity( |
const PrecacheFetcher* precache_fetcher) { |
if (!precache_fetcher->pool_.IsAvailable() && |
- !precache_fetcher->resource_urls_to_fetch_.empty() && |
- !precache_fetcher->manifest_urls_to_fetch_.empty()) { |
+ precache_fetcher->top_hosts_to_fetch_ && |
+ !precache_fetcher->top_hosts_to_fetch_->empty() && |
+ !precache_fetcher->resources_to_fetch_.empty()) { |
parallel_fetches_beyond_capacity_ = true; |
return; |
} |
// Check again after allowing the message loop to process some messages. |
- loop_.task_runner()->PostTask( |
+ loop_.PostTask( |
FROM_HERE, |
base::Bind( |
&PrecacheFetcherTest::CheckUntilParallelFetchesBeyondCapacity, |
base::Unretained(this), precache_fetcher)); |
} |
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner() const { |
+ return task_runner_; |
+ } |
+ |
+ // Must be declared first so that it is destroyed last. |
base::MessageLoopForUI loop_; |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
TestURLFetcherCallback url_callback_; |
net::FakeURLFetcherFactory factory_; |
TestPrecacheDelegate precache_delegate_; |
+ base::ScopedTempDir scoped_temp_dir_; |
+ PrecacheDatabase precache_database_; |
int expected_total_response_bytes_; |
// True if more parallel fetches were attempted beyond the fetcher pool |
@@ -425,12 +467,13 @@ TEST_F(PrecacheFetcherTest, FullPrecache) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
// Destroy the PrecacheFetcher after it has finished, to record metrics. |
} |
@@ -493,12 +536,13 @@ TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
// Destroy the PrecacheFetcher after it has finished, to record metrics. |
} |
@@ -565,12 +609,13 @@ TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
// Destroy the PrecacheFetcher after it has finished, to record metrics. |
} |
@@ -602,23 +647,25 @@ TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
std::unique_ptr<PrecacheUnfinishedWork> initial_work( |
new PrecacheUnfinishedWork()); |
- initial_work->add_manifest()->set_url( |
- "http://manifest-url-prefix.com/manifest1.com"); |
- initial_work->add_manifest()->set_url( |
- "http://manifest-url-prefix.com/manifest2.com"); |
- initial_work->add_resource()->set_url(kGoodResourceURL); |
+ initial_work->add_top_host()->set_hostname("manifest1.com"); |
+ initial_work->add_top_host()->set_hostname("manifest2.com"); |
initial_work->set_start_time( |
(base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); |
+ // initial_work->add_resource()->set_url(kGoodResourceURL); |
sclittle
2016/08/15 20:13:10
nit: remove dead code
Raj
2016/08/16 17:54:37
Done.
|
PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(), |
std::move(initial_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), |
&precache_delegate_); |
- |
- loop_.RunUntilIdle(); |
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ first_fetcher.Start(); |
+ // base::RunLoop().RunUntilIdle(); |
sclittle
2016/08/15 20:13:10
nit: remove dead code, here and elsewhere
Raj
2016/08/16 17:54:37
Done.
|
std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = |
first_fetcher.CancelPrecaching(); |
std::multiset<GURL> expected_requested_urls; |
+ expected_requested_urls.insert(GURL(kConfigURL)); |
EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
@@ -633,19 +680,20 @@ TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
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"); |
+ |
+ // unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); |
+ url_callback_.clear_requested_urls(); |
PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(), |
std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), |
&precache_delegate_); |
second_fetcher.Start(); |
- loop_.RunUntilIdle(); |
- expected_requested_urls.insert(GURL(kConfigURL)); |
+ base::RunLoop().RunUntilIdle(); |
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)); |
+ // expected_requested_urls.insert(GURL(kGoodResourceURL)); |
EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
} |
@@ -666,12 +714,13 @@ TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { |
factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
net::URLRequestStatus::SUCCESS); |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
std::multiset<GURL> expected_requested_urls; |
@@ -706,10 +755,11 @@ TEST_F(PrecacheFetcherTest, CustomURLs) { |
PrecacheFetcher precache_fetcher( |
request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix, |
- std::move(unfinished_work), kExperimentID, &precache_delegate_); |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(kCustomConfigURL)); |
@@ -734,12 +784,13 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { |
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
net::URLRequestStatus::SUCCESS); |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), std::move(unfinished_work), |
+ kExperimentID, precache_database_.GetWeakPtr(), task_runner(), |
+ &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(kConfigURL)); |
@@ -761,12 +812,13 @@ TEST_F(PrecacheFetcherTest, BadConfig) { |
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
net::URLRequestStatus::SUCCESS); |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), std::move(unfinished_work), |
+ kExperimentID, precache_database_.GetWeakPtr(), task_runner(), |
+ &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(kConfigURL)); |
@@ -792,9 +844,10 @@ TEST_F(PrecacheFetcherTest, Cancel) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
// Destroy the PrecacheFetcher, to cancel precaching. No metrics |
@@ -802,7 +855,7 @@ TEST_F(PrecacheFetcherTest, Cancel) { |
// called on the precache delegate. |
} |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(kConfigURL)); |
@@ -829,12 +882,13 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { |
config.SerializeAsString(), net::HTTP_OK, |
net::URLRequestStatus::SUCCESS); |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), std::move(unfinished_work), |
+ kExperimentID, precache_database_.GetWeakPtr(), task_runner(), |
+ &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); |
@@ -867,12 +921,13 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) { |
factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), |
net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), std::move(unfinished_work), |
+ kExperimentID, precache_database_.GetWeakPtr(), task_runner(), |
+ &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
std::multiset<GURL> expected_requested_urls; |
expected_requested_urls.insert(GURL(kConfigURL)); |
@@ -913,12 +968,13 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
// Destroy the PrecacheFetcher after it has finished, to record metrics. |
} |
@@ -990,12 +1046,13 @@ TEST_F(PrecacheFetcherTest, MaxBytesTotal) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
// We don't know which will make it and which won't due to the parallelism in |
@@ -1052,15 +1109,16 @@ TEST_F(PrecacheFetcherTest, FetcherPoolMaxLimitReached) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
EXPECT_GT(kNumResources, precache_fetcher.pool_.max_size()); |
CheckUntilParallelFetchesBeyondCapacity(&precache_fetcher); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
// Destroy the PrecacheFetcher after it has finished, to record metrics. |
} |
@@ -1093,12 +1151,13 @@ TEST_F(PrecacheFetcherTest, FilterInvalidManifestUrls) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
// The config is fetched, but not the invalid manifest URL. |
@@ -1132,12 +1191,13 @@ TEST_F(PrecacheFetcherTest, FilterInvalidResourceUrls) { |
base::HistogramTester histogram; |
{ |
- PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
- std::string(), std::move(unfinished_work), |
- kExperimentID, &precache_delegate_); |
+ PrecacheFetcher precache_fetcher( |
+ request_context_.get(), GURL(), std::string(), |
+ std::move(unfinished_work), kExperimentID, |
+ precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
precache_fetcher.Start(); |
- loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
// The config and manifest are fetched, but not the invalid resource URL. |
@@ -1151,4 +1211,87 @@ TEST_F(PrecacheFetcherTest, FilterInvalidResourceUrls) { |
histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
} |
+TEST_F(PrecacheFetcherTest, GetResourceURLBase64Hash) { |
sclittle
2016/08/15 20:13:10
nit: this should just be a TEST, not a TEST_F if i
Raj
2016/08/16 17:54:37
Done.
|
+ // Expected base64 hash for some selected URLs. |
+ EXPECT_EQ("dVSI/sC1cGk=", PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://used-resource-1/a.js")})); |
+ EXPECT_EQ("B/Jc6JvusZQ=", PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://used-resource-1/b.js")})); |
+ EXPECT_EQ("CmvACGJ4k08=", PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://used-resource-1/c.js")})); |
+ |
+ EXPECT_EQ("dVSI/sC1cGkH8lzom+6xlA==", |
+ PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://used-resource-1/a.js"), |
+ GURL("http://used-resource-1/b.js")})); |
+} |
+ |
+TEST_F(PrecacheFetcherTest, SendUsedUnusedResourceHash) { |
+ 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("top-host-1.com"); |
+ unfinished_work->add_top_host()->set_hostname("top-host-2.com"); |
+ unfinished_work->add_top_host()->set_hostname("top-host-3.com"); |
+ |
+ UpdatePrecacheReferrerHost("top-host-1.com", 1); |
+ UpdatePrecacheReferrerHost("top-host-2.com", 2); |
+ UpdatePrecacheReferrerHost("top-host-3.com", 3); |
+ |
+ // Mark some resources as precached. |
+ RecordURLPrefetch(GURL("http://used-resource-1/a.js"), "top-host-1.com"); |
+ RecordURLPrefetch(GURL("http://used-resource-1/b.js"), "top-host-1.com"); |
+ RecordURLPrefetch(GURL("http://unused-resource-1/c.js"), "top-host-1.com"); |
+ RecordURLPrefetch(GURL("http://unused-resource-2/a.js"), "top-host-2.com"); |
+ RecordURLPrefetch(GURL("http://unused-resource-2/b.js"), "top-host-2.com"); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Mark some resources as used during user browsing. |
+ RecordURLNonPrefetch(GURL("http://used-resource-1/a.js")); |
+ RecordURLNonPrefetch(GURL("http://used-resource-1/b.js")); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ factory_.SetFakeResponse(GURL(kConfigURL), std::string(), net::HTTP_OK, |
+ net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + |
+ "top-host-1.com?manifest=1&used_resources=" + |
+ net::EscapeQueryParamValue( |
+ PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://used-resource-1/a.js"), |
+ GURL("http://used-resource-1/b.js")}), |
+ true) + |
+ "&unused_resources=" + |
+ net::EscapeQueryParamValue( |
+ PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://unused-resource-1/c.js")}), |
+ true)), |
+ std::string(), net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + |
+ "top-host-2.com?manifest=2&used_resources=&unused_resources=" + |
+ net::EscapeQueryParamValue( |
+ PrecacheFetcher::GetResourceURLBase64HashForTesting( |
+ {GURL("http://unused-resource-2/a.js"), |
+ GURL("http://unused-resource-2/b.js")}), |
+ true)), |
+ std::string(), net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ factory_.SetFakeResponse( |
+ GURL(std::string(kManifestURLPrefix) + |
+ "top-host-3.com?manifest=3&used_resources=&unused_resources="), |
+ std::string(), net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ |
+ { |
+ 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(); |
+ } |
+} |
+ |
} // namespace precache |