| 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 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 569 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 570 | 570 |
| 571 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 571 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 572 | 572 |
| 573 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 573 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| 574 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | 574 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
| 575 url_callback_.total_response_bytes(), 1); | 575 url_callback_.total_response_bytes(), 1); |
| 576 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 576 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 577 } | 577 } |
| 578 | 578 |
| 579 TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) { | 579 class PrecacheFetcherResourceSelectionTest |
| 580 : public PrecacheFetcherTest, |
| 581 public testing::WithParamInterface<PrecacheResourceSelection> { |
| 582 public: |
| 583 // These bitsets are asymmetric and multibyte, in order to test the orderings. |
| 584 |
| 585 // Set bits for kGoodResourceURL, kGoodResourceURLC and kGoodResourceURLD. |
| 586 static PrecacheResourceSelection DeprecatedBitset() { |
| 587 PrecacheResourceSelection ret; |
| 588 ret.set_deprecated_bitset(0b110000000001); |
| 589 return ret; |
| 590 } |
| 591 |
| 592 // Set bits for kGoodResourceURL, kGoodResourceURLC and kGoodResourceURLD. |
| 593 static PrecacheResourceSelection Bitset() { |
| 594 PrecacheResourceSelection ret; |
| 595 ret.set_bitset("\x01\x0c"); |
| 596 return ret; |
| 597 } |
| 598 }; |
| 599 |
| 600 TEST_P(PrecacheFetcherResourceSelectionTest, Basic) { |
| 580 SetDefaultFlags(); | 601 SetDefaultFlags(); |
| 581 | 602 |
| 582 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 603 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 583 new PrecacheUnfinishedWork()); | 604 new PrecacheUnfinishedWork()); |
| 584 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 605 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 585 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); | 606 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); |
| 586 | 607 |
| 587 PrecacheConfigurationSettings config; | 608 PrecacheConfigurationSettings config; |
| 588 | 609 |
| 589 PrecacheManifest good_manifest; | 610 PrecacheManifest good_manifest; |
| 590 PrecacheResourceSelection resource_selection; | 611 PrecacheResourceSelection resource_selection; |
| 591 good_manifest.add_resource()->set_url(kGoodResourceURL); | 612 good_manifest.add_resource()->set_url(kGoodResourceURL); |
| 592 good_manifest.add_resource()->set_url(kGoodResourceURLA); | 613 good_manifest.add_resource()->set_url(kGoodResourceURLA); |
| 593 good_manifest.add_resource()->set_url(kGoodResourceURLB); | 614 for (int i = 0; i < 8; ++i) |
| 615 good_manifest.add_resource()->set_url(kGoodResourceURLB); |
| 594 good_manifest.add_resource()->set_url(kGoodResourceURLC); | 616 good_manifest.add_resource()->set_url(kGoodResourceURLC); |
| 595 good_manifest.add_resource()->set_url(kGoodResourceURLD); | 617 good_manifest.add_resource()->set_url(kGoodResourceURLD); |
| 596 | 618 |
| 597 // Set bits for kGoodResourceURL, kGoodResourceURLB and kGoodResourceURLD. | |
| 598 resource_selection.set_bitset(0b10101); | |
| 599 (*good_manifest.mutable_experiments() | 619 (*good_manifest.mutable_experiments() |
| 600 ->mutable_resources_by_experiment_group())[kExperimentID] = | 620 ->mutable_resources_by_experiment_group())[kExperimentID] = GetParam(); |
| 601 resource_selection; | |
| 602 | 621 |
| 603 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 622 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 604 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 623 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 605 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 624 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 606 good_manifest.SerializeAsString(), net::HTTP_OK, | 625 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 607 net::URLRequestStatus::SUCCESS); | 626 net::URLRequestStatus::SUCCESS); |
| 608 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 627 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 609 net::URLRequestStatus::SUCCESS); | 628 net::URLRequestStatus::SUCCESS); |
| 610 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, | 629 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL B", net::HTTP_OK, |
| 611 net::URLRequestStatus::SUCCESS); | 630 net::URLRequestStatus::SUCCESS); |
| 612 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, | 631 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, |
| 613 net::URLRequestStatus::SUCCESS); | 632 net::URLRequestStatus::SUCCESS); |
| 614 | 633 |
| 615 base::HistogramTester histogram; | 634 base::HistogramTester histogram; |
| 616 | 635 |
| 617 { | 636 { |
| 618 PrecacheFetcher precache_fetcher( | 637 PrecacheFetcher precache_fetcher( |
| 619 request_context_.get(), GURL(), std::string(), | 638 request_context_.get(), GURL(), std::string(), |
| 620 std::move(unfinished_work), kExperimentID, | 639 std::move(unfinished_work), kExperimentID, |
| 621 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); | 640 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); |
| 622 precache_fetcher.Start(); | 641 precache_fetcher.Start(); |
| 623 | 642 |
| 624 base::RunLoop().RunUntilIdle(); | 643 base::RunLoop().RunUntilIdle(); |
| 625 | 644 |
| 626 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 645 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 627 } | 646 } |
| 628 | 647 |
| 629 std::vector<GURL> expected_requested_urls; | 648 std::vector<GURL> expected_requested_urls; |
| 630 expected_requested_urls.emplace_back(kConfigURL); | 649 expected_requested_urls.emplace_back(kConfigURL); |
| 631 expected_requested_urls.emplace_back(kGoodManifestURL); | 650 expected_requested_urls.emplace_back(kGoodManifestURL); |
| 632 expected_requested_urls.emplace_back(kGoodResourceURL); | 651 expected_requested_urls.emplace_back(kGoodResourceURL); |
| 633 expected_requested_urls.emplace_back(kGoodResourceURLB); | 652 expected_requested_urls.emplace_back(kGoodResourceURLC); |
| 634 expected_requested_urls.emplace_back(kGoodResourceURLD); | 653 expected_requested_urls.emplace_back(kGoodResourceURLD); |
| 635 | 654 |
| 636 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 655 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 637 | 656 |
| 638 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 657 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 639 | 658 |
| 640 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 659 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| 641 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | 660 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
| 642 url_callback_.total_response_bytes(), 1); | 661 url_callback_.total_response_bytes(), 1); |
| 643 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 662 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 644 } | 663 } |
| 645 | 664 |
| 646 TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) { | 665 TEST_P(PrecacheFetcherResourceSelectionTest, MissingBitset) { |
| 647 SetDefaultFlags(); | 666 SetDefaultFlags(); |
| 648 | 667 |
| 649 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( | 668 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( |
| 650 new PrecacheUnfinishedWork()); | 669 new PrecacheUnfinishedWork()); |
| 651 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); | 670 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); |
| 652 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); | 671 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); |
| 653 | 672 |
| 654 PrecacheConfigurationSettings config; | 673 PrecacheConfigurationSettings config; |
| 655 | 674 |
| 656 PrecacheManifest good_manifest; | 675 PrecacheManifest good_manifest; |
| 657 PrecacheResourceSelection resource_selection; | 676 PrecacheResourceSelection resource_selection; |
| 658 good_manifest.add_resource()->set_url(kGoodResourceURL); | 677 good_manifest.add_resource()->set_url(kGoodResourceURL); |
| 659 good_manifest.add_resource()->set_url(kGoodResourceURLA); | 678 good_manifest.add_resource()->set_url(kGoodResourceURLA); |
| 660 good_manifest.add_resource()->set_url(kGoodResourceURLB); | 679 good_manifest.add_resource()->set_url(kGoodResourceURLB); |
| 661 good_manifest.add_resource()->set_url(kGoodResourceURLC); | 680 good_manifest.add_resource()->set_url(kGoodResourceURLC); |
| 662 good_manifest.add_resource()->set_url(kGoodResourceURLD); | 681 good_manifest.add_resource()->set_url(kGoodResourceURLD); |
| 663 | 682 |
| 664 // Set bits for a different experiment group. | 683 // Set bits for a different experiment group. |
| 665 resource_selection.set_bitset(0b1); | |
| 666 (*good_manifest.mutable_experiments() | 684 (*good_manifest.mutable_experiments() |
| 667 ->mutable_resources_by_experiment_group())[kExperimentID + 1] = | 685 ->mutable_resources_by_experiment_group())[kExperimentID + 1] = |
| 668 resource_selection; | 686 GetParam(); |
| 669 | 687 |
| 670 // Resource selection bitset for the experiment group will be missing and all | 688 // Resource selection bitset for the experiment group will be missing and all |
| 671 // resources will be fetched. | 689 // resources will be fetched. |
| 672 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 690 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 673 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 691 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 674 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 692 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 675 good_manifest.SerializeAsString(), net::HTTP_OK, | 693 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 676 net::URLRequestStatus::SUCCESS); | 694 net::URLRequestStatus::SUCCESS); |
| 677 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, | 695 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, |
| 678 net::URLRequestStatus::SUCCESS); | 696 net::URLRequestStatus::SUCCESS); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 729 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 712 | 730 |
| 713 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 731 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 714 | 732 |
| 715 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 733 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| 716 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", | 734 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", |
| 717 url_callback_.total_response_bytes(), 1); | 735 url_callback_.total_response_bytes(), 1); |
| 718 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 736 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 719 } | 737 } |
| 720 | 738 |
| 739 INSTANTIATE_TEST_CASE_P( |
| 740 PrecacheFetcherResourceSelectionTest, |
| 741 PrecacheFetcherResourceSelectionTest, |
| 742 testing::Values(PrecacheFetcherResourceSelectionTest::DeprecatedBitset(), |
| 743 PrecacheFetcherResourceSelectionTest::Bitset())); |
| 744 |
| 721 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { | 745 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { |
| 722 SetDefaultFlags(); | 746 SetDefaultFlags(); |
| 723 | 747 |
| 724 PrecacheConfigurationSettings config; | 748 PrecacheConfigurationSettings config; |
| 725 config.set_top_sites_count(3); | 749 config.set_top_sites_count(3); |
| 726 | 750 |
| 727 std::unique_ptr<PrecacheUnfinishedWork> initial_work( | 751 std::unique_ptr<PrecacheUnfinishedWork> initial_work( |
| 728 new PrecacheUnfinishedWork()); | 752 new PrecacheUnfinishedWork()); |
| 729 initial_work->add_top_host()->set_hostname("manifest1.com"); | 753 initial_work->add_top_host()->set_hostname("manifest1.com"); |
| 730 initial_work->add_top_host()->set_hostname("manifest2.com"); | 754 initial_work->add_top_host()->set_hostname("manifest2.com"); |
| (...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 1961 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 1938 | 1962 |
| 1939 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 1963 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 1940 | 1964 |
| 1941 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); | 1965 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); |
| 1942 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); | 1966 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); |
| 1943 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); | 1967 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); |
| 1944 } | 1968 } |
| 1945 | 1969 |
| 1946 } // namespace precache | 1970 } // namespace precache |
| OLD | NEW |