Chromium Code Reviews| 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> |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 const char kManifestFetchFailureURL[] = | 52 const char kManifestFetchFailureURL[] = |
| 53 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; | 53 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; |
| 54 const char kBadManifestURL[] = | 54 const char kBadManifestURL[] = |
| 55 "http://manifest-url-prefix.com/bad-manifest.com"; | 55 "http://manifest-url-prefix.com/bad-manifest.com"; |
| 56 const char kGoodManifestURL[] = | 56 const char kGoodManifestURL[] = |
| 57 "http://manifest-url-prefix.com/good-manifest.com"; | 57 "http://manifest-url-prefix.com/good-manifest.com"; |
| 58 const char kCustomGoodManifestURL[] = | 58 const char kCustomGoodManifestURL[] = |
| 59 "http://custom-manifest-url-prefix.com/good-manifest.com"; | 59 "http://custom-manifest-url-prefix.com/good-manifest.com"; |
| 60 const char kResourceFetchFailureURL[] = "http://resource-fetch-failure.com"; | 60 const char kResourceFetchFailureURL[] = "http://resource-fetch-failure.com"; |
| 61 const char kGoodResourceURL[] = "http://good-resource.com"; | 61 const char kGoodResourceURL[] = "http://good-resource.com"; |
| 62 const char kGoodResourceURLA[] = "http://good-resource.com/a"; | |
| 63 const char kGoodResourceURLB[] = "http://good-resource.com/b"; | |
| 64 const char kGoodResourceURLC[] = "http://good-resource.com/c"; | |
| 65 const char kGoodResourceURLD[] = "http://good-resource.com/d"; | |
| 62 const char kForcedStartingURLManifestURL[] = | 66 const char kForcedStartingURLManifestURL[] = |
| 63 "http://manifest-url-prefix.com/forced-starting-url.com"; | 67 "http://manifest-url-prefix.com/forced-starting-url.com"; |
| 68 const uint32_t kExperimentID = 123; | |
| 64 | 69 |
| 65 class TestURLFetcherCallback { | 70 class TestURLFetcherCallback { |
| 66 public: | 71 public: |
| 67 TestURLFetcherCallback() : total_response_bytes_(0) {} | 72 TestURLFetcherCallback() : total_response_bytes_(0) {} |
| 68 | 73 |
| 69 std::unique_ptr<net::FakeURLFetcher> CreateURLFetcher( | 74 std::unique_ptr<net::FakeURLFetcher> CreateURLFetcher( |
| 70 const GURL& url, | 75 const GURL& url, |
| 71 net::URLFetcherDelegate* delegate, | 76 net::URLFetcherDelegate* delegate, |
| 72 const std::string& response_data, | 77 const std::string& response_data, |
| 73 net::HttpStatusCode response_code, | 78 net::HttpStatusCode response_code, |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 384 net::URLRequestStatus::FAILED); | 389 net::URLRequestStatus::FAILED); |
| 385 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 390 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 386 net::URLRequestStatus::SUCCESS); | 391 net::URLRequestStatus::SUCCESS); |
| 387 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), | 392 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), |
| 388 PrecacheManifest().SerializeAsString(), net::HTTP_OK, | 393 PrecacheManifest().SerializeAsString(), net::HTTP_OK, |
| 389 net::URLRequestStatus::SUCCESS); | 394 net::URLRequestStatus::SUCCESS); |
| 390 | 395 |
| 391 base::HistogramTester histogram; | 396 base::HistogramTester histogram; |
| 392 | 397 |
| 393 { | 398 { |
| 394 PrecacheFetcher precache_fetcher(request_context_.get(), | 399 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 395 GURL(), std::string(), | 400 std::string(), std::move(unfinished_work), |
| 396 std::move(unfinished_work), | 401 kExperimentID, &precache_delegate_); |
| 397 &precache_delegate_); | |
| 398 precache_fetcher.Start(); | 402 precache_fetcher.Start(); |
| 399 | 403 |
| 400 loop_.RunUntilIdle(); | 404 loop_.RunUntilIdle(); |
| 401 | 405 |
| 402 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 406 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 403 } | 407 } |
| 404 | 408 |
| 405 std::multiset<GURL> expected_requested_urls; | 409 std::multiset<GURL> expected_requested_urls; |
| 406 expected_requested_urls.insert(GURL(kConfigURL)); | 410 expected_requested_urls.insert(GURL(kConfigURL)); |
| 407 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); | 411 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); |
| 408 expected_requested_urls.insert(GURL(kBadManifestURL)); | 412 expected_requested_urls.insert(GURL(kBadManifestURL)); |
| 409 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 413 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 410 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); | 414 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); |
| 411 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 415 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 412 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); | 416 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); |
| 413 | 417 |
| 414 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 418 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 415 | 419 |
| 416 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 420 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 417 | 421 |
| 418 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 422 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| 419 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | 423 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
| 420 url_callback_.total_response_bytes(), 1); | 424 url_callback_.total_response_bytes(), 1); |
| 421 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 425 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 422 } | 426 } |
| 423 | 427 |
| 428 TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) { | |
| 429 SetDefaultFlags(); | |
| 430 | |
| 431 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | |
| 432 new PrecacheUnfinishedWork()); | |
| 433 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | |
| 434 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); | |
| 435 | |
| 436 PrecacheConfigurationSettings config; | |
| 437 | |
| 438 PrecacheManifest good_manifest; | |
| 439 PrecacheResourceSelection resource_selection; | |
| 440 good_manifest.add_resource()->set_url(kGoodResourceURL); | |
| 441 good_manifest.add_resource()->set_url(kGoodResourceURLA); | |
| 442 good_manifest.add_resource()->set_url(kGoodResourceURLB); | |
| 443 good_manifest.add_resource()->set_url(kGoodResourceURLC); | |
| 444 good_manifest.add_resource()->set_url(kGoodResourceURLD); | |
| 445 | |
| 446 // Set bits for kGoodResourceURL, kGoodResourceURLB and kGoodResourceURLD. | |
| 447 resource_selection.set_bitset(0x15); | |
|
twifkak
2016/06/02 22:28:24
How about 0b10101 ?
Raj
2016/06/04 19:09:52
Done.
| |
| 448 (*good_manifest.mutable_experiments() | |
| 449 ->mutable_resources_by_experiment_group())[kExperimentID] = | |
| 450 resource_selection; | |
| 451 | |
| 452 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | |
| 453 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 454 factory_.SetFakeResponse(GURL(kGoodManifestURL), | |
| 455 good_manifest.SerializeAsString(), net::HTTP_OK, | |
| 456 net::URLRequestStatus::SUCCESS); | |
| 457 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | |
| 458 net::URLRequestStatus::SUCCESS); | |
| 459 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, | |
| 460 net::URLRequestStatus::SUCCESS); | |
| 461 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, | |
| 462 net::URLRequestStatus::SUCCESS); | |
| 463 | |
| 464 base::HistogramTester histogram; | |
| 465 | |
| 466 { | |
| 467 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), | |
| 468 std::string(), std::move(unfinished_work), | |
| 469 kExperimentID, &precache_delegate_); | |
| 470 precache_fetcher.Start(); | |
| 471 | |
| 472 loop_.RunUntilIdle(); | |
| 473 | |
| 474 // Destroy the PrecacheFetcher after it has finished, to record metrics. | |
| 475 } | |
| 476 | |
| 477 std::multiset<GURL> expected_requested_urls; | |
| 478 expected_requested_urls.insert(GURL(kConfigURL)); | |
| 479 expected_requested_urls.insert(GURL(kGoodManifestURL)); | |
| 480 expected_requested_urls.insert(GURL(kGoodResourceURL)); | |
| 481 expected_requested_urls.insert(GURL(kGoodResourceURLB)); | |
| 482 expected_requested_urls.insert(GURL(kGoodResourceURLD)); | |
| 483 | |
| 484 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | |
| 485 | |
| 486 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | |
| 487 | |
| 488 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | |
| 489 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | |
| 490 url_callback_.total_response_bytes(), 1); | |
| 491 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | |
| 492 } | |
| 493 | |
| 424 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { | 494 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
| 425 SetDefaultFlags(); | 495 SetDefaultFlags(); |
| 426 | 496 |
| 427 PrecacheConfigurationSettings config; | 497 PrecacheConfigurationSettings config; |
| 428 config.set_top_sites_count(3); | 498 config.set_top_sites_count(3); |
| 429 | 499 |
| 430 std::unique_ptr<PrecacheUnfinishedWork> initial_work( | 500 std::unique_ptr<PrecacheUnfinishedWork> initial_work( |
| 431 new PrecacheUnfinishedWork()); | 501 new PrecacheUnfinishedWork()); |
| 432 initial_work->add_manifest()->set_url( | 502 initial_work->add_manifest()->set_url( |
| 433 "http://manifest-url-prefix.com/manifest1.com"); | 503 "http://manifest-url-prefix.com/manifest1.com"); |
| 434 initial_work->add_manifest()->set_url( | 504 initial_work->add_manifest()->set_url( |
| 435 "http://manifest-url-prefix.com/manifest2.com"); | 505 "http://manifest-url-prefix.com/manifest2.com"); |
| 436 initial_work->add_resource()->set_url(kGoodResourceURL); | 506 initial_work->add_resource()->set_url(kGoodResourceURL); |
| 437 initial_work->set_start_time( | 507 initial_work->set_start_time( |
| 438 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); | 508 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); |
| 439 | 509 |
| 440 PrecacheFetcher first_fetcher(request_context_.get(), | 510 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(), |
| 441 GURL(), std::string(), | 511 std::move(initial_work), kExperimentID, |
| 442 std::move(initial_work), | |
| 443 &precache_delegate_); | 512 &precache_delegate_); |
| 444 | 513 |
| 445 loop_.RunUntilIdle(); | 514 loop_.RunUntilIdle(); |
| 446 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = | 515 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = |
| 447 first_fetcher.CancelPrecaching(); | 516 first_fetcher.CancelPrecaching(); |
| 448 | 517 |
| 449 std::multiset<GURL> expected_requested_urls; | 518 std::multiset<GURL> expected_requested_urls; |
| 450 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 519 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 451 | 520 |
| 452 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 521 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 453 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 522 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 454 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, | 523 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, |
| 455 net::URLRequestStatus::SUCCESS); | 524 net::URLRequestStatus::SUCCESS); |
| 456 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), | 525 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), |
| 457 "bad protobuf", net::HTTP_OK, | 526 "bad protobuf", net::HTTP_OK, |
| 458 net::URLRequestStatus::SUCCESS); | 527 net::URLRequestStatus::SUCCESS); |
| 459 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), | 528 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), |
| 460 "bad protobuf", net::HTTP_OK, | 529 "bad protobuf", net::HTTP_OK, |
| 461 net::URLRequestStatus::SUCCESS); | 530 net::URLRequestStatus::SUCCESS); |
| 462 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 531 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 463 net::URLRequestStatus::SUCCESS); | 532 net::URLRequestStatus::SUCCESS); |
| 464 // Starting hosts should not be fetched. | 533 // Starting hosts should not be fetched. |
| 465 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); | 534 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); |
| 466 PrecacheFetcher second_fetcher(request_context_.get(), | 535 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(), |
| 467 GURL(), std::string(), | 536 std::move(unfinished_work), kExperimentID, |
| 468 std::move(unfinished_work), | |
| 469 &precache_delegate_); | 537 &precache_delegate_); |
| 470 second_fetcher.Start(); | 538 second_fetcher.Start(); |
| 471 loop_.RunUntilIdle(); | 539 loop_.RunUntilIdle(); |
| 472 expected_requested_urls.insert(GURL(kConfigURL)); | 540 expected_requested_urls.insert(GURL(kConfigURL)); |
| 473 expected_requested_urls.insert( | 541 expected_requested_urls.insert( |
| 474 GURL("http://manifest-url-prefix.com/manifest1.com")); | 542 GURL("http://manifest-url-prefix.com/manifest1.com")); |
| 475 expected_requested_urls.insert( | 543 expected_requested_urls.insert( |
| 476 GURL("http://manifest-url-prefix.com/manifest2.com")); | 544 GURL("http://manifest-url-prefix.com/manifest2.com")); |
| 477 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 545 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 478 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 546 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 479 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 547 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 480 } | 548 } |
| 481 | 549 |
| 482 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { | 550 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { |
| 483 SetDefaultFlags(); | 551 SetDefaultFlags(); |
| 484 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 552 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 485 new PrecacheUnfinishedWork()); | 553 new PrecacheUnfinishedWork()); |
| 486 unfinished_work->mutable_config_settings()->add_forced_site( | 554 unfinished_work->mutable_config_settings()->add_forced_site( |
| 487 "good-manifest.com"); | 555 "good-manifest.com"); |
| 488 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); | 556 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); |
| 489 PrecacheManifest good_manifest; | 557 PrecacheManifest good_manifest; |
| 490 good_manifest.add_resource()->set_url(kGoodResourceURL); | 558 good_manifest.add_resource()->set_url(kGoodResourceURL); |
| 491 | 559 |
| 492 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 560 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 493 good_manifest.SerializeAsString(), net::HTTP_OK, | 561 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 494 net::URLRequestStatus::SUCCESS); | 562 net::URLRequestStatus::SUCCESS); |
| 495 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 563 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 496 net::URLRequestStatus::SUCCESS); | 564 net::URLRequestStatus::SUCCESS); |
| 497 { | 565 { |
| 498 PrecacheFetcher precache_fetcher(request_context_.get(), | 566 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 499 GURL(), std::string(), | 567 std::string(), std::move(unfinished_work), |
| 500 std::move(unfinished_work), | 568 kExperimentID, &precache_delegate_); |
| 501 &precache_delegate_); | |
| 502 precache_fetcher.Start(); | 569 precache_fetcher.Start(); |
| 503 | 570 |
| 504 loop_.RunUntilIdle(); | 571 loop_.RunUntilIdle(); |
| 505 } | 572 } |
| 506 | 573 |
| 507 std::multiset<GURL> expected_requested_urls; | 574 std::multiset<GURL> expected_requested_urls; |
| 508 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 575 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 509 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 576 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 510 | 577 |
| 511 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 578 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 528 | 595 |
| 529 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), | 596 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), |
| 530 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 597 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 531 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), | 598 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), |
| 532 good_manifest.SerializeAsString(), net::HTTP_OK, | 599 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 533 net::URLRequestStatus::SUCCESS); | 600 net::URLRequestStatus::SUCCESS); |
| 534 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 601 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 535 net::URLRequestStatus::SUCCESS); | 602 net::URLRequestStatus::SUCCESS); |
| 536 | 603 |
| 537 PrecacheFetcher precache_fetcher( | 604 PrecacheFetcher precache_fetcher( |
| 538 request_context_.get(), GURL(kCustomConfigURL), | 605 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix, |
| 539 kCustomManifestURLPrefix, std::move(unfinished_work), | 606 std::move(unfinished_work), kExperimentID, &precache_delegate_); |
| 540 &precache_delegate_); | |
| 541 precache_fetcher.Start(); | 607 precache_fetcher.Start(); |
| 542 | 608 |
| 543 loop_.RunUntilIdle(); | 609 loop_.RunUntilIdle(); |
| 544 | 610 |
| 545 std::multiset<GURL> expected_requested_urls; | 611 std::multiset<GURL> expected_requested_urls; |
| 546 expected_requested_urls.insert(GURL(kCustomConfigURL)); | 612 expected_requested_urls.insert(GURL(kCustomConfigURL)); |
| 547 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); | 613 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); |
| 548 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 614 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 549 | 615 |
| 550 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 616 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 551 | 617 |
| 552 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 618 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 553 } | 619 } |
| 554 | 620 |
| 555 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { | 621 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { |
| 556 SetDefaultFlags(); | 622 SetDefaultFlags(); |
| 557 | 623 |
| 558 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 624 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 559 new PrecacheUnfinishedWork()); | 625 new PrecacheUnfinishedWork()); |
| 560 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 626 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 561 | 627 |
| 562 factory_.SetFakeResponse(GURL(kConfigURL), "", | 628 factory_.SetFakeResponse(GURL(kConfigURL), "", |
| 563 net::HTTP_INTERNAL_SERVER_ERROR, | 629 net::HTTP_INTERNAL_SERVER_ERROR, |
| 564 net::URLRequestStatus::FAILED); | 630 net::URLRequestStatus::FAILED); |
| 565 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 631 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
| 566 net::URLRequestStatus::SUCCESS); | 632 net::URLRequestStatus::SUCCESS); |
| 567 | 633 |
| 568 PrecacheFetcher precache_fetcher(request_context_.get(), | 634 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 569 GURL(), std::string(), | 635 std::string(), std::move(unfinished_work), |
| 570 std::move(unfinished_work), | 636 kExperimentID, &precache_delegate_); |
| 571 &precache_delegate_); | |
| 572 precache_fetcher.Start(); | 637 precache_fetcher.Start(); |
| 573 | 638 |
| 574 loop_.RunUntilIdle(); | 639 loop_.RunUntilIdle(); |
| 575 | 640 |
| 576 std::multiset<GURL> expected_requested_urls; | 641 std::multiset<GURL> expected_requested_urls; |
| 577 expected_requested_urls.insert(GURL(kConfigURL)); | 642 expected_requested_urls.insert(GURL(kConfigURL)); |
| 578 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 643 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 579 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 644 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 580 | 645 |
| 581 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 646 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 582 } | 647 } |
| 583 | 648 |
| 584 TEST_F(PrecacheFetcherTest, BadConfig) { | 649 TEST_F(PrecacheFetcherTest, BadConfig) { |
| 585 SetDefaultFlags(); | 650 SetDefaultFlags(); |
| 586 | 651 |
| 587 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 652 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 588 new PrecacheUnfinishedWork()); | 653 new PrecacheUnfinishedWork()); |
| 589 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 654 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 590 | 655 |
| 591 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, | 656 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, |
| 592 net::URLRequestStatus::SUCCESS); | 657 net::URLRequestStatus::SUCCESS); |
| 593 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 658 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
| 594 net::URLRequestStatus::SUCCESS); | 659 net::URLRequestStatus::SUCCESS); |
| 595 | 660 |
| 596 PrecacheFetcher precache_fetcher(request_context_.get(), | 661 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 597 GURL(), std::string(), | 662 std::string(), std::move(unfinished_work), |
| 598 std::move(unfinished_work), | 663 kExperimentID, &precache_delegate_); |
| 599 &precache_delegate_); | |
| 600 precache_fetcher.Start(); | 664 precache_fetcher.Start(); |
| 601 | 665 |
| 602 loop_.RunUntilIdle(); | 666 loop_.RunUntilIdle(); |
| 603 | 667 |
| 604 std::multiset<GURL> expected_requested_urls; | 668 std::multiset<GURL> expected_requested_urls; |
| 605 expected_requested_urls.insert(GURL(kConfigURL)); | 669 expected_requested_urls.insert(GURL(kConfigURL)); |
| 606 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 670 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 607 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 671 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 608 | 672 |
| 609 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 673 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 610 } | 674 } |
| 611 | 675 |
| 612 TEST_F(PrecacheFetcherTest, Cancel) { | 676 TEST_F(PrecacheFetcherTest, Cancel) { |
| 613 SetDefaultFlags(); | 677 SetDefaultFlags(); |
| 614 | 678 |
| 615 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 679 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 616 new PrecacheUnfinishedWork()); | 680 new PrecacheUnfinishedWork()); |
| 617 unfinished_work->add_top_host()->set_hostname("starting-url.com"); | 681 unfinished_work->add_top_host()->set_hostname("starting-url.com"); |
| 618 | 682 |
| 619 PrecacheConfigurationSettings config; | 683 PrecacheConfigurationSettings config; |
| 620 config.set_top_sites_count(1); | 684 config.set_top_sites_count(1); |
| 621 | 685 |
| 622 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 686 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 623 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 687 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 624 | 688 |
| 625 base::HistogramTester histogram; | 689 base::HistogramTester histogram; |
| 626 | 690 |
| 627 { | 691 { |
| 628 PrecacheFetcher precache_fetcher(request_context_.get(), | 692 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 629 GURL(), std::string(), | 693 std::string(), std::move(unfinished_work), |
| 630 std::move(unfinished_work), | 694 kExperimentID, &precache_delegate_); |
| 631 &precache_delegate_); | |
| 632 precache_fetcher.Start(); | 695 precache_fetcher.Start(); |
| 633 | 696 |
| 634 // Destroy the PrecacheFetcher, to cancel precaching. No metrics | 697 // Destroy the PrecacheFetcher, to cancel precaching. No metrics |
| 635 // should be recorded because this should not cause OnDone to be | 698 // should be recorded because this should not cause OnDone to be |
| 636 // called on the precache delegate. | 699 // called on the precache delegate. |
| 637 } | 700 } |
| 638 | 701 |
| 639 loop_.RunUntilIdle(); | 702 loop_.RunUntilIdle(); |
| 640 | 703 |
| 641 std::multiset<GURL> expected_requested_urls; | 704 std::multiset<GURL> expected_requested_urls; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 656 new PrecacheUnfinishedWork()); | 719 new PrecacheUnfinishedWork()); |
| 657 unfinished_work->add_top_host()->set_hostname("starting-url.com"); | 720 unfinished_work->add_top_host()->set_hostname("starting-url.com"); |
| 658 | 721 |
| 659 PrecacheConfigurationSettings config; | 722 PrecacheConfigurationSettings config; |
| 660 config.set_top_sites_count(0); | 723 config.set_top_sites_count(0); |
| 661 | 724 |
| 662 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), | 725 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), |
| 663 config.SerializeAsString(), net::HTTP_OK, | 726 config.SerializeAsString(), net::HTTP_OK, |
| 664 net::URLRequestStatus::SUCCESS); | 727 net::URLRequestStatus::SUCCESS); |
| 665 | 728 |
| 666 PrecacheFetcher precache_fetcher(request_context_.get(), | 729 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 667 GURL(), std::string(), | 730 std::string(), std::move(unfinished_work), |
| 668 std::move(unfinished_work), | 731 kExperimentID, &precache_delegate_); |
| 669 &precache_delegate_); | |
| 670 precache_fetcher.Start(); | 732 precache_fetcher.Start(); |
| 671 | 733 |
| 672 loop_.RunUntilIdle(); | 734 loop_.RunUntilIdle(); |
| 673 | 735 |
| 674 std::multiset<GURL> expected_requested_urls; | 736 std::multiset<GURL> expected_requested_urls; |
| 675 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); | 737 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); |
| 676 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 738 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 677 | 739 |
| 678 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 740 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 679 } | 741 } |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 695 PrecacheConfigurationSettings config; | 757 PrecacheConfigurationSettings config; |
| 696 config.set_top_sites_count(1); | 758 config.set_top_sites_count(1); |
| 697 | 759 |
| 698 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); | 760 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); |
| 699 | 761 |
| 700 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 762 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 701 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 763 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 702 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), | 764 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), |
| 703 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 765 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 704 | 766 |
| 705 PrecacheFetcher precache_fetcher(request_context_.get(), | 767 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 706 GURL(), std::string(), | 768 std::string(), std::move(unfinished_work), |
| 707 std::move(unfinished_work), | 769 kExperimentID, &precache_delegate_); |
| 708 &precache_delegate_); | |
| 709 precache_fetcher.Start(); | 770 precache_fetcher.Start(); |
| 710 | 771 |
| 711 loop_.RunUntilIdle(); | 772 loop_.RunUntilIdle(); |
| 712 | 773 |
| 713 std::multiset<GURL> expected_requested_urls; | 774 std::multiset<GURL> expected_requested_urls; |
| 714 expected_requested_urls.insert(GURL(kConfigURL)); | 775 expected_requested_urls.insert(GURL(kConfigURL)); |
| 715 expected_requested_urls.insert(manifest_url); | 776 expected_requested_urls.insert(manifest_url); |
| 716 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 777 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 717 | 778 |
| 718 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 779 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 742 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 803 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 743 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 804 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 744 good_manifest.SerializeAsString(), net::HTTP_OK, | 805 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 745 net::URLRequestStatus::SUCCESS); | 806 net::URLRequestStatus::SUCCESS); |
| 746 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", | 807 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", |
| 747 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 808 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 748 | 809 |
| 749 base::HistogramTester histogram; | 810 base::HistogramTester histogram; |
| 750 | 811 |
| 751 { | 812 { |
| 752 PrecacheFetcher precache_fetcher(request_context_.get(), | 813 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 753 GURL(), std::string(), | 814 std::string(), std::move(unfinished_work), |
| 754 std::move(unfinished_work), | 815 kExperimentID, &precache_delegate_); |
| 755 &precache_delegate_); | |
| 756 precache_fetcher.Start(); | 816 precache_fetcher.Start(); |
| 757 | 817 |
| 758 loop_.RunUntilIdle(); | 818 loop_.RunUntilIdle(); |
| 759 | 819 |
| 760 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 820 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 761 } | 821 } |
| 762 | 822 |
| 763 std::multiset<GURL> expected_requested_urls; | 823 std::multiset<GURL> expected_requested_urls; |
| 764 expected_requested_urls.insert(GURL(kConfigURL)); | 824 expected_requested_urls.insert(GURL(kConfigURL)); |
| 765 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 825 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 821 } | 881 } |
| 822 | 882 |
| 823 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 883 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 824 good_manifest.SerializeAsString(), net::HTTP_OK, | 884 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 825 net::URLRequestStatus::SUCCESS); | 885 net::URLRequestStatus::SUCCESS); |
| 826 | 886 |
| 827 base::HistogramTester histogram; | 887 base::HistogramTester histogram; |
| 828 | 888 |
| 829 { | 889 { |
| 830 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), | 890 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 831 std::string(), | 891 std::string(), std::move(unfinished_work), |
| 832 std::move(unfinished_work), | 892 kExperimentID, &precache_delegate_); |
| 833 &precache_delegate_); | |
| 834 precache_fetcher.Start(); | 893 precache_fetcher.Start(); |
| 835 | 894 |
| 836 loop_.RunUntilIdle(); | 895 loop_.RunUntilIdle(); |
| 837 } | 896 } |
| 838 | 897 |
| 839 // We don't know which will make it and which won't due to the parallelism in | 898 // We don't know which will make it and which won't due to the parallelism in |
| 840 // the pool of Fetchers. | 899 // the pool of Fetchers. |
| 841 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); | 900 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); |
| 842 | 901 |
| 843 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 902 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 844 | 903 |
| 845 // good-manifest.com will not have been completed. | 904 // good-manifest.com will not have been completed. |
| 846 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), | 905 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), |
| 847 ElementsAre(base::Bucket(0, 1))); | 906 ElementsAre(base::Bucket(0, 1))); |
| 848 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 907 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 849 } | 908 } |
| 850 | 909 |
| 851 } // namespace | 910 } // namespace |
| 852 | 911 |
| 853 } // namespace precache | 912 } // namespace precache |
| OLD | NEW |