| 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 <set> | 10 #include <set> |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "net/url_request/url_request_test_util.h" | 31 #include "net/url_request/url_request_test_util.h" |
| 32 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
| 33 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
| 34 #include "url/gurl.h" | 34 #include "url/gurl.h" |
| 35 | 35 |
| 36 namespace precache { | 36 namespace precache { |
| 37 | 37 |
| 38 namespace { | 38 namespace { |
| 39 | 39 |
| 40 using ::testing::_; | 40 using ::testing::_; |
| 41 using ::testing::ElementsAre; |
| 41 using ::testing::NotNull; | 42 using ::testing::NotNull; |
| 42 using ::testing::Property; | 43 using ::testing::Property; |
| 43 | 44 |
| 44 const char kConfigURL[] = "http://config-url.com"; | 45 const char kConfigURL[] = "http://config-url.com"; |
| 45 const char kManifestURLPrefix[] = "http://manifest-url-prefix.com/"; | 46 const char kManifestURLPrefix[] = "http://manifest-url-prefix.com/"; |
| 46 const char kCustomConfigURL[] = "http://custom-config-url.com"; | 47 const char kCustomConfigURL[] = "http://custom-config-url.com"; |
| 47 const char kCustomManifestURLPrefix[] = | 48 const char kCustomManifestURLPrefix[] = |
| 48 "http://custom-manifest-url-prefix.com/"; | 49 "http://custom-manifest-url-prefix.com/"; |
| 49 const char kManifestFetchFailureURL[] = | 50 const char kManifestFetchFailureURL[] = |
| 50 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; | 51 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 loop_.RunUntilIdle(); | 523 loop_.RunUntilIdle(); |
| 523 | 524 |
| 524 std::multiset<GURL> expected_requested_urls; | 525 std::multiset<GURL> expected_requested_urls; |
| 525 expected_requested_urls.insert(GURL(kConfigURL)); | 526 expected_requested_urls.insert(GURL(kConfigURL)); |
| 526 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); | 527 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| 527 | 528 |
| 528 EXPECT_FALSE(precache_delegate_.was_on_done_called()); | 529 EXPECT_FALSE(precache_delegate_.was_on_done_called()); |
| 529 | 530 |
| 530 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 0, 1); | 531 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 0, 1); |
| 531 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 0, 1); | 532 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 0, 1); |
| 532 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0); | 533 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 533 } | 534 } |
| 534 | 535 |
| 535 #if defined(PRECACHE_CONFIG_SETTINGS_URL) | 536 #if defined(PRECACHE_CONFIG_SETTINGS_URL) |
| 536 | 537 |
| 537 // If the default precache configuration settings URL is defined, then test that | 538 // If the default precache configuration settings URL is defined, then test that |
| 538 // it works with the PrecacheFetcher. | 539 // it works with the PrecacheFetcher. |
| 539 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { | 540 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { |
| 540 std::vector<std::string> starting_hosts(1, "starting-url.com"); | 541 std::vector<std::string> starting_hosts(1, "starting-url.com"); |
| 541 | 542 |
| 542 PrecacheConfigurationSettings config; | 543 PrecacheConfigurationSettings config; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 // MockURLFetcherFactory or EmbeddedTestServer, and add a test that fetches are | 669 // MockURLFetcherFactory or EmbeddedTestServer, and add a test that fetches are |
| 669 // cancelled midstream. | 670 // cancelled midstream. |
| 670 | 671 |
| 671 TEST_F(PrecacheFetcherTest, MaxBytesTotal) { | 672 TEST_F(PrecacheFetcherTest, MaxBytesTotal) { |
| 672 SetDefaultFlags(); | 673 SetDefaultFlags(); |
| 673 const size_t kNumResources = 15; // > kMaxParallelFetches. | 674 const size_t kNumResources = 15; // > kMaxParallelFetches. |
| 674 const size_t kMaxBytesTotal = 1000; | 675 const size_t kMaxBytesTotal = 1000; |
| 675 const size_t kBytesPerResource = kMaxBytesTotal / 3; | 676 const size_t kBytesPerResource = kMaxBytesTotal / 3; |
| 676 // kBytesPerResource * kMaxParallelFeches > kMaxBytesTotal. | 677 // kBytesPerResource * kMaxParallelFeches > kMaxBytesTotal. |
| 677 | 678 |
| 678 std::vector<std::string> starting_hosts; | |
| 679 starting_hosts.push_back("good-manifest.com"); | |
| 680 | |
| 681 PrecacheConfigurationSettings config; | 679 PrecacheConfigurationSettings config; |
| 682 config.set_max_bytes_total(kMaxBytesTotal); | 680 config.set_max_bytes_total(kMaxBytesTotal); |
| 683 | 681 |
| 684 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), | 682 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| 685 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 683 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 686 | 684 |
| 687 PrecacheManifest good_manifest; | 685 PrecacheManifest good_manifest; |
| 688 for (size_t i = 0; i < kNumResources; ++i) { | 686 for (size_t i = 0; i < kNumResources; ++i) { |
| 689 const std::string url = "http://good-manifest.com/" + std::to_string(i); | 687 const std::string url = "http://good-manifest.com/" + std::to_string(i); |
| 690 good_manifest.add_resource()->set_url(url); | 688 good_manifest.add_resource()->set_url(url); |
| 691 factory_.SetFakeResponse(GURL(url), std::string(kBytesPerResource, '.'), | 689 factory_.SetFakeResponse(GURL(url), std::string(kBytesPerResource, '.'), |
| 692 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 690 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 693 } | 691 } |
| 694 | 692 |
| 695 factory_.SetFakeResponse(GURL(kGoodManifestURL), | 693 factory_.SetFakeResponse(GURL(kGoodManifestURL), |
| 696 good_manifest.SerializeAsString(), net::HTTP_OK, | 694 good_manifest.SerializeAsString(), net::HTTP_OK, |
| 697 net::URLRequestStatus::SUCCESS); | 695 net::URLRequestStatus::SUCCESS); |
| 698 | 696 |
| 699 base::HistogramTester histogram; | 697 base::HistogramTester histogram; |
| 700 | 698 |
| 701 { | 699 { |
| 702 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), | 700 PrecacheFetcher precache_fetcher({"good-manifest.com"}, |
| 703 GURL(), std::string(), | 701 request_context_.get(), GURL(), |
| 704 &precache_delegate_); | 702 std::string(), &precache_delegate_); |
| 705 precache_fetcher.Start(); | 703 precache_fetcher.Start(); |
| 706 | 704 |
| 707 loop_.RunUntilIdle(); | 705 loop_.RunUntilIdle(); |
| 708 | 706 |
| 709 // Destroy the PrecacheFetcher after it has finished, to record metrics. | 707 // Destroy the PrecacheFetcher after it has finished, to record metrics. |
| 710 } | 708 } |
| 711 | 709 |
| 712 // We don't know which will make it and which won't due to the parallelism in | 710 // We don't know which will make it and which won't due to the parallelism in |
| 713 // the pool of Fetchers. | 711 // the pool of Fetchers. |
| 714 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); | 712 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); |
| 715 | 713 |
| 716 EXPECT_TRUE(precache_delegate_.was_on_done_called()); | 714 EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| 717 | 715 |
| 718 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); | 716 // good-manifest.com will not have been completed. |
| 717 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), |
| 718 ElementsAre(base::Bucket(0, 1))); |
| 719 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); | 719 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); |
| 720 } | 720 } |
| 721 | 721 |
| 722 } // namespace | 722 } // namespace |
| 723 | 723 |
| 724 } // namespace precache | 724 } // namespace precache |
| OLD | NEW |