| 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 |