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

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2229983002: Send the list of used and unused resources for precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added-test Created 4 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <memory> 10 #include <memory>
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/command_line.h" 17 #include "base/command_line.h"
18 #include "base/compiler_specific.h" 18 #include "base/compiler_specific.h"
19 #include "base/files/file_path.h"
20 #include "base/files/scoped_temp_dir.h"
19 #include "base/memory/ptr_util.h" 21 #include "base/memory/ptr_util.h"
20 #include "base/memory/ref_counted.h" 22 #include "base/memory/ref_counted.h"
21 #include "base/memory/weak_ptr.h" 23 #include "base/memory/weak_ptr.h"
22 #include "base/run_loop.h" 24 #include "base/run_loop.h"
23 #include "base/single_thread_task_runner.h" 25 #include "base/single_thread_task_runner.h"
24 #include "base/strings/stringprintf.h" 26 #include "base/strings/stringprintf.h"
25 #include "base/test/histogram_tester.h" 27 #include "base/test/histogram_tester.h"
26 #include "base/threading/thread_task_runner_handle.h" 28 #include "base/threading/thread_task_runner_handle.h"
29 #include "components/precache/core/precache_database.h"
27 #include "components/precache/core/precache_switches.h" 30 #include "components/precache/core/precache_switches.h"
28 #include "components/precache/core/proto/precache.pb.h" 31 #include "components/precache/core/proto/precache.pb.h"
29 #include "components/precache/core/proto/unfinished_work.pb.h" 32 #include "components/precache/core/proto/unfinished_work.pb.h"
30 #include "net/base/load_flags.h" 33 #include "net/base/load_flags.h"
31 #include "net/http/http_response_headers.h" 34 #include "net/http/http_response_headers.h"
32 #include "net/http/http_status_code.h" 35 #include "net/http/http_status_code.h"
33 #include "net/url_request/test_url_fetcher_factory.h" 36 #include "net/url_request/test_url_fetcher_factory.h"
34 #include "net/url_request/url_request_status.h" 37 #include "net/url_request/url_request_status.h"
35 #include "net/url_request/url_request_test_util.h" 38 #include "net/url_request/url_request_test_util.h"
36 #include "testing/gmock/include/gmock/gmock.h" 39 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 net::URLRequestStatus::Status status) { 86 net::URLRequestStatus::Status status) {
84 std::unique_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher( 87 std::unique_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
85 url, delegate, response_data, response_code, status)); 88 url, delegate, response_data, response_code, status));
86 89
87 total_response_bytes_ += response_data.size(); 90 total_response_bytes_ += response_data.size();
88 requested_urls_.insert(url); 91 requested_urls_.insert(url);
89 92
90 return fetcher; 93 return fetcher;
91 } 94 }
92 95
93 const std::multiset<GURL>& requested_urls() const { 96 const std::multiset<GURL>& requested_urls() const { return requested_urls_; }
94 return requested_urls_; 97
95 } 98 void clear_requested_urls() { requested_urls_.clear(); }
96 99
97 int total_response_bytes() const { return total_response_bytes_; } 100 int total_response_bytes() const { return total_response_bytes_; }
98 101
99 private: 102 private:
100 // Multiset with one entry for each URL requested. 103 // Multiset with one entry for each URL requested.
101 std::multiset<GURL> requested_urls_; 104 std::multiset<GURL> requested_urls_;
102 int total_response_bytes_; 105 int total_response_bytes_;
103 }; 106 };
104 107
105 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { 108 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 GURL url(kConfigURL); 226 GURL url(kConfigURL);
224 227
225 net::FakeURLFetcher* fetcher = nullptr; 228 net::FakeURLFetcher* fetcher = nullptr;
226 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 229 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
227 .WillOnce(factory_.RespondWith("", &fetcher)); 230 .WillOnce(factory_.RespondWith("", &fetcher));
228 EXPECT_CALL(*this, 231 EXPECT_CALL(*this,
229 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 232 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
230 NotNull()))); 233 NotNull())));
231 234
232 PrecacheFetcher::Fetcher precache_fetcher( 235 PrecacheFetcher::Fetcher precache_fetcher(
233 request_context_.get(), url, callback_, false /* is_resource_request */, 236 request_context_.get(), url, url.host(), callback_,
234 SIZE_MAX); 237 false /* is_resource_request */, SIZE_MAX);
235 238
236 loop_.RunUntilIdle(); 239 base::RunLoop().RunUntilIdle();
237 240
238 ASSERT_NE(nullptr, fetcher); 241 ASSERT_NE(nullptr, fetcher);
239 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags()); 242 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags());
240 } 243 }
241 244
242 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) { 245 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) {
243 GURL url(kGoodResourceURL); 246 GURL url(kGoodResourceURL);
244 247
245 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; 248 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr;
246 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 249 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
247 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1)) 250 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1))
248 .WillOnce(factory_.RespondWith("", &fetcher2)); 251 .WillOnce(factory_.RespondWith("", &fetcher2));
249 EXPECT_CALL(*this, 252 EXPECT_CALL(*this,
250 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 253 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
251 NotNull()))) 254 NotNull())))
252 .Times(1); 255 .Times(1);
253 256
254 PrecacheFetcher::Fetcher precache_fetcher( 257 PrecacheFetcher::Fetcher precache_fetcher(
255 request_context_.get(), url, callback_, true /* is_resource_request */, 258 request_context_.get(), url, url.host(), callback_,
256 SIZE_MAX); 259 true /* is_resource_request */, SIZE_MAX);
257 260
258 loop_.RunUntilIdle(); 261 base::RunLoop().RunUntilIdle();
259 262
260 ASSERT_NE(nullptr, fetcher1); 263 ASSERT_NE(nullptr, fetcher1);
261 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); 264 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags());
262 ASSERT_NE(nullptr, fetcher2); 265 ASSERT_NE(nullptr, fetcher2);
263 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); 266 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags());
264 } 267 }
265 268
266 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) { 269 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) {
267 GURL url(kGoodResourceURL); 270 GURL url(kGoodResourceURL);
268 271
269 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; 272 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr;
270 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 273 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
271 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1)) 274 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1))
272 .WillOnce(factory_.RespondWith("", &fetcher2)); 275 .WillOnce(factory_.RespondWith("", &fetcher2));
273 EXPECT_CALL(*this, 276 EXPECT_CALL(*this,
274 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 277 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
275 NotNull()))); 278 NotNull())));
276 279
277 PrecacheFetcher::Fetcher precache_fetcher( 280 PrecacheFetcher::Fetcher precache_fetcher(
278 request_context_.get(), url, callback_, true /* is_resource_request */, 281 request_context_.get(), url, url.host(), callback_,
279 SIZE_MAX); 282 true /* is_resource_request */, SIZE_MAX);
280 283
281 loop_.RunUntilIdle(); 284 base::RunLoop().RunUntilIdle();
282 285
283 ASSERT_NE(nullptr, fetcher1); 286 ASSERT_NE(nullptr, fetcher1);
284 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); 287 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags());
285 ASSERT_NE(nullptr, fetcher2); 288 ASSERT_NE(nullptr, fetcher2);
286 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); 289 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags());
287 } 290 }
288 291
289 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) { 292 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) {
290 GURL url(kGoodResourceURL); 293 GURL url(kGoodResourceURL);
291 294
292 net::FakeURLFetcher* fetcher; 295 net::FakeURLFetcher* fetcher;
293 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 296 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
294 .WillOnce(factory_.RespondWith("", &fetcher)); 297 .WillOnce(factory_.RespondWith("", &fetcher));
295 EXPECT_CALL(*this, 298 EXPECT_CALL(*this,
296 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 299 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
297 nullptr))); // It never reached the network. 300 nullptr))); // It never reached the network.
298 301
299 PrecacheFetcher::Fetcher precache_fetcher( 302 PrecacheFetcher::Fetcher precache_fetcher(
300 request_context_.get(), url, callback_, true /* is_resource_request */, 303 request_context_.get(), url, url.host(), callback_,
301 SIZE_MAX); 304 true /* is_resource_request */, SIZE_MAX);
302 305
303 loop_.RunUntilIdle(); 306 base::RunLoop().RunUntilIdle();
304 307
305 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher->GetLoadFlags()); 308 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher->GetLoadFlags());
306 } 309 }
307 310
308 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) { 311 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) {
309 GURL url(kGoodResourceURL); 312 GURL url(kGoodResourceURL);
310 313
311 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 314 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
312 // Cache request will fail, so that a network request is made. Only 315 // Cache request will fail, so that a network request is made. Only
313 // network requests are byte-capped. 316 // network requests are byte-capped.
314 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr)) 317 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr))
315 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr)); 318 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr));
316 319
317 // The callback should be called even though the download was cancelled, so 320 // The callback should be called even though the download was cancelled, so
318 // that the next download can start. The network_url_fetcher within should be 321 // that the next download can start. The network_url_fetcher within should be
319 // null, to signify that either the network was never reached (which will be 322 // null, to signify that either the network was never reached (which will be
320 // flagged as an error due to the expectation above) or it was requested but 323 // flagged as an error due to the expectation above) or it was requested but
321 // cancelled (which is the desired behavior). 324 // cancelled (which is the desired behavior).
322 EXPECT_CALL(*this, 325 EXPECT_CALL(*this,
323 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 326 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
324 nullptr))); 327 nullptr)));
325 328
326 PrecacheFetcher::Fetcher precache_fetcher( 329 PrecacheFetcher::Fetcher precache_fetcher(
327 request_context_.get(), url, callback_, true /* is_resource_request */, 330 request_context_.get(), url, url.host(), callback_,
328 99 /* max_bytes */); 331 true /* is_resource_request */, 99 /* max_bytes */);
329 332
330 loop_.RunUntilIdle(); 333 base::RunLoop().RunUntilIdle();
331 } 334 }
332 335
333 class PrecacheFetcherTest : public testing::Test { 336 class PrecacheFetcherTest : public testing::Test {
334 public: 337 public:
335 PrecacheFetcherTest() 338 PrecacheFetcherTest()
336 : request_context_(new net::TestURLRequestContextGetter( 339 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
340 request_context_(new net::TestURLRequestContextGetter(
337 base::ThreadTaskRunnerHandle::Get())), 341 base::ThreadTaskRunnerHandle::Get())),
338 factory_(NULL, 342 factory_(NULL,
339 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, 343 base::Bind(&TestURLFetcherCallback::CreateURLFetcher,
340 base::Unretained(&url_callback_))), 344 base::Unretained(&url_callback_))),
341 expected_total_response_bytes_(0), 345 expected_total_response_bytes_(0),
342 parallel_fetches_beyond_capacity_(false) {} 346 parallel_fetches_beyond_capacity_(false) {}
343 347
344 protected: 348 protected:
349 void SetUp() override {
350 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
351 base::FilePath db_path = scoped_temp_dir_.path().Append(
352 base::FilePath(FILE_PATH_LITERAL("precache_database")));
353 precache_database_.Init(db_path);
354 }
345 void SetDefaultFlags() { 355 void SetDefaultFlags() {
346 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 356 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
347 switches::kPrecacheConfigSettingsURL, kConfigURL); 357 switches::kPrecacheConfigSettingsURL, kConfigURL);
348 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 358 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
349 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); 359 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix);
350 } 360 }
351 361
352 // Posts a task to check if more parallel fetches of precache manifest and 362 // Posts a task to check if more parallel fetches of precache manifest and
353 // resource URLs were attempted beyond the fetcher pool maximum defined 363 // resource URLs were attempted beyond the fetcher pool maximum defined
354 // capacity. The task will be posted repeatedly until such condition is met. 364 // capacity. The task will be posted repeatedly until such condition is met.
355 void CheckUntilParallelFetchesBeyondCapacity( 365 void CheckUntilParallelFetchesBeyondCapacity(
356 const PrecacheFetcher* precache_fetcher) { 366 const PrecacheFetcher* precache_fetcher) {
357 if (!precache_fetcher->pool_.IsAvailable() && 367 if (!precache_fetcher->pool_.IsAvailable() &&
358 !precache_fetcher->resource_urls_to_fetch_.empty() && 368 precache_fetcher->top_hosts_to_fetch_ &&
359 !precache_fetcher->manifest_urls_to_fetch_.empty()) { 369 !precache_fetcher->top_hosts_to_fetch_->empty() &&
370 !precache_fetcher->resources_to_fetch_.empty()) {
360 parallel_fetches_beyond_capacity_ = true; 371 parallel_fetches_beyond_capacity_ = true;
361 return; 372 return;
362 } 373 }
363 374
364 // Check again after allowing the message loop to process some messages. 375 // Check again after allowing the message loop to process some messages.
365 loop_.task_runner()->PostTask( 376 loop_.PostTask(
366 FROM_HERE, 377 FROM_HERE,
367 base::Bind( 378 base::Bind(
368 &PrecacheFetcherTest::CheckUntilParallelFetchesBeyondCapacity, 379 &PrecacheFetcherTest::CheckUntilParallelFetchesBeyondCapacity,
369 base::Unretained(this), precache_fetcher)); 380 base::Unretained(this), precache_fetcher));
370 } 381 }
371 382
383 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner() const {
384 return task_runner_;
385 }
386
387 // Must be declared first so that it is destroyed last.
372 base::MessageLoopForUI loop_; 388 base::MessageLoopForUI loop_;
389 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
373 scoped_refptr<net::TestURLRequestContextGetter> request_context_; 390 scoped_refptr<net::TestURLRequestContextGetter> request_context_;
374 TestURLFetcherCallback url_callback_; 391 TestURLFetcherCallback url_callback_;
375 net::FakeURLFetcherFactory factory_; 392 net::FakeURLFetcherFactory factory_;
376 TestPrecacheDelegate precache_delegate_; 393 TestPrecacheDelegate precache_delegate_;
394 base::ScopedTempDir scoped_temp_dir_;
395 PrecacheDatabase precache_database_;
377 int expected_total_response_bytes_; 396 int expected_total_response_bytes_;
378 397
379 // True if more parallel fetches were attempted beyond the fetcher pool 398 // True if more parallel fetches were attempted beyond the fetcher pool
380 // maximum capacity. 399 // maximum capacity.
381 bool parallel_fetches_beyond_capacity_; 400 bool parallel_fetches_beyond_capacity_;
382 }; 401 };
383 402
384 TEST_F(PrecacheFetcherTest, FullPrecache) { 403 TEST_F(PrecacheFetcherTest, FullPrecache) {
385 SetDefaultFlags(); 404 SetDefaultFlags();
386 405
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 net::URLRequestStatus::FAILED); 437 net::URLRequestStatus::FAILED);
419 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 438 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
420 net::URLRequestStatus::SUCCESS); 439 net::URLRequestStatus::SUCCESS);
421 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), 440 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL),
422 PrecacheManifest().SerializeAsString(), net::HTTP_OK, 441 PrecacheManifest().SerializeAsString(), net::HTTP_OK,
423 net::URLRequestStatus::SUCCESS); 442 net::URLRequestStatus::SUCCESS);
424 443
425 base::HistogramTester histogram; 444 base::HistogramTester histogram;
426 445
427 { 446 {
428 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 447 PrecacheFetcher precache_fetcher(
429 std::string(), std::move(unfinished_work), 448 request_context_.get(), GURL(), std::string(),
430 kExperimentID, &precache_delegate_); 449 std::move(unfinished_work), kExperimentID,
450 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
431 precache_fetcher.Start(); 451 precache_fetcher.Start();
432 452
433 loop_.RunUntilIdle(); 453 base::RunLoop().RunUntilIdle();
434 454
435 // Destroy the PrecacheFetcher after it has finished, to record metrics. 455 // Destroy the PrecacheFetcher after it has finished, to record metrics.
436 } 456 }
437 457
438 std::multiset<GURL> expected_requested_urls; 458 std::multiset<GURL> expected_requested_urls;
439 expected_requested_urls.insert(GURL(kConfigURL)); 459 expected_requested_urls.insert(GURL(kConfigURL));
440 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); 460 expected_requested_urls.insert(GURL(kManifestFetchFailureURL));
441 expected_requested_urls.insert(GURL(kBadManifestURL)); 461 expected_requested_urls.insert(GURL(kBadManifestURL));
442 expected_requested_urls.insert(GURL(kGoodManifestURL)); 462 expected_requested_urls.insert(GURL(kGoodManifestURL));
443 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); 463 expected_requested_urls.insert(GURL(kResourceFetchFailureURL));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 506 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
487 net::URLRequestStatus::SUCCESS); 507 net::URLRequestStatus::SUCCESS);
488 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, 508 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
489 net::URLRequestStatus::SUCCESS); 509 net::URLRequestStatus::SUCCESS);
490 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, 510 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
491 net::URLRequestStatus::SUCCESS); 511 net::URLRequestStatus::SUCCESS);
492 512
493 base::HistogramTester histogram; 513 base::HistogramTester histogram;
494 514
495 { 515 {
496 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 516 PrecacheFetcher precache_fetcher(
497 std::string(), std::move(unfinished_work), 517 request_context_.get(), GURL(), std::string(),
498 kExperimentID, &precache_delegate_); 518 std::move(unfinished_work), kExperimentID,
519 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
499 precache_fetcher.Start(); 520 precache_fetcher.Start();
500 521
501 loop_.RunUntilIdle(); 522 base::RunLoop().RunUntilIdle();
502 523
503 // Destroy the PrecacheFetcher after it has finished, to record metrics. 524 // Destroy the PrecacheFetcher after it has finished, to record metrics.
504 } 525 }
505 526
506 std::multiset<GURL> expected_requested_urls; 527 std::multiset<GURL> expected_requested_urls;
507 expected_requested_urls.insert(GURL(kConfigURL)); 528 expected_requested_urls.insert(GURL(kConfigURL));
508 expected_requested_urls.insert(GURL(kGoodManifestURL)); 529 expected_requested_urls.insert(GURL(kGoodManifestURL));
509 expected_requested_urls.insert(GURL(kGoodResourceURL)); 530 expected_requested_urls.insert(GURL(kGoodResourceURL));
510 expected_requested_urls.insert(GURL(kGoodResourceURLB)); 531 expected_requested_urls.insert(GURL(kGoodResourceURLB));
511 expected_requested_urls.insert(GURL(kGoodResourceURLD)); 532 expected_requested_urls.insert(GURL(kGoodResourceURLD));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, 579 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
559 net::URLRequestStatus::SUCCESS); 580 net::URLRequestStatus::SUCCESS);
560 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK, 581 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK,
561 net::URLRequestStatus::SUCCESS); 582 net::URLRequestStatus::SUCCESS);
562 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, 583 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
563 net::URLRequestStatus::SUCCESS); 584 net::URLRequestStatus::SUCCESS);
564 585
565 base::HistogramTester histogram; 586 base::HistogramTester histogram;
566 587
567 { 588 {
568 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 589 PrecacheFetcher precache_fetcher(
569 std::string(), std::move(unfinished_work), 590 request_context_.get(), GURL(), std::string(),
570 kExperimentID, &precache_delegate_); 591 std::move(unfinished_work), kExperimentID,
592 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
571 precache_fetcher.Start(); 593 precache_fetcher.Start();
572 594
573 loop_.RunUntilIdle(); 595 base::RunLoop().RunUntilIdle();
574 596
575 // Destroy the PrecacheFetcher after it has finished, to record metrics. 597 // Destroy the PrecacheFetcher after it has finished, to record metrics.
576 } 598 }
577 599
578 std::multiset<GURL> expected_requested_urls; 600 std::multiset<GURL> expected_requested_urls;
579 expected_requested_urls.insert(GURL(kConfigURL)); 601 expected_requested_urls.insert(GURL(kConfigURL));
580 expected_requested_urls.insert(GURL(kGoodManifestURL)); 602 expected_requested_urls.insert(GURL(kGoodManifestURL));
581 expected_requested_urls.insert(GURL(kGoodResourceURL)); 603 expected_requested_urls.insert(GURL(kGoodResourceURL));
582 expected_requested_urls.insert(GURL(kGoodResourceURLA)); 604 expected_requested_urls.insert(GURL(kGoodResourceURLA));
583 expected_requested_urls.insert(GURL(kGoodResourceURLB)); 605 expected_requested_urls.insert(GURL(kGoodResourceURLB));
(...skipping 11 matching lines...) Expand all
595 } 617 }
596 618
597 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { 619 TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
598 SetDefaultFlags(); 620 SetDefaultFlags();
599 621
600 PrecacheConfigurationSettings config; 622 PrecacheConfigurationSettings config;
601 config.set_top_sites_count(3); 623 config.set_top_sites_count(3);
602 624
603 std::unique_ptr<PrecacheUnfinishedWork> initial_work( 625 std::unique_ptr<PrecacheUnfinishedWork> initial_work(
604 new PrecacheUnfinishedWork()); 626 new PrecacheUnfinishedWork());
605 initial_work->add_manifest()->set_url( 627 initial_work->add_top_host()->set_hostname("manifest1.com");
606 "http://manifest-url-prefix.com/manifest1.com"); 628 initial_work->add_top_host()->set_hostname("manifest2.com");
607 initial_work->add_manifest()->set_url(
608 "http://manifest-url-prefix.com/manifest2.com");
609 initial_work->add_resource()->set_url(kGoodResourceURL);
610 initial_work->set_start_time( 629 initial_work->set_start_time(
611 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); 630 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue());
631 // initial_work->add_resource()->set_url(kGoodResourceURL);
612 632
613 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(), 633 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(),
614 std::move(initial_work), kExperimentID, 634 std::move(initial_work), kExperimentID,
635 precache_database_.GetWeakPtr(), task_runner(),
615 &precache_delegate_); 636 &precache_delegate_);
616 637 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
617 loop_.RunUntilIdle(); 638 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
639 first_fetcher.Start();
640 // base::RunLoop().RunUntilIdle();
618 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = 641 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work =
619 first_fetcher.CancelPrecaching(); 642 first_fetcher.CancelPrecaching();
620 643
621 std::multiset<GURL> expected_requested_urls; 644 std::multiset<GURL> expected_requested_urls;
645 expected_requested_urls.insert(GURL(kConfigURL));
622 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 646 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
623 647
624 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 648 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
625 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 649 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
626 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, 650 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
627 net::URLRequestStatus::SUCCESS); 651 net::URLRequestStatus::SUCCESS);
628 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), 652 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"),
629 "bad protobuf", net::HTTP_OK, 653 "bad protobuf", net::HTTP_OK,
630 net::URLRequestStatus::SUCCESS); 654 net::URLRequestStatus::SUCCESS);
631 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), 655 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"),
632 "bad protobuf", net::HTTP_OK, 656 "bad protobuf", net::HTTP_OK,
633 net::URLRequestStatus::SUCCESS); 657 net::URLRequestStatus::SUCCESS);
634 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 658 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
635 net::URLRequestStatus::SUCCESS); 659 net::URLRequestStatus::SUCCESS);
636 // Starting hosts should not be fetched. 660
637 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); 661 // unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
662 url_callback_.clear_requested_urls();
638 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(), 663 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(),
639 std::move(unfinished_work), kExperimentID, 664 std::move(unfinished_work), kExperimentID,
665 precache_database_.GetWeakPtr(), task_runner(),
640 &precache_delegate_); 666 &precache_delegate_);
641 second_fetcher.Start(); 667 second_fetcher.Start();
642 loop_.RunUntilIdle(); 668 base::RunLoop().RunUntilIdle();
643 expected_requested_urls.insert(GURL(kConfigURL));
644 expected_requested_urls.insert( 669 expected_requested_urls.insert(
645 GURL("http://manifest-url-prefix.com/manifest1.com")); 670 GURL("http://manifest-url-prefix.com/manifest1.com"));
646 expected_requested_urls.insert( 671 expected_requested_urls.insert(
647 GURL("http://manifest-url-prefix.com/manifest2.com")); 672 GURL("http://manifest-url-prefix.com/manifest2.com"));
648 expected_requested_urls.insert(GURL(kGoodResourceURL)); 673 // expected_requested_urls.insert(GURL(kGoodResourceURL));
649 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 674 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
650 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 675 EXPECT_TRUE(precache_delegate_.was_on_done_called());
651 } 676 }
652 677
653 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { 678 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
654 SetDefaultFlags(); 679 SetDefaultFlags();
655 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 680 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
656 new PrecacheUnfinishedWork()); 681 new PrecacheUnfinishedWork());
657 unfinished_work->mutable_config_settings()->add_forced_site( 682 unfinished_work->mutable_config_settings()->add_forced_site(
658 "good-manifest.com"); 683 "good-manifest.com");
659 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); 684 unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
660 PrecacheManifest good_manifest; 685 PrecacheManifest good_manifest;
661 good_manifest.add_resource()->set_url(kGoodResourceURL); 686 good_manifest.add_resource()->set_url(kGoodResourceURL);
662 687
663 factory_.SetFakeResponse(GURL(kGoodManifestURL), 688 factory_.SetFakeResponse(GURL(kGoodManifestURL),
664 good_manifest.SerializeAsString(), net::HTTP_OK, 689 good_manifest.SerializeAsString(), net::HTTP_OK,
665 net::URLRequestStatus::SUCCESS); 690 net::URLRequestStatus::SUCCESS);
666 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 691 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
667 net::URLRequestStatus::SUCCESS); 692 net::URLRequestStatus::SUCCESS);
668 { 693 {
669 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 694 PrecacheFetcher precache_fetcher(
670 std::string(), std::move(unfinished_work), 695 request_context_.get(), GURL(), std::string(),
671 kExperimentID, &precache_delegate_); 696 std::move(unfinished_work), kExperimentID,
697 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
672 precache_fetcher.Start(); 698 precache_fetcher.Start();
673 699
674 loop_.RunUntilIdle(); 700 base::RunLoop().RunUntilIdle();
675 } 701 }
676 702
677 std::multiset<GURL> expected_requested_urls; 703 std::multiset<GURL> expected_requested_urls;
678 expected_requested_urls.insert(GURL(kGoodManifestURL)); 704 expected_requested_urls.insert(GURL(kGoodManifestURL));
679 expected_requested_urls.insert(GURL(kGoodResourceURL)); 705 expected_requested_urls.insert(GURL(kGoodResourceURL));
680 706
681 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 707 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
682 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 708 EXPECT_TRUE(precache_delegate_.was_on_done_called());
683 709
684 } 710 }
(...skipping 14 matching lines...) Expand all
699 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), 725 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(),
700 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 726 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
701 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), 727 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL),
702 good_manifest.SerializeAsString(), net::HTTP_OK, 728 good_manifest.SerializeAsString(), net::HTTP_OK,
703 net::URLRequestStatus::SUCCESS); 729 net::URLRequestStatus::SUCCESS);
704 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 730 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
705 net::URLRequestStatus::SUCCESS); 731 net::URLRequestStatus::SUCCESS);
706 732
707 PrecacheFetcher precache_fetcher( 733 PrecacheFetcher precache_fetcher(
708 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix, 734 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix,
709 std::move(unfinished_work), kExperimentID, &precache_delegate_); 735 std::move(unfinished_work), kExperimentID,
736 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
710 precache_fetcher.Start(); 737 precache_fetcher.Start();
711 738
712 loop_.RunUntilIdle(); 739 base::RunLoop().RunUntilIdle();
713 740
714 std::multiset<GURL> expected_requested_urls; 741 std::multiset<GURL> expected_requested_urls;
715 expected_requested_urls.insert(GURL(kCustomConfigURL)); 742 expected_requested_urls.insert(GURL(kCustomConfigURL));
716 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); 743 expected_requested_urls.insert(GURL(kCustomGoodManifestURL));
717 expected_requested_urls.insert(GURL(kGoodResourceURL)); 744 expected_requested_urls.insert(GURL(kGoodResourceURL));
718 745
719 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 746 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
720 747
721 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 748 EXPECT_TRUE(precache_delegate_.was_on_done_called());
722 } 749 }
723 750
724 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { 751 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
725 SetDefaultFlags(); 752 SetDefaultFlags();
726 753
727 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 754 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
728 new PrecacheUnfinishedWork()); 755 new PrecacheUnfinishedWork());
729 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 756 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
730 757
731 factory_.SetFakeResponse(GURL(kConfigURL), "", 758 factory_.SetFakeResponse(GURL(kConfigURL), "",
732 net::HTTP_INTERNAL_SERVER_ERROR, 759 net::HTTP_INTERNAL_SERVER_ERROR,
733 net::URLRequestStatus::FAILED); 760 net::URLRequestStatus::FAILED);
734 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 761 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
735 net::URLRequestStatus::SUCCESS); 762 net::URLRequestStatus::SUCCESS);
736 763
737 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 764 PrecacheFetcher precache_fetcher(
738 std::string(), std::move(unfinished_work), 765 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
739 kExperimentID, &precache_delegate_); 766 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
767 &precache_delegate_);
740 precache_fetcher.Start(); 768 precache_fetcher.Start();
741 769
742 loop_.RunUntilIdle(); 770 base::RunLoop().RunUntilIdle();
743 771
744 std::multiset<GURL> expected_requested_urls; 772 std::multiset<GURL> expected_requested_urls;
745 expected_requested_urls.insert(GURL(kConfigURL)); 773 expected_requested_urls.insert(GURL(kConfigURL));
746 expected_requested_urls.insert(GURL(kGoodManifestURL)); 774 expected_requested_urls.insert(GURL(kGoodManifestURL));
747 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 775 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
748 776
749 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 777 EXPECT_TRUE(precache_delegate_.was_on_done_called());
750 } 778 }
751 779
752 TEST_F(PrecacheFetcherTest, BadConfig) { 780 TEST_F(PrecacheFetcherTest, BadConfig) {
753 SetDefaultFlags(); 781 SetDefaultFlags();
754 782
755 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 783 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
756 new PrecacheUnfinishedWork()); 784 new PrecacheUnfinishedWork());
757 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 785 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
758 786
759 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, 787 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
760 net::URLRequestStatus::SUCCESS); 788 net::URLRequestStatus::SUCCESS);
761 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 789 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
762 net::URLRequestStatus::SUCCESS); 790 net::URLRequestStatus::SUCCESS);
763 791
764 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 792 PrecacheFetcher precache_fetcher(
765 std::string(), std::move(unfinished_work), 793 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
766 kExperimentID, &precache_delegate_); 794 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
795 &precache_delegate_);
767 precache_fetcher.Start(); 796 precache_fetcher.Start();
768 797
769 loop_.RunUntilIdle(); 798 base::RunLoop().RunUntilIdle();
770 799
771 std::multiset<GURL> expected_requested_urls; 800 std::multiset<GURL> expected_requested_urls;
772 expected_requested_urls.insert(GURL(kConfigURL)); 801 expected_requested_urls.insert(GURL(kConfigURL));
773 expected_requested_urls.insert(GURL(kGoodManifestURL)); 802 expected_requested_urls.insert(GURL(kGoodManifestURL));
774 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 803 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
775 804
776 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 805 EXPECT_TRUE(precache_delegate_.was_on_done_called());
777 } 806 }
778 807
779 TEST_F(PrecacheFetcherTest, Cancel) { 808 TEST_F(PrecacheFetcherTest, Cancel) {
780 SetDefaultFlags(); 809 SetDefaultFlags();
781 810
782 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 811 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
783 new PrecacheUnfinishedWork()); 812 new PrecacheUnfinishedWork());
784 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 813 unfinished_work->add_top_host()->set_hostname("starting-url.com");
785 814
786 PrecacheConfigurationSettings config; 815 PrecacheConfigurationSettings config;
787 config.set_top_sites_count(1); 816 config.set_top_sites_count(1);
788 817
789 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 818 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
790 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 819 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
791 820
792 base::HistogramTester histogram; 821 base::HistogramTester histogram;
793 822
794 { 823 {
795 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 824 PrecacheFetcher precache_fetcher(
796 std::string(), std::move(unfinished_work), 825 request_context_.get(), GURL(), std::string(),
797 kExperimentID, &precache_delegate_); 826 std::move(unfinished_work), kExperimentID,
827 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
798 precache_fetcher.Start(); 828 precache_fetcher.Start();
799 829
800 // Destroy the PrecacheFetcher, to cancel precaching. No metrics 830 // Destroy the PrecacheFetcher, to cancel precaching. No metrics
801 // should be recorded because this should not cause OnDone to be 831 // should be recorded because this should not cause OnDone to be
802 // called on the precache delegate. 832 // called on the precache delegate.
803 } 833 }
804 834
805 loop_.RunUntilIdle(); 835 base::RunLoop().RunUntilIdle();
806 836
807 std::multiset<GURL> expected_requested_urls; 837 std::multiset<GURL> expected_requested_urls;
808 expected_requested_urls.insert(GURL(kConfigURL)); 838 expected_requested_urls.insert(GURL(kConfigURL));
809 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 839 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
810 840
811 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 841 EXPECT_FALSE(precache_delegate_.was_on_done_called());
812 842
813 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0); 843 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0);
814 } 844 }
815 845
816 #if defined(PRECACHE_CONFIG_SETTINGS_URL) 846 #if defined(PRECACHE_CONFIG_SETTINGS_URL)
817 847
818 // If the default precache configuration settings URL is defined, then test that 848 // If the default precache configuration settings URL is defined, then test that
819 // it works with the PrecacheFetcher. 849 // it works with the PrecacheFetcher.
820 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { 850 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
821 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 851 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
822 new PrecacheUnfinishedWork()); 852 new PrecacheUnfinishedWork());
823 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 853 unfinished_work->add_top_host()->set_hostname("starting-url.com");
824 854
825 PrecacheConfigurationSettings config; 855 PrecacheConfigurationSettings config;
826 config.set_top_sites_count(0); 856 config.set_top_sites_count(0);
827 857
828 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), 858 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL),
829 config.SerializeAsString(), net::HTTP_OK, 859 config.SerializeAsString(), net::HTTP_OK,
830 net::URLRequestStatus::SUCCESS); 860 net::URLRequestStatus::SUCCESS);
831 861
832 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 862 PrecacheFetcher precache_fetcher(
833 std::string(), std::move(unfinished_work), 863 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
834 kExperimentID, &precache_delegate_); 864 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
865 &precache_delegate_);
835 precache_fetcher.Start(); 866 precache_fetcher.Start();
836 867
837 loop_.RunUntilIdle(); 868 base::RunLoop().RunUntilIdle();
838 869
839 std::multiset<GURL> expected_requested_urls; 870 std::multiset<GURL> expected_requested_urls;
840 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); 871 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL));
841 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 872 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
842 873
843 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 874 EXPECT_TRUE(precache_delegate_.was_on_done_called());
844 } 875 }
845 876
846 #endif // PRECACHE_CONFIG_SETTINGS_URL 877 #endif // PRECACHE_CONFIG_SETTINGS_URL
847 878
(...skipping 12 matching lines...) Expand all
860 PrecacheConfigurationSettings config; 891 PrecacheConfigurationSettings config;
861 config.set_top_sites_count(1); 892 config.set_top_sites_count(1);
862 893
863 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); 894 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com");
864 895
865 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 896 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
866 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 897 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
867 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), 898 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
868 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 899 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
869 900
870 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 901 PrecacheFetcher precache_fetcher(
871 std::string(), std::move(unfinished_work), 902 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
872 kExperimentID, &precache_delegate_); 903 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
904 &precache_delegate_);
873 precache_fetcher.Start(); 905 precache_fetcher.Start();
874 906
875 loop_.RunUntilIdle(); 907 base::RunLoop().RunUntilIdle();
876 908
877 std::multiset<GURL> expected_requested_urls; 909 std::multiset<GURL> expected_requested_urls;
878 expected_requested_urls.insert(GURL(kConfigURL)); 910 expected_requested_urls.insert(GURL(kConfigURL));
879 expected_requested_urls.insert(manifest_url); 911 expected_requested_urls.insert(manifest_url);
880 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 912 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
881 913
882 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 914 EXPECT_TRUE(precache_delegate_.was_on_done_called());
883 } 915 }
884 916
885 #endif // PRECACHE_MANIFEST_URL_PREFIX 917 #endif // PRECACHE_MANIFEST_URL_PREFIX
(...skipping 20 matching lines...) Expand all
906 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 938 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
907 factory_.SetFakeResponse(GURL(kGoodManifestURL), 939 factory_.SetFakeResponse(GURL(kGoodManifestURL),
908 good_manifest.SerializeAsString(), net::HTTP_OK, 940 good_manifest.SerializeAsString(), net::HTTP_OK,
909 net::URLRequestStatus::SUCCESS); 941 net::URLRequestStatus::SUCCESS);
910 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", 942 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good",
911 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 943 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
912 944
913 base::HistogramTester histogram; 945 base::HistogramTester histogram;
914 946
915 { 947 {
916 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 948 PrecacheFetcher precache_fetcher(
917 std::string(), std::move(unfinished_work), 949 request_context_.get(), GURL(), std::string(),
918 kExperimentID, &precache_delegate_); 950 std::move(unfinished_work), kExperimentID,
951 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
919 precache_fetcher.Start(); 952 precache_fetcher.Start();
920 953
921 loop_.RunUntilIdle(); 954 base::RunLoop().RunUntilIdle();
922 955
923 // Destroy the PrecacheFetcher after it has finished, to record metrics. 956 // Destroy the PrecacheFetcher after it has finished, to record metrics.
924 } 957 }
925 958
926 std::multiset<GURL> expected_requested_urls; 959 std::multiset<GURL> expected_requested_urls;
927 expected_requested_urls.insert(GURL(kConfigURL)); 960 expected_requested_urls.insert(GURL(kConfigURL));
928 expected_requested_urls.insert(GURL(kGoodManifestURL)); 961 expected_requested_urls.insert(GURL(kGoodManifestURL));
929 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 962 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
930 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 963 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
931 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 964 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1016 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
984 } 1017 }
985 1018
986 factory_.SetFakeResponse(GURL(kGoodManifestURL), 1019 factory_.SetFakeResponse(GURL(kGoodManifestURL),
987 good_manifest.SerializeAsString(), net::HTTP_OK, 1020 good_manifest.SerializeAsString(), net::HTTP_OK,
988 net::URLRequestStatus::SUCCESS); 1021 net::URLRequestStatus::SUCCESS);
989 1022
990 base::HistogramTester histogram; 1023 base::HistogramTester histogram;
991 1024
992 { 1025 {
993 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1026 PrecacheFetcher precache_fetcher(
994 std::string(), std::move(unfinished_work), 1027 request_context_.get(), GURL(), std::string(),
995 kExperimentID, &precache_delegate_); 1028 std::move(unfinished_work), kExperimentID,
1029 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
996 precache_fetcher.Start(); 1030 precache_fetcher.Start();
997 1031
998 loop_.RunUntilIdle(); 1032 base::RunLoop().RunUntilIdle();
999 } 1033 }
1000 1034
1001 // We don't know which will make it and which won't due to the parallelism in 1035 // We don't know which will make it and which won't due to the parallelism in
1002 // the pool of Fetchers. 1036 // the pool of Fetchers.
1003 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); 1037 EXPECT_GT(kNumResources, url_callback_.requested_urls().size());
1004 1038
1005 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1039 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1006 1040
1007 // good-manifest.com will not have been completed. 1041 // good-manifest.com will not have been completed.
1008 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1042 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } 1079 }
1046 factory_.SetFakeResponse(GURL(kManifestURLPrefix + top_host_url), 1080 factory_.SetFakeResponse(GURL(kManifestURLPrefix + top_host_url),
1047 top_host_manifest[i].SerializeAsString(), 1081 top_host_manifest[i].SerializeAsString(),
1048 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1082 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1049 expected_requested_urls.insert(GURL(kManifestURLPrefix + top_host_url)); 1083 expected_requested_urls.insert(GURL(kManifestURLPrefix + top_host_url));
1050 } 1084 }
1051 1085
1052 base::HistogramTester histogram; 1086 base::HistogramTester histogram;
1053 1087
1054 { 1088 {
1055 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1089 PrecacheFetcher precache_fetcher(
1056 std::string(), std::move(unfinished_work), 1090 request_context_.get(), GURL(), std::string(),
1057 kExperimentID, &precache_delegate_); 1091 std::move(unfinished_work), kExperimentID,
1092 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1058 precache_fetcher.Start(); 1093 precache_fetcher.Start();
1059 1094
1060 EXPECT_GT(kNumResources, precache_fetcher.pool_.max_size()); 1095 EXPECT_GT(kNumResources, precache_fetcher.pool_.max_size());
1061 CheckUntilParallelFetchesBeyondCapacity(&precache_fetcher); 1096 CheckUntilParallelFetchesBeyondCapacity(&precache_fetcher);
1062 1097
1063 loop_.RunUntilIdle(); 1098 base::RunLoop().RunUntilIdle();
1064 1099
1065 // Destroy the PrecacheFetcher after it has finished, to record metrics. 1100 // Destroy the PrecacheFetcher after it has finished, to record metrics.
1066 } 1101 }
1067 1102
1068 EXPECT_TRUE(parallel_fetches_beyond_capacity_); 1103 EXPECT_TRUE(parallel_fetches_beyond_capacity_);
1069 1104
1070 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1105 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1071 1106
1072 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1107 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1073 1108
(...skipping 12 matching lines...) Expand all
1086 new PrecacheUnfinishedWork()); 1121 new PrecacheUnfinishedWork());
1087 unfinished_work->add_top_host()->set_hostname("manifest.com"); 1122 unfinished_work->add_top_host()->set_hostname("manifest.com");
1088 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1123 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1089 1124
1090 factory_.SetFakeResponse(GURL(kConfigURL), "", net::HTTP_OK, 1125 factory_.SetFakeResponse(GURL(kConfigURL), "", net::HTTP_OK,
1091 net::URLRequestStatus::SUCCESS); 1126 net::URLRequestStatus::SUCCESS);
1092 1127
1093 base::HistogramTester histogram; 1128 base::HistogramTester histogram;
1094 1129
1095 { 1130 {
1096 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1131 PrecacheFetcher precache_fetcher(
1097 std::string(), std::move(unfinished_work), 1132 request_context_.get(), GURL(), std::string(),
1098 kExperimentID, &precache_delegate_); 1133 std::move(unfinished_work), kExperimentID,
1134 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1099 precache_fetcher.Start(); 1135 precache_fetcher.Start();
1100 1136
1101 loop_.RunUntilIdle(); 1137 base::RunLoop().RunUntilIdle();
1102 } 1138 }
1103 1139
1104 // The config is fetched, but not the invalid manifest URL. 1140 // The config is fetched, but not the invalid manifest URL.
1105 EXPECT_EQ(1UL, url_callback_.requested_urls().size()); 1141 EXPECT_EQ(1UL, url_callback_.requested_urls().size());
1106 1142
1107 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1143 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1108 1144
1109 // manifest.com will have been failed to complete, in this case. 1145 // manifest.com will have been failed to complete, in this case.
1110 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1146 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1111 ElementsAre(base::Bucket(0, 1))); 1147 ElementsAre(base::Bucket(0, 1)));
(...skipping 13 matching lines...) Expand all
1125 PrecacheManifest bad_manifest; 1161 PrecacheManifest bad_manifest;
1126 bad_manifest.add_resource()->set_url("http://"); 1162 bad_manifest.add_resource()->set_url("http://");
1127 1163
1128 factory_.SetFakeResponse(GURL(kBadManifestURL), 1164 factory_.SetFakeResponse(GURL(kBadManifestURL),
1129 bad_manifest.SerializeAsString(), net::HTTP_OK, 1165 bad_manifest.SerializeAsString(), net::HTTP_OK,
1130 net::URLRequestStatus::SUCCESS); 1166 net::URLRequestStatus::SUCCESS);
1131 1167
1132 base::HistogramTester histogram; 1168 base::HistogramTester histogram;
1133 1169
1134 { 1170 {
1135 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1171 PrecacheFetcher precache_fetcher(
1136 std::string(), std::move(unfinished_work), 1172 request_context_.get(), GURL(), std::string(),
1137 kExperimentID, &precache_delegate_); 1173 std::move(unfinished_work), kExperimentID,
1174 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1138 precache_fetcher.Start(); 1175 precache_fetcher.Start();
1139 1176
1140 loop_.RunUntilIdle(); 1177 base::RunLoop().RunUntilIdle();
1141 } 1178 }
1142 1179
1143 // The config and manifest are fetched, but not the invalid resource URL. 1180 // The config and manifest are fetched, but not the invalid resource URL.
1144 EXPECT_EQ(2UL, url_callback_.requested_urls().size()); 1181 EXPECT_EQ(2UL, url_callback_.requested_urls().size());
1145 1182
1146 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1183 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1147 1184
1148 // bad-manifest.com will have been completed. 1185 // bad-manifest.com will have been completed.
1149 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1186 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1150 ElementsAre(base::Bucket(100, 1))); 1187 ElementsAre(base::Bucket(100, 1)));
1151 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1188 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1152 } 1189 }
1153 1190
1154 } // namespace precache 1191 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698