| 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(0b10101); |
| 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 |
| 494 TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) { |
| 495 SetDefaultFlags(); |
| 496 |
| 497 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 498 new PrecacheUnfinishedWork()); |
| 499 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 500 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); |
| 501 |
| 502 PrecacheConfigurationSettings config; |
| 503 |
| 504 PrecacheManifest good_manifest; |
| 505 PrecacheResourceSelection resource_selection; |
| 506 good_manifest.add_resource()->set_url(kGoodResourceURL); |
| 507 good_manifest.add_resource()->set_url(kGoodResourceURLA); |
| 508 good_manifest.add_resource()->set_url(kGoodResourceURLB); |
| 509 good_manifest.add_resource()->set_url(kGoodResourceURLC); |
| 510 good_manifest.add_resource()->set_url(kGoodResourceURLD); |
| 511 |
| 512 // Set bits for a different experiment group. |
| 513 resource_selection.set_bitset(0b1); |
| 514 (*good_manifest.mutable_experiments() |
| 515 ->mutable_resources_by_experiment_group())[kExperimentID + 1] = |
| 516 resource_selection; |
| 517 |
| 518 // Resource selection bitset for the experiment group will be missing and all |
| 519 // resources will be fetched. |
| 520 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 521 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 522 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 523 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 524 net::URLRequestStatus::SUCCESS); |
| 525 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 526 net::URLRequestStatus::SUCCESS); |
| 527 factory_.SetFakeResponse(GURL(kGoodResourceURLA), "good URL A", net::HTTP_OK, |
| 528 net::URLRequestStatus::SUCCESS); |
| 529 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, |
| 530 net::URLRequestStatus::SUCCESS); |
| 531 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK, |
| 532 net::URLRequestStatus::SUCCESS); |
| 533 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, |
| 534 net::URLRequestStatus::SUCCESS); |
| 535 |
| 536 base::HistogramTester histogram; |
| 537 |
| 538 { |
| 539 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 540 std::string(), std::move(unfinished_work), |
| 541 kExperimentID, &precache_delegate_); |
| 542 precache_fetcher.Start(); |
| 543 |
| 544 loop_.RunUntilIdle(); |
| 545 |
| 546 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 547 } |
| 548 |
| 549 std::multiset<GURL> expected_requested_urls; |
| 550 expected_requested_urls.insert(GURL(kConfigURL)); |
| 551 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 552 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 553 expected_requested_urls.insert(GURL(kGoodResourceURLA)); |
| 554 expected_requested_urls.insert(GURL(kGoodResourceURLB)); |
| 555 expected_requested_urls.insert(GURL(kGoodResourceURLC)); |
| 556 expected_requested_urls.insert(GURL(kGoodResourceURLD)); |
| 557 |
| 558 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 559 |
| 560 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 561 |
| 562 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| 563 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
| 564 url_callback_.total_response_bytes(), 1); |
| 565 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 566 } |
| 567 |
| 424 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { | 568 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
| 425 SetDefaultFlags(); | 569 SetDefaultFlags(); |
| 426 | 570 |
| 427 PrecacheConfigurationSettings config; | 571 PrecacheConfigurationSettings config; |
| 428 config.set_top_sites_count(3); | 572 config.set_top_sites_count(3); |
| 429 | 573 |
| 430 std::unique_ptr<PrecacheUnfinishedWork> initial_work( | 574 std::unique_ptr<PrecacheUnfinishedWork> initial_work( |
| 431 new PrecacheUnfinishedWork()); | 575 new PrecacheUnfinishedWork()); |
| 432 initial_work->add_manifest()->set_url( | 576 initial_work->add_manifest()->set_url( |
| 433 "http://manifest-url-prefix.com/manifest1.com"); | 577 "http://manifest-url-prefix.com/manifest1.com"); |
| 434 initial_work->add_manifest()->set_url( | 578 initial_work->add_manifest()->set_url( |
| 435 "http://manifest-url-prefix.com/manifest2.com"); | 579 "http://manifest-url-prefix.com/manifest2.com"); |
| 436 initial_work->add_resource()->set_url(kGoodResourceURL); | 580 initial_work->add_resource()->set_url(kGoodResourceURL); |
| 437 initial_work->set_start_time( | 581 initial_work->set_start_time( |
| 438 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); | 582 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); |
| 439 | 583 |
| 440 PrecacheFetcher first_fetcher(request_context_.get(), | 584 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(), |
| 441 GURL(), std::string(), | 585 std::move(initial_work), kExperimentID, |
| 442 std::move(initial_work), | |
| 443 &precache_delegate_); | 586 &precache_delegate_); |
| 444 | 587 |
| 445 loop_.RunUntilIdle(); | 588 loop_.RunUntilIdle(); |
| 446 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = | 589 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = |
| 447 first_fetcher.CancelPrecaching(); | 590 first_fetcher.CancelPrecaching(); |
| 448 | 591 |
| 449 std::multiset<GURL> expected_requested_urls; | 592 std::multiset<GURL> expected_requested_urls; |
| 450 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 593 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 451 | 594 |
| 452 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 595 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 453 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 596 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 454 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, | 597 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, |
| 455 net::URLRequestStatus::SUCCESS); | 598 net::URLRequestStatus::SUCCESS); |
| 456 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), | 599 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), |
| 457 "bad protobuf", net::HTTP_OK, | 600 "bad protobuf", net::HTTP_OK, |
| 458 net::URLRequestStatus::SUCCESS); | 601 net::URLRequestStatus::SUCCESS); |
| 459 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), | 602 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), |
| 460 "bad protobuf", net::HTTP_OK, | 603 "bad protobuf", net::HTTP_OK, |
| 461 net::URLRequestStatus::SUCCESS); | 604 net::URLRequestStatus::SUCCESS); |
| 462 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 605 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 463 net::URLRequestStatus::SUCCESS); | 606 net::URLRequestStatus::SUCCESS); |
| 464 // Starting hosts should not be fetched. | 607 // Starting hosts should not be fetched. |
| 465 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); | 608 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); |
| 466 PrecacheFetcher second_fetcher(request_context_.get(), | 609 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(), |
| 467 GURL(), std::string(), | 610 std::move(unfinished_work), kExperimentID, |
| 468 std::move(unfinished_work), | |
| 469 &precache_delegate_); | 611 &precache_delegate_); |
| 470 second_fetcher.Start(); | 612 second_fetcher.Start(); |
| 471 loop_.RunUntilIdle(); | 613 loop_.RunUntilIdle(); |
| 472 expected_requested_urls.insert(GURL(kConfigURL)); | 614 expected_requested_urls.insert(GURL(kConfigURL)); |
| 473 expected_requested_urls.insert( | 615 expected_requested_urls.insert( |
| 474 GURL("http://manifest-url-prefix.com/manifest1.com")); | 616 GURL("http://manifest-url-prefix.com/manifest1.com")); |
| 475 expected_requested_urls.insert( | 617 expected_requested_urls.insert( |
| 476 GURL("http://manifest-url-prefix.com/manifest2.com")); | 618 GURL("http://manifest-url-prefix.com/manifest2.com")); |
| 477 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 619 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 478 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 620 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 479 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 621 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 480 } | 622 } |
| 481 | 623 |
| 482 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { | 624 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { |
| 483 SetDefaultFlags(); | 625 SetDefaultFlags(); |
| 484 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 626 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 485 new PrecacheUnfinishedWork()); | 627 new PrecacheUnfinishedWork()); |
| 486 unfinished_work->mutable_config_settings()->add_forced_site( | 628 unfinished_work->mutable_config_settings()->add_forced_site( |
| 487 "good-manifest.com"); | 629 "good-manifest.com"); |
| 488 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); | 630 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); |
| 489 PrecacheManifest good_manifest; | 631 PrecacheManifest good_manifest; |
| 490 good_manifest.add_resource()->set_url(kGoodResourceURL); | 632 good_manifest.add_resource()->set_url(kGoodResourceURL); |
| 491 | 633 |
| 492 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 634 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 493 good_manifest.SerializeAsString(), net::HTTP_OK, | 635 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 494 net::URLRequestStatus::SUCCESS); | 636 net::URLRequestStatus::SUCCESS); |
| 495 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 637 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 496 net::URLRequestStatus::SUCCESS); | 638 net::URLRequestStatus::SUCCESS); |
| 497 { | 639 { |
| 498 PrecacheFetcher precache_fetcher(request_context_.get(), | 640 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 499 GURL(), std::string(), | 641 std::string(), std::move(unfinished_work), |
| 500 std::move(unfinished_work), | 642 kExperimentID, &precache_delegate_); |
| 501 &precache_delegate_); | |
| 502 precache_fetcher.Start(); | 643 precache_fetcher.Start(); |
| 503 | 644 |
| 504 loop_.RunUntilIdle(); | 645 loop_.RunUntilIdle(); |
| 505 } | 646 } |
| 506 | 647 |
| 507 std::multiset<GURL> expected_requested_urls; | 648 std::multiset<GURL> expected_requested_urls; |
| 508 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 649 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 509 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 650 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 510 | 651 |
| 511 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 652 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 528 | 669 |
| 529 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), | 670 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), |
| 530 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 671 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 531 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), | 672 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), |
| 532 good_manifest.SerializeAsString(), net::HTTP_OK, | 673 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 533 net::URLRequestStatus::SUCCESS); | 674 net::URLRequestStatus::SUCCESS); |
| 534 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 675 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 535 net::URLRequestStatus::SUCCESS); | 676 net::URLRequestStatus::SUCCESS); |
| 536 | 677 |
| 537 PrecacheFetcher precache_fetcher( | 678 PrecacheFetcher precache_fetcher( |
| 538 request_context_.get(), GURL(kCustomConfigURL), | 679 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix, |
| 539 kCustomManifestURLPrefix, std::move(unfinished_work), | 680 std::move(unfinished_work), kExperimentID, &precache_delegate_); |
| 540 &precache_delegate_); | |
| 541 precache_fetcher.Start(); | 681 precache_fetcher.Start(); |
| 542 | 682 |
| 543 loop_.RunUntilIdle(); | 683 loop_.RunUntilIdle(); |
| 544 | 684 |
| 545 std::multiset<GURL> expected_requested_urls; | 685 std::multiset<GURL> expected_requested_urls; |
| 546 expected_requested_urls.insert(GURL(kCustomConfigURL)); | 686 expected_requested_urls.insert(GURL(kCustomConfigURL)); |
| 547 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); | 687 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); |
| 548 expected_requested_urls.insert(GURL(kGoodResourceURL)); | 688 expected_requested_urls.insert(GURL(kGoodResourceURL)); |
| 549 | 689 |
| 550 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 690 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 551 | 691 |
| 552 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 692 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 553 } | 693 } |
| 554 | 694 |
| 555 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { | 695 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { |
| 556 SetDefaultFlags(); | 696 SetDefaultFlags(); |
| 557 | 697 |
| 558 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 698 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 559 new PrecacheUnfinishedWork()); | 699 new PrecacheUnfinishedWork()); |
| 560 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 700 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 561 | 701 |
| 562 factory_.SetFakeResponse(GURL(kConfigURL), "", | 702 factory_.SetFakeResponse(GURL(kConfigURL), "", |
| 563 net::HTTP_INTERNAL_SERVER_ERROR, | 703 net::HTTP_INTERNAL_SERVER_ERROR, |
| 564 net::URLRequestStatus::FAILED); | 704 net::URLRequestStatus::FAILED); |
| 565 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 705 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
| 566 net::URLRequestStatus::SUCCESS); | 706 net::URLRequestStatus::SUCCESS); |
| 567 | 707 |
| 568 PrecacheFetcher precache_fetcher(request_context_.get(), | 708 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 569 GURL(), std::string(), | 709 std::string(), std::move(unfinished_work), |
| 570 std::move(unfinished_work), | 710 kExperimentID, &precache_delegate_); |
| 571 &precache_delegate_); | |
| 572 precache_fetcher.Start(); | 711 precache_fetcher.Start(); |
| 573 | 712 |
| 574 loop_.RunUntilIdle(); | 713 loop_.RunUntilIdle(); |
| 575 | 714 |
| 576 std::multiset<GURL> expected_requested_urls; | 715 std::multiset<GURL> expected_requested_urls; |
| 577 expected_requested_urls.insert(GURL(kConfigURL)); | 716 expected_requested_urls.insert(GURL(kConfigURL)); |
| 578 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 717 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 579 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 718 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 580 | 719 |
| 581 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 720 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 582 } | 721 } |
| 583 | 722 |
| 584 TEST_F(PrecacheFetcherTest, BadConfig) { | 723 TEST_F(PrecacheFetcherTest, BadConfig) { |
| 585 SetDefaultFlags(); | 724 SetDefaultFlags(); |
| 586 | 725 |
| 587 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 726 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 588 new PrecacheUnfinishedWork()); | 727 new PrecacheUnfinishedWork()); |
| 589 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 728 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 590 | 729 |
| 591 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, | 730 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, |
| 592 net::URLRequestStatus::SUCCESS); | 731 net::URLRequestStatus::SUCCESS); |
| 593 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, | 732 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, |
| 594 net::URLRequestStatus::SUCCESS); | 733 net::URLRequestStatus::SUCCESS); |
| 595 | 734 |
| 596 PrecacheFetcher precache_fetcher(request_context_.get(), | 735 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 597 GURL(), std::string(), | 736 std::string(), std::move(unfinished_work), |
| 598 std::move(unfinished_work), | 737 kExperimentID, &precache_delegate_); |
| 599 &precache_delegate_); | |
| 600 precache_fetcher.Start(); | 738 precache_fetcher.Start(); |
| 601 | 739 |
| 602 loop_.RunUntilIdle(); | 740 loop_.RunUntilIdle(); |
| 603 | 741 |
| 604 std::multiset<GURL> expected_requested_urls; | 742 std::multiset<GURL> expected_requested_urls; |
| 605 expected_requested_urls.insert(GURL(kConfigURL)); | 743 expected_requested_urls.insert(GURL(kConfigURL)); |
| 606 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 744 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| 607 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 745 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 608 | 746 |
| 609 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 747 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 610 } | 748 } |
| 611 | 749 |
| 612 TEST_F(PrecacheFetcherTest, Cancel) { | 750 TEST_F(PrecacheFetcherTest, Cancel) { |
| 613 SetDefaultFlags(); | 751 SetDefaultFlags(); |
| 614 | 752 |
| 615 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 753 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 616 new PrecacheUnfinishedWork()); | 754 new PrecacheUnfinishedWork()); |
| 617 unfinished_work->add_top_host()->set_hostname("starting-url.com"); | 755 unfinished_work->add_top_host()->set_hostname("starting-url.com"); |
| 618 | 756 |
| 619 PrecacheConfigurationSettings config; | 757 PrecacheConfigurationSettings config; |
| 620 config.set_top_sites_count(1); | 758 config.set_top_sites_count(1); |
| 621 | 759 |
| 622 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 760 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 623 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 761 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 624 | 762 |
| 625 base::HistogramTester histogram; | 763 base::HistogramTester histogram; |
| 626 | 764 |
| 627 { | 765 { |
| 628 PrecacheFetcher precache_fetcher(request_context_.get(), | 766 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 629 GURL(), std::string(), | 767 std::string(), std::move(unfinished_work), |
| 630 std::move(unfinished_work), | 768 kExperimentID, &precache_delegate_); |
| 631 &precache_delegate_); | |
| 632 precache_fetcher.Start(); | 769 precache_fetcher.Start(); |
| 633 | 770 |
| 634 // Destroy the PrecacheFetcher, to cancel precaching. No metrics | 771 // Destroy the PrecacheFetcher, to cancel precaching. No metrics |
| 635 // should be recorded because this should not cause OnDone to be | 772 // should be recorded because this should not cause OnDone to be |
| 636 // called on the precache delegate. | 773 // called on the precache delegate. |
| 637 } | 774 } |
| 638 | 775 |
| 639 loop_.RunUntilIdle(); | 776 loop_.RunUntilIdle(); |
| 640 | 777 |
| 641 std::multiset<GURL> expected_requested_urls; | 778 std::multiset<GURL> expected_requested_urls; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 656 new PrecacheUnfinishedWork()); | 793 new PrecacheUnfinishedWork()); |
| 657 unfinished_work->add_top_host()->set_hostname("starting-url.com"); | 794 unfinished_work->add_top_host()->set_hostname("starting-url.com"); |
| 658 | 795 |
| 659 PrecacheConfigurationSettings config; | 796 PrecacheConfigurationSettings config; |
| 660 config.set_top_sites_count(0); | 797 config.set_top_sites_count(0); |
| 661 | 798 |
| 662 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), | 799 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), |
| 663 config.SerializeAsString(), net::HTTP_OK, | 800 config.SerializeAsString(), net::HTTP_OK, |
| 664 net::URLRequestStatus::SUCCESS); | 801 net::URLRequestStatus::SUCCESS); |
| 665 | 802 |
| 666 PrecacheFetcher precache_fetcher(request_context_.get(), | 803 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 667 GURL(), std::string(), | 804 std::string(), std::move(unfinished_work), |
| 668 std::move(unfinished_work), | 805 kExperimentID, &precache_delegate_); |
| 669 &precache_delegate_); | |
| 670 precache_fetcher.Start(); | 806 precache_fetcher.Start(); |
| 671 | 807 |
| 672 loop_.RunUntilIdle(); | 808 loop_.RunUntilIdle(); |
| 673 | 809 |
| 674 std::multiset<GURL> expected_requested_urls; | 810 std::multiset<GURL> expected_requested_urls; |
| 675 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); | 811 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); |
| 676 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 812 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 677 | 813 |
| 678 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 814 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 679 } | 815 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 695 PrecacheConfigurationSettings config; | 831 PrecacheConfigurationSettings config; |
| 696 config.set_top_sites_count(1); | 832 config.set_top_sites_count(1); |
| 697 | 833 |
| 698 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); | 834 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); |
| 699 | 835 |
| 700 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 836 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 701 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 837 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 702 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), | 838 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), |
| 703 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 839 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 704 | 840 |
| 705 PrecacheFetcher precache_fetcher(request_context_.get(), | 841 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 706 GURL(), std::string(), | 842 std::string(), std::move(unfinished_work), |
| 707 std::move(unfinished_work), | 843 kExperimentID, &precache_delegate_); |
| 708 &precache_delegate_); | |
| 709 precache_fetcher.Start(); | 844 precache_fetcher.Start(); |
| 710 | 845 |
| 711 loop_.RunUntilIdle(); | 846 loop_.RunUntilIdle(); |
| 712 | 847 |
| 713 std::multiset<GURL> expected_requested_urls; | 848 std::multiset<GURL> expected_requested_urls; |
| 714 expected_requested_urls.insert(GURL(kConfigURL)); | 849 expected_requested_urls.insert(GURL(kConfigURL)); |
| 715 expected_requested_urls.insert(manifest_url); | 850 expected_requested_urls.insert(manifest_url); |
| 716 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 851 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 717 | 852 |
| 718 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 853 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 742 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 877 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 743 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 878 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 744 good_manifest.SerializeAsString(), net::HTTP_OK, | 879 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 745 net::URLRequestStatus::SUCCESS); | 880 net::URLRequestStatus::SUCCESS); |
| 746 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", | 881 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", |
| 747 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 882 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 748 | 883 |
| 749 base::HistogramTester histogram; | 884 base::HistogramTester histogram; |
| 750 | 885 |
| 751 { | 886 { |
| 752 PrecacheFetcher precache_fetcher(request_context_.get(), | 887 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 753 GURL(), std::string(), | 888 std::string(), std::move(unfinished_work), |
| 754 std::move(unfinished_work), | 889 kExperimentID, &precache_delegate_); |
| 755 &precache_delegate_); | |
| 756 precache_fetcher.Start(); | 890 precache_fetcher.Start(); |
| 757 | 891 |
| 758 loop_.RunUntilIdle(); | 892 loop_.RunUntilIdle(); |
| 759 | 893 |
| 760 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 894 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 761 } | 895 } |
| 762 | 896 |
| 763 std::multiset<GURL> expected_requested_urls; | 897 std::multiset<GURL> expected_requested_urls; |
| 764 expected_requested_urls.insert(GURL(kConfigURL)); | 898 expected_requested_urls.insert(GURL(kConfigURL)); |
| 765 expected_requested_urls.insert(GURL(kGoodManifestURL)); | 899 expected_requested_urls.insert(GURL(kGoodManifestURL)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 } | 955 } |
| 822 | 956 |
| 823 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 957 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 824 good_manifest.SerializeAsString(), net::HTTP_OK, | 958 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 825 net::URLRequestStatus::SUCCESS); | 959 net::URLRequestStatus::SUCCESS); |
| 826 | 960 |
| 827 base::HistogramTester histogram; | 961 base::HistogramTester histogram; |
| 828 | 962 |
| 829 { | 963 { |
| 830 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), | 964 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), |
| 831 std::string(), | 965 std::string(), std::move(unfinished_work), |
| 832 std::move(unfinished_work), | 966 kExperimentID, &precache_delegate_); |
| 833 &precache_delegate_); | |
| 834 precache_fetcher.Start(); | 967 precache_fetcher.Start(); |
| 835 | 968 |
| 836 loop_.RunUntilIdle(); | 969 loop_.RunUntilIdle(); |
| 837 } | 970 } |
| 838 | 971 |
| 839 // We don't know which will make it and which won't due to the parallelism in | 972 // We don't know which will make it and which won't due to the parallelism in |
| 840 // the pool of Fetchers. | 973 // the pool of Fetchers. |
| 841 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); | 974 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); |
| 842 | 975 |
| 843 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 976 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 844 | 977 |
| 845 // good-manifest.com will not have been completed. | 978 // good-manifest.com will not have been completed. |
| 846 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), | 979 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), |
| 847 ElementsAre(base::Bucket(0, 1))); | 980 ElementsAre(base::Bucket(0, 1))); |
| 848 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 981 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 849 } | 982 } |
| 850 | 983 |
| 851 } // namespace | 984 } // namespace |
| 852 | 985 |
| 853 } // namespace precache | 986 } // namespace precache |
| OLD | NEW |