| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/predictors/resource_prefetch_predictor.h" | 5 #include "chrome/browser/predictors/resource_prefetch_predictor.h" |
| 6 | 6 |
| 7 #include <iostream> | 7 #include <iostream> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 "www.microsoft.com", 10, 0, 0); | 425 "www.microsoft.com", 10, 0, 0); |
| 426 | 426 |
| 427 test_host_redirect_data_.clear(); | 427 test_host_redirect_data_.clear(); |
| 428 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); | 428 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); |
| 429 test_host_redirect_data_.insert( | 429 test_host_redirect_data_.insert( |
| 430 std::make_pair(microsoft.primary_key(), microsoft)); | 430 std::make_pair(microsoft.primary_key(), microsoft)); |
| 431 } | 431 } |
| 432 | 432 |
| 433 { // Manifest data. | 433 { // Manifest data. |
| 434 precache::PrecacheManifest google = CreateManifestData(11); | 434 precache::PrecacheManifest google = CreateManifestData(11); |
| 435 InitializePrecacheResource(google.add_resource(), | 435 InitializePrecacheResource( |
| 436 "http://google.com/script.js", 0.5); | 436 google.add_resource(), "http://google.com/script.js", 0.5, |
| 437 InitializePrecacheResource(google.add_resource(), | 437 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 438 "http://static.google.com/style.css", 0.333); | 438 InitializePrecacheResource( |
| 439 google.add_resource(), "http://static.google.com/style.css", 0.333, |
| 440 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 439 | 441 |
| 440 precache::PrecacheManifest facebook = CreateManifestData(12); | 442 precache::PrecacheManifest facebook = CreateManifestData(12); |
| 441 InitializePrecacheResource(facebook.add_resource(), | 443 InitializePrecacheResource( |
| 442 "http://fb.com/static.css", 0.99); | 444 facebook.add_resource(), "http://fb.com/static.css", 0.99, |
| 445 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 443 | 446 |
| 444 test_manifest_data_.insert(std::make_pair("google.com", google)); | 447 test_manifest_data_.insert(std::make_pair("google.com", google)); |
| 445 test_manifest_data_.insert(std::make_pair("facebook.com", facebook)); | 448 test_manifest_data_.insert(std::make_pair("facebook.com", facebook)); |
| 446 } | 449 } |
| 447 | 450 |
| 448 { // Origin data. | 451 { // Origin data. |
| 449 OriginData google = CreateOriginData("google.com", 12); | 452 OriginData google = CreateOriginData("google.com", 12); |
| 450 InitializeOriginStat(google.add_origins(), "https://static.google.com", 12, | 453 InitializeOriginStat(google.add_origins(), "https://static.google.com", 12, |
| 451 0, 0, 3., false, true); | 454 0, 0, 3., false, true); |
| 452 InitializeOriginStat(google.add_origins(), "https://cats.google.com", 12, 0, | 455 InitializeOriginStat(google.add_origins(), "https://cats.google.com", 12, 0, |
| (...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); | 1093 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
| 1091 | 1094 |
| 1092 predictor_->RecordMainFrameLoadComplete(fb_end); | 1095 predictor_->RecordMainFrameLoadComplete(fb_end); |
| 1093 profile_->BlockUntilHistoryProcessesPendingRequests(); | 1096 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 1094 } | 1097 } |
| 1095 | 1098 |
| 1096 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { | 1099 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { |
| 1097 precache::PrecacheManifest manifest = | 1100 precache::PrecacheManifest manifest = |
| 1098 CreateManifestData(base::Time::Now().ToDoubleT()); | 1101 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1099 InitializePrecacheResource(manifest.add_resource(), | 1102 InitializePrecacheResource(manifest.add_resource(), |
| 1100 "http://cdn.google.com/script.js", 0.9); | 1103 "http://cdn.google.com/script.js", 0.9, |
| 1101 InitializePrecacheResource(manifest.add_resource(), | 1104 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1102 "http://cdn.google.com/style.css", 0.75); | 1105 InitializePrecacheResource( |
| 1106 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1107 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 1103 | 1108 |
| 1104 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1109 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| 1105 | 1110 |
| 1106 predictor_->OnManifestFetched("google.com", manifest); | 1111 predictor_->OnManifestFetched("google.com", manifest); |
| 1107 } | 1112 } |
| 1108 | 1113 |
| 1109 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { | 1114 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { |
| 1110 EXPECT_CALL(*mock_tables_.get(), | 1115 EXPECT_CALL(*mock_tables_.get(), |
| 1111 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1116 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
| 1112 Pointee(ContainerEq(PrefetchDataMap())), | 1117 Pointee(ContainerEq(PrefetchDataMap())), |
| 1113 Pointee(ContainerEq(RedirectDataMap())), | 1118 Pointee(ContainerEq(RedirectDataMap())), |
| 1114 Pointee(ContainerEq(RedirectDataMap())), | 1119 Pointee(ContainerEq(RedirectDataMap())), |
| 1115 Pointee(ContainerEq(ManifestDataMap())), | 1120 Pointee(ContainerEq(ManifestDataMap())), |
| 1116 Pointee(ContainerEq(OriginDataMap())))) | 1121 Pointee(ContainerEq(OriginDataMap())))) |
| 1117 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1122 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
| 1118 ResetPredictor(); | 1123 ResetPredictor(); |
| 1119 InitializePredictor(); | 1124 InitializePredictor(); |
| 1120 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1125 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
| 1121 | 1126 |
| 1122 precache::PrecacheManifest manifest = | 1127 precache::PrecacheManifest manifest = |
| 1123 CreateManifestData(base::Time::Now().ToDoubleT()); | 1128 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1124 InitializePrecacheResource(manifest.add_resource(), | 1129 InitializePrecacheResource(manifest.add_resource(), |
| 1125 "http://google.com/image.jpg", 0.1); | 1130 "http://google.com/image.jpg", 0.1, |
| 1131 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
| 1126 | 1132 |
| 1127 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1133 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| 1128 | 1134 |
| 1129 predictor_->OnManifestFetched("google.com", manifest); | 1135 predictor_->OnManifestFetched("google.com", manifest); |
| 1130 } | 1136 } |
| 1131 | 1137 |
| 1132 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { | 1138 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { |
| 1133 EXPECT_CALL(*mock_tables_.get(), | 1139 EXPECT_CALL(*mock_tables_.get(), |
| 1134 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1140 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
| 1135 Pointee(ContainerEq(PrefetchDataMap())), | 1141 Pointee(ContainerEq(PrefetchDataMap())), |
| 1136 Pointee(ContainerEq(RedirectDataMap())), | 1142 Pointee(ContainerEq(RedirectDataMap())), |
| 1137 Pointee(ContainerEq(RedirectDataMap())), | 1143 Pointee(ContainerEq(RedirectDataMap())), |
| 1138 Pointee(ContainerEq(ManifestDataMap())), | 1144 Pointee(ContainerEq(ManifestDataMap())), |
| 1139 Pointee(ContainerEq(OriginDataMap())))) | 1145 Pointee(ContainerEq(OriginDataMap())))) |
| 1140 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1146 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
| 1141 ResetPredictor(); | 1147 ResetPredictor(); |
| 1142 InitializePredictor(); | 1148 InitializePredictor(); |
| 1143 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1149 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
| 1144 | 1150 |
| 1145 precache::PrecacheManifest manifest = | 1151 precache::PrecacheManifest manifest = |
| 1146 CreateManifestData(base::Time::Now().ToDoubleT()); | 1152 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1147 InitializePrecacheResource(manifest.add_resource(), | 1153 InitializePrecacheResource(manifest.add_resource(), |
| 1148 "http://en.wikipedia.org/logo.png", 1.0); | 1154 "http://en.wikipedia.org/logo.png", 1.0, |
| 1155 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
| 1149 | 1156 |
| 1150 EXPECT_CALL(*mock_tables_.get(), | 1157 EXPECT_CALL(*mock_tables_.get(), |
| 1151 DeleteManifestData(std::vector<std::string>({"google.com"}))); | 1158 DeleteManifestData(std::vector<std::string>({"google.com"}))); |
| 1152 | 1159 |
| 1153 EXPECT_CALL(*mock_tables_.get(), | 1160 EXPECT_CALL(*mock_tables_.get(), |
| 1154 UpdateManifestData("en.wikipedia.org", manifest)); | 1161 UpdateManifestData("en.wikipedia.org", manifest)); |
| 1155 | 1162 |
| 1156 predictor_->OnManifestFetched("en.wikipedia.org", manifest); | 1163 predictor_->OnManifestFetched("en.wikipedia.org", manifest); |
| 1157 } | 1164 } |
| 1158 | 1165 |
| 1159 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { | 1166 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { |
| 1160 precache::PrecacheManifest manifest = | 1167 precache::PrecacheManifest manifest = |
| 1161 CreateManifestData(base::Time::Now().ToDoubleT()); | 1168 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1162 InitializePrecacheResource(manifest.add_resource(), | 1169 InitializePrecacheResource(manifest.add_resource(), |
| 1163 "http://cdn.google.com/script.js", 0.9); | 1170 "http://cdn.google.com/script.js", 0.9, |
| 1164 InitializePrecacheResource(manifest.add_resource(), | 1171 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1165 "http://cdn.google.com/style.css", 0.75); | 1172 InitializePrecacheResource( |
| 1173 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1174 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 1166 | 1175 |
| 1167 precache::PrecacheManifest manifest_with_unknown_fields(manifest); | 1176 precache::PrecacheManifest manifest_with_unknown_fields(manifest); |
| 1168 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( | 1177 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( |
| 1169 "DATA"); | 1178 "DATA"); |
| 1170 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); | 1179 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); |
| 1171 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { | 1180 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { |
| 1172 resource.mutable_unknown_fields()->append("DATA"); | 1181 resource.mutable_unknown_fields()->append("DATA"); |
| 1173 } | 1182 } |
| 1174 | 1183 |
| 1175 int manifest_size = manifest.ByteSize(); | 1184 int manifest_size = manifest.ByteSize(); |
| 1176 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { | 1185 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { |
| 1177 return m.ByteSize() == manifest_size; | 1186 return m.ByteSize() == manifest_size; |
| 1178 }; | 1187 }; |
| 1179 EXPECT_CALL( | 1188 EXPECT_CALL( |
| 1180 *mock_tables_.get(), | 1189 *mock_tables_.get(), |
| 1181 UpdateManifestData("google.com", | 1190 UpdateManifestData("google.com", |
| 1182 testing::AllOf(manifest, testing::Truly(match_size)))); | 1191 testing::AllOf(manifest, testing::Truly(match_size)))); |
| 1183 | 1192 |
| 1184 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); | 1193 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); |
| 1185 } | 1194 } |
| 1186 | 1195 |
| 1187 TEST_F(ResourcePrefetchPredictorTest, ManifestTooOld) { | 1196 TEST_F(ResourcePrefetchPredictorTest, ManifestTooOld) { |
| 1188 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | 1197 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); |
| 1189 precache::PrecacheManifest manifest = | 1198 precache::PrecacheManifest manifest = |
| 1190 CreateManifestData(old_time.ToDoubleT()); | 1199 CreateManifestData(old_time.ToDoubleT()); |
| 1191 InitializePrecacheResource(manifest.add_resource(), | 1200 InitializePrecacheResource(manifest.add_resource(), |
| 1192 "http://cdn.google.com/script.js", 0.9); | 1201 "http://cdn.google.com/script.js", 0.9, |
| 1193 InitializePrecacheResource(manifest.add_resource(), | 1202 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1194 "http://cdn.google.com/style.css", 0.75); | 1203 InitializePrecacheResource( |
| 1204 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1205 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 1195 | 1206 |
| 1196 // No calls to DB should happen. | 1207 // No calls to DB should happen. |
| 1197 predictor_->OnManifestFetched("google.com", manifest); | 1208 predictor_->OnManifestFetched("google.com", manifest); |
| 1198 } | 1209 } |
| 1199 | 1210 |
| 1200 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { | 1211 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { |
| 1201 const std::string& script_url = "http://cdn.google.com/script.js"; | 1212 const std::string& script_url = "http://cdn.google.com/script.js"; |
| 1202 const std::string& style_url = "http://cdn.google.com/style.css"; | 1213 const std::string& style_url = "http://cdn.google.com/style.css"; |
| 1203 PrefetchData google = CreatePrefetchData("www.google.com"); | 1214 PrefetchData google = CreatePrefetchData("www.google.com"); |
| 1204 InitializeResourceData(google.add_resources(), script_url, | 1215 InitializeResourceData(google.add_resources(), script_url, |
| 1205 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1216 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
| 1206 net::MEDIUM, false, false); | 1217 net::MEDIUM, false, false); |
| 1207 InitializeResourceData(google.add_resources(), style_url, | 1218 InitializeResourceData(google.add_resources(), style_url, |
| 1208 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1219 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
| 1209 net::MEDIUM, false, false); | 1220 net::MEDIUM, false, false); |
| 1210 predictor_->host_table_cache_->insert({google.primary_key(), google}); | 1221 predictor_->host_table_cache_->insert({google.primary_key(), google}); |
| 1211 | 1222 |
| 1212 precache::PrecacheManifest manifest = | 1223 precache::PrecacheManifest manifest = |
| 1213 CreateManifestData(base::Time::Now().ToDoubleT()); | 1224 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1214 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9); | 1225 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9, |
| 1215 InitializePrecacheResource(manifest.add_resource(), style_url, 0.75); | 1226 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1227 InitializePrecacheResource( |
| 1228 manifest.add_resource(), style_url, 0.75, |
| 1229 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 1216 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, | 1230 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, |
| 1217 {true, false}); | 1231 {true, false}); |
| 1218 | 1232 |
| 1219 // style_url should be removed. | 1233 // style_url should be removed. |
| 1220 google.mutable_resources()->RemoveLast(); | 1234 google.mutable_resources()->RemoveLast(); |
| 1221 EXPECT_CALL(*mock_tables_.get(), | 1235 EXPECT_CALL(*mock_tables_.get(), |
| 1222 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); | 1236 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); |
| 1223 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1237 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| 1224 | 1238 |
| 1225 predictor_->OnManifestFetched("google.com", manifest); | 1239 predictor_->OnManifestFetched("google.com", manifest); |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1789 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest("http://404.com", | 1803 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest("http://404.com", |
| 1790 test_data, &urls)); | 1804 test_data, &urls)); |
| 1791 EXPECT_TRUE(urls.empty()); | 1805 EXPECT_TRUE(urls.empty()); |
| 1792 } | 1806 } |
| 1793 | 1807 |
| 1794 TEST_F(ResourcePrefetchPredictorTest, PopulateFromManifest) { | 1808 TEST_F(ResourcePrefetchPredictorTest, PopulateFromManifest) { |
| 1795 // The data that will be used in populating. | 1809 // The data that will be used in populating. |
| 1796 precache::PrecacheManifest google = | 1810 precache::PrecacheManifest google = |
| 1797 CreateManifestData(base::Time::Now().ToDoubleT()); | 1811 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1798 InitializePrecacheResource(google.add_resource(), | 1812 InitializePrecacheResource(google.add_resource(), |
| 1799 "https://static.google.com/good", 0.9); | 1813 "https://static.google.com/good.js", 0.9, |
| 1814 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1800 InitializePrecacheResource(google.add_resource(), | 1815 InitializePrecacheResource(google.add_resource(), |
| 1801 "https://static.google.com/low_confidence", 0.6); | 1816 "https://static.google.com/versioned_removed", 0.8, |
| 1817 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1802 InitializePrecacheResource(google.add_resource(), | 1818 InitializePrecacheResource(google.add_resource(), |
| 1803 "https://static.google.com/versionned_removed", | 1819 "https://static.google.com/unused_removed", 0.8, |
| 1804 0.8); | 1820 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1805 InitializePrecacheResource(google.add_resource(), | 1821 InitializePrecacheResource(google.add_resource(), |
| 1806 "https://static.google.com/unused_removed", 0.8); | 1822 "https://static.google.com/no_store", 0.8, |
| 1823 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1824 InitializePrecacheResource( |
| 1825 google.add_resource(), "https://static.google.com/good.css", 0.75, |
| 1826 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
| 1807 InitializePrecacheResource(google.add_resource(), | 1827 InitializePrecacheResource(google.add_resource(), |
| 1808 "https://static.google.com/no_store", 0.8); | 1828 "https://static.google.com/low_confidence", 0.6, |
| 1829 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1809 InitializeExperiment(&google, internal::kVersionedRemovedExperiment, | 1830 InitializeExperiment(&google, internal::kVersionedRemovedExperiment, |
| 1831 {true, false, true, true, true}); |
| 1832 InitializeExperiment(&google, internal::kUnusedRemovedExperiment, |
| 1810 {true, true, false, true, true}); | 1833 {true, true, false, true, true}); |
| 1811 InitializeExperiment(&google, internal::kUnusedRemovedExperiment, | 1834 InitializeExperiment(&google, internal::kNoStoreRemovedExperiment, |
| 1812 {true, true, true, false, true}); | 1835 {true, true, true, false, true}); |
| 1813 InitializeExperiment(&google, internal::kNoStoreRemovedExperiment, | |
| 1814 {true, true, true, true, false}); | |
| 1815 | 1836 |
| 1816 // The data that's too old. | 1837 // The data that's too old. |
| 1817 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | 1838 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); |
| 1818 precache::PrecacheManifest facebook = | 1839 precache::PrecacheManifest facebook = |
| 1819 CreateManifestData(old_time.ToDoubleT()); | 1840 CreateManifestData(old_time.ToDoubleT()); |
| 1820 InitializePrecacheResource(facebook.add_resource(), | 1841 InitializePrecacheResource(facebook.add_resource(), |
| 1821 "https://static.facebook.com/good", 0.9); | 1842 "https://static.facebook.com/good", 0.9, |
| 1843 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1822 | 1844 |
| 1823 predictor_->manifest_table_cache_->insert({"google.com", google}); | 1845 predictor_->manifest_table_cache_->insert({"google.com", google}); |
| 1824 predictor_->manifest_table_cache_->insert({"facebook.com", facebook}); | 1846 predictor_->manifest_table_cache_->insert({"facebook.com", facebook}); |
| 1825 | 1847 |
| 1826 std::vector<GURL> urls; | 1848 std::vector<GURL> urls; |
| 1827 EXPECT_TRUE(predictor_->PopulateFromManifest("google.com", &urls)); | 1849 EXPECT_TRUE(predictor_->PopulateFromManifest("google.com", &urls)); |
| 1828 EXPECT_THAT(urls, | 1850 EXPECT_EQ(urls, |
| 1829 UnorderedElementsAre(GURL("https://static.google.com/good"))); | 1851 std::vector<GURL>({GURL("https://static.google.com/good.css"), |
| 1852 GURL("https://static.google.com/good.js")})); |
| 1830 | 1853 |
| 1831 urls.clear(); | 1854 urls.clear(); |
| 1832 EXPECT_FALSE(predictor_->PopulateFromManifest("facebook.com", &urls)); | 1855 EXPECT_FALSE(predictor_->PopulateFromManifest("facebook.com", &urls)); |
| 1833 EXPECT_TRUE(urls.empty()); | 1856 EXPECT_TRUE(urls.empty()); |
| 1834 | 1857 |
| 1835 urls.clear(); | 1858 urls.clear(); |
| 1836 EXPECT_FALSE(predictor_->PopulateFromManifest("404.com", &urls)); | 1859 EXPECT_FALSE(predictor_->PopulateFromManifest("404.com", &urls)); |
| 1837 EXPECT_TRUE(urls.empty()); | 1860 EXPECT_TRUE(urls.empty()); |
| 1838 } | 1861 } |
| 1839 | 1862 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1888 const GURL main_frame_url("http://google.com/?query=cats"); | 1911 const GURL main_frame_url("http://google.com/?query=cats"); |
| 1889 ResourcePrefetchPredictor::Prediction prediction; | 1912 ResourcePrefetchPredictor::Prediction prediction; |
| 1890 std::vector<GURL>& urls = prediction.subresource_urls; | 1913 std::vector<GURL>& urls = prediction.subresource_urls; |
| 1891 // No prefetch data. | 1914 // No prefetch data. |
| 1892 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1915 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1893 | 1916 |
| 1894 // Add a manifest associated with the main frame host. | 1917 // Add a manifest associated with the main frame host. |
| 1895 const std::string& resource_url = "https://static.google.com/resource"; | 1918 const std::string& resource_url = "https://static.google.com/resource"; |
| 1896 precache::PrecacheManifest manifest = | 1919 precache::PrecacheManifest manifest = |
| 1897 CreateManifestData(base::Time::Now().ToDoubleT()); | 1920 CreateManifestData(base::Time::Now().ToDoubleT()); |
| 1898 InitializePrecacheResource(manifest.add_resource(), resource_url, 0.9); | 1921 InitializePrecacheResource(manifest.add_resource(), resource_url, 0.9, |
| 1922 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1899 predictor_->manifest_table_cache_->insert({"google.com", manifest}); | 1923 predictor_->manifest_table_cache_->insert({"google.com", manifest}); |
| 1900 | 1924 |
| 1901 urls.clear(); | 1925 urls.clear(); |
| 1902 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1926 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1903 EXPECT_THAT(urls, UnorderedElementsAre(GURL(resource_url))); | 1927 EXPECT_THAT(urls, UnorderedElementsAre(GURL(resource_url))); |
| 1904 | 1928 |
| 1905 // Add a resource associated with the main frame host. | 1929 // Add a resource associated with the main frame host. |
| 1906 PrefetchData google_host = CreatePrefetchData("google.com", 2); | 1930 PrefetchData google_host = CreatePrefetchData("google.com", 2); |
| 1907 const std::string script_url = "https://cdn.google.com/script.js"; | 1931 const std::string script_url = "https://cdn.google.com/script.js"; |
| 1908 InitializeResourceData(google_host.add_resources(), script_url, | 1932 InitializeResourceData(google_host.add_resources(), script_url, |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2086 predictor_->host_table_cache_->insert( | 2110 predictor_->host_table_cache_->insert( |
| 2087 std::make_pair(google.primary_key(), google)); | 2111 std::make_pair(google.primary_key(), google)); |
| 2088 | 2112 |
| 2089 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); | 2113 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); |
| 2090 predictor_->StopPrefetching(GURL(main_frame_url)); | 2114 predictor_->StopPrefetching(GURL(main_frame_url)); |
| 2091 histogram_tester_->ExpectTotalCount( | 2115 histogram_tester_->ExpectTotalCount( |
| 2092 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); | 2116 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); |
| 2093 } | 2117 } |
| 2094 | 2118 |
| 2095 } // namespace predictors | 2119 } // namespace predictors |
| OLD | NEW |