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_database.h" | 5 #include "components/precache/core/precache_database.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "url/gurl.h" | 25 #include "url/gurl.h" |
26 | 26 |
27 namespace { | 27 namespace { |
28 | 28 |
29 using ::testing::ContainerEq; | 29 using ::testing::ContainerEq; |
30 using ::testing::ElementsAre; | 30 using ::testing::ElementsAre; |
31 using base::Bucket; | 31 using base::Bucket; |
32 using net::HttpResponseInfo; | 32 using net::HttpResponseInfo; |
33 | 33 |
34 const GURL kURL("http://url.com"); | 34 const GURL kURL("http://url.com"); |
| 35 const int kReferrerID = 1; |
35 const base::TimeDelta kLatency = base::TimeDelta::FromMilliseconds(5); | 36 const base::TimeDelta kLatency = base::TimeDelta::FromMilliseconds(5); |
36 const base::Time kFetchTime = base::Time() + base::TimeDelta::FromHours(1000); | 37 const base::Time kFetchTime = base::Time() + base::TimeDelta::FromHours(1000); |
37 const base::Time kOldFetchTime = kFetchTime - base::TimeDelta::FromDays(1); | 38 const base::Time kOldFetchTime = kFetchTime - base::TimeDelta::FromDays(1); |
38 const int64_t kSize = 5000; | 39 const int64_t kSize = 5000; |
39 const int64_t kFreshnessBucket10K = 9089; | 40 const int64_t kFreshnessBucket10K = 9089; |
40 // One of the possible CacheEntryStatus for when the fetch was served from the | 41 // One of the possible CacheEntryStatus for when the fetch was served from the |
41 // network. | 42 // network. |
42 const HttpResponseInfo::CacheEntryStatus kFromNetwork = | 43 const HttpResponseInfo::CacheEntryStatus kFromNetwork = |
43 HttpResponseInfo::CacheEntryStatus::ENTRY_UPDATED; | 44 HttpResponseInfo::CacheEntryStatus::ENTRY_UPDATED; |
44 | 45 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 } | 162 } |
162 }; | 163 }; |
163 | 164 |
164 void PrecacheDatabaseTest::RecordPrecacheFromNetwork( | 165 void PrecacheDatabaseTest::RecordPrecacheFromNetwork( |
165 const GURL& url, | 166 const GURL& url, |
166 base::TimeDelta latency, | 167 base::TimeDelta latency, |
167 const base::Time& fetch_time, | 168 const base::Time& fetch_time, |
168 int64_t size) { | 169 int64_t size) { |
169 const HttpResponseInfo info = CreateHttpResponseInfo( | 170 const HttpResponseInfo info = CreateHttpResponseInfo( |
170 false /* was_cached */, false /* network_accessed */); | 171 false /* was_cached */, false /* network_accessed */); |
171 precache_database_->RecordURLPrefetch(url, latency, fetch_time, info, size); | 172 precache_database_->RecordURLPrefetchMetrics(info, latency); |
| 173 precache_database_->RecordURLPrefetch(url, std::string(), fetch_time, |
| 174 info.was_cached, size); |
172 } | 175 } |
173 | 176 |
174 void PrecacheDatabaseTest::RecordPrecacheFromCache(const GURL& url, | 177 void PrecacheDatabaseTest::RecordPrecacheFromCache(const GURL& url, |
175 const base::Time& fetch_time, | 178 const base::Time& fetch_time, |
176 int64_t size) { | 179 int64_t size) { |
177 const HttpResponseInfo info = CreateHttpResponseInfo( | 180 const HttpResponseInfo info = CreateHttpResponseInfo( |
178 true /* was_cached */, false /* network_accessed */); | 181 true /* was_cached */, false /* network_accessed */); |
179 precache_database_->RecordURLPrefetch(url, base::TimeDelta() /* latency */, | 182 precache_database_->RecordURLPrefetchMetrics(info, |
180 fetch_time, info, size); | 183 base::TimeDelta() /* latency */); |
| 184 precache_database_->RecordURLPrefetch(url, std::string(), fetch_time, |
| 185 info.was_cached, size); |
181 } | 186 } |
182 | 187 |
183 void PrecacheDatabaseTest::RecordFetchFromNetwork(const GURL& url, | 188 void PrecacheDatabaseTest::RecordFetchFromNetwork(const GURL& url, |
184 base::TimeDelta latency, | 189 base::TimeDelta latency, |
185 const base::Time& fetch_time, | 190 const base::Time& fetch_time, |
186 int64_t size) { | 191 int64_t size) { |
187 const HttpResponseInfo info = CreateHttpResponseInfo( | 192 const HttpResponseInfo info = CreateHttpResponseInfo( |
188 false /* was_cached */, false /* network_accessed */); | 193 false /* was_cached */, false /* network_accessed */); |
189 precache_database_->RecordURLNonPrefetch(url, latency, fetch_time, info, size, | 194 precache_database_->RecordURLNonPrefetch(url, latency, fetch_time, info, size, |
190 history::kMaxTopHosts, | 195 history::kMaxTopHosts, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 | 248 |
244 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); | 249 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); |
245 | 250 |
246 ExpectNewSample("Precache.DownloadedPrecacheMotivated", kSize); | 251 ExpectNewSample("Precache.DownloadedPrecacheMotivated", kSize); |
247 ExpectNewSample("Precache.Latency.Prefetch", kLatency.InMilliseconds()); | 252 ExpectNewSample("Precache.Latency.Prefetch", kLatency.InMilliseconds()); |
248 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); | 253 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); |
249 ExpectNoOtherSamples(); | 254 ExpectNoOtherSamples(); |
250 } | 255 } |
251 | 256 |
252 TEST_F(PrecacheDatabaseTest, PrecacheFromCacheWithURLTableEntry) { | 257 TEST_F(PrecacheDatabaseTest, PrecacheFromCacheWithURLTableEntry) { |
253 precache_url_table()->AddURL(kURL, kOldFetchTime); | 258 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime); |
254 RecordPrecacheFromCache(kURL, kFetchTime, kSize); | 259 RecordPrecacheFromCache(kURL, kFetchTime, kSize); |
255 | 260 |
256 // The URL table entry should have been updated to have |kFetchTime| as the | 261 // The URL table entry should have been updated to have |kFetchTime| as the |
257 // timestamp. | 262 // timestamp. |
258 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); | 263 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); |
259 | 264 |
260 ExpectNewSample("Precache.Latency.Prefetch", 0); | 265 ExpectNewSample("Precache.Latency.Prefetch", 0); |
261 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); | 266 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); |
262 ExpectNoOtherSamples(); | 267 ExpectNoOtherSamples(); |
263 } | 268 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); | 311 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); |
307 ExpectNewSample("Precache.DownloadedNonPrecache.Cellular", kSize); | 312 ExpectNewSample("Precache.DownloadedNonPrecache.Cellular", kSize); |
308 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); | 313 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); |
309 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); | 314 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); |
310 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", | 315 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", |
311 kLatency.InMilliseconds()); | 316 kLatency.InMilliseconds()); |
312 ExpectNoOtherSamples(); | 317 ExpectNoOtherSamples(); |
313 } | 318 } |
314 | 319 |
315 TEST_F(PrecacheDatabaseTest, FetchOverNetworkWithURLTableEntry) { | 320 TEST_F(PrecacheDatabaseTest, FetchOverNetworkWithURLTableEntry) { |
316 precache_url_table()->AddURL(kURL, kOldFetchTime); | 321 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime); |
317 RecordFetchFromNetwork(kURL, kLatency, kFetchTime, kSize); | 322 RecordFetchFromNetwork(kURL, kLatency, kFetchTime, kSize); |
318 | 323 |
319 // The URL table entry should have been deleted. | 324 // The URL table entry should have been deleted. |
320 EXPECT_TRUE(GetActualURLTableMap().empty()); | 325 EXPECT_TRUE(GetActualURLTableMap().empty()); |
321 | 326 |
322 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); | 327 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); |
323 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); | 328 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); |
324 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", | 329 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", |
325 kLatency.InMilliseconds()); | 330 kLatency.InMilliseconds()); |
326 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); | 331 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); |
327 ExpectNoOtherSamples(); | 332 ExpectNoOtherSamples(); |
328 } | 333 } |
329 | 334 |
330 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_NonCellular) { | 335 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_NonCellular) { |
331 precache_url_table()->AddURL(kURL, kOldFetchTime); | 336 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime); |
332 RecordFetchFromCache(kURL, kFetchTime, kSize); | 337 RecordFetchFromCache(kURL, kFetchTime, kSize); |
333 | 338 |
334 // The URL table entry should have been deleted. | 339 // The URL table entry should have been deleted. |
335 EXPECT_TRUE(GetActualURLTableMap().empty()); | 340 EXPECT_TRUE(GetActualURLTableMap().empty()); |
336 | 341 |
337 ExpectNewSample("Precache.Latency.NonPrefetch", 0); | 342 ExpectNewSample("Precache.Latency.NonPrefetch", 0); |
338 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); | 343 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); |
339 ExpectNewSample("Precache.CacheStatus.NonPrefetch", | 344 ExpectNewSample("Precache.CacheStatus.NonPrefetch", |
340 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); | 345 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); |
341 ExpectNewSample("Precache.Saved", kSize); | 346 ExpectNewSample("Precache.Saved", kSize); |
342 ExpectNewSample("Precache.Saved.Freshness", kFreshnessBucket10K); | 347 ExpectNewSample("Precache.Saved.Freshness", kFreshnessBucket10K); |
343 ExpectNoOtherSamples(); | 348 ExpectNoOtherSamples(); |
344 } | 349 } |
345 | 350 |
346 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_Cellular) { | 351 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_Cellular) { |
347 precache_url_table()->AddURL(kURL, kOldFetchTime); | 352 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime); |
348 RecordFetchFromCacheCellular(kURL, kFetchTime, kSize); | 353 RecordFetchFromCacheCellular(kURL, kFetchTime, kSize); |
349 | 354 |
350 // The URL table entry should have been deleted. | 355 // The URL table entry should have been deleted. |
351 EXPECT_TRUE(GetActualURLTableMap().empty()); | 356 EXPECT_TRUE(GetActualURLTableMap().empty()); |
352 | 357 |
353 ExpectNewSample("Precache.Latency.NonPrefetch", 0); | 358 ExpectNewSample("Precache.Latency.NonPrefetch", 0); |
354 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); | 359 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); |
355 ExpectNewSample("Precache.CacheStatus.NonPrefetch", | 360 ExpectNewSample("Precache.CacheStatus.NonPrefetch", |
356 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); | 361 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); |
357 ExpectNewSample("Precache.Saved", kSize); | 362 ExpectNewSample("Precache.Saved", kSize); |
(...skipping 12 matching lines...) Expand all Loading... |
370 ExpectNewSample("Precache.CacheStatus.NonPrefetch", | 375 ExpectNewSample("Precache.CacheStatus.NonPrefetch", |
371 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); | 376 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); |
372 ExpectNoOtherSamples(); | 377 ExpectNoOtherSamples(); |
373 } | 378 } |
374 | 379 |
375 TEST_F(PrecacheDatabaseTest, DeleteExpiredPrecacheHistory) { | 380 TEST_F(PrecacheDatabaseTest, DeleteExpiredPrecacheHistory) { |
376 const base::Time kToday = base::Time() + base::TimeDelta::FromDays(1000); | 381 const base::Time kToday = base::Time() + base::TimeDelta::FromDays(1000); |
377 const base::Time k59DaysAgo = kToday - base::TimeDelta::FromDays(59); | 382 const base::Time k59DaysAgo = kToday - base::TimeDelta::FromDays(59); |
378 const base::Time k61DaysAgo = kToday - base::TimeDelta::FromDays(61); | 383 const base::Time k61DaysAgo = kToday - base::TimeDelta::FromDays(61); |
379 | 384 |
380 precache_url_table()->AddURL(GURL("http://expired-precache.com"), k61DaysAgo); | 385 precache_url_table()->AddURL(GURL("http://expired-precache.com"), kReferrerID, |
381 precache_url_table()->AddURL(GURL("http://old-precache.com"), k59DaysAgo); | 386 true, k61DaysAgo); |
| 387 precache_url_table()->AddURL(GURL("http://old-precache.com"), kReferrerID, |
| 388 true, k59DaysAgo); |
382 | 389 |
383 precache_database_->DeleteExpiredPrecacheHistory(kToday); | 390 precache_database_->DeleteExpiredPrecacheHistory(kToday); |
384 | 391 |
385 EXPECT_EQ(BuildURLTableMap(GURL("http://old-precache.com"), k59DaysAgo), | 392 EXPECT_EQ(BuildURLTableMap(GURL("http://old-precache.com"), k59DaysAgo), |
386 GetActualURLTableMap()); | 393 GetActualURLTableMap()); |
387 } | 394 } |
388 | 395 |
389 TEST_F(PrecacheDatabaseTest, SampleInteraction) { | 396 TEST_F(PrecacheDatabaseTest, SampleInteraction) { |
390 const GURL kURL1("http://url1.com"); | 397 const GURL kURL1("http://url1.com"); |
391 const int64_t kSize1 = 1; | 398 const int64_t kSize1 = 1; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 false /* network_accessed */); | 484 false /* network_accessed */); |
478 RecordPrecacheFromNetwork(kURL, kLatency, kFetchTime, kSize); | 485 RecordPrecacheFromNetwork(kURL, kLatency, kFetchTime, kSize); |
479 | 486 |
480 EXPECT_THAT(histograms_.GetAllSamples("Precache.Freshness.Prefetch"), | 487 EXPECT_THAT(histograms_.GetAllSamples("Precache.Freshness.Prefetch"), |
481 ElementsAre(Bucket(kFreshnessBucket10K, 1))); | 488 ElementsAre(Bucket(kFreshnessBucket10K, 1))); |
482 } | 489 } |
483 | 490 |
484 } // namespace | 491 } // namespace |
485 | 492 |
486 } // namespace precache | 493 } // namespace precache |
OLD | NEW |