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

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

Issue 2229983002: Send the list of used and unused resources for precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits Created 4 years, 3 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_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
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);
39 const base::Time kNewFetchTime =
40 base::Time() + base::TimeDelta::FromHours(2000);
38 const int64_t kSize = 5000; 41 const int64_t kSize = 5000;
39 const int64_t kFreshnessBucket10K = 9089; 42 const int64_t kFreshnessBucket10K = 9089;
40 // One of the possible CacheEntryStatus for when the fetch was served from the 43 // One of the possible CacheEntryStatus for when the fetch was served from the
41 // network. 44 // network.
42 const HttpResponseInfo::CacheEntryStatus kFromNetwork = 45 const HttpResponseInfo::CacheEntryStatus kFromNetwork =
43 HttpResponseInfo::CacheEntryStatus::ENTRY_UPDATED; 46 HttpResponseInfo::CacheEntryStatus::ENTRY_UPDATED;
44 47
45 std::map<GURL, base::Time> BuildURLTableMap(const GURL& url, 48 std::map<GURL, base::Time> BuildURLTableMap(const GURL& url,
46 const base::Time& precache_time) { 49 const base::Time& precache_time) {
47 std::map<GURL, base::Time> url_table_map; 50 std::map<GURL, base::Time> url_table_map;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 PrecacheDatabaseTest() {} 89 PrecacheDatabaseTest() {}
87 ~PrecacheDatabaseTest() override {} 90 ~PrecacheDatabaseTest() override {}
88 91
89 protected: 92 protected:
90 void SetUp() override { 93 void SetUp() override {
91 precache_database_.reset(new PrecacheDatabase()); 94 precache_database_.reset(new PrecacheDatabase());
92 95
93 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); 96 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
94 base::FilePath db_path = scoped_temp_dir_.path().Append( 97 base::FilePath db_path = scoped_temp_dir_.path().Append(
95 base::FilePath(FILE_PATH_LITERAL("precache_database"))); 98 base::FilePath(FILE_PATH_LITERAL("precache_database")));
96 precache_database_->Init(db_path); 99 ASSERT_TRUE(precache_database_->Init(db_path));
97 } 100 }
98 101
99 std::map<GURL, base::Time> GetActualURLTableMap() { 102 std::map<GURL, base::Time> GetActualURLTableMap() {
100 // Flush any buffered writes so that the URL table will be up to date. 103 // Flush any buffered writes so that the URL table will be up to date.
101 precache_database_->Flush(); 104 precache_database_->Flush();
102 105
103 std::map<GURL, base::Time> url_table_map; 106 std::map<GURL, base::Time> url_table_map;
104 precache_url_table()->GetAllDataForTesting(&url_table_map); 107 precache_url_table()->GetAllDataForTesting(&url_table_map);
105 return url_table_map; 108 return url_table_map;
106 } 109 }
107 110
108 PrecacheURLTable* precache_url_table() { 111 PrecacheURLTable* precache_url_table() {
109 return &precache_database_->precache_url_table_; 112 return &precache_database_->precache_url_table_;
110 } 113 }
111 114
115 void Flush() { precache_database_->Flush(); }
116
112 // Convenience methods for recording different types of URL fetches. These 117 // Convenience methods for recording different types of URL fetches. These
113 // exist to improve the readability of the tests. 118 // exist to improve the readability of the tests.
114 void RecordPrecacheFromNetwork(const GURL& url, 119 void RecordPrecacheFromNetwork(const GURL& url,
115 base::TimeDelta latency, 120 base::TimeDelta latency,
116 const base::Time& fetch_time, 121 const base::Time& fetch_time,
117 int64_t size); 122 int64_t size);
118 void RecordPrecacheFromCache(const GURL& url, 123 void RecordPrecacheFromCache(const GURL& url,
119 const base::Time& fetch_time, 124 const base::Time& fetch_time,
120 int64_t size); 125 int64_t size);
121 void RecordFetchFromNetwork(const GURL& url, 126 void RecordFetchFromNetwork(const GURL& url,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 } 166 }
162 }; 167 };
163 168
164 void PrecacheDatabaseTest::RecordPrecacheFromNetwork( 169 void PrecacheDatabaseTest::RecordPrecacheFromNetwork(
165 const GURL& url, 170 const GURL& url,
166 base::TimeDelta latency, 171 base::TimeDelta latency,
167 const base::Time& fetch_time, 172 const base::Time& fetch_time,
168 int64_t size) { 173 int64_t size) {
169 const HttpResponseInfo info = CreateHttpResponseInfo( 174 const HttpResponseInfo info = CreateHttpResponseInfo(
170 false /* was_cached */, false /* network_accessed */); 175 false /* was_cached */, false /* network_accessed */);
171 precache_database_->RecordURLPrefetch(url, latency, fetch_time, info, size); 176 precache_database_->RecordURLPrefetchMetrics(info, latency);
177 precache_database_->RecordURLPrefetch(url, std::string(), fetch_time,
178 info.was_cached, size);
172 } 179 }
173 180
174 void PrecacheDatabaseTest::RecordPrecacheFromCache(const GURL& url, 181 void PrecacheDatabaseTest::RecordPrecacheFromCache(const GURL& url,
175 const base::Time& fetch_time, 182 const base::Time& fetch_time,
176 int64_t size) { 183 int64_t size) {
177 const HttpResponseInfo info = CreateHttpResponseInfo( 184 const HttpResponseInfo info = CreateHttpResponseInfo(
178 true /* was_cached */, false /* network_accessed */); 185 true /* was_cached */, false /* network_accessed */);
179 precache_database_->RecordURLPrefetch(url, base::TimeDelta() /* latency */, 186 precache_database_->RecordURLPrefetchMetrics(info,
180 fetch_time, info, size); 187 base::TimeDelta() /* latency */);
188 precache_database_->RecordURLPrefetch(url, std::string(), fetch_time,
189 info.was_cached, size);
181 } 190 }
182 191
183 void PrecacheDatabaseTest::RecordFetchFromNetwork(const GURL& url, 192 void PrecacheDatabaseTest::RecordFetchFromNetwork(const GURL& url,
184 base::TimeDelta latency, 193 base::TimeDelta latency,
185 const base::Time& fetch_time, 194 const base::Time& fetch_time,
186 int64_t size) { 195 int64_t size) {
187 const HttpResponseInfo info = CreateHttpResponseInfo( 196 const HttpResponseInfo info = CreateHttpResponseInfo(
188 false /* was_cached */, false /* network_accessed */); 197 false /* was_cached */, false /* network_accessed */);
189 precache_database_->RecordURLNonPrefetch(url, latency, fetch_time, info, size, 198 precache_database_->RecordURLNonPrefetch(url, latency, fetch_time, info, size,
190 history::kMaxTopHosts, 199 history::kMaxTopHosts,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 252
244 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); 253 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap());
245 254
246 ExpectNewSample("Precache.DownloadedPrecacheMotivated", kSize); 255 ExpectNewSample("Precache.DownloadedPrecacheMotivated", kSize);
247 ExpectNewSample("Precache.Latency.Prefetch", kLatency.InMilliseconds()); 256 ExpectNewSample("Precache.Latency.Prefetch", kLatency.InMilliseconds());
248 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); 257 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K);
249 ExpectNoOtherSamples(); 258 ExpectNoOtherSamples();
250 } 259 }
251 260
252 TEST_F(PrecacheDatabaseTest, PrecacheFromCacheWithURLTableEntry) { 261 TEST_F(PrecacheDatabaseTest, PrecacheFromCacheWithURLTableEntry) {
253 precache_url_table()->AddURL(kURL, kOldFetchTime); 262 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime);
254 RecordPrecacheFromCache(kURL, kFetchTime, kSize); 263 RecordPrecacheFromCache(kURL, kFetchTime, kSize);
255 264
256 // The URL table entry should have been updated to have |kFetchTime| as the 265 // The URL table entry should have been updated to have |kFetchTime| as the
257 // timestamp. 266 // timestamp.
258 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap()); 267 EXPECT_EQ(BuildURLTableMap(kURL, kFetchTime), GetActualURLTableMap());
259 268
260 ExpectNewSample("Precache.Latency.Prefetch", 0); 269 ExpectNewSample("Precache.Latency.Prefetch", 0);
261 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K); 270 ExpectNewSample("Precache.Freshness.Prefetch", kFreshnessBucket10K);
262 ExpectNoOtherSamples(); 271 ExpectNoOtherSamples();
263 } 272 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); 315 ExpectNewSample("Precache.DownloadedNonPrecache", kSize);
307 ExpectNewSample("Precache.DownloadedNonPrecache.Cellular", kSize); 316 ExpectNewSample("Precache.DownloadedNonPrecache.Cellular", kSize);
308 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); 317 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork);
309 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); 318 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds());
310 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 319 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts",
311 kLatency.InMilliseconds()); 320 kLatency.InMilliseconds());
312 ExpectNoOtherSamples(); 321 ExpectNoOtherSamples();
313 } 322 }
314 323
315 TEST_F(PrecacheDatabaseTest, FetchOverNetworkWithURLTableEntry) { 324 TEST_F(PrecacheDatabaseTest, FetchOverNetworkWithURLTableEntry) {
316 precache_url_table()->AddURL(kURL, kOldFetchTime); 325 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime);
317 RecordFetchFromNetwork(kURL, kLatency, kFetchTime, kSize); 326 RecordFetchFromNetwork(kURL, kLatency, kFetchTime, kSize);
318 327
319 // The URL table entry should have been deleted. 328 // The URL table entry should have been deleted.
320 EXPECT_TRUE(GetActualURLTableMap().empty()); 329 EXPECT_TRUE(GetActualURLTableMap().empty());
321 330
322 ExpectNewSample("Precache.DownloadedNonPrecache", kSize); 331 ExpectNewSample("Precache.DownloadedNonPrecache", kSize);
323 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds()); 332 ExpectNewSample("Precache.Latency.NonPrefetch", kLatency.InMilliseconds());
324 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 333 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts",
325 kLatency.InMilliseconds()); 334 kLatency.InMilliseconds());
326 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork); 335 ExpectNewSample("Precache.CacheStatus.NonPrefetch", kFromNetwork);
327 ExpectNoOtherSamples(); 336 ExpectNoOtherSamples();
328 } 337 }
329 338
330 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_NonCellular) { 339 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_NonCellular) {
331 precache_url_table()->AddURL(kURL, kOldFetchTime); 340 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime);
332 RecordFetchFromCache(kURL, kFetchTime, kSize); 341 RecordFetchFromCache(kURL, kFetchTime, kSize);
333 342
334 // The URL table entry should have been deleted. 343 // The URL table entry should have been deleted.
335 EXPECT_TRUE(GetActualURLTableMap().empty()); 344 EXPECT_TRUE(GetActualURLTableMap().empty());
336 345
337 ExpectNewSample("Precache.Latency.NonPrefetch", 0); 346 ExpectNewSample("Precache.Latency.NonPrefetch", 0);
338 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); 347 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0);
339 ExpectNewSample("Precache.CacheStatus.NonPrefetch", 348 ExpectNewSample("Precache.CacheStatus.NonPrefetch",
340 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); 349 HttpResponseInfo::CacheEntryStatus::ENTRY_USED);
341 ExpectNewSample("Precache.Saved", kSize); 350 ExpectNewSample("Precache.Saved", kSize);
342 ExpectNewSample("Precache.Saved.Freshness", kFreshnessBucket10K); 351 ExpectNewSample("Precache.Saved.Freshness", kFreshnessBucket10K);
343 ExpectNoOtherSamples(); 352 ExpectNoOtherSamples();
344 } 353 }
345 354
346 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_Cellular) { 355 TEST_F(PrecacheDatabaseTest, FetchFromCacheWithURLTableEntry_Cellular) {
347 precache_url_table()->AddURL(kURL, kOldFetchTime); 356 precache_url_table()->AddURL(kURL, kReferrerID, true, kOldFetchTime);
348 RecordFetchFromCacheCellular(kURL, kFetchTime, kSize); 357 RecordFetchFromCacheCellular(kURL, kFetchTime, kSize);
349 358
350 // The URL table entry should have been deleted. 359 // The URL table entry should have been deleted.
351 EXPECT_TRUE(GetActualURLTableMap().empty()); 360 EXPECT_TRUE(GetActualURLTableMap().empty());
352 361
353 ExpectNewSample("Precache.Latency.NonPrefetch", 0); 362 ExpectNewSample("Precache.Latency.NonPrefetch", 0);
354 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0); 363 ExpectNewSample("Precache.Latency.NonPrefetch.NonTopHosts", 0);
355 ExpectNewSample("Precache.CacheStatus.NonPrefetch", 364 ExpectNewSample("Precache.CacheStatus.NonPrefetch",
356 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); 365 HttpResponseInfo::CacheEntryStatus::ENTRY_USED);
357 ExpectNewSample("Precache.Saved", kSize); 366 ExpectNewSample("Precache.Saved", kSize);
(...skipping 12 matching lines...) Expand all
370 ExpectNewSample("Precache.CacheStatus.NonPrefetch", 379 ExpectNewSample("Precache.CacheStatus.NonPrefetch",
371 HttpResponseInfo::CacheEntryStatus::ENTRY_USED); 380 HttpResponseInfo::CacheEntryStatus::ENTRY_USED);
372 ExpectNoOtherSamples(); 381 ExpectNoOtherSamples();
373 } 382 }
374 383
375 TEST_F(PrecacheDatabaseTest, DeleteExpiredPrecacheHistory) { 384 TEST_F(PrecacheDatabaseTest, DeleteExpiredPrecacheHistory) {
376 const base::Time kToday = base::Time() + base::TimeDelta::FromDays(1000); 385 const base::Time kToday = base::Time() + base::TimeDelta::FromDays(1000);
377 const base::Time k59DaysAgo = kToday - base::TimeDelta::FromDays(59); 386 const base::Time k59DaysAgo = kToday - base::TimeDelta::FromDays(59);
378 const base::Time k61DaysAgo = kToday - base::TimeDelta::FromDays(61); 387 const base::Time k61DaysAgo = kToday - base::TimeDelta::FromDays(61);
379 388
380 precache_url_table()->AddURL(GURL("http://expired-precache.com"), k61DaysAgo); 389 precache_url_table()->AddURL(GURL("http://expired-precache.com"), kReferrerID,
381 precache_url_table()->AddURL(GURL("http://old-precache.com"), k59DaysAgo); 390 true, k61DaysAgo);
391 precache_url_table()->AddURL(GURL("http://old-precache.com"), kReferrerID,
392 true, k59DaysAgo);
382 393
383 precache_database_->DeleteExpiredPrecacheHistory(kToday); 394 precache_database_->DeleteExpiredPrecacheHistory(kToday);
384 395
385 EXPECT_EQ(BuildURLTableMap(GURL("http://old-precache.com"), k59DaysAgo), 396 EXPECT_EQ(BuildURLTableMap(GURL("http://old-precache.com"), k59DaysAgo),
386 GetActualURLTableMap()); 397 GetActualURLTableMap());
387 } 398 }
388 399
389 TEST_F(PrecacheDatabaseTest, SampleInteraction) { 400 TEST_F(PrecacheDatabaseTest, SampleInteraction) {
390 const GURL kURL1("http://url1.com"); 401 const GURL kURL1("http://url1.com");
391 const int64_t kSize1 = 1; 402 const int64_t kSize1 = 1;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 485
475 TEST_F(PrecacheDatabaseTest, PrecacheFreshnessPrefetch) { 486 TEST_F(PrecacheDatabaseTest, PrecacheFreshnessPrefetch) {
476 auto info = CreateHttpResponseInfo(false /* was_cached */, 487 auto info = CreateHttpResponseInfo(false /* was_cached */,
477 false /* network_accessed */); 488 false /* network_accessed */);
478 RecordPrecacheFromNetwork(kURL, kLatency, kFetchTime, kSize); 489 RecordPrecacheFromNetwork(kURL, kLatency, kFetchTime, kSize);
479 490
480 EXPECT_THAT(histograms_.GetAllSamples("Precache.Freshness.Prefetch"), 491 EXPECT_THAT(histograms_.GetAllSamples("Precache.Freshness.Prefetch"),
481 ElementsAre(Bucket(kFreshnessBucket10K, 1))); 492 ElementsAre(Bucket(kFreshnessBucket10K, 1)));
482 } 493 }
483 494
495 TEST_F(PrecacheDatabaseTest, UpdateAndGetReferrerHost) {
496 // Invalid ID should be returned for referrer host that does not exist.
497 EXPECT_EQ(PrecacheReferrerHostEntry::kInvalidId,
498 precache_database_->GetReferrerHost(std::string()).id);
499 EXPECT_EQ(PrecacheReferrerHostEntry::kInvalidId,
500 precache_database_->GetReferrerHost("not_created_host.com").id);
501
502 // Create a new entry.
503 precache_database_->UpdatePrecacheReferrerHost("foo.com", 1, kFetchTime);
504 Flush();
505 auto actual_entry = precache_database_->GetReferrerHost("foo.com");
506 EXPECT_EQ("foo.com", actual_entry.referrer_host);
507 EXPECT_EQ(1, actual_entry.manifest_id);
508 EXPECT_EQ(kFetchTime, actual_entry.time);
509
510 // Update the existing entry.
511 precache_database_->UpdatePrecacheReferrerHost("foo.com", 2, kNewFetchTime);
512 Flush();
513 actual_entry = precache_database_->GetReferrerHost("foo.com");
514 EXPECT_EQ("foo.com", actual_entry.referrer_host);
515 EXPECT_EQ(2, actual_entry.manifest_id);
516 EXPECT_EQ(kNewFetchTime, actual_entry.time);
517 }
518
519 TEST_F(PrecacheDatabaseTest, GetURLListForReferrerHost) {
520 precache_database_->UpdatePrecacheReferrerHost("foo.com", 1, kFetchTime);
521 precache_database_->UpdatePrecacheReferrerHost("bar.com", 2, kNewFetchTime);
522 precache_database_->UpdatePrecacheReferrerHost("foobar.com", 3,
523 kNewFetchTime);
524 precache_database_->UpdatePrecacheReferrerHost("empty.com", 3, kNewFetchTime);
525
526 struct test_resource_info {
527 std::string url;
528 bool is_network_fetched;
529 bool is_cellular_fetched;
530 bool expected_in_used;
531 };
532
533 const struct {
534 std::string hostname;
535 std::vector<test_resource_info> resource_info;
536 } tests[] = {
537 {
538 "foo.com",
539 {
540 {"http://foo.com/from-cache.js", false, false, true},
541 {"http://some-cdn.com/from-network.js", true, false, false},
542 {"http://foo.com/from-cache-cellular.js", false, true, true},
543 {"http://foo.com/from-network-cellular.js", true, true, false},
544 },
545 },
546 {
547 "bar.com",
548 {
549 {"http://bar.com/a.js", false, false, true},
550 {"http://some-cdn.com/b.js", false, true, true},
551 },
552 },
553 {
554 "foobar.com",
555 {
556 {"http://some-cdn.com/not-used.js", true, true, false},
557 },
558 },
559 {
560 "empty.com", std::vector<test_resource_info>{},
561 },
562 };
563 // Add precached resources.
564 for (const auto& test : tests) {
565 for (const auto& resource : test.resource_info) {
566 precache_database_->RecordURLPrefetch(GURL(resource.url), test.hostname,
567 base::Time(), false, kSize);
568 }
569 }
570 // Update some resources as used due to user browsing.
571 for (const auto& test : tests) {
572 for (const auto& resource : test.resource_info) {
573 if (!resource.is_network_fetched && !resource.is_cellular_fetched) {
574 RecordFetchFromCache(GURL(resource.url), kFetchTime, kSize);
575 } else if (!resource.is_network_fetched && resource.is_cellular_fetched) {
576 RecordFetchFromCacheCellular(GURL(resource.url), kFetchTime, kSize);
577 } else if (resource.is_network_fetched && !resource.is_cellular_fetched) {
578 RecordFetchFromNetwork(GURL(resource.url), kLatency, kFetchTime, kSize);
579 } else if (resource.is_network_fetched && resource.is_cellular_fetched) {
580 RecordFetchFromNetworkCellular(GURL(resource.url), kLatency, kFetchTime,
581 kSize);
582 }
583 }
584 }
585 Flush();
586 // Verify the used and unused resources.
587 for (const auto& test : tests) {
588 std::vector<GURL> expected_used_urls, expected_unused_urls;
589 for (const auto& resource : test.resource_info) {
590 if (resource.expected_in_used) {
591 expected_used_urls.push_back(GURL(resource.url));
592 } else {
593 expected_unused_urls.push_back(GURL(resource.url));
594 }
595 }
596 std::vector<GURL> actual_used_urls, actual_unused_urls;
597 auto referrer_id = precache_database_->GetReferrerHost(test.hostname).id;
598 EXPECT_NE(PrecacheReferrerHostEntry::kInvalidId, referrer_id);
599 precache_database_->GetURLListForReferrerHost(
600 referrer_id, &actual_used_urls, &actual_unused_urls);
601 EXPECT_THAT(expected_used_urls, ::testing::ContainerEq(actual_used_urls));
602 EXPECT_THAT(expected_unused_urls,
603 ::testing::ContainerEq(actual_unused_urls));
604 }
605 // Subsequent manifest updates should clear the used and unused resources.
606 for (const auto& test : tests) {
607 precache_database_->UpdatePrecacheReferrerHost(test.hostname, 100,
608 kNewFetchTime);
609 Flush();
610 std::vector<GURL> actual_used_urls, actual_unused_urls;
611 auto referrer_id = precache_database_->GetReferrerHost(test.hostname).id;
612 EXPECT_NE(PrecacheReferrerHostEntry::kInvalidId, referrer_id);
613 precache_database_->GetURLListForReferrerHost(
614 referrer_id, &actual_used_urls, &actual_unused_urls);
615 EXPECT_TRUE(actual_used_urls.empty());
616 }
617 }
618
484 } // namespace 619 } // namespace
485 620
486 } // namespace precache 621 } // namespace precache
OLDNEW
« no previous file with comments | « components/precache/core/precache_database.cc ('k') | components/precache/core/precache_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698