OLD | NEW |
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/test/histogram_tester.h" | 25 #include "base/test/histogram_tester.h" |
24 #include "base/thread_task_runner_handle.h" | 26 #include "base/thread_task_runner_handle.h" |
| 27 #include "components/precache/core/precache_database.h" |
25 #include "components/precache/core/precache_switches.h" | 28 #include "components/precache/core/precache_switches.h" |
26 #include "components/precache/core/proto/precache.pb.h" | 29 #include "components/precache/core/proto/precache.pb.h" |
27 #include "net/base/load_flags.h" | 30 #include "net/base/load_flags.h" |
28 #include "net/http/http_response_headers.h" | 31 #include "net/http/http_response_headers.h" |
29 #include "net/http/http_status_code.h" | 32 #include "net/http/http_status_code.h" |
30 #include "net/url_request/test_url_fetcher_factory.h" | 33 #include "net/url_request/test_url_fetcher_factory.h" |
31 #include "net/url_request/url_request_status.h" | 34 #include "net/url_request/url_request_status.h" |
32 #include "net/url_request/url_request_test_util.h" | 35 #include "net/url_request/url_request_test_util.h" |
33 #include "testing/gmock/include/gmock/gmock.h" | 36 #include "testing/gmock/include/gmock/gmock.h" |
34 #include "testing/gtest/include/gtest/gtest.h" | 37 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 int total_response_bytes() const { return total_response_bytes_; } | 90 int total_response_bytes() const { return total_response_bytes_; } |
88 | 91 |
89 private: | 92 private: |
90 // Multiset with one entry for each URL requested. | 93 // Multiset with one entry for each URL requested. |
91 std::multiset<GURL> requested_urls_; | 94 std::multiset<GURL> requested_urls_; |
92 int total_response_bytes_; | 95 int total_response_bytes_; |
93 }; | 96 }; |
94 | 97 |
95 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { | 98 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { |
96 public: | 99 public: |
97 TestPrecacheDelegate() : was_on_done_called_(false) {} | 100 TestPrecacheDelegate() |
| 101 : on_done_was_called_(false), |
| 102 on_init_done_was_called_(false), |
| 103 on_shutdown_done_was_called_(false) {} |
98 | 104 |
99 void OnDone() override { was_on_done_called_ = true; } | 105 void OnDone() override { on_done_was_called_ = true; } |
| 106 void OnInitDone() override { on_init_done_was_called_ = true; } |
| 107 void OnShutdownDone() override { on_shutdown_done_was_called_ = true; } |
| 108 |
100 | 109 |
101 bool was_on_done_called() const { | 110 bool was_on_done_called() const { |
102 return was_on_done_called_; | 111 return on_done_was_called_; |
| 112 } |
| 113 |
| 114 bool on_init_done_was_called() const { |
| 115 return on_init_done_was_called_; |
| 116 } |
| 117 |
| 118 bool on_shutdown_done_was_called() const { |
| 119 return on_shutdown_done_was_called_; |
103 } | 120 } |
104 | 121 |
105 private: | 122 private: |
106 bool was_on_done_called_; | 123 bool on_done_was_called_; |
| 124 bool on_init_done_was_called_; |
| 125 bool on_shutdown_done_was_called_; |
107 }; | 126 }; |
108 | 127 |
109 class MockURLFetcherFactory : public net::URLFetcherFactory { | 128 class MockURLFetcherFactory : public net::URLFetcherFactory { |
110 public: | 129 public: |
111 typedef net::URLFetcher* DoURLFetcher( | 130 typedef net::URLFetcher* DoURLFetcher( |
112 int id, | 131 int id, |
113 const GURL& url, | 132 const GURL& url, |
114 net::URLFetcher::RequestType request_type, | 133 net::URLFetcher::RequestType request_type, |
115 net::URLFetcherDelegate* delegate); | 134 net::URLFetcherDelegate* delegate); |
116 | 135 |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 class PrecacheFetcherTest : public testing::Test { | 341 class PrecacheFetcherTest : public testing::Test { |
323 public: | 342 public: |
324 PrecacheFetcherTest() | 343 PrecacheFetcherTest() |
325 : request_context_(new net::TestURLRequestContextGetter( | 344 : request_context_(new net::TestURLRequestContextGetter( |
326 base::ThreadTaskRunnerHandle::Get())), | 345 base::ThreadTaskRunnerHandle::Get())), |
327 factory_(NULL, | 346 factory_(NULL, |
328 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, | 347 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
329 base::Unretained(&url_callback_))), | 348 base::Unretained(&url_callback_))), |
330 expected_total_response_bytes_(0) {} | 349 expected_total_response_bytes_(0) {} |
331 | 350 |
| 351 void SetUp() override { |
| 352 precache_database_.reset(new PrecacheDatabase()); |
| 353 |
| 354 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); |
| 355 base::FilePath db_path = scoped_temp_dir_.path().Append( |
| 356 base::FilePath(FILE_PATH_LITERAL("precache_database"))); |
| 357 precache_database_->Init(db_path); |
| 358 } |
| 359 |
332 protected: | 360 protected: |
333 void SetDefaultFlags() { | 361 void SetDefaultFlags() { |
334 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 362 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
335 switches::kPrecacheConfigSettingsURL, kConfigURL); | 363 switches::kPrecacheConfigSettingsURL, kConfigURL); |
336 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 364 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
337 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); | 365 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); |
338 } | 366 } |
339 | 367 |
| 368 // Must be declared first so that it is destroyed last. |
| 369 base::ScopedTempDir scoped_temp_dir_; |
| 370 std::unique_ptr<PrecacheDatabase> precache_database_; |
340 base::MessageLoopForUI loop_; | 371 base::MessageLoopForUI loop_; |
341 scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 372 scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
342 TestURLFetcherCallback url_callback_; | 373 TestURLFetcherCallback url_callback_; |
343 net::FakeURLFetcherFactory factory_; | 374 net::FakeURLFetcherFactory factory_; |
344 TestPrecacheDelegate precache_delegate_; | 375 TestPrecacheDelegate precache_delegate_; |
345 int expected_total_response_bytes_; | 376 int expected_total_response_bytes_; |
346 }; | 377 }; |
347 | 378 |
348 TEST_F(PrecacheFetcherTest, FullPrecache) { | 379 TEST_F(PrecacheFetcherTest, FullPrecache) { |
349 SetDefaultFlags(); | 380 SetDefaultFlags(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 net::URLRequestStatus::SUCCESS); | 413 net::URLRequestStatus::SUCCESS); |
383 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), | 414 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), |
384 PrecacheManifest().SerializeAsString(), net::HTTP_OK, | 415 PrecacheManifest().SerializeAsString(), net::HTTP_OK, |
385 net::URLRequestStatus::SUCCESS); | 416 net::URLRequestStatus::SUCCESS); |
386 | 417 |
387 base::HistogramTester histogram; | 418 base::HistogramTester histogram; |
388 | 419 |
389 { | 420 { |
390 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 421 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
391 GURL(), std::string(), | 422 GURL(), std::string(), |
392 &precache_delegate_); | 423 &precache_delegate_, |
| 424 precache_database_->GetWeakPtr(), |
| 425 base::ThreadTaskRunnerHandle::Get()); |
393 precache_fetcher.Start(); | 426 precache_fetcher.Start(); |
394 | 427 |
395 loop_.RunUntilIdle(); | 428 loop_.RunUntilIdle(); |
396 | 429 |
397 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 430 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
398 } | 431 } |
399 | 432 |
400 std::multiset<GURL> expected_requested_urls; | 433 std::multiset<GURL> expected_requested_urls; |
401 expected_requested_urls.insert(GURL(kConfigURL)); | 434 expected_requested_urls.insert(GURL(kConfigURL)); |
402 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); | 435 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); |
403 expected_requested_urls.insert(GURL(kBadManifestURL)); | 436 expected_requested_urls.insert(GURL(kBadManifestURL)); |
404 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 437 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
405 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); | 438 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); |
406 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 439 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
407 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); | 440 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); |
408 | 441 |
409 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 442 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
410 | 443 |
411 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 444 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
412 | 445 |
413 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 446 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
414 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | 447 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
415 url_callback_.total_response_bytes(), 1); | 448 url_callback_.total_response_bytes(), 1); |
416 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 449 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
417 } | 450 } |
418 | 451 |
| 452 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
| 453 SetDefaultFlags(); |
| 454 |
| 455 PrecacheConfigurationSettings config; |
| 456 config.set_top_sites_count(3); |
| 457 std::vector<std::string> starting_hosts; |
| 458 |
| 459 PrecacheFetcher first_fetcher(starting_hosts, request_context_.get(), |
| 460 GURL(), std::string(), |
| 461 &precache_delegate_, |
| 462 precache_database_->GetWeakPtr(), |
| 463 base::ThreadTaskRunnerHandle::Get()); |
| 464 base::TimeTicks then = base::TimeTicks::Now() - base::TimeDelta::FromHours(1); |
| 465 std::list<GURL> manifests, resources; |
| 466 manifests.push_back(GURL("http://manifest-url-prefix.com/manifest1.com")); |
| 467 manifests.push_back(GURL("http://manifest-url-prefix.com/manifest2.com")); |
| 468 resources.push_back(GURL(kGoodResourceURL)); |
| 469 first_fetcher.AssignWorkForTest( |
| 470 manifests, resources, 271828, 314159, 5, then); |
| 471 first_fetcher.Shutdown(); |
| 472 loop_.RunUntilIdle(); |
| 473 |
| 474 std::multiset<GURL> expected_requested_urls; |
| 475 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 476 |
| 477 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 478 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 479 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, |
| 480 net::URLRequestStatus::SUCCESS); |
| 481 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), |
| 482 "bad protobuf", net::HTTP_OK, |
| 483 net::URLRequestStatus::SUCCESS); |
| 484 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), |
| 485 "bad protobuf", net::HTTP_OK, |
| 486 net::URLRequestStatus::SUCCESS); |
| 487 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 488 net::URLRequestStatus::SUCCESS); |
| 489 |
| 490 // Starting hosts should not be fetched. |
| 491 starting_hosts.push_back("bad-manifest.com"); |
| 492 |
| 493 PrecacheFetcher second_fetcher(starting_hosts, request_context_.get(), |
| 494 GURL(), std::string(), |
| 495 &precache_delegate_, |
| 496 precache_database_->GetWeakPtr(), |
| 497 base::ThreadTaskRunnerHandle::Get()); |
| 498 second_fetcher.Init(base::TimeDelta::FromHours(2)); |
| 499 loop_.RunUntilIdle(); |
| 500 second_fetcher.Start(); |
| 501 loop_.RunUntilIdle(); |
| 502 |
| 503 expected_requested_urls.insert(GURL(kConfigURL)); |
| 504 expected_requested_urls.insert( |
| 505 GURL("http://manifest-url-prefix.com/manifest1.com")); |
| 506 expected_requested_urls.insert( |
| 507 GURL("http://manifest-url-prefix.com/manifest2.com")); |
| 508 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 509 |
| 510 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 511 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 512 } |
| 513 |
419 TEST_F(PrecacheFetcherTest, CustomURLs) { | 514 TEST_F(PrecacheFetcherTest, CustomURLs) { |
420 SetDefaultFlags(); | 515 SetDefaultFlags(); |
421 | 516 |
422 std::vector<std::string> starting_hosts; | 517 std::vector<std::string> starting_hosts; |
423 starting_hosts.push_back("good-manifest.com"); | 518 starting_hosts.push_back("good-manifest.com"); |
424 | 519 |
425 PrecacheConfigurationSettings config; | 520 PrecacheConfigurationSettings config; |
426 | 521 |
427 PrecacheManifest good_manifest; | 522 PrecacheManifest good_manifest; |
428 good_manifest.add_resource()->set_url(kGoodResourceURL); | 523 good_manifest.add_resource()->set_url(kGoodResourceURL); |
429 | 524 |
430 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), | 525 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), |
431 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 526 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
432 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), | 527 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), |
433 good_manifest.SerializeAsString(), net::HTTP_OK, | 528 good_manifest.SerializeAsString(), net::HTTP_OK, |
434 net::URLRequestStatus::SUCCESS); | 529 net::URLRequestStatus::SUCCESS); |
435 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 530 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
436 net::URLRequestStatus::SUCCESS); | 531 net::URLRequestStatus::SUCCESS); |
437 | 532 |
438 PrecacheFetcher precache_fetcher( | 533 PrecacheFetcher precache_fetcher( |
439 starting_hosts, request_context_.get(), GURL(kCustomConfigURL), | 534 starting_hosts, request_context_.get(), GURL(kCustomConfigURL), |
440 kCustomManifestURLPrefix, &precache_delegate_); | 535 kCustomManifestURLPrefix, &precache_delegate_, |
| 536 precache_database_->GetWeakPtr(), base::ThreadTaskRunnerHandle::Get()); |
441 precache_fetcher.Start(); | 537 precache_fetcher.Start(); |
442 | 538 |
443 loop_.RunUntilIdle(); | 539 loop_.RunUntilIdle(); |
444 | 540 |
445 std::multiset<GURL> expected_requested_urls; | 541 std::multiset<GURL> expected_requested_urls; |
446 expected_requested_urls.insert(GURL(kCustomConfigURL)); | 542 expected_requested_urls.insert(GURL(kCustomConfigURL)); |
447 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); | 543 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); |
448 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 544 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
449 | 545 |
450 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 546 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
451 | 547 |
452 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 548 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
453 } | 549 } |
454 | 550 |
455 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { | 551 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { |
456 SetDefaultFlags(); | 552 SetDefaultFlags(); |
457 | 553 |
458 std::vector<std::string> starting_hosts(1, "good-manifest.com"); | 554 std::vector<std::string> starting_hosts(1, "good-manifest.com"); |
459 | 555 |
460 factory_.SetFakeResponse(GURL(kConfigURL), "", | 556 factory_.SetFakeResponse(GURL(kConfigURL), "", |
461 net::HTTP_INTERNAL_SERVER_ERROR, | 557 net::HTTP_INTERNAL_SERVER_ERROR, |
462 net::URLRequestStatus::FAILED); | 558 net::URLRequestStatus::FAILED); |
463 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 559 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
464 net::URLRequestStatus::SUCCESS); | 560 net::URLRequestStatus::SUCCESS); |
465 | 561 |
466 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 562 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
467 GURL(), std::string(), &precache_delegate_); | 563 GURL(), std::string(), &precache_delegate_, |
| 564 precache_database_->GetWeakPtr(), |
| 565 base::ThreadTaskRunnerHandle::Get()); |
468 precache_fetcher.Start(); | 566 precache_fetcher.Start(); |
469 | 567 |
470 loop_.RunUntilIdle(); | 568 loop_.RunUntilIdle(); |
471 | 569 |
472 std::multiset<GURL> expected_requested_urls; | 570 std::multiset<GURL> expected_requested_urls; |
473 expected_requested_urls.insert(GURL(kConfigURL)); | 571 expected_requested_urls.insert(GURL(kConfigURL)); |
474 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 572 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
475 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 573 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
476 | 574 |
477 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 575 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
478 } | 576 } |
479 | 577 |
480 TEST_F(PrecacheFetcherTest, BadConfig) { | 578 TEST_F(PrecacheFetcherTest, BadConfig) { |
481 SetDefaultFlags(); | 579 SetDefaultFlags(); |
482 | 580 |
483 std::vector<std::string> starting_hosts(1, "good-manifest.com"); | 581 std::vector<std::string> starting_hosts(1, "good-manifest.com"); |
484 | 582 |
485 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, | 583 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, |
486 net::URLRequestStatus::SUCCESS); | 584 net::URLRequestStatus::SUCCESS); |
487 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 585 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
488 net::URLRequestStatus::SUCCESS); | 586 net::URLRequestStatus::SUCCESS); |
489 | 587 |
490 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 588 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
491 GURL(), std::string(), &precache_delegate_); | 589 GURL(), std::string(), &precache_delegate_, |
| 590 precache_database_->GetWeakPtr(), |
| 591 base::ThreadTaskRunnerHandle::Get()); |
492 precache_fetcher.Start(); | 592 precache_fetcher.Start(); |
493 | 593 |
494 loop_.RunUntilIdle(); | 594 loop_.RunUntilIdle(); |
495 | 595 |
496 std::multiset<GURL> expected_requested_urls; | 596 std::multiset<GURL> expected_requested_urls; |
497 expected_requested_urls.insert(GURL(kConfigURL)); | 597 expected_requested_urls.insert(GURL(kConfigURL)); |
498 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 598 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
499 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 599 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
500 | 600 |
501 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 601 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
502 } | 602 } |
503 | 603 |
504 TEST_F(PrecacheFetcherTest, Cancel) { | 604 TEST_F(PrecacheFetcherTest, Cancel) { |
505 SetDefaultFlags(); | 605 SetDefaultFlags(); |
506 | 606 |
507 std::vector<std::string> starting_hosts(1, "starting-url.com"); | 607 std::vector<std::string> starting_hosts(1, "starting-url.com"); |
508 | 608 |
509 PrecacheConfigurationSettings config; | 609 PrecacheConfigurationSettings config; |
510 config.set_top_sites_count(1); | 610 config.set_top_sites_count(1); |
511 | 611 |
512 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 612 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
513 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 613 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
514 | 614 |
515 base::HistogramTester histogram; | 615 base::HistogramTester histogram; |
516 | 616 |
517 { | 617 { |
518 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 618 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
519 GURL(), std::string(), | 619 GURL(), std::string(), |
520 &precache_delegate_); | 620 &precache_delegate_, |
| 621 precache_database_->GetWeakPtr(), |
| 622 base::ThreadTaskRunnerHandle::Get()); |
521 precache_fetcher.Start(); | 623 precache_fetcher.Start(); |
522 | 624 |
523 // Destroy the PrecacheFetcher, to cancel precaching and record metrics. | 625 // Destroy the PrecacheFetcher, to cancel precaching and record metrics. |
524 // This should not cause OnDone to be called on the precache delegate. | 626 // This should not cause OnDone to be called on the precache delegate. |
525 } | 627 } |
526 | 628 |
527 loop_.RunUntilIdle(); | 629 loop_.RunUntilIdle(); |
528 | 630 |
529 std::multiset<GURL> expected_requested_urls; | 631 std::multiset<GURL> expected_requested_urls; |
530 expected_requested_urls.insert(GURL(kConfigURL)); | 632 expected_requested_urls.insert(GURL(kConfigURL)); |
(...skipping 14 matching lines...) Expand all Loading... |
545 std::vector<std::string> starting_hosts(1, "starting-url.com"); | 647 std::vector<std::string> starting_hosts(1, "starting-url.com"); |
546 | 648 |
547 PrecacheConfigurationSettings config; | 649 PrecacheConfigurationSettings config; |
548 config.set_top_sites_count(0); | 650 config.set_top_sites_count(0); |
549 | 651 |
550 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), | 652 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), |
551 config.SerializeAsString(), net::HTTP_OK, | 653 config.SerializeAsString(), net::HTTP_OK, |
552 net::URLRequestStatus::SUCCESS); | 654 net::URLRequestStatus::SUCCESS); |
553 | 655 |
554 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 656 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
555 GURL(), std::string(), &precache_delegate_); | 657 GURL(), std::string(), &precache_delegate_, |
| 658 precache_database_->GetWeakPtr(), |
| 659 base::ThreadTaskRunnerHandle::Get()); |
556 precache_fetcher.Start(); | 660 precache_fetcher.Start(); |
557 | 661 |
558 loop_.RunUntilIdle(); | 662 loop_.RunUntilIdle(); |
559 | 663 |
560 std::multiset<GURL> expected_requested_urls; | 664 std::multiset<GURL> expected_requested_urls; |
561 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); | 665 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); |
562 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 666 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
563 | 667 |
564 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 668 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
565 } | 669 } |
(...skipping 14 matching lines...) Expand all Loading... |
580 config.set_top_sites_count(1); | 684 config.set_top_sites_count(1); |
581 | 685 |
582 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); | 686 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); |
583 | 687 |
584 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 688 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
585 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 689 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
586 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), | 690 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), |
587 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 691 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
588 | 692 |
589 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 693 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
590 GURL(), std::string(), &precache_delegate_); | 694 GURL(), std::string(), &precache_delegate_, |
| 695 precache_database_->GetWeakPtr(), |
| 696 base::ThreadTaskRunnerHandle::Get()); |
591 precache_fetcher.Start(); | 697 precache_fetcher.Start(); |
592 | 698 |
593 loop_.RunUntilIdle(); | 699 loop_.RunUntilIdle(); |
594 | 700 |
595 std::multiset<GURL> expected_requested_urls; | 701 std::multiset<GURL> expected_requested_urls; |
596 expected_requested_urls.insert(GURL(kConfigURL)); | 702 expected_requested_urls.insert(GURL(kConfigURL)); |
597 expected_requested_urls.insert(manifest_url); | 703 expected_requested_urls.insert(manifest_url); |
598 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 704 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
599 | 705 |
600 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 706 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
(...skipping 23 matching lines...) Expand all Loading... |
624 good_manifest.SerializeAsString(), net::HTTP_OK, | 730 good_manifest.SerializeAsString(), net::HTTP_OK, |
625 net::URLRequestStatus::SUCCESS); | 731 net::URLRequestStatus::SUCCESS); |
626 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", | 732 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", |
627 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 733 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
628 | 734 |
629 base::HistogramTester histogram; | 735 base::HistogramTester histogram; |
630 | 736 |
631 { | 737 { |
632 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 738 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
633 GURL(), std::string(), | 739 GURL(), std::string(), |
634 &precache_delegate_); | 740 &precache_delegate_, |
| 741 precache_database_->GetWeakPtr(), |
| 742 base::ThreadTaskRunnerHandle::Get()); |
635 precache_fetcher.Start(); | 743 precache_fetcher.Start(); |
636 | 744 |
637 loop_.RunUntilIdle(); | 745 loop_.RunUntilIdle(); |
638 | 746 |
639 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 747 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
640 } | 748 } |
641 | 749 |
642 std::multiset<GURL> expected_requested_urls; | 750 std::multiset<GURL> expected_requested_urls; |
643 expected_requested_urls.insert(GURL(kConfigURL)); | 751 expected_requested_urls.insert(GURL(kConfigURL)); |
644 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 752 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 | 804 |
697 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 805 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
698 good_manifest.SerializeAsString(), net::HTTP_OK, | 806 good_manifest.SerializeAsString(), net::HTTP_OK, |
699 net::URLRequestStatus::SUCCESS); | 807 net::URLRequestStatus::SUCCESS); |
700 | 808 |
701 base::HistogramTester histogram; | 809 base::HistogramTester histogram; |
702 | 810 |
703 { | 811 { |
704 PrecacheFetcher precache_fetcher({"good-manifest.com"}, | 812 PrecacheFetcher precache_fetcher({"good-manifest.com"}, |
705 request_context_.get(), GURL(), | 813 request_context_.get(), GURL(), |
706 std::string(), &precache_delegate_); | 814 std::string(), &precache_delegate_, |
| 815 precache_database_->GetWeakPtr(), |
| 816 base::ThreadTaskRunnerHandle::Get()); |
707 precache_fetcher.Start(); | 817 precache_fetcher.Start(); |
708 | 818 |
709 loop_.RunUntilIdle(); | 819 loop_.RunUntilIdle(); |
710 | 820 |
711 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 821 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
712 } | 822 } |
713 | 823 |
714 // We don't know which will make it and which won't due to the parallelism in | 824 // We don't know which will make it and which won't due to the parallelism in |
715 // the pool of Fetchers. | 825 // the pool of Fetchers. |
716 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); | 826 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); |
717 | 827 |
718 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 828 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
719 | 829 |
720 // good-manifest.com will not have been completed. | 830 // good-manifest.com will not have been completed. |
721 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), | 831 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), |
722 ElementsAre(base::Bucket(0, 1))); | 832 ElementsAre(base::Bucket(0, 1))); |
723 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 833 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
724 } | 834 } |
725 | 835 |
726 } // namespace | 836 } // namespace |
727 | 837 |
728 } // namespace precache | 838 } // namespace precache |
OLD | NEW |