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

Side by Side Diff: chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc

Issue 2796783004: predictors: Add origin learning. (Closed)
Patch Set: Advancing our amazing database version number. Created 3 years, 8 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 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 <memory> 5 #include <memory>
6 #include <set> 6 #include <set>
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 26 matching lines...) Expand all
37 void TestDeleteAllData(); 37 void TestDeleteAllData();
38 38
39 content::TestBrowserThreadBundle thread_bundle_; 39 content::TestBrowserThreadBundle thread_bundle_;
40 TestingProfile profile_; 40 TestingProfile profile_;
41 std::unique_ptr<PredictorDatabase> db_; 41 std::unique_ptr<PredictorDatabase> db_;
42 scoped_refptr<ResourcePrefetchPredictorTables> tables_; 42 scoped_refptr<ResourcePrefetchPredictorTables> tables_;
43 43
44 using PrefetchDataMap = ResourcePrefetchPredictorTables::PrefetchDataMap; 44 using PrefetchDataMap = ResourcePrefetchPredictorTables::PrefetchDataMap;
45 using RedirectDataMap = ResourcePrefetchPredictorTables::RedirectDataMap; 45 using RedirectDataMap = ResourcePrefetchPredictorTables::RedirectDataMap;
46 using ManifestDataMap = ResourcePrefetchPredictorTables::ManifestDataMap; 46 using ManifestDataMap = ResourcePrefetchPredictorTables::ManifestDataMap;
47 using OriginDataMap = ResourcePrefetchPredictorTables::OriginDataMap;
47 48
48 private: 49 private:
49 // Initializes the tables, |test_url_data_|, |test_host_data_|, 50 // Initializes the tables, |test_url_data_|, |test_host_data_|,
50 // |test_url_redirect_data_|, |test_host_redirect_data_| and 51 // |test_url_redirect_data_|, |test_host_redirect_data_|,
51 // |test_manifest_data_|. 52 // |test_manifest_data_|, and |test_origin_data|.
52 void InitializeSampleData(); 53 void InitializeSampleData();
53 54
54 // Checks that the input PrefetchData are the same, although the resources 55 // Checks that the input PrefetchData are the same, although the resources
55 // can be in different order. 56 // can be in different order.
56 void TestPrefetchDataAreEqual(const PrefetchDataMap& lhs, 57 void TestPrefetchDataAreEqual(const PrefetchDataMap& lhs,
57 const PrefetchDataMap& rhs) const; 58 const PrefetchDataMap& rhs) const;
58 void TestResourcesAreEqual(const std::vector<ResourceData>& lhs, 59 void TestResourcesAreEqual(const std::vector<ResourceData>& lhs,
59 const std::vector<ResourceData>& rhs) const; 60 const std::vector<ResourceData>& rhs) const;
60 61
61 // Checks that the input RedirectData are the same, although the redirects 62 // Checks that the input RedirectData are the same, although the redirects
62 // can be in different order. 63 // can be in different order.
63 void TestRedirectDataAreEqual(const RedirectDataMap& lhs, 64 void TestRedirectDataAreEqual(const RedirectDataMap& lhs,
64 const RedirectDataMap& rhs) const; 65 const RedirectDataMap& rhs) const;
65 void TestRedirectsAreEqual(const std::vector<RedirectStat>& lhs, 66 void TestRedirectsAreEqual(const std::vector<RedirectStat>& lhs,
66 const std::vector<RedirectStat>& rhs) const; 67 const std::vector<RedirectStat>& rhs) const;
67 68
68 // Checks that the input ManifestData are the same, although the resources 69 // Checks that the input ManifestData are the same, although the resources
69 // can be in different order. 70 // can be in different order.
70 void TestManifestDataAreEqual(const ManifestDataMap& lhs, 71 void TestManifestDataAreEqual(const ManifestDataMap& lhs,
71 const ManifestDataMap& rhs) const; 72 const ManifestDataMap& rhs) const;
72 void TestManifestResourcesAreEqual( 73 void TestManifestResourcesAreEqual(
73 const std::vector<precache::PrecacheResource>& lhs, 74 const std::vector<precache::PrecacheResource>& lhs,
74 const std::vector<precache::PrecacheResource>& rhs) const; 75 const std::vector<precache::PrecacheResource>& rhs) const;
75 76
77 void TestOriginDataAreEqual(const OriginDataMap& lhs,
78 const OriginDataMap& rhs) const;
79 void TestOriginStatsAreEqual(const std::vector<OriginStat>& lhs,
80 const std::vector<OriginStat>& rhs) const;
81
76 void AddKey(PrefetchDataMap* m, const std::string& key) const; 82 void AddKey(PrefetchDataMap* m, const std::string& key) const;
77 void AddKey(RedirectDataMap* m, const std::string& key) const; 83 void AddKey(RedirectDataMap* m, const std::string& key) const;
78 void AddKey(ManifestDataMap* m, const std::string& key) const; 84 void AddKey(ManifestDataMap* m, const std::string& key) const;
85 void AddKey(OriginDataMap* m, const std::string& key) const;
79 86
80 PrefetchDataMap test_url_data_; 87 PrefetchDataMap test_url_data_;
81 PrefetchDataMap test_host_data_; 88 PrefetchDataMap test_host_data_;
82 RedirectDataMap test_url_redirect_data_; 89 RedirectDataMap test_url_redirect_data_;
83 RedirectDataMap test_host_redirect_data_; 90 RedirectDataMap test_host_redirect_data_;
84 ManifestDataMap test_manifest_data_; 91 ManifestDataMap test_manifest_data_;
92 OriginDataMap test_origin_data_;
85 }; 93 };
86 94
87 class ResourcePrefetchPredictorTablesReopenTest 95 class ResourcePrefetchPredictorTablesReopenTest
88 : public ResourcePrefetchPredictorTablesTest { 96 : public ResourcePrefetchPredictorTablesTest {
89 public: 97 public:
90 void SetUp() override { 98 void SetUp() override {
91 // Write data to the table, and then reopen the db. 99 // Write data to the table, and then reopen the db.
92 ResourcePrefetchPredictorTablesTest::SetUp(); 100 ResourcePrefetchPredictorTablesTest::SetUp();
93 ResourcePrefetchPredictorTablesTest::TearDown(); 101 ResourcePrefetchPredictorTablesTest::TearDown();
94 102
(...skipping 18 matching lines...) Expand all
113 void ResourcePrefetchPredictorTablesTest::TearDown() { 121 void ResourcePrefetchPredictorTablesTest::TearDown() {
114 tables_ = NULL; 122 tables_ = NULL;
115 db_.reset(); 123 db_.reset();
116 base::RunLoop().RunUntilIdle(); 124 base::RunLoop().RunUntilIdle();
117 } 125 }
118 126
119 void ResourcePrefetchPredictorTablesTest::TestGetAllData() { 127 void ResourcePrefetchPredictorTablesTest::TestGetAllData() {
120 PrefetchDataMap actual_url_data, actual_host_data; 128 PrefetchDataMap actual_url_data, actual_host_data;
121 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; 129 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
122 ManifestDataMap actual_manifest_data; 130 ManifestDataMap actual_manifest_data;
131 OriginDataMap actual_origin_data;
123 tables_->GetAllData(&actual_url_data, &actual_host_data, 132 tables_->GetAllData(&actual_url_data, &actual_host_data,
124 &actual_url_redirect_data, &actual_host_redirect_data, 133 &actual_url_redirect_data, &actual_host_redirect_data,
125 &actual_manifest_data); 134 &actual_manifest_data, &actual_origin_data);
126 135
127 TestPrefetchDataAreEqual(test_url_data_, actual_url_data); 136 TestPrefetchDataAreEqual(test_url_data_, actual_url_data);
128 TestPrefetchDataAreEqual(test_host_data_, actual_host_data); 137 TestPrefetchDataAreEqual(test_host_data_, actual_host_data);
129 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data); 138 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data);
130 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data); 139 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data);
131 TestManifestDataAreEqual(test_manifest_data_, actual_manifest_data); 140 TestManifestDataAreEqual(test_manifest_data_, actual_manifest_data);
141 TestOriginDataAreEqual(test_origin_data_, actual_origin_data);
132 } 142 }
133 143
134 void ResourcePrefetchPredictorTablesTest::TestDeleteData() { 144 void ResourcePrefetchPredictorTablesTest::TestDeleteData() {
135 std::vector<std::string> urls_to_delete = {"http://www.google.com", 145 std::vector<std::string> urls_to_delete = {"http://www.google.com",
136 "http://www.yahoo.com"}; 146 "http://www.yahoo.com"};
137 std::vector<std::string> hosts_to_delete = {"www.yahoo.com"}; 147 std::vector<std::string> hosts_to_delete = {"www.yahoo.com"};
138 tables_->DeleteResourceData(urls_to_delete, hosts_to_delete); 148 tables_->DeleteResourceData(urls_to_delete, hosts_to_delete);
139 149
140 urls_to_delete = {"http://fb.com/google", "http://google.com"}; 150 urls_to_delete = {"http://fb.com/google", "http://google.com"};
141 hosts_to_delete = {"microsoft.com"}; 151 hosts_to_delete = {"microsoft.com"};
142 tables_->DeleteRedirectData(urls_to_delete, hosts_to_delete); 152 tables_->DeleteRedirectData(urls_to_delete, hosts_to_delete);
143 153
144 hosts_to_delete = {"en.wikipedia.org"}; 154 hosts_to_delete = {"en.wikipedia.org"};
145 tables_->DeleteManifestData(hosts_to_delete); 155 tables_->DeleteManifestData(hosts_to_delete);
146 156
157 tables_->DeleteOriginData({"twitter.com"});
158
147 PrefetchDataMap actual_url_data, actual_host_data; 159 PrefetchDataMap actual_url_data, actual_host_data;
148 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; 160 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
149 ManifestDataMap actual_manifest_data; 161 ManifestDataMap actual_manifest_data;
162 OriginDataMap actual_origin_data;
163
150 tables_->GetAllData(&actual_url_data, &actual_host_data, 164 tables_->GetAllData(&actual_url_data, &actual_host_data,
151 &actual_url_redirect_data, &actual_host_redirect_data, 165 &actual_url_redirect_data, &actual_host_redirect_data,
152 &actual_manifest_data); 166 &actual_manifest_data, &actual_origin_data);
153 167
154 PrefetchDataMap expected_url_data, expected_host_data; 168 PrefetchDataMap expected_url_data, expected_host_data;
155 RedirectDataMap expected_url_redirect_data, expected_host_redirect_data; 169 RedirectDataMap expected_url_redirect_data, expected_host_redirect_data;
156 ManifestDataMap expected_manifest_data; 170 ManifestDataMap expected_manifest_data;
171 OriginDataMap expected_origin_data;
157 AddKey(&expected_url_data, "http://www.reddit.com"); 172 AddKey(&expected_url_data, "http://www.reddit.com");
158 AddKey(&expected_host_data, "www.facebook.com"); 173 AddKey(&expected_host_data, "www.facebook.com");
159 AddKey(&expected_url_redirect_data, "http://nyt.com"); 174 AddKey(&expected_url_redirect_data, "http://nyt.com");
160 AddKey(&expected_host_redirect_data, "bbc.com"); 175 AddKey(&expected_host_redirect_data, "bbc.com");
161 AddKey(&expected_manifest_data, "youtube.com"); 176 AddKey(&expected_manifest_data, "youtube.com");
177 AddKey(&expected_origin_data, "abc.xyz");
162 178
163 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 179 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
164 TestPrefetchDataAreEqual(expected_host_data, actual_host_data); 180 TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
165 TestRedirectDataAreEqual(expected_url_redirect_data, 181 TestRedirectDataAreEqual(expected_url_redirect_data,
166 actual_url_redirect_data); 182 actual_url_redirect_data);
167 TestRedirectDataAreEqual(expected_host_redirect_data, 183 TestRedirectDataAreEqual(expected_host_redirect_data,
168 actual_host_redirect_data); 184 actual_host_redirect_data);
169 TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data); 185 TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data);
186 TestOriginDataAreEqual(expected_origin_data, actual_origin_data);
170 } 187 }
171 188
172 void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() { 189 void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
173 // Delete a URL. 190 // Delete a URL.
174 tables_->DeleteSingleResourceDataPoint("http://www.reddit.com", 191 tables_->DeleteSingleResourceDataPoint("http://www.reddit.com",
175 PREFETCH_KEY_TYPE_URL); 192 PREFETCH_KEY_TYPE_URL);
176 193
177 PrefetchDataMap actual_url_data, actual_host_data; 194 PrefetchDataMap actual_url_data, actual_host_data;
178 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; 195 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
179 ManifestDataMap actual_manifest_data; 196 ManifestDataMap actual_manifest_data;
197 OriginDataMap actual_origin_data;
180 tables_->GetAllData(&actual_url_data, &actual_host_data, 198 tables_->GetAllData(&actual_url_data, &actual_host_data,
181 &actual_url_redirect_data, &actual_host_redirect_data, 199 &actual_url_redirect_data, &actual_host_redirect_data,
182 &actual_manifest_data); 200 &actual_manifest_data, &actual_origin_data);
183 201
184 PrefetchDataMap expected_url_data; 202 PrefetchDataMap expected_url_data;
185 AddKey(&expected_url_data, "http://www.google.com"); 203 AddKey(&expected_url_data, "http://www.google.com");
186 AddKey(&expected_url_data, "http://www.yahoo.com"); 204 AddKey(&expected_url_data, "http://www.yahoo.com");
187 205
188 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 206 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
189 TestPrefetchDataAreEqual(test_host_data_, actual_host_data); 207 TestPrefetchDataAreEqual(test_host_data_, actual_host_data);
190 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data); 208 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data);
191 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data); 209 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data);
192 210
193 // Delete a host. 211 // Delete a host.
194 tables_->DeleteSingleResourceDataPoint("www.facebook.com", 212 tables_->DeleteSingleResourceDataPoint("www.facebook.com",
195 PREFETCH_KEY_TYPE_HOST); 213 PREFETCH_KEY_TYPE_HOST);
196 actual_url_data.clear(); 214 actual_url_data.clear();
197 actual_host_data.clear(); 215 actual_host_data.clear();
198 actual_url_redirect_data.clear(); 216 actual_url_redirect_data.clear();
199 actual_host_redirect_data.clear(); 217 actual_host_redirect_data.clear();
200 actual_manifest_data.clear(); 218 actual_manifest_data.clear();
219 actual_origin_data.clear();
201 tables_->GetAllData(&actual_url_data, &actual_host_data, 220 tables_->GetAllData(&actual_url_data, &actual_host_data,
202 &actual_url_redirect_data, &actual_host_redirect_data, 221 &actual_url_redirect_data, &actual_host_redirect_data,
203 &actual_manifest_data); 222 &actual_manifest_data, &actual_origin_data);
204 223
205 PrefetchDataMap expected_host_data; 224 PrefetchDataMap expected_host_data;
206 AddKey(&expected_host_data, "www.yahoo.com"); 225 AddKey(&expected_host_data, "www.yahoo.com");
207 226
208 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 227 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
209 TestPrefetchDataAreEqual(expected_host_data, actual_host_data); 228 TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
210 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data); 229 TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data);
211 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data); 230 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data);
212 231
213 // Delete a URL redirect. 232 // Delete a URL redirect.
214 tables_->DeleteSingleRedirectDataPoint("http://nyt.com", 233 tables_->DeleteSingleRedirectDataPoint("http://nyt.com",
215 PREFETCH_KEY_TYPE_URL); 234 PREFETCH_KEY_TYPE_URL);
216 actual_url_data.clear(); 235 actual_url_data.clear();
217 actual_host_data.clear(); 236 actual_host_data.clear();
218 actual_url_redirect_data.clear(); 237 actual_url_redirect_data.clear();
219 actual_host_redirect_data.clear(); 238 actual_host_redirect_data.clear();
220 actual_manifest_data.clear(); 239 actual_manifest_data.clear();
240 actual_origin_data.clear();
221 tables_->GetAllData(&actual_url_data, &actual_host_data, 241 tables_->GetAllData(&actual_url_data, &actual_host_data,
222 &actual_url_redirect_data, &actual_host_redirect_data, 242 &actual_url_redirect_data, &actual_host_redirect_data,
223 &actual_manifest_data); 243 &actual_manifest_data, &actual_origin_data);
224 244
225 RedirectDataMap expected_url_redirect_data; 245 RedirectDataMap expected_url_redirect_data;
226 AddKey(&expected_url_redirect_data, "http://fb.com/google"); 246 AddKey(&expected_url_redirect_data, "http://fb.com/google");
227 AddKey(&expected_url_redirect_data, "http://google.com"); 247 AddKey(&expected_url_redirect_data, "http://google.com");
228 248
229 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 249 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
230 TestPrefetchDataAreEqual(expected_host_data, actual_host_data); 250 TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
231 TestRedirectDataAreEqual(expected_url_redirect_data, 251 TestRedirectDataAreEqual(expected_url_redirect_data,
232 actual_url_redirect_data); 252 actual_url_redirect_data);
233 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data); 253 TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data);
234 254
235 // Delete a host redirect. 255 // Delete a host redirect.
236 tables_->DeleteSingleRedirectDataPoint("bbc.com", PREFETCH_KEY_TYPE_HOST); 256 tables_->DeleteSingleRedirectDataPoint("bbc.com", PREFETCH_KEY_TYPE_HOST);
237 actual_url_data.clear(); 257 actual_url_data.clear();
238 actual_host_data.clear(); 258 actual_host_data.clear();
239 actual_url_redirect_data.clear(); 259 actual_url_redirect_data.clear();
240 actual_host_redirect_data.clear(); 260 actual_host_redirect_data.clear();
241 actual_manifest_data.clear(); 261 actual_manifest_data.clear();
262 actual_origin_data.clear();
242 tables_->GetAllData(&actual_url_data, &actual_host_data, 263 tables_->GetAllData(&actual_url_data, &actual_host_data,
243 &actual_url_redirect_data, &actual_host_redirect_data, 264 &actual_url_redirect_data, &actual_host_redirect_data,
244 &actual_manifest_data); 265 &actual_manifest_data, &actual_origin_data);
245 266
246 RedirectDataMap expected_host_redirect_data; 267 RedirectDataMap expected_host_redirect_data;
247 AddKey(&expected_host_redirect_data, "microsoft.com"); 268 AddKey(&expected_host_redirect_data, "microsoft.com");
248 269
249 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 270 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
250 TestPrefetchDataAreEqual(expected_host_data, actual_host_data); 271 TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
251 TestRedirectDataAreEqual(expected_url_redirect_data, 272 TestRedirectDataAreEqual(expected_url_redirect_data,
252 actual_url_redirect_data); 273 actual_url_redirect_data);
253 TestRedirectDataAreEqual(expected_host_redirect_data, 274 TestRedirectDataAreEqual(expected_host_redirect_data,
254 actual_host_redirect_data); 275 actual_host_redirect_data);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 2, 0); 307 2, 0);
287 308
288 tables_->UpdateData(google, yahoo, facebook, microsoft); 309 tables_->UpdateData(google, yahoo, facebook, microsoft);
289 310
290 precache::PrecacheManifest theverge; 311 precache::PrecacheManifest theverge;
291 InitializePrecacheResource(theverge.add_resource(), 312 InitializePrecacheResource(theverge.add_resource(),
292 "https://www.theverge.com/main.js", 0.7); 313 "https://www.theverge.com/main.js", 0.7);
293 314
294 tables_->UpdateManifestData("theverge.com", theverge); 315 tables_->UpdateManifestData("theverge.com", theverge);
295 316
317 OriginData twitter = CreateOriginData("twitter.com");
318 InitializeOriginStat(twitter.add_origins(), "https://dogs.twitter.com", 10, 1,
319 0, 12., false, true);
320 tables_->UpdateOriginData("twitter.com", twitter);
321
296 PrefetchDataMap actual_url_data, actual_host_data; 322 PrefetchDataMap actual_url_data, actual_host_data;
297 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; 323 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
298 ManifestDataMap actual_manifest_data; 324 ManifestDataMap actual_manifest_data;
325 OriginDataMap actual_origin_data;
299 tables_->GetAllData(&actual_url_data, &actual_host_data, 326 tables_->GetAllData(&actual_url_data, &actual_host_data,
300 &actual_url_redirect_data, &actual_host_redirect_data, 327 &actual_url_redirect_data, &actual_host_redirect_data,
301 &actual_manifest_data); 328 &actual_manifest_data, &actual_origin_data);
302 329
303 PrefetchDataMap expected_url_data, expected_host_data; 330 PrefetchDataMap expected_url_data, expected_host_data;
304 RedirectDataMap expected_url_redirect_data, expected_host_redirect_data; 331 RedirectDataMap expected_url_redirect_data, expected_host_redirect_data;
305 ManifestDataMap expected_manifest_data; 332 ManifestDataMap expected_manifest_data;
333 OriginDataMap expected_origin_data;
306 AddKey(&expected_url_data, "http://www.reddit.com"); 334 AddKey(&expected_url_data, "http://www.reddit.com");
307 AddKey(&expected_url_data, "http://www.yahoo.com"); 335 AddKey(&expected_url_data, "http://www.yahoo.com");
308 expected_url_data.insert(std::make_pair("http://www.google.com", google)); 336 expected_url_data.insert(std::make_pair("http://www.google.com", google));
309 337
310 AddKey(&expected_host_data, "www.facebook.com"); 338 AddKey(&expected_host_data, "www.facebook.com");
311 expected_host_data.insert(std::make_pair("www.yahoo.com", yahoo)); 339 expected_host_data.insert(std::make_pair("www.yahoo.com", yahoo));
312 340
313 AddKey(&expected_url_redirect_data, "http://nyt.com"); 341 AddKey(&expected_url_redirect_data, "http://nyt.com");
314 AddKey(&expected_url_redirect_data, "http://google.com"); 342 AddKey(&expected_url_redirect_data, "http://google.com");
315 expected_url_redirect_data.insert( 343 expected_url_redirect_data.insert(
316 std::make_pair("http://fb.com/google", facebook)); 344 std::make_pair("http://fb.com/google", facebook));
317 345
318 AddKey(&expected_host_redirect_data, "bbc.com"); 346 AddKey(&expected_host_redirect_data, "bbc.com");
319 expected_host_redirect_data.insert( 347 expected_host_redirect_data.insert(
320 std::make_pair("microsoft.com", microsoft)); 348 std::make_pair("microsoft.com", microsoft));
321 349
322 AddKey(&expected_manifest_data, "youtube.com"); 350 AddKey(&expected_manifest_data, "youtube.com");
323 AddKey(&expected_manifest_data, "en.wikipedia.org"); 351 AddKey(&expected_manifest_data, "en.wikipedia.org");
324 expected_manifest_data.insert(std::make_pair("theverge.com", theverge)); 352 expected_manifest_data.insert(std::make_pair("theverge.com", theverge));
325 353
354 AddKey(&expected_origin_data, "abc.xyz");
355 expected_origin_data.insert({"twitter.com", twitter});
356
326 TestPrefetchDataAreEqual(expected_url_data, actual_url_data); 357 TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
327 TestPrefetchDataAreEqual(expected_host_data, actual_host_data); 358 TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
328 TestRedirectDataAreEqual(expected_url_redirect_data, 359 TestRedirectDataAreEqual(expected_url_redirect_data,
329 actual_url_redirect_data); 360 actual_url_redirect_data);
330 TestRedirectDataAreEqual(expected_host_redirect_data, 361 TestRedirectDataAreEqual(expected_host_redirect_data,
331 actual_host_redirect_data); 362 actual_host_redirect_data);
332 TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data); 363 TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data);
333 } 364 }
334 365
335 void ResourcePrefetchPredictorTablesTest::TestDeleteAllData() { 366 void ResourcePrefetchPredictorTablesTest::TestDeleteAllData() {
336 tables_->DeleteAllData(); 367 tables_->DeleteAllData();
337 368
338 PrefetchDataMap actual_url_data, actual_host_data; 369 PrefetchDataMap actual_url_data, actual_host_data;
339 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; 370 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
340 ManifestDataMap actual_manifest_data; 371 ManifestDataMap actual_manifest_data;
372 OriginDataMap actual_origin_data;
341 tables_->GetAllData(&actual_url_data, &actual_host_data, 373 tables_->GetAllData(&actual_url_data, &actual_host_data,
342 &actual_url_redirect_data, &actual_host_redirect_data, 374 &actual_url_redirect_data, &actual_host_redirect_data,
343 &actual_manifest_data); 375 &actual_manifest_data, &actual_origin_data);
344 EXPECT_TRUE(actual_url_data.empty()); 376 EXPECT_TRUE(actual_url_data.empty());
345 EXPECT_TRUE(actual_host_data.empty()); 377 EXPECT_TRUE(actual_host_data.empty());
346 EXPECT_TRUE(actual_url_redirect_data.empty()); 378 EXPECT_TRUE(actual_url_redirect_data.empty());
347 EXPECT_TRUE(actual_host_redirect_data.empty()); 379 EXPECT_TRUE(actual_host_redirect_data.empty());
348 EXPECT_TRUE(actual_manifest_data.empty()); 380 EXPECT_TRUE(actual_manifest_data.empty());
349 } 381 }
350 382
351 void ResourcePrefetchPredictorTablesTest::TestPrefetchDataAreEqual( 383 void ResourcePrefetchPredictorTablesTest::TestPrefetchDataAreEqual(
352 const PrefetchDataMap& lhs, 384 const PrefetchDataMap& lhs,
353 const PrefetchDataMap& rhs) const { 385 const PrefetchDataMap& rhs) const {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 EXPECT_EQ(r, lhs_it->second); 503 EXPECT_EQ(r, lhs_it->second);
472 lhs_index.erase(lhs_it); 504 lhs_index.erase(lhs_it);
473 } else { 505 } else {
474 ADD_FAILURE() << r.url(); 506 ADD_FAILURE() << r.url();
475 } 507 }
476 } 508 }
477 509
478 EXPECT_TRUE(lhs_index.empty()); 510 EXPECT_TRUE(lhs_index.empty());
479 } 511 }
480 512
513 void ResourcePrefetchPredictorTablesTest::TestOriginDataAreEqual(
514 const OriginDataMap& lhs,
515 const OriginDataMap& rhs) const {
516 EXPECT_EQ(lhs.size(), rhs.size());
517
518 for (const auto& o : rhs) {
519 const auto lhs_it = lhs.find(o.first);
520 ASSERT_TRUE(lhs_it != lhs.end()) << o.first;
521 std::vector<OriginStat> lhs_origins(lhs_it->second.origins().begin(),
522 lhs_it->second.origins().end());
523 std::vector<OriginStat> rhs_origins(o.second.origins().begin(),
524 o.second.origins().end());
525
526 TestOriginStatsAreEqual(lhs_origins, rhs_origins);
527 }
528 }
529
530 void ResourcePrefetchPredictorTablesTest::TestOriginStatsAreEqual(
531 const std::vector<OriginStat>& lhs,
532 const std::vector<OriginStat>& rhs) const {
533 EXPECT_EQ(lhs.size(), rhs.size());
534
535 std::map<std::string, OriginStat> lhs_index;
536 // Repeated origins are not allowed.
537 for (const auto& o : lhs)
538 EXPECT_TRUE(lhs_index.insert({o.origin(), o}).second);
539
540 for (const auto& o : rhs) {
541 auto lhs_it = lhs_index.find(o.origin());
542 if (lhs_it != lhs_index.end()) {
543 EXPECT_EQ(o, lhs_it->second);
544 lhs_index.erase(lhs_it);
545 } else {
546 ADD_FAILURE() << o.origin();
547 }
548 }
549
550 EXPECT_TRUE(lhs_index.empty());
551 }
552
481 void ResourcePrefetchPredictorTablesTest::AddKey(PrefetchDataMap* m, 553 void ResourcePrefetchPredictorTablesTest::AddKey(PrefetchDataMap* m,
482 const std::string& key) const { 554 const std::string& key) const {
483 PrefetchDataMap::const_iterator it = test_url_data_.find(key); 555 PrefetchDataMap::const_iterator it = test_url_data_.find(key);
484 if (it != test_url_data_.end()) { 556 if (it != test_url_data_.end()) {
485 m->insert(*it); 557 m->insert(*it);
486 return; 558 return;
487 } 559 }
488 it = test_host_data_.find(key); 560 it = test_host_data_.find(key);
489 ASSERT_TRUE(it != test_host_data_.end()); 561 ASSERT_TRUE(it != test_host_data_.end());
490 m->insert(*it); 562 m->insert(*it);
(...skipping 11 matching lines...) Expand all
502 m->insert(*it); 574 m->insert(*it);
503 } 575 }
504 576
505 void ResourcePrefetchPredictorTablesTest::AddKey(ManifestDataMap* m, 577 void ResourcePrefetchPredictorTablesTest::AddKey(ManifestDataMap* m,
506 const std::string& key) const { 578 const std::string& key) const {
507 auto it = test_manifest_data_.find(key); 579 auto it = test_manifest_data_.find(key);
508 ASSERT_TRUE(it != test_manifest_data_.end()); 580 ASSERT_TRUE(it != test_manifest_data_.end());
509 m->insert(*it); 581 m->insert(*it);
510 } 582 }
511 583
584 void ResourcePrefetchPredictorTablesTest::AddKey(OriginDataMap* m,
585 const std::string& key) const {
586 auto it = test_origin_data_.find(key);
587 ASSERT_TRUE(it != test_origin_data_.end());
588 m->insert(*it);
589 }
590
512 void ResourcePrefetchPredictorTablesTest::InitializeSampleData() { 591 void ResourcePrefetchPredictorTablesTest::InitializeSampleData() {
513 PrefetchData empty_resource_data; 592 PrefetchData empty_resource_data;
514 RedirectData empty_redirect_data; 593 RedirectData empty_redirect_data;
515 594
516 { // Url data. 595 { // Url data.
517 PrefetchData google = CreatePrefetchData("http://www.google.com", 1); 596 PrefetchData google = CreatePrefetchData("http://www.google.com", 1);
518 InitializeResourceData(google.add_resources(), 597 InitializeResourceData(google.add_resources(),
519 "http://www.google.com/style.css", 598 "http://www.google.com/style.css",
520 content::RESOURCE_TYPE_STYLESHEET, 5, 2, 1, 1.1, 599 content::RESOURCE_TYPE_STYLESHEET, 5, 2, 1, 1.1,
521 net::MEDIUM, false, false); 600 net::MEDIUM, false, false);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 "https://youtube.com/photo.jpg", 0.5); 741 "https://youtube.com/photo.jpg", 0.5);
663 InitializePrecacheResource(youtube.add_resource(), 742 InitializePrecacheResource(youtube.add_resource(),
664 "https://youtube.com/base.js", 0.2); 743 "https://youtube.com/base.js", 0.2);
665 744
666 test_manifest_data_.clear(); 745 test_manifest_data_.clear();
667 test_manifest_data_.insert(std::make_pair("en.wikipedia.org", wikipedia)); 746 test_manifest_data_.insert(std::make_pair("en.wikipedia.org", wikipedia));
668 test_manifest_data_.insert(std::make_pair("youtube.com", youtube)); 747 test_manifest_data_.insert(std::make_pair("youtube.com", youtube));
669 tables_->UpdateManifestData("en.wikipedia.org", wikipedia); 748 tables_->UpdateManifestData("en.wikipedia.org", wikipedia);
670 tables_->UpdateManifestData("youtube.com", youtube); 749 tables_->UpdateManifestData("youtube.com", youtube);
671 } 750 }
751
752 { // Origin data.
753 OriginData twitter;
754 twitter.set_host("twitter.com");
755 InitializeOriginStat(twitter.add_origins(), "https://cdn.twitter.com", 10,
756 1, 0, 12., false, true);
757 InitializeOriginStat(twitter.add_origins(), "https://cats.twitter.com", 10,
758 1, 0, 20., false, true);
759
760 OriginData alphabet;
761 alphabet.set_host("abc.xyz");
762 InitializeOriginStat(alphabet.add_origins(), "https://abc.def.xyz", 10, 1,
763 0, 12., false, true);
764 InitializeOriginStat(alphabet.add_origins(), "https://alpha.beta.com", 10,
765 1, 0, 20., false, true);
766
767 test_origin_data_.clear();
768 test_origin_data_.insert({"twitter.com", twitter});
769 test_origin_data_.insert({"abc.xyz", alphabet});
770 tables_->UpdateOriginData("twitter.com", twitter);
771 tables_->UpdateOriginData("abc.xyz", alphabet);
772 }
672 } 773 }
673 774
674 void ResourcePrefetchPredictorTablesTest::ReopenDatabase() { 775 void ResourcePrefetchPredictorTablesTest::ReopenDatabase() {
675 db_.reset(new PredictorDatabase(&profile_)); 776 db_.reset(new PredictorDatabase(&profile_));
676 base::RunLoop().RunUntilIdle(); 777 base::RunLoop().RunUntilIdle();
677 tables_ = db_->resource_prefetch_tables(); 778 tables_ = db_->resource_prefetch_tables();
678 } 779 }
679 780
680 // Test cases. 781 // Test cases.
681 782
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.)); 818 compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.));
718 EXPECT_TRUE( 819 EXPECT_TRUE(
719 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.) > 820 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.) >
720 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FAVICON, 42.)); 821 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FAVICON, 42.));
721 822
722 // All else being equal, position matters. 823 // All else being equal, position matters.
723 EXPECT_TRUE(compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 12.) > 824 EXPECT_TRUE(compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 12.) >
724 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.)); 825 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.));
725 } 826 }
726 827
828 TEST_F(ResourcePrefetchPredictorTablesTest, ComputeOriginScore) {
829 auto compute_score = [](int hits, int misses, double average_position,
830 bool always_access_network, bool accessed_network) {
831 OriginStat origin;
832 InitializeOriginStat(&origin, "", hits, misses, 0, average_position,
833 always_access_network, accessed_network);
834 return ResourcePrefetchPredictorTables::ComputeOriginScore(origin);
835 };
836
837 // High-confidence is more important than the rest.
838 EXPECT_TRUE(compute_score(20, 2, 12., false, false) >
alexilin 2017/04/10 14:58:28 nit: EXPECT_GT(x,y) is generally better than EXPEC
Benoit L 2017/04/11 09:04:05 I see from gtest that the operands no longer have
839 compute_score(2, 0, 12., false, false));
840 EXPECT_TRUE(compute_score(20, 2, 12., false, false) >
841 compute_score(2, 0, 2., true, true));
842
843 // Don't care about the confidence as long as it's high.
844 EXPECT_TRUE(compute_score(20, 2, 12., false, false) ==
alexilin 2017/04/10 14:58:28 nit: EXPECT_NEAR(x, y, eps)
Benoit L 2017/04/11 09:04:05 Done.
845 compute_score(50, 6, 12., false, false));
846
847 // Mandatory network access.
848 EXPECT_TRUE(compute_score(1, 1, 12., true, false) >
849 compute_score(1, 1, 12., false, false));
850 EXPECT_TRUE(compute_score(1, 1, 12., true, false) >
851 compute_score(1, 1, 12., false, true));
852 EXPECT_TRUE(compute_score(1, 1, 12., true, false) >
853 compute_score(1, 1, 2., false, true));
854
855 // Accessed network.
856 EXPECT_TRUE(compute_score(1, 1, 12., false, true) >
857 compute_score(1, 1, 12., false, false));
858 EXPECT_TRUE(compute_score(1, 1, 12., false, true) >
859 compute_score(1, 1, 2., false, false));
860
861 // All else being equal, position matters.
862 EXPECT_TRUE(compute_score(1, 1, 2., false, false) >
863 compute_score(1, 1, 12., false, false));
864 EXPECT_TRUE(compute_score(1, 1, 2., true, true) >
865 compute_score(1, 1, 12., true, true));
866 }
867
727 TEST_F(ResourcePrefetchPredictorTablesTest, GetAllData) { 868 TEST_F(ResourcePrefetchPredictorTablesTest, GetAllData) {
728 TestGetAllData(); 869 TestGetAllData();
729 } 870 }
730 871
731 TEST_F(ResourcePrefetchPredictorTablesTest, UpdateData) { 872 TEST_F(ResourcePrefetchPredictorTablesTest, UpdateData) {
732 TestUpdateData(); 873 TestUpdateData();
733 } 874 }
734 875
735 TEST_F(ResourcePrefetchPredictorTablesTest, DeleteData) { 876 TEST_F(ResourcePrefetchPredictorTablesTest, DeleteData) {
736 TestDeleteData(); 877 TestDeleteData();
(...skipping 22 matching lines...) Expand all
759 ResourcePrefetchPredictorTables::GetDatabaseVersion(db)); 900 ResourcePrefetchPredictorTables::GetDatabaseVersion(db));
760 901
761 ReopenDatabase(); 902 ReopenDatabase();
762 903
763 db = tables_->DB(); 904 db = tables_->DB();
764 ASSERT_EQ(version, ResourcePrefetchPredictorTables::GetDatabaseVersion(db)); 905 ASSERT_EQ(version, ResourcePrefetchPredictorTables::GetDatabaseVersion(db));
765 906
766 PrefetchDataMap url_data, host_data; 907 PrefetchDataMap url_data, host_data;
767 RedirectDataMap url_redirect_data, host_redirect_data; 908 RedirectDataMap url_redirect_data, host_redirect_data;
768 ManifestDataMap manifest_data; 909 ManifestDataMap manifest_data;
910 OriginDataMap origin_data;
769 tables_->GetAllData(&url_data, &host_data, &url_redirect_data, 911 tables_->GetAllData(&url_data, &host_data, &url_redirect_data,
770 &host_redirect_data, &manifest_data); 912 &host_redirect_data, &manifest_data, &origin_data);
771 EXPECT_TRUE(url_data.empty()); 913 EXPECT_TRUE(url_data.empty());
772 EXPECT_TRUE(host_data.empty()); 914 EXPECT_TRUE(host_data.empty());
773 EXPECT_TRUE(url_redirect_data.empty()); 915 EXPECT_TRUE(url_redirect_data.empty());
774 EXPECT_TRUE(host_redirect_data.empty()); 916 EXPECT_TRUE(host_redirect_data.empty());
775 EXPECT_TRUE(manifest_data.empty()); 917 EXPECT_TRUE(manifest_data.empty());
918 EXPECT_TRUE(origin_data.empty());
776 } 919 }
777 920
778 TEST_F(ResourcePrefetchPredictorTablesReopenTest, GetAllData) { 921 TEST_F(ResourcePrefetchPredictorTablesReopenTest, GetAllData) {
779 TestGetAllData(); 922 TestGetAllData();
780 } 923 }
781 924
782 TEST_F(ResourcePrefetchPredictorTablesReopenTest, UpdateData) { 925 TEST_F(ResourcePrefetchPredictorTablesReopenTest, UpdateData) {
783 TestUpdateData(); 926 TestUpdateData();
784 } 927 }
785 928
786 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteData) { 929 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteData) {
787 TestDeleteData(); 930 TestDeleteData();
788 } 931 }
789 932
790 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteSingleDataPoint) { 933 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteSingleDataPoint) {
791 TestDeleteSingleDataPoint(); 934 TestDeleteSingleDataPoint();
792 } 935 }
793 936
794 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteAllData) { 937 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteAllData) {
795 TestDeleteAllData(); 938 TestDeleteAllData();
796 } 939 }
797 940
798 } // namespace predictors 941 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698