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