Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 1212773002: Add prefetch UMA metrics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for CloudExternalDataManagerBaseTest.CacheCorruption. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/test/histogram_tester.h"
16 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
17 #include "components/precache/core/precache_switches.h" 18 #include "components/precache/core/precache_switches.h"
18 #include "components/precache/core/proto/precache.pb.h" 19 #include "components/precache/core/proto/precache.pb.h"
19 #include "net/http/http_response_headers.h" 20 #include "net/http/http_response_headers.h"
20 #include "net/http/http_status_code.h" 21 #include "net/http/http_status_code.h"
21 #include "net/url_request/test_url_fetcher_factory.h" 22 #include "net/url_request/test_url_fetcher_factory.h"
22 #include "net/url_request/url_request_status.h" 23 #include "net/url_request/url_request_status.h"
23 #include "net/url_request/url_request_test_util.h" 24 #include "net/url_request/url_request_test_util.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
26 namespace precache { 27 namespace precache {
27 28
28 namespace { 29 namespace {
29 30
30 class TestURLFetcherCallback { 31 class TestURLFetcherCallback {
31 public: 32 public:
33 TestURLFetcherCallback() : total_response_bytes_(0) {}
34
32 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( 35 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher(
33 const GURL& url, net::URLFetcherDelegate* delegate, 36 const GURL& url, net::URLFetcherDelegate* delegate,
34 const std::string& response_data, net::HttpStatusCode response_code, 37 const std::string& response_data, net::HttpStatusCode response_code,
35 net::URLRequestStatus::Status status) { 38 net::URLRequestStatus::Status status) {
36 scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher( 39 scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
37 url, delegate, response_data, response_code, status)); 40 url, delegate, response_data, response_code, status));
38 41
39 if (response_code == net::HTTP_OK) { 42 if (response_code == net::HTTP_OK) {
40 scoped_refptr<net::HttpResponseHeaders> download_headers = 43 scoped_refptr<net::HttpResponseHeaders> download_headers =
41 new net::HttpResponseHeaders(""); 44 new net::HttpResponseHeaders("");
42 download_headers->AddHeader("Content-Type: text/html"); 45 download_headers->AddHeader("Content-Type: text/html");
43 fetcher->set_response_headers(download_headers); 46 fetcher->set_response_headers(download_headers);
44 } 47 }
45 48
49 total_response_bytes_ += response_data.size();
46 requested_urls_.insert(url); 50 requested_urls_.insert(url);
47 return fetcher.Pass(); 51 return fetcher.Pass();
48 } 52 }
49 53
50 const std::multiset<GURL>& requested_urls() const { 54 const std::multiset<GURL>& requested_urls() const {
51 return requested_urls_; 55 return requested_urls_;
52 } 56 }
53 57
58 int total_response_bytes() const { return total_response_bytes_; }
59
54 private: 60 private:
55 // Multiset with one entry for each URL requested. 61 // Multiset with one entry for each URL requested.
56 std::multiset<GURL> requested_urls_; 62 std::multiset<GURL> requested_urls_;
63 int total_response_bytes_;
57 }; 64 };
58 65
59 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { 66 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
60 public: 67 public:
61 TestPrecacheDelegate() : was_on_done_called_(false) {} 68 TestPrecacheDelegate() : was_on_done_called_(false) {}
62 69
63 void OnDone() override { was_on_done_called_ = true; } 70 void OnDone() override { was_on_done_called_ = true; }
64 71
65 bool was_on_done_called() const { 72 bool was_on_done_called() const {
66 return was_on_done_called_; 73 return was_on_done_called_;
67 } 74 }
68 75
69 private: 76 private:
70 bool was_on_done_called_; 77 bool was_on_done_called_;
71 }; 78 };
72 79
73 class PrecacheFetcherTest : public testing::Test { 80 class PrecacheFetcherTest : public testing::Test {
74 public: 81 public:
75 PrecacheFetcherTest() 82 PrecacheFetcherTest()
76 : request_context_(new net::TestURLRequestContextGetter( 83 : request_context_(new net::TestURLRequestContextGetter(
77 base::ThreadTaskRunnerHandle::Get())), 84 base::ThreadTaskRunnerHandle::Get())),
78 factory_(NULL, 85 factory_(NULL,
79 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, 86 base::Bind(&TestURLFetcherCallback::CreateURLFetcher,
80 base::Unretained(&url_callback_))) {} 87 base::Unretained(&url_callback_))),
88 expected_total_response_bytes_(0) {}
81 89
82 protected: 90 protected:
83 base::MessageLoopForUI loop_; 91 base::MessageLoopForUI loop_;
84 scoped_refptr<net::TestURLRequestContextGetter> request_context_; 92 scoped_refptr<net::TestURLRequestContextGetter> request_context_;
85 TestURLFetcherCallback url_callback_; 93 TestURLFetcherCallback url_callback_;
86 net::FakeURLFetcherFactory factory_; 94 net::FakeURLFetcherFactory factory_;
87 TestPrecacheDelegate precache_delegate_; 95 TestPrecacheDelegate precache_delegate_;
96 int expected_total_response_bytes_;
88 }; 97 };
89 98
90 const char kConfigURL[] = "http://config-url.com"; 99 const char kConfigURL[] = "http://config-url.com";
91 const char kManifestURLPrefix[] = "http://manifest-url-prefix.com/"; 100 const char kManifestURLPrefix[] = "http://manifest-url-prefix.com/";
92 const char kCustomManifestURLPrefix[] = 101 const char kCustomManifestURLPrefix[] =
93 "http://custom-manifest-url-prefix.com/"; 102 "http://custom-manifest-url-prefix.com/";
94 const char kManifestFetchFailureURL[] = 103 const char kManifestFetchFailureURL[] =
95 "http://manifest-url-prefix.com/manifest-fetch-failure.com"; 104 "http://manifest-url-prefix.com/manifest-fetch-failure.com";
96 const char kBadManifestURL[] = 105 const char kBadManifestURL[] =
97 "http://manifest-url-prefix.com/bad-manifest.com"; 106 "http://manifest-url-prefix.com/bad-manifest.com";
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 net::URLRequestStatus::SUCCESS); 148 net::URLRequestStatus::SUCCESS);
140 factory_.SetFakeResponse(GURL(kResourceFetchFailureURL), 149 factory_.SetFakeResponse(GURL(kResourceFetchFailureURL),
141 "", net::HTTP_INTERNAL_SERVER_ERROR, 150 "", net::HTTP_INTERNAL_SERVER_ERROR,
142 net::URLRequestStatus::FAILED); 151 net::URLRequestStatus::FAILED);
143 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 152 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
144 net::URLRequestStatus::SUCCESS); 153 net::URLRequestStatus::SUCCESS);
145 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), 154 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL),
146 PrecacheManifest().SerializeAsString(), net::HTTP_OK, 155 PrecacheManifest().SerializeAsString(), net::HTTP_OK,
147 net::URLRequestStatus::SUCCESS); 156 net::URLRequestStatus::SUCCESS);
148 157
149 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), 158 base::HistogramTester histogram;
150 std::string(), &precache_delegate_);
151 precache_fetcher.Start();
152 159
153 base::MessageLoop::current()->RunUntilIdle(); 160 {
161 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
162 std::string(), &precache_delegate_);
163 precache_fetcher.Start();
164
165 base::MessageLoop::current()->RunUntilIdle();
166
167 // Destroy the PrecacheFetcher after it has finished, to record metrics.
168 }
154 169
155 std::multiset<GURL> expected_requested_urls; 170 std::multiset<GURL> expected_requested_urls;
156 expected_requested_urls.insert(GURL(kConfigURL)); 171 expected_requested_urls.insert(GURL(kConfigURL));
157 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); 172 expected_requested_urls.insert(GURL(kManifestFetchFailureURL));
158 expected_requested_urls.insert(GURL(kBadManifestURL)); 173 expected_requested_urls.insert(GURL(kBadManifestURL));
159 expected_requested_urls.insert(GURL(kGoodManifestURL)); 174 expected_requested_urls.insert(GURL(kGoodManifestURL));
160 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); 175 expected_requested_urls.insert(GURL(kResourceFetchFailureURL));
161 expected_requested_urls.insert(GURL(kGoodResourceURL)); 176 expected_requested_urls.insert(GURL(kGoodResourceURL));
162 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL)); 177 expected_requested_urls.insert(GURL(kForcedStartingURLManifestURL));
163 178
164 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 179 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
165 180
166 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 181 EXPECT_TRUE(precache_delegate_.was_on_done_called());
182
183 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
184 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes",
185 url_callback_.total_response_bytes(), 1);
167 } 186 }
168 187
169 TEST_F(PrecacheFetcherTest, CustomManifestURLPrefix) { 188 TEST_F(PrecacheFetcherTest, CustomManifestURLPrefix) {
170 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 189 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
171 switches::kPrecacheConfigSettingsURL, kConfigURL); 190 switches::kPrecacheConfigSettingsURL, kConfigURL);
172 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 191 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
173 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); 192 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix);
174 193
175 std::vector<std::string> starting_hosts; 194 std::vector<std::string> starting_hosts;
176 starting_hosts.push_back("good-manifest.com"); 195 starting_hosts.push_back("good-manifest.com");
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 switches::kPrecacheConfigSettingsURL, kConfigURL); 284 switches::kPrecacheConfigSettingsURL, kConfigURL);
266 285
267 std::vector<std::string> starting_hosts(1, "starting-url.com"); 286 std::vector<std::string> starting_hosts(1, "starting-url.com");
268 287
269 PrecacheConfigurationSettings config; 288 PrecacheConfigurationSettings config;
270 config.set_top_sites_count(1); 289 config.set_top_sites_count(1);
271 290
272 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 291 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
273 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 292 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
274 293
275 scoped_ptr<PrecacheFetcher> precache_fetcher( 294 base::HistogramTester histogram;
276 new PrecacheFetcher(starting_hosts, request_context_.get(), std::string(),
277 &precache_delegate_));
278 precache_fetcher->Start();
279 295
280 // Destroy the PrecacheFetcher to cancel precaching. This should not cause 296 {
281 // OnDone to be called on the precache delegate. 297 PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
282 precache_fetcher.reset(); 298 std::string(), &precache_delegate_);
299 precache_fetcher.Start();
300
301 // Destroy the PrecacheFetcher, to cancel precaching and record metrics.
302 // This should not cause OnDone to be called on the precache delegate.
303 }
283 304
284 base::MessageLoop::current()->RunUntilIdle(); 305 base::MessageLoop::current()->RunUntilIdle();
285 306
286 std::multiset<GURL> expected_requested_urls; 307 std::multiset<GURL> expected_requested_urls;
287 expected_requested_urls.insert(GURL(kConfigURL)); 308 expected_requested_urls.insert(GURL(kConfigURL));
288 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 309 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
289 310
290 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 311 EXPECT_FALSE(precache_delegate_.was_on_done_called());
312
313 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 0, 1);
314 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes", 0, 1);
291 } 315 }
292 316
293 #if defined(PRECACHE_CONFIG_SETTINGS_URL) 317 #if defined(PRECACHE_CONFIG_SETTINGS_URL)
294 318
295 // If the default precache configuration settings URL is defined, then test that 319 // If the default precache configuration settings URL is defined, then test that
296 // it works with the PrecacheFetcher. 320 // it works with the PrecacheFetcher.
297 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { 321 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
298 std::vector<std::string> starting_hosts(1, "starting-url.com"); 322 std::vector<std::string> starting_hosts(1, "starting-url.com");
299 323
300 PrecacheConfigurationSettings config; 324 PrecacheConfigurationSettings config;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 375 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
352 376
353 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 377 EXPECT_TRUE(precache_delegate_.was_on_done_called());
354 } 378 }
355 379
356 #endif // PRECACHE_MANIFEST_URL_PREFIX 380 #endif // PRECACHE_MANIFEST_URL_PREFIX
357 381
358 } // namespace 382 } // namespace
359 383
360 } // namespace precache 384 } // namespace precache
OLDNEW
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | net/url_request/test_url_fetcher_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698