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 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 OnNavigationLearned( | 707 OnNavigationLearned( |
705 kVisitCount, CreatePageRequestSummary("http://www.google.com", | 708 kVisitCount, CreatePageRequestSummary("http://www.google.com", |
706 "http://www.google.com", | 709 "http://www.google.com", |
707 resources))); | 710 resources))); |
708 | 711 |
709 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); | 712 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); |
710 InitializeResourceData(url_data.add_resources(), | 713 InitializeResourceData(url_data.add_resources(), |
711 "http://google.com/style1.css", | 714 "http://google.com/style1.css", |
712 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, | 715 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
713 net::MEDIUM, false, false); | 716 net::MEDIUM, false, false); |
| 717 InitializeResourceData(url_data.add_resources(), |
| 718 "http://google.com/style2.css", |
| 719 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
| 720 net::MEDIUM, false, false); |
714 InitializeResourceData( | 721 InitializeResourceData( |
715 url_data.add_resources(), "http://google.com/script1.js", | 722 url_data.add_resources(), "http://google.com/script1.js", |
716 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 723 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
717 InitializeResourceData( | 724 InitializeResourceData( |
718 url_data.add_resources(), "http://google.com/script2.js", | 725 url_data.add_resources(), "http://google.com/script2.js", |
719 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 726 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
720 InitializeResourceData(url_data.add_resources(), | |
721 "http://google.com/style2.css", | |
722 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, | |
723 net::MEDIUM, false, false); | |
724 EXPECT_CALL(*mock_tables_.get(), | 727 EXPECT_CALL(*mock_tables_.get(), |
725 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); | 728 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); |
726 | 729 |
727 OriginData origin_data = CreateOriginData("www.google.com"); | 730 OriginData origin_data = CreateOriginData("www.google.com"); |
728 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", | 731 InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/", |
729 1, 0, 0, 2., true, true); | 732 1, 0, 0, 2., true, true); |
730 InitializeOriginStat(origin_data.add_origins(), "http://dev.null.google.com/", | 733 InitializeOriginStat(origin_data.add_origins(), "http://dev.null.google.com/", |
731 1, 0, 0, 4., true, true); | 734 1, 0, 0, 4., true, true); |
732 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, | 735 InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0, |
733 1., false, true); | 736 1., false, true); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 OnNavigationLearned( | 827 OnNavigationLearned( |
825 kVisitCount, CreatePageRequestSummary("http://www.google.com", | 828 kVisitCount, CreatePageRequestSummary("http://www.google.com", |
826 "http://www.google.com", | 829 "http://www.google.com", |
827 resources))); | 830 resources))); |
828 | 831 |
829 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); | 832 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); |
830 InitializeResourceData(url_data.add_resources(), | 833 InitializeResourceData(url_data.add_resources(), |
831 "http://google.com/style1.css", | 834 "http://google.com/style1.css", |
832 content::RESOURCE_TYPE_STYLESHEET, 4, 2, 0, 1.0, | 835 content::RESOURCE_TYPE_STYLESHEET, 4, 2, 0, 1.0, |
833 net::MEDIUM, false, false); | 836 net::MEDIUM, false, false); |
| 837 InitializeResourceData(url_data.add_resources(), |
| 838 "http://google.com/style2.css", |
| 839 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
| 840 net::MEDIUM, false, false); |
834 InitializeResourceData( | 841 InitializeResourceData( |
835 url_data.add_resources(), "http://google.com/script1.js", | 842 url_data.add_resources(), "http://google.com/script1.js", |
836 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 843 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
837 InitializeResourceData( | 844 InitializeResourceData( |
838 url_data.add_resources(), "http://google.com/script4.js", | 845 url_data.add_resources(), "http://google.com/script4.js", |
839 content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, 2.1, net::MEDIUM, false, false); | 846 content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, 2.1, net::MEDIUM, false, false); |
840 InitializeResourceData( | |
841 url_data.add_resources(), "http://google.com/script2.js", | |
842 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | |
843 EXPECT_CALL(*mock_tables_.get(), | 847 EXPECT_CALL(*mock_tables_.get(), |
844 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); | 848 UpdateResourceData(url_data, PREFETCH_KEY_TYPE_URL)); |
845 EXPECT_CALL(*mock_tables_.get(), | 849 EXPECT_CALL(*mock_tables_.get(), |
846 DeleteSingleResourceDataPoint("www.facebook.com", | 850 DeleteSingleResourceDataPoint("www.facebook.com", |
847 PREFETCH_KEY_TYPE_HOST)); | 851 PREFETCH_KEY_TYPE_HOST)); |
848 | 852 |
849 PrefetchData host_data = CreatePrefetchData("www.google.com"); | 853 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
850 InitializeResourceData(host_data.add_resources(), | 854 InitializeResourceData(host_data.add_resources(), |
851 "http://google.com/style1.css", | 855 "http://google.com/style1.css", |
852 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, | 856 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
853 net::MEDIUM, false, false); | 857 net::MEDIUM, false, false); |
| 858 InitializeResourceData(host_data.add_resources(), |
| 859 "http://google.com/style2.css", |
| 860 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
| 861 net::MEDIUM, false, false); |
854 InitializeResourceData( | 862 InitializeResourceData( |
855 host_data.add_resources(), "http://google.com/script1.js", | 863 host_data.add_resources(), "http://google.com/script1.js", |
856 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); | 864 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
857 InitializeResourceData( | 865 InitializeResourceData( |
858 host_data.add_resources(), "http://google.com/script2.js", | 866 host_data.add_resources(), "http://google.com/script2.js", |
859 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); | 867 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
860 InitializeResourceData(host_data.add_resources(), | |
861 "http://google.com/style2.css", | |
862 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, | |
863 net::MEDIUM, false, false); | |
864 EXPECT_CALL(*mock_tables_.get(), | 868 EXPECT_CALL(*mock_tables_.get(), |
865 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); | 869 UpdateResourceData(host_data, PREFETCH_KEY_TYPE_HOST)); |
866 | 870 |
867 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); | 871 RedirectData url_redirect_data = CreateRedirectData("http://www.google.com/"); |
868 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 872 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
869 "http://www.google.com/", 1, 0, 0); | 873 "http://www.google.com/", 1, 0, 0); |
870 EXPECT_CALL(*mock_tables_.get(), | 874 EXPECT_CALL(*mock_tables_.get(), |
871 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); | 875 UpdateRedirectData(url_redirect_data, PREFETCH_KEY_TYPE_URL)); |
872 | 876 |
873 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); | 877 RedirectData host_redirect_data = CreateRedirectData("www.google.com"); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); | 1094 UpdateRedirectData(host_redirect_data, PREFETCH_KEY_TYPE_HOST)); |
1091 | 1095 |
1092 predictor_->RecordMainFrameLoadComplete(fb_end); | 1096 predictor_->RecordMainFrameLoadComplete(fb_end); |
1093 profile_->BlockUntilHistoryProcessesPendingRequests(); | 1097 profile_->BlockUntilHistoryProcessesPendingRequests(); |
1094 } | 1098 } |
1095 | 1099 |
1096 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { | 1100 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDB) { |
1097 precache::PrecacheManifest manifest = | 1101 precache::PrecacheManifest manifest = |
1098 CreateManifestData(base::Time::Now().ToDoubleT()); | 1102 CreateManifestData(base::Time::Now().ToDoubleT()); |
1099 InitializePrecacheResource(manifest.add_resource(), | 1103 InitializePrecacheResource(manifest.add_resource(), |
1100 "http://cdn.google.com/script.js", 0.9); | 1104 "http://cdn.google.com/script.js", 0.9, |
1101 InitializePrecacheResource(manifest.add_resource(), | 1105 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1102 "http://cdn.google.com/style.css", 0.75); | 1106 InitializePrecacheResource( |
| 1107 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1108 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
1103 | 1109 |
1104 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1110 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
1105 | 1111 |
1106 predictor_->OnManifestFetched("google.com", manifest); | 1112 predictor_->OnManifestFetched("google.com", manifest); |
1107 } | 1113 } |
1108 | 1114 |
1109 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { | 1115 TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) { |
1110 EXPECT_CALL(*mock_tables_.get(), | 1116 EXPECT_CALL(*mock_tables_.get(), |
1111 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1117 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
1112 Pointee(ContainerEq(PrefetchDataMap())), | 1118 Pointee(ContainerEq(PrefetchDataMap())), |
1113 Pointee(ContainerEq(RedirectDataMap())), | 1119 Pointee(ContainerEq(RedirectDataMap())), |
1114 Pointee(ContainerEq(RedirectDataMap())), | 1120 Pointee(ContainerEq(RedirectDataMap())), |
1115 Pointee(ContainerEq(ManifestDataMap())), | 1121 Pointee(ContainerEq(ManifestDataMap())), |
1116 Pointee(ContainerEq(OriginDataMap())))) | 1122 Pointee(ContainerEq(OriginDataMap())))) |
1117 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1123 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
1118 ResetPredictor(); | 1124 ResetPredictor(); |
1119 InitializePredictor(); | 1125 InitializePredictor(); |
1120 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1126 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
1121 | 1127 |
1122 precache::PrecacheManifest manifest = | 1128 precache::PrecacheManifest manifest = |
1123 CreateManifestData(base::Time::Now().ToDoubleT()); | 1129 CreateManifestData(base::Time::Now().ToDoubleT()); |
1124 InitializePrecacheResource(manifest.add_resource(), | 1130 InitializePrecacheResource(manifest.add_resource(), |
1125 "http://google.com/image.jpg", 0.1); | 1131 "http://google.com/image.jpg", 0.1, |
| 1132 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
1126 | 1133 |
1127 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1134 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
1128 | 1135 |
1129 predictor_->OnManifestFetched("google.com", manifest); | 1136 predictor_->OnManifestFetched("google.com", manifest); |
1130 } | 1137 } |
1131 | 1138 |
1132 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { | 1139 TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) { |
1133 EXPECT_CALL(*mock_tables_.get(), | 1140 EXPECT_CALL(*mock_tables_.get(), |
1134 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), | 1141 GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
1135 Pointee(ContainerEq(PrefetchDataMap())), | 1142 Pointee(ContainerEq(PrefetchDataMap())), |
1136 Pointee(ContainerEq(RedirectDataMap())), | 1143 Pointee(ContainerEq(RedirectDataMap())), |
1137 Pointee(ContainerEq(RedirectDataMap())), | 1144 Pointee(ContainerEq(RedirectDataMap())), |
1138 Pointee(ContainerEq(ManifestDataMap())), | 1145 Pointee(ContainerEq(ManifestDataMap())), |
1139 Pointee(ContainerEq(OriginDataMap())))) | 1146 Pointee(ContainerEq(OriginDataMap())))) |
1140 .WillOnce(SetArgPointee<4>(test_manifest_data_)); | 1147 .WillOnce(SetArgPointee<4>(test_manifest_data_)); |
1141 ResetPredictor(); | 1148 ResetPredictor(); |
1142 InitializePredictor(); | 1149 InitializePredictor(); |
1143 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); | 1150 EXPECT_EQ(2U, predictor_->manifest_table_cache_->size()); |
1144 | 1151 |
1145 precache::PrecacheManifest manifest = | 1152 precache::PrecacheManifest manifest = |
1146 CreateManifestData(base::Time::Now().ToDoubleT()); | 1153 CreateManifestData(base::Time::Now().ToDoubleT()); |
1147 InitializePrecacheResource(manifest.add_resource(), | 1154 InitializePrecacheResource(manifest.add_resource(), |
1148 "http://en.wikipedia.org/logo.png", 1.0); | 1155 "http://en.wikipedia.org/logo.png", 1.0, |
| 1156 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
1149 | 1157 |
1150 EXPECT_CALL(*mock_tables_.get(), | 1158 EXPECT_CALL(*mock_tables_.get(), |
1151 DeleteManifestData(std::vector<std::string>({"google.com"}))); | 1159 DeleteManifestData(std::vector<std::string>({"google.com"}))); |
1152 | 1160 |
1153 EXPECT_CALL(*mock_tables_.get(), | 1161 EXPECT_CALL(*mock_tables_.get(), |
1154 UpdateManifestData("en.wikipedia.org", manifest)); | 1162 UpdateManifestData("en.wikipedia.org", manifest)); |
1155 | 1163 |
1156 predictor_->OnManifestFetched("en.wikipedia.org", manifest); | 1164 predictor_->OnManifestFetched("en.wikipedia.org", manifest); |
1157 } | 1165 } |
1158 | 1166 |
1159 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { | 1167 TEST_F(ResourcePrefetchPredictorTest, ManifestUnknownFieldsRemoved) { |
1160 precache::PrecacheManifest manifest = | 1168 precache::PrecacheManifest manifest = |
1161 CreateManifestData(base::Time::Now().ToDoubleT()); | 1169 CreateManifestData(base::Time::Now().ToDoubleT()); |
1162 InitializePrecacheResource(manifest.add_resource(), | 1170 InitializePrecacheResource(manifest.add_resource(), |
1163 "http://cdn.google.com/script.js", 0.9); | 1171 "http://cdn.google.com/script.js", 0.9, |
1164 InitializePrecacheResource(manifest.add_resource(), | 1172 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1165 "http://cdn.google.com/style.css", 0.75); | 1173 InitializePrecacheResource( |
| 1174 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1175 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
1166 | 1176 |
1167 precache::PrecacheManifest manifest_with_unknown_fields(manifest); | 1177 precache::PrecacheManifest manifest_with_unknown_fields(manifest); |
1168 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( | 1178 manifest_with_unknown_fields.mutable_id()->mutable_unknown_fields()->append( |
1169 "DATA"); | 1179 "DATA"); |
1170 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); | 1180 manifest_with_unknown_fields.mutable_unknown_fields()->append("DATA"); |
1171 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { | 1181 for (auto& resource : *manifest_with_unknown_fields.mutable_resource()) { |
1172 resource.mutable_unknown_fields()->append("DATA"); | 1182 resource.mutable_unknown_fields()->append("DATA"); |
1173 } | 1183 } |
1174 | 1184 |
1175 int manifest_size = manifest.ByteSize(); | 1185 int manifest_size = manifest.ByteSize(); |
1176 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { | 1186 auto match_size = [manifest_size](const precache::PrecacheManifest& m) { |
1177 return m.ByteSize() == manifest_size; | 1187 return m.ByteSize() == manifest_size; |
1178 }; | 1188 }; |
1179 EXPECT_CALL( | 1189 EXPECT_CALL( |
1180 *mock_tables_.get(), | 1190 *mock_tables_.get(), |
1181 UpdateManifestData("google.com", | 1191 UpdateManifestData("google.com", |
1182 testing::AllOf(manifest, testing::Truly(match_size)))); | 1192 testing::AllOf(manifest, testing::Truly(match_size)))); |
1183 | 1193 |
1184 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); | 1194 predictor_->OnManifestFetched("google.com", manifest_with_unknown_fields); |
1185 } | 1195 } |
1186 | 1196 |
1187 TEST_F(ResourcePrefetchPredictorTest, ManifestTooOld) { | 1197 TEST_F(ResourcePrefetchPredictorTest, ManifestTooOld) { |
1188 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | 1198 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); |
1189 precache::PrecacheManifest manifest = | 1199 precache::PrecacheManifest manifest = |
1190 CreateManifestData(old_time.ToDoubleT()); | 1200 CreateManifestData(old_time.ToDoubleT()); |
1191 InitializePrecacheResource(manifest.add_resource(), | 1201 InitializePrecacheResource(manifest.add_resource(), |
1192 "http://cdn.google.com/script.js", 0.9); | 1202 "http://cdn.google.com/script.js", 0.9, |
1193 InitializePrecacheResource(manifest.add_resource(), | 1203 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1194 "http://cdn.google.com/style.css", 0.75); | 1204 InitializePrecacheResource( |
| 1205 manifest.add_resource(), "http://cdn.google.com/style.css", 0.75, |
| 1206 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
1195 | 1207 |
1196 // No calls to DB should happen. | 1208 // No calls to DB should happen. |
1197 predictor_->OnManifestFetched("google.com", manifest); | 1209 predictor_->OnManifestFetched("google.com", manifest); |
1198 } | 1210 } |
1199 | 1211 |
1200 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { | 1212 TEST_F(ResourcePrefetchPredictorTest, ManifestUnusedRemoved) { |
1201 const std::string& script_url = "http://cdn.google.com/script.js"; | 1213 const std::string& script_url = "http://cdn.google.com/script.js"; |
1202 const std::string& style_url = "http://cdn.google.com/style.css"; | 1214 const std::string& style_url = "http://cdn.google.com/style.css"; |
1203 PrefetchData google = CreatePrefetchData("www.google.com"); | 1215 PrefetchData google = CreatePrefetchData("www.google.com"); |
1204 InitializeResourceData(google.add_resources(), script_url, | 1216 InitializeResourceData(google.add_resources(), script_url, |
1205 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1217 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
1206 net::MEDIUM, false, false); | 1218 net::MEDIUM, false, false); |
1207 InitializeResourceData(google.add_resources(), style_url, | 1219 InitializeResourceData(google.add_resources(), style_url, |
1208 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, | 1220 content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, |
1209 net::MEDIUM, false, false); | 1221 net::MEDIUM, false, false); |
1210 predictor_->host_table_cache_->insert({google.primary_key(), google}); | 1222 predictor_->host_table_cache_->insert({google.primary_key(), google}); |
1211 | 1223 |
1212 precache::PrecacheManifest manifest = | 1224 precache::PrecacheManifest manifest = |
1213 CreateManifestData(base::Time::Now().ToDoubleT()); | 1225 CreateManifestData(base::Time::Now().ToDoubleT()); |
1214 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9); | 1226 InitializePrecacheResource(manifest.add_resource(), script_url, 0.9, |
1215 InitializePrecacheResource(manifest.add_resource(), style_url, 0.75); | 1227 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1228 InitializePrecacheResource( |
| 1229 manifest.add_resource(), style_url, 0.75, |
| 1230 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
1216 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, | 1231 InitializeExperiment(&manifest, internal::kUnusedRemovedExperiment, |
1217 {true, false}); | 1232 {true, false}); |
1218 | 1233 |
1219 // style_url should be removed. | 1234 // style_url should be removed. |
1220 google.mutable_resources()->RemoveLast(); | 1235 google.mutable_resources()->RemoveLast(); |
1221 EXPECT_CALL(*mock_tables_.get(), | 1236 EXPECT_CALL(*mock_tables_.get(), |
1222 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); | 1237 UpdateResourceData(google, PREFETCH_KEY_TYPE_HOST)); |
1223 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); | 1238 EXPECT_CALL(*mock_tables_.get(), UpdateManifestData("google.com", manifest)); |
1224 | 1239 |
1225 predictor_->OnManifestFetched("google.com", manifest); | 1240 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", | 1804 EXPECT_FALSE(predictor_->PopulatePrefetcherRequest("http://404.com", |
1790 test_data, &urls)); | 1805 test_data, &urls)); |
1791 EXPECT_TRUE(urls.empty()); | 1806 EXPECT_TRUE(urls.empty()); |
1792 } | 1807 } |
1793 | 1808 |
1794 TEST_F(ResourcePrefetchPredictorTest, PopulateFromManifest) { | 1809 TEST_F(ResourcePrefetchPredictorTest, PopulateFromManifest) { |
1795 // The data that will be used in populating. | 1810 // The data that will be used in populating. |
1796 precache::PrecacheManifest google = | 1811 precache::PrecacheManifest google = |
1797 CreateManifestData(base::Time::Now().ToDoubleT()); | 1812 CreateManifestData(base::Time::Now().ToDoubleT()); |
1798 InitializePrecacheResource(google.add_resource(), | 1813 InitializePrecacheResource(google.add_resource(), |
1799 "https://static.google.com/good", 0.9); | 1814 "https://static.google.com/good.js", 0.9, |
| 1815 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1800 InitializePrecacheResource(google.add_resource(), | 1816 InitializePrecacheResource(google.add_resource(), |
1801 "https://static.google.com/low_confidence", 0.6); | 1817 "https://static.google.com/versioned_removed", 0.8, |
| 1818 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1802 InitializePrecacheResource(google.add_resource(), | 1819 InitializePrecacheResource(google.add_resource(), |
1803 "https://static.google.com/versionned_removed", | 1820 "https://static.google.com/unused_removed", 0.8, |
1804 0.8); | 1821 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1805 InitializePrecacheResource(google.add_resource(), | 1822 InitializePrecacheResource(google.add_resource(), |
1806 "https://static.google.com/unused_removed", 0.8); | 1823 "https://static.google.com/no_store", 0.8, |
| 1824 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
| 1825 InitializePrecacheResource( |
| 1826 google.add_resource(), "https://static.google.com/good.css", 0.75, |
| 1827 precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET); |
1807 InitializePrecacheResource(google.add_resource(), | 1828 InitializePrecacheResource(google.add_resource(), |
1808 "https://static.google.com/no_store", 0.8); | 1829 "https://static.google.com/low_confidence", 0.6, |
| 1830 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1809 InitializeExperiment(&google, internal::kVersionedRemovedExperiment, | 1831 InitializeExperiment(&google, internal::kVersionedRemovedExperiment, |
| 1832 {true, false, true, true, true}); |
| 1833 InitializeExperiment(&google, internal::kUnusedRemovedExperiment, |
1810 {true, true, false, true, true}); | 1834 {true, true, false, true, true}); |
1811 InitializeExperiment(&google, internal::kUnusedRemovedExperiment, | 1835 InitializeExperiment(&google, internal::kNoStoreRemovedExperiment, |
1812 {true, true, true, false, true}); | 1836 {true, true, true, false, true}); |
1813 InitializeExperiment(&google, internal::kNoStoreRemovedExperiment, | |
1814 {true, true, true, true, false}); | |
1815 | 1837 |
1816 // The data that's too old. | 1838 // The data that's too old. |
1817 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); | 1839 base::Time old_time = base::Time::Now() - base::TimeDelta::FromDays(7); |
1818 precache::PrecacheManifest facebook = | 1840 precache::PrecacheManifest facebook = |
1819 CreateManifestData(old_time.ToDoubleT()); | 1841 CreateManifestData(old_time.ToDoubleT()); |
1820 InitializePrecacheResource(facebook.add_resource(), | 1842 InitializePrecacheResource(facebook.add_resource(), |
1821 "https://static.facebook.com/good", 0.9); | 1843 "https://static.facebook.com/good", 0.9, |
| 1844 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1822 | 1845 |
1823 predictor_->manifest_table_cache_->insert({"google.com", google}); | 1846 predictor_->manifest_table_cache_->insert({"google.com", google}); |
1824 predictor_->manifest_table_cache_->insert({"facebook.com", facebook}); | 1847 predictor_->manifest_table_cache_->insert({"facebook.com", facebook}); |
1825 | 1848 |
1826 std::vector<GURL> urls; | 1849 std::vector<GURL> urls; |
1827 EXPECT_TRUE(predictor_->PopulateFromManifest("google.com", &urls)); | 1850 EXPECT_TRUE(predictor_->PopulateFromManifest("google.com", &urls)); |
1828 EXPECT_THAT(urls, | 1851 EXPECT_EQ(urls, |
1829 UnorderedElementsAre(GURL("https://static.google.com/good"))); | 1852 std::vector<GURL>({GURL("https://static.google.com/good.css"), |
| 1853 GURL("https://static.google.com/good.js")})); |
1830 | 1854 |
1831 urls.clear(); | 1855 urls.clear(); |
1832 EXPECT_FALSE(predictor_->PopulateFromManifest("facebook.com", &urls)); | 1856 EXPECT_FALSE(predictor_->PopulateFromManifest("facebook.com", &urls)); |
1833 EXPECT_TRUE(urls.empty()); | 1857 EXPECT_TRUE(urls.empty()); |
1834 | 1858 |
1835 urls.clear(); | 1859 urls.clear(); |
1836 EXPECT_FALSE(predictor_->PopulateFromManifest("404.com", &urls)); | 1860 EXPECT_FALSE(predictor_->PopulateFromManifest("404.com", &urls)); |
1837 EXPECT_TRUE(urls.empty()); | 1861 EXPECT_TRUE(urls.empty()); |
1838 } | 1862 } |
1839 | 1863 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1888 const GURL main_frame_url("http://google.com/?query=cats"); | 1912 const GURL main_frame_url("http://google.com/?query=cats"); |
1889 ResourcePrefetchPredictor::Prediction prediction; | 1913 ResourcePrefetchPredictor::Prediction prediction; |
1890 std::vector<GURL>& urls = prediction.subresource_urls; | 1914 std::vector<GURL>& urls = prediction.subresource_urls; |
1891 // No prefetch data. | 1915 // No prefetch data. |
1892 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1916 EXPECT_FALSE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
1893 | 1917 |
1894 // Add a manifest associated with the main frame host. | 1918 // Add a manifest associated with the main frame host. |
1895 const std::string& resource_url = "https://static.google.com/resource"; | 1919 const std::string& resource_url = "https://static.google.com/resource"; |
1896 precache::PrecacheManifest manifest = | 1920 precache::PrecacheManifest manifest = |
1897 CreateManifestData(base::Time::Now().ToDoubleT()); | 1921 CreateManifestData(base::Time::Now().ToDoubleT()); |
1898 InitializePrecacheResource(manifest.add_resource(), resource_url, 0.9); | 1922 InitializePrecacheResource(manifest.add_resource(), resource_url, 0.9, |
| 1923 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
1899 predictor_->manifest_table_cache_->insert({"google.com", manifest}); | 1924 predictor_->manifest_table_cache_->insert({"google.com", manifest}); |
1900 | 1925 |
1901 urls.clear(); | 1926 urls.clear(); |
1902 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); | 1927 EXPECT_TRUE(predictor_->GetPrefetchData(main_frame_url, &prediction)); |
1903 EXPECT_THAT(urls, UnorderedElementsAre(GURL(resource_url))); | 1928 EXPECT_THAT(urls, UnorderedElementsAre(GURL(resource_url))); |
1904 | 1929 |
1905 // Add a resource associated with the main frame host. | 1930 // Add a resource associated with the main frame host. |
1906 PrefetchData google_host = CreatePrefetchData("google.com", 2); | 1931 PrefetchData google_host = CreatePrefetchData("google.com", 2); |
1907 const std::string script_url = "https://cdn.google.com/script.js"; | 1932 const std::string script_url = "https://cdn.google.com/script.js"; |
1908 InitializeResourceData(google_host.add_resources(), script_url, | 1933 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( | 2111 predictor_->host_table_cache_->insert( |
2087 std::make_pair(google.primary_key(), google)); | 2112 std::make_pair(google.primary_key(), google)); |
2088 | 2113 |
2089 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); | 2114 predictor_->StartPrefetching(GURL(main_frame_url), PrefetchOrigin::EXTERNAL); |
2090 predictor_->StopPrefetching(GURL(main_frame_url)); | 2115 predictor_->StopPrefetching(GURL(main_frame_url)); |
2091 histogram_tester_->ExpectTotalCount( | 2116 histogram_tester_->ExpectTotalCount( |
2092 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); | 2117 internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); |
2093 } | 2118 } |
2094 | 2119 |
2095 } // namespace predictors | 2120 } // namespace predictors |
OLD | NEW |