Chromium Code Reviews| 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 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1088 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 1088 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
| 1089 "facebook.com", 1, 0, 0); | 1089 "facebook.com", 1, 0, 0); |
| 1090 EXPECT_CALL(*mock_tables_.get(), | 1090 EXPECT_CALL(*mock_tables_.get(), |
| 1091 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); | 1091 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
| 1092 | 1092 |
| 1093 predictor_->RecordMainFrameLoadComplete(fb_end); | 1093 predictor_->RecordMainFrameLoadComplete(fb_end); |
| 1094 profile_->BlockUntilHistoryProcessesPendingRequests(); | 1094 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 1095 } | 1095 } |
| 1096 | 1096 |
| 1097 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { | 1097 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { |
| 1098 precache::PrecacheManifest manifest = CreateManifestData(1); | 1098 precache::PrecacheManifest manifest = |
| 1099 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1099 InitializePrecacheResource(manifest.add_resource(), | 1100 InitializePrecacheResource(manifest.add_resource(), |
| 1100 "http://cdn.google.com/script.js", 0.9); | 1101 "http://cdn.google.com/script.js", 0.9); |
| 1101 InitializePrecacheResource(manifest.add_resource(), | 1102 InitializePrecacheResource(manifest.add_resource(), |
| 1102 "http://cdn.google.com/style.css", 0.75); | 1103 "http://cdn.google.com/style.css", 0.75); |
| 1103 | 1104 |
| 1104 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1105 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| 1105 | 1106 |
| 1106 predictor_->OnManifestFetched("google.com", manifest); | 1107 predictor_->OnManifestFetched("google.com", manifest); |
| 1107 } | 1108 } |
| 1108 | 1109 |
| 1109 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { | 1110 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { |
| 1110 EXPECT_CALL(*mock_tables_.get(), | 1111 EXPECT_CALL(*mock_tables_.get(), |
| 1111 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1112 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
| 1112 Pointee(ContainerEq(PrefetchDataMap())), | 1113 Pointee(ContainerEq(PrefetchDataMap())), |
| 1113 Pointee(ContainerEq(RedirectDataMap())), | 1114 Pointee(ContainerEq(RedirectDataMap())), |
| 1114 Pointee(ContainerEq(RedirectDataMap())), | 1115 Pointee(ContainerEq(RedirectDataMap())), |
| 1115 Pointee(ContainerEq(ManifestDataMap())), | 1116 Pointee(ContainerEq(ManifestDataMap())), |
| 1116 Pointee(ContainerEq(OriginDataMap())))) | 1117 Pointee(ContainerEq(OriginDataMap())))) |
| 1117 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1118 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
| 1118 ResetPredictor(); | 1119 ResetPredictor(); |
| 1119 InitializePredictor(); | 1120 InitializePredictor(); |
| 1120 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1121 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
| 1121 | 1122 |
| 1122 precache::PrecacheManifest manifest = CreateManifestData(1); | 1123 precache::PrecacheManifest manifest = |
| 1124 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1123 InitializePrecacheResource(manifest.add_resource(), | 1125 InitializePrecacheResource(manifest.add_resource(), |
| 1124 "http://google.com/image.jpg", 0.1); | 1126 "http://google.com/image.jpg", 0.1); |
| 1125 | 1127 |
| 1126 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1128 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| 1127 | 1129 |
| 1128 predictor_->OnManifestFetched("google.com", manifest); | 1130 predictor_->OnManifestFetched("google.com", manifest); |
| 1129 } | 1131 } |
| 1130 | 1132 |
| 1131 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { | 1133 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { |
| 1132 EXPECT_CALL(*mock_tables_.get(), | 1134 EXPECT_CALL(*mock_tables_.get(), |
| 1133 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1135 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
| 1134 Pointee(ContainerEq(PrefetchDataMap())), | 1136 Pointee(ContainerEq(PrefetchDataMap())), |
| 1135 Pointee(ContainerEq(RedirectDataMap())), | 1137 Pointee(ContainerEq(RedirectDataMap())), |
| 1136 Pointee(ContainerEq(RedirectDataMap())), | 1138 Pointee(ContainerEq(RedirectDataMap())), |
| 1137 Pointee(ContainerEq(ManifestDataMap())), | 1139 Pointee(ContainerEq(ManifestDataMap())), |
| 1138 Pointee(ContainerEq(OriginDataMap())))) | 1140 Pointee(ContainerEq(OriginDataMap())))) |
| 1139 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1141 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
| 1140 ResetPredictor(); | 1142 ResetPredictor(); |
| 1141 InitializePredictor(); | 1143 InitializePredictor(); |
| 1142 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1144 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
| 1143 | 1145 |
| 1144 precache::PrecacheManifest manifest = CreateManifestData(1); | 1146 precache::PrecacheManifest manifest = |
| 1147 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1145 InitializePrecacheResource(manifest.add_resource(), | 1148 InitializePrecacheResource(manifest.add_resource(), |
| 1146 "http://en.wikipedia.org/logo.png", 1.0); | 1149 "http://en.wikipedia.org/logo.png", 1.0); |
| 1147 | 1150 |
| 1148 EXPECT_CALL(*mock_tables_.get(), | 1151 EXPECT_CALL(*mock_tables_.get(), |
| 1149 DeleteManifestData(std::vector<std::string>({"google.com"}))); | 1152 DeleteManifestData(std::vector<std::string>({"google.com"}))); |
| 1150 | 1153 |
| 1151 EXPECT_CALL(*mock_tables_.get(), | 1154 EXPECT_CALL(*mock_tables_.get(), |
| 1152 UpdateManifestData("en.wikipedia.org", manifest)); | 1155 UpdateManifestData("en.wikipedia.org", manifest)); |
| 1153 | 1156 |
| 1154 predictor_->OnManifestFetched("en.wikipedia.org", manifest); | 1157 predictor_->OnManifestFetched("en.wikipedia.org", manifest); |
| 1155 } | 1158 } |
| 1156 | 1159 |
| 1157 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { | 1160 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { |
| 1158 precache::PrecacheManifest manifest = CreateManifestData(1); | 1161 precache::PrecacheManifest manifest = |
| 1162 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1159 InitializePrecacheResource(manifest.add_resource(), | 1163 InitializePrecacheResource(manifest.add_resource(), |
| 1160 "http://cdn.google.com/script.js", 0.9); | 1164 "http://cdn.google.com/script.js", 0.9); |
| 1161 InitializePrecacheResource(manifest.add_resource(), | 1165 InitializePrecacheResource(manifest.add_resource(), |
| 1162 "http://cdn.google.com/style.css", 0.75); | 1166 "http://cdn.google.com/style.css", 0.75); |
| 1163 | 1167 |
| 1164 precache::PrecacheManifest manifest_with_unknown_fields(manifest); | 1168 precache::PrecacheManifest manifest_with_unknown_fields(manifest); |
| 1165 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( | 1169 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( |
| 1166 "DATA"); | 1170 "DATA"); |
| 1167 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); | 1171 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); |
| 1168 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { | 1172 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { |
| 1169 resource.mutable_unknown_fields()->append("DATA"); | 1173 resource.mutable_unknown_fields()->append("DATA"); |
| 1170 } | 1174 } |
| 1171 | 1175 |
| 1172 int manifest_size = manifest.ByteSize(); | 1176 int manifest_size = manifest.ByteSize(); |
| 1173 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { | 1177 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { |
| 1174 return m.ByteSize() == manifest_size; | 1178 return m.ByteSize() == manifest_size; |
| 1175 }; | 1179 }; |
| 1176 EXPECT_CALL( | 1180 EXPECT_CALL( |
| 1177 *mock_tables_.get(), | 1181 *mock_tables_.get(), |
| 1178 UpdateManifestData("google.com", | 1182 UpdateManifestData("google.com", |
| 1179 testing::AllOf(manifest, testing::Truly(match_size)))); | 1183 testing::AllOf(manifest, testing::Truly(match_size)))); |
| 1180 | 1184 |
| 1181 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); | 1185 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); |
| 1182 } | 1186 } |
| 1183 | 1187 |
| 1188 TEST_F(ResourcePrefetchPredictorTest, ManifestTooOld) { | |
| 1189 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | |
| 1190 precache::PrecacheManifest manifest = | |
| 1191 CreateManifestData(old_time.ToDoubleT()); | |
| 1192 InitializePrecacheResource(manifest.add_resource(), | |
| 1193 "http://cdn.google.com/script.js", 0.9); | |
| 1194 InitializePrecacheResource(manifest.add_resource(), | |
| 1195 "http://cdn.google.com/style.css", 0.75); | |
| 1196 | |
| 1197 // No calls to DB should happen. | |
| 1198 predictor_->OnManifestFetched("google.com", manifest); | |
| 1199 } | |
| 1200 | |
| 1184 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { | 1201 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { |
| 1185 const std::string& script_url = "http://cdn.google.com/script.js"; | 1202 const std::string& script_url = "http://cdn.google.com/script.js"; |
| 1186 const std::string& style_url = "http://cdn.google.com/style.css"; | 1203 const std::string& style_url = "http://cdn.google.com/style.css"; |
| 1187 PrefetchData google = CreatePrefetchData("www.google.com"); | 1204 PrefetchData google = CreatePrefetchData("www.google.com"); |
| 1188 InitializeResourceData(google.add_resources(), script_url, | 1205 InitializeResourceData(google.add_resources(), script_url, |
| 1189 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1206 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
| 1190 net::MEDIUM, false, false); | 1207 net::MEDIUM, false, false); |
| 1191 InitializeResourceData(google.add_resources(), style_url, | 1208 InitializeResourceData(google.add_resources(), style_url, |
| 1192 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1209 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
| 1193 net::MEDIUM, false, false); | 1210 net::MEDIUM, false, false); |
| 1194 predictor_->host_table_cache_->insert({google.primary_key(), google}); | 1211 predictor_->host_table_cache_->insert({google.primary_key(), google}); |
| 1195 | 1212 |
| 1196 precache::PrecacheManifest manifest = CreateManifestData(1); | 1213 precache::PrecacheManifest manifest = |
| 1214 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1197 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9); | 1215 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9); |
| 1198 InitializePrecacheResource(manifest.add_resource(), style_url, 0.75); | 1216 InitializePrecacheResource(manifest.add_resource(), style_url, 0.75); |
| 1199 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, | 1217 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, |
| 1200 {true, false}); | 1218 {true, false}); |
| 1201 | 1219 |
| 1202 // style_url should be removed. | 1220 // style_url should be removed. |
| 1203 google.mutable_resources()->RemoveLast(); | 1221 google.mutable_resources()->RemoveLast(); |
| 1204 EXPECT_CALL(*mock_tables_.get(), | 1222 EXPECT_CALL(*mock_tables_.get(), |
| 1205 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); | 1223 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); |
| 1206 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1224 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
| (...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1767 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest(nyt.primary_key(), | 1785 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest(nyt.primary_key(), |
| 1768 test_data, &urls)); | 1786 test_data, &urls)); |
| 1769 EXPECT_TRUE(urls.empty()); | 1787 EXPECT_TRUE(urls.empty()); |
| 1770 | 1788 |
| 1771 urls.clear(); | 1789 urls.clear(); |
| 1772 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest("http://404.com", | 1790 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest("http://404.com", |
| 1773 test_data, &urls)); | 1791 test_data, &urls)); |
| 1774 EXPECT_TRUE(urls.empty()); | 1792 EXPECT_TRUE(urls.empty()); |
| 1775 } | 1793 } |
| 1776 | 1794 |
| 1795 TEST_F(ResourcePrefetchPredictorTest, PopulateFromManifest) { | |
| 1796 // The data that will be used in populating. | |
| 1797 precache::PrecacheManifest google = | |
| 1798 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1799 InitializePrecacheResource(google.add_resource(), | |
| 1800 "https://static.google.com/good", 0.9); | |
| 1801 InitializePrecacheResource(google.add_resource(), | |
| 1802 "https://static.google.com/low_confidence", 0.6); | |
| 1803 InitializePrecacheResource(google.add_resource(), | |
| 1804 "https://static.google.com/versionned_removed", | |
| 1805 0.8); | |
| 1806 InitializePrecacheResource(google.add_resource(), | |
| 1807 "https://static.google.com/unused_removed", 0.8); | |
| 1808 InitializePrecacheResource(google.add_resource(), | |
| 1809 "https://static.google.com/no_store", 0.8); | |
| 1810 InitializeExperiment(&google, internal::kVersionedRemovedExperiment, | |
| 1811 {true, true, false, true, true}); | |
| 1812 InitializeExperiment(&google, internal::kUnusedRemovedExperiment, | |
| 1813 {true, true, true, false, true}); | |
| 1814 InitializeExperiment(&google, internal::kNoStoreRemovedExperiment, | |
| 1815 {true, true, true, true, false}); | |
| 1816 | |
| 1817 // The data that's too old. | |
| 1818 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | |
| 1819 precache::PrecacheManifest facebook = | |
| 1820 CreateManifestData(old_time.ToDoubleT()); | |
| 1821 InitializePrecacheResource(facebook.add_resource(), | |
| 1822 "https://static.facebook.com/good", 0.9); | |
| 1823 | |
| 1824 predictor_->manifest_table_cache_->insert({"google.com", google}); | |
| 1825 predictor_->manifest_table_cache_->insert({"facebook.com", facebook}); | |
| 1826 | |
| 1827 std::vector<GURL> urls; | |
| 1828 EXPECT_TRUE(predictor_->PopulateFromManifest("google.com", &urls)); | |
| 1829 EXPECT_THAT(urls, | |
| 1830 UnorderedElementsAre(GURL("https://static.google.com/good"))); | |
| 1831 | |
| 1832 urls.clear(); | |
| 1833 EXPECT_FALSE(predictor_->PopulateFromManifest("facebook.com", &urls)); | |
| 1834 EXPECT_TRUE(urls.empty()); | |
| 1835 | |
| 1836 urls.clear(); | |
| 1837 EXPECT_FALSE(predictor_->PopulateFromManifest("404.com", &urls)); | |
| 1838 EXPECT_TRUE(urls.empty()); | |
| 1839 } | |
| 1840 | |
| 1777 TEST_F(ResourcePrefetchPredictorTest, GetRedirectEndpoint) { | 1841 TEST_F(ResourcePrefetchPredictorTest, GetRedirectEndpoint) { |
| 1778 // The data to be requested for the confident endpoint. | 1842 // The data to be requested for the confident endpoint. |
| 1779 RedirectData nyt = CreateRedirectData("http://nyt.com", 1); | 1843 RedirectData nyt = CreateRedirectData("http://nyt.com", 1); |
| 1780 InitializeRedirectStat(nyt.add_redirect_endpoints(), | 1844 InitializeRedirectStat(nyt.add_redirect_endpoints(), |
| 1781 "https://mobile.nytimes.com", 10, 0, 0); | 1845 "https://mobile.nytimes.com", 10, 0, 0); |
| 1782 | 1846 |
| 1783 // The data to be sure that other RedirectData won't be affected. | 1847 // The data to be sure that other RedirectData won't be affected. |
| 1784 RedirectData gogle = CreateRedirectData("http://gogle.com", 2); | 1848 RedirectData gogle = CreateRedirectData("http://gogle.com", 2); |
| 1785 InitializeRedirectStat(gogle.add_redirect_endpoints(), "https://google.com", | 1849 InitializeRedirectStat(gogle.add_redirect_endpoints(), "https://google.com", |
| 1786 100, 0, 0); | 1850 100, 0, 0); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1821 &redirect_endpoint)); | 1885 &redirect_endpoint)); |
| 1822 } | 1886 } |
| 1823 | 1887 |
| 1824 TEST_F(ResourcePrefetchPredictorTest, GetPrefetchData) { | 1888 TEST_F(ResourcePrefetchPredictorTest, GetPrefetchData) { |
| 1825 const GURL main_frame_url("http://google.com/?query=cats"); | 1889 const GURL main_frame_url("http://google.com/?query=cats"); |
| 1826 ResourcePrefetchPredictor::Prediction prediction; | 1890 ResourcePrefetchPredictor::Prediction prediction; |
| 1827 std::vector<GURL>& urls = prediction.subresource_urls; | 1891 std::vector<GURL>& urls = prediction.subresource_urls; |
| 1828 // No prefetch data. | 1892 // No prefetch data. |
| 1829 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1893 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1830 | 1894 |
| 1895 // Add a manifest associated with the main frame host. | |
| 1896 const std::string& resource_url = "https://static.google.com/resource"; | |
| 1897 precache::PrecacheManifest manifest = | |
| 1898 CreateManifestData(base::Time::Now().ToDoubleT()); | |
| 1899 InitializePrecacheResource(manifest.add_resource(), resource_url, 0.9); | |
| 1900 predictor_->manifest_table_cache_->insert({"google.com", manifest}); | |
| 1901 | |
| 1902 urls.clear(); | |
| 1903 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | |
| 1904 EXPECT_THAT(urls, UnorderedElementsAre(GURL(resource_url))); | |
| 1905 | |
| 1831 // Add a resource associated with the main frame host. | 1906 // Add a resource associated with the main frame host. |
| 1832 PrefetchData google_host = CreatePrefetchData("google.com", 1); | 1907 PrefetchData google_host = CreatePrefetchData("google.com", 2); |
| 1833 const std::string script_url = "https://cdn.google.com/script.js"; | 1908 const std::string script_url = "https://cdn.google.com/script.js"; |
| 1834 InitializeResourceData(google_host.add_resources(), script_url, | 1909 InitializeResourceData(google_host.add_resources(), script_url, |
| 1835 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1910 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
| 1836 net::MEDIUM, false, false); | 1911 net::MEDIUM, false, false); |
| 1837 predictor_->host_table_cache_->insert( | 1912 predictor_->host_table_cache_->insert( |
| 1838 std::make_pair(google_host.primary_key(), google_host)); | 1913 std::make_pair(google_host.primary_key(), google_host)); |
| 1839 | 1914 |
| 1840 urls.clear(); | 1915 urls.clear(); |
| 1841 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1916 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1842 EXPECT_THAT(urls, UnorderedElementsAre(GURL(script_url))); | 1917 EXPECT_THAT(urls, UnorderedElementsAre(GURL(script_url))); |
| 1843 | 1918 |
| 1844 // Add host-based redirect. | 1919 // Add host-based redirect. |
| 1845 RedirectData host_redirect = CreateRedirectData("google.com", 3); | 1920 RedirectData host_redirect = CreateRedirectData("google.com", 3); |
| 1846 InitializeRedirectStat(host_redirect.add_redirect_endpoints(), | 1921 InitializeRedirectStat(host_redirect.add_redirect_endpoints(), |
| 1847 "www.google.com", 10, 0, 0); | 1922 "www.google.fr", 10, 0, 0); |
|
Benoit L
2017/04/19 14:48:54
🇫🇷 🐓
alexilin
2017/04/19 15:35:12
Vive la France!
Actually, I've changed this becaus
| |
| 1848 predictor_->host_redirect_table_cache_->insert( | 1923 predictor_->host_redirect_table_cache_->insert( |
| 1849 std::make_pair(host_redirect.primary_key(), host_redirect)); | 1924 std::make_pair(host_redirect.primary_key(), host_redirect)); |
| 1850 | 1925 |
| 1851 // Prediction failed: no data associated with the host redirect endpoint. | 1926 // Prediction failed: no data associated with the host redirect endpoint. |
| 1852 urls.clear(); | 1927 urls.clear(); |
| 1853 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1928 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1854 | 1929 |
| 1855 // Add a resource associated with host redirect endpoint. | 1930 // Add a resource associated with host redirect endpoint. |
| 1856 PrefetchData www_google_host = CreatePrefetchData("www.google.com", 4); | 1931 PrefetchData www_google_host = CreatePrefetchData("www.google.fr", 4); |
| 1857 const std::string style_url = "https://cdn.google.com/style.css"; | 1932 const std::string style_url = "https://cdn.google.com/style.css"; |
| 1858 InitializeResourceData(www_google_host.add_resources(), style_url, | 1933 InitializeResourceData(www_google_host.add_resources(), style_url, |
| 1859 content::RESOURCE_TYPE_STYLESHEET, 10, 0, 1, 2.1, | 1934 content::RESOURCE_TYPE_STYLESHEET, 10, 0, 1, 2.1, |
| 1860 net::MEDIUM, false, false); | 1935 net::MEDIUM, false, false); |
| 1861 predictor_->host_table_cache_->insert( | 1936 predictor_->host_table_cache_->insert( |
| 1862 std::make_pair(www_google_host.primary_key(), www_google_host)); | 1937 std::make_pair(www_google_host.primary_key(), www_google_host)); |
| 1863 | 1938 |
| 1864 urls.clear(); | 1939 urls.clear(); |
| 1865 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1940 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1866 EXPECT_THAT(urls, UnorderedElementsAre(GURL(style_url))); | 1941 EXPECT_THAT(urls, UnorderedElementsAre(GURL(style_url))); |
| 1867 | 1942 |
| 1868 // Add a resource associated with the main frame url. | 1943 // Add a resource associated with the main frame url. |
| 1869 PrefetchData google_url = | 1944 PrefetchData google_url = |
| 1870 CreatePrefetchData("http://google.com/?query=cats", 2); | 1945 CreatePrefetchData("http://google.com/?query=cats", 5); |
| 1871 const std::string image_url = "https://cdn.google.com/image.png"; | 1946 const std::string image_url = "https://cdn.google.com/image.png"; |
| 1872 InitializeResourceData(google_url.add_resources(), image_url, | 1947 InitializeResourceData(google_url.add_resources(), image_url, |
| 1873 content::RESOURCE_TYPE_IMAGE, 10, 0, 1, 2.1, | 1948 content::RESOURCE_TYPE_IMAGE, 10, 0, 1, 2.1, |
| 1874 net::MEDIUM, false, false); | 1949 net::MEDIUM, false, false); |
| 1875 predictor_->url_table_cache_->insert( | 1950 predictor_->url_table_cache_->insert( |
| 1876 std::make_pair(google_url.primary_key(), google_url)); | 1951 std::make_pair(google_url.primary_key(), google_url)); |
| 1877 | 1952 |
| 1878 urls.clear(); | 1953 urls.clear(); |
| 1879 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1954 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1880 EXPECT_THAT(urls, UnorderedElementsAre(GURL(image_url))); | 1955 EXPECT_THAT(urls, UnorderedElementsAre(GURL(image_url))); |
| 1881 | 1956 |
| 1882 // Add url-based redirect. | 1957 // Add url-based redirect. |
| 1883 RedirectData url_redirect = | 1958 RedirectData url_redirect = |
| 1884 CreateRedirectData("http://google.com/?query=cats", 5); | 1959 CreateRedirectData("http://google.com/?query=cats", 6); |
| 1885 InitializeRedirectStat(url_redirect.add_redirect_endpoints(), | 1960 InitializeRedirectStat(url_redirect.add_redirect_endpoints(), |
| 1886 "https://www.google.com/?query=cats", 10, 0, 0); | 1961 "https://www.google.com/?query=cats", 10, 0, 0); |
| 1887 predictor_->url_redirect_table_cache_->insert( | 1962 predictor_->url_redirect_table_cache_->insert( |
| 1888 std::make_pair(url_redirect.primary_key(), url_redirect)); | 1963 std::make_pair(url_redirect.primary_key(), url_redirect)); |
| 1889 | 1964 |
| 1890 // Url redirect endpoint doesn't have associated resources so we get | 1965 // Url redirect endpoint doesn't have associated resources so we get |
| 1891 // host-based data. | 1966 // host-based data. |
| 1892 urls.clear(); | 1967 urls.clear(); |
| 1893 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1968 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1894 EXPECT_THAT(urls, UnorderedElementsAre(GURL(style_url))); | 1969 EXPECT_THAT(urls, UnorderedElementsAre(GURL(style_url))); |
| 1895 | 1970 |
| 1896 // Add a resource associated with url redirect endpoint. | 1971 // Add a resource associated with url redirect endpoint. |
| 1897 PrefetchData www_google_url = | 1972 PrefetchData www_google_url = |
| 1898 CreatePrefetchData("https://www.google.com/?query=cats", 4); | 1973 CreatePrefetchData("https://www.google.com/?query=cats", 7); |
| 1899 const std::string font_url = "https://cdn.google.com/comic-sans-ms.woff"; | 1974 const std::string font_url = "https://cdn.google.com/comic-sans-ms.woff"; |
| 1900 InitializeResourceData(www_google_url.add_resources(), font_url, | 1975 InitializeResourceData(www_google_url.add_resources(), font_url, |
| 1901 content::RESOURCE_TYPE_FONT_RESOURCE, 10, 0, 1, 2.1, | 1976 content::RESOURCE_TYPE_FONT_RESOURCE, 10, 0, 1, 2.1, |
| 1902 net::MEDIUM, false, false); | 1977 net::MEDIUM, false, false); |
| 1903 predictor_->url_table_cache_->insert( | 1978 predictor_->url_table_cache_->insert( |
| 1904 std::make_pair(www_google_url.primary_key(), www_google_url)); | 1979 std::make_pair(www_google_url.primary_key(), www_google_url)); |
| 1905 | 1980 |
| 1906 urls.clear(); | 1981 urls.clear(); |
| 1907 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1982 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
| 1908 EXPECT_THAT(urls, UnorderedElementsAre(GURL(font_url))); | 1983 EXPECT_THAT(urls, UnorderedElementsAre(GURL(font_url))); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2012 predictor_->host_table_cache_->insert( | 2087 predictor_->host_table_cache_->insert( |
| 2013 std::make_pair(google.primary_key(), google)); | 2088 std::make_pair(google.primary_key(), google)); |
| 2014 | 2089 |
| 2015 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); | 2090 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); |
| 2016 predictor_->StopPrefetching(GURL(main_frame_url)); | 2091 predictor_->StopPrefetching(GURL(main_frame_url)); |
| 2017 histogram_tester_->ExpectTotalCount( | 2092 histogram_tester_->ExpectTotalCount( |
| 2018 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); | 2093 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); |
| 2019 } | 2094 } |
| 2020 | 2095 |
| 2021 } // namespace predictors | 2096 } // namespace predictors |
| OLD | NEW |