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

Side by Side Diff: components/history/core/browser/thumbnail_database_unittest.cc

Issue 2856873002: [Thumbnails DB] Allow setting last_requested time when accessing favicons. (Closed)
Patch Set: Peter's comments Created 3 years, 6 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
« no previous file with comments | « components/history/core/browser/thumbnail_database.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/files/file_enumerator.h" 10 #include "base/files/file_enumerator.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 // Adds a favicon at |icon_url| with |icon_type| with default bitmap data and 79 // Adds a favicon at |icon_url| with |icon_type| with default bitmap data and
80 // maps |page_url| to |icon_url|. 80 // maps |page_url| to |icon_url|.
81 void AddAndMapFaviconSimple(ThumbnailDatabase* db, 81 void AddAndMapFaviconSimple(ThumbnailDatabase* db,
82 const GURL& page_url, 82 const GURL& page_url,
83 const GURL& icon_url, 83 const GURL& icon_url,
84 favicon_base::IconType icon_type) { 84 favicon_base::IconType icon_type) {
85 scoped_refptr<base::RefCountedStaticMemory> data( 85 scoped_refptr<base::RefCountedStaticMemory> data(
86 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1))); 86 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1)));
87 favicon_base::FaviconID favicon_id = 87 favicon_base::FaviconID favicon_id =
88 db->AddFavicon(icon_url, icon_type, data, base::Time::Now(), gfx::Size()); 88 db->AddFavicon(icon_url, icon_type, data, FaviconBitmapType::ON_VISIT,
89 base::Time::Now(), gfx::Size());
89 db->AddIconMapping(page_url, favicon_id); 90 db->AddIconMapping(page_url, favicon_id);
90 } 91 }
91 92
92 void VerifyDatabaseEmpty(sql::Connection* db) { 93 void VerifyDatabaseEmpty(sql::Connection* db) {
93 size_t rows = 0; 94 size_t rows = 0;
94 EXPECT_TRUE(sql::test::CountTableRows(db, "favicons", &rows)); 95 EXPECT_TRUE(sql::test::CountTableRows(db, "favicons", &rows));
95 EXPECT_EQ(0u, rows); 96 EXPECT_EQ(0u, rows);
96 EXPECT_TRUE(sql::test::CountTableRows(db, "favicon_bitmaps", &rows)); 97 EXPECT_TRUE(sql::test::CountTableRows(db, "favicon_bitmaps", &rows));
97 EXPECT_EQ(0u, rows); 98 EXPECT_EQ(0u, rows);
98 EXPECT_TRUE(sql::test::CountTableRows(db, "icon_mapping", &rows)); 99 EXPECT_TRUE(sql::test::CountTableRows(db, "icon_mapping", &rows));
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 ThumbnailDatabase db(NULL); 207 ThumbnailDatabase db(NULL);
207 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 208 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
208 db.BeginTransaction(); 209 db.BeginTransaction();
209 210
210 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 211 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
211 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 212 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
212 213
213 GURL url("http://google.com"); 214 GURL url("http://google.com");
214 base::Time time = base::Time::Now(); 215 base::Time time = base::Time::Now();
215 favicon_base::FaviconID id = 216 favicon_base::FaviconID id =
216 db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size()); 217 db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon,
218 FaviconBitmapType::ON_VISIT, time, gfx::Size());
217 EXPECT_NE(0, id); 219 EXPECT_NE(0, id);
218 220
219 EXPECT_NE(0, db.AddIconMapping(url, id)); 221 EXPECT_NE(0, db.AddIconMapping(url, id));
220 std::vector<IconMapping> icon_mappings; 222 std::vector<IconMapping> icon_mappings;
221 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings)); 223 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings));
222 EXPECT_EQ(1u, icon_mappings.size()); 224 EXPECT_EQ(1u, icon_mappings.size());
223 EXPECT_EQ(url, icon_mappings.front().page_url); 225 EXPECT_EQ(url, icon_mappings.front().page_url);
224 EXPECT_EQ(id, icon_mappings.front().icon_id); 226 EXPECT_EQ(id, icon_mappings.front().icon_id);
225 } 227 }
226 228
227 TEST_F(ThumbnailDatabaseTest, LastRequestedTime) { 229 TEST_F(ThumbnailDatabaseTest,
228 ThumbnailDatabase db(NULL); 230 AddOnDemandFaviconBitmapCreatesCorrectTimestamps) {
231 ThumbnailDatabase db(nullptr);
229 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 232 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
230 db.BeginTransaction(); 233 db.BeginTransaction();
231 234
235 base::Time add_time;
236 ASSERT_TRUE(
237 base::Time::FromUTCExploded({2017, 5, 0, 1, 0, 0, 0, 0}, &add_time));
232 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 238 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
233 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 239 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
234 240
235 GURL url("http://google.com"); 241 GURL url("http://google.com");
236 base::Time now = base::Time::Now(); 242 favicon_base::FaviconID icon = db.AddFavicon(url, favicon_base::FAVICON);
237 favicon_base::FaviconID id = 243 ASSERT_NE(0, icon);
238 db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, now, gfx::Size()); 244 FaviconBitmapID bitmap = db.AddFaviconBitmap(
239 ASSERT_NE(0, id); 245 icon, favicon, FaviconBitmapType::ON_DEMAND, add_time, gfx::Size());
246 ASSERT_NE(0, bitmap);
240 247
241 // Fetching the last requested time of a non-existent bitmap should fail. 248 base::Time last_updated;
242 base::Time last_requested = base::Time::UnixEpoch(); 249 base::Time last_requested;
243 EXPECT_FALSE(db.GetFaviconBitmap(id + 1, NULL, &last_requested, NULL, NULL)); 250 ASSERT_TRUE(db.GetFaviconBitmap(bitmap, &last_updated, &last_requested,
244 EXPECT_EQ(last_requested, base::Time::UnixEpoch()); // Remains unchanged. 251 nullptr, nullptr));
252 EXPECT_EQ(base::Time(), last_updated);
253 EXPECT_EQ(add_time, last_requested);
254 }
245 255
246 // Fetching the last requested time of a bitmap that has no last request 256 TEST_F(ThumbnailDatabaseTest, AddFaviconBitmapCreatesCorrectTimestamps) {
247 // should return a null timestamp. 257 ThumbnailDatabase db(nullptr);
248 last_requested = base::Time::UnixEpoch(); 258 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
249 EXPECT_TRUE(db.GetFaviconBitmap(id, NULL, &last_requested, NULL, NULL)); 259 db.BeginTransaction();
250 EXPECT_TRUE(last_requested.is_null());
251 260
252 // Setting the last requested time of an existing bitmap should succeed, and 261 base::Time add_time;
253 // the set time should be returned by the corresponding "Get". 262 ASSERT_TRUE(
254 last_requested = base::Time::UnixEpoch(); 263 base::Time::FromUTCExploded({2017, 5, 0, 1, 0, 0, 0, 0}, &add_time));
255 EXPECT_TRUE(db.SetFaviconBitmapLastRequestedTime(id, now)); 264 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
256 EXPECT_TRUE(db.GetFaviconBitmap(id, NULL, &last_requested, NULL, NULL)); 265 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
257 EXPECT_EQ(last_requested, now); 266
267 GURL url("http://google.com");
268 favicon_base::FaviconID icon = db.AddFavicon(url, favicon_base::FAVICON);
269 ASSERT_NE(0, icon);
270 FaviconBitmapID bitmap = db.AddFaviconBitmap(
271 icon, favicon, FaviconBitmapType::ON_VISIT, add_time, gfx::Size());
272 ASSERT_NE(0, bitmap);
273
274 base::Time last_updated;
275 base::Time last_requested;
276 ASSERT_TRUE(db.GetFaviconBitmap(bitmap, &last_updated, &last_requested,
277 nullptr, nullptr));
278 EXPECT_EQ(add_time, last_updated);
279 EXPECT_EQ(base::Time(), last_requested);
280 }
281
282 TEST_F(ThumbnailDatabaseTest, TouchUpdatesOnDemandFavicons) {
283 ThumbnailDatabase db(nullptr);
284 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
285 db.BeginTransaction();
286
287 base::Time start;
288 ASSERT_TRUE(base::Time::FromUTCExploded({2017, 5, 0, 1, 0, 0, 0, 0}, &start));
289 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
290 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
291
292 // Create an on-demand favicon.
293 GURL url("http://google.com");
294 favicon_base::FaviconID icon = db.AddFavicon(url, favicon_base::FAVICON);
295 ASSERT_NE(0, icon);
296 FaviconBitmapID bitmap = db.AddFaviconBitmap(
297 icon, favicon, FaviconBitmapType::ON_DEMAND, start, gfx::Size());
298 ASSERT_NE(0, bitmap);
299
300 base::Time end =
301 start + base::TimeDelta::FromDays(kFaviconUpdateLastRequestedAfterDays);
302 EXPECT_TRUE(db.TouchOnDemandFavicon(url, end));
303
304 base::Time last_updated;
305 base::Time last_requested;
306 EXPECT_TRUE(db.GetFaviconBitmap(bitmap, &last_updated, &last_requested,
307 nullptr, nullptr));
308 // Does not mess with the last_updated field.
309 EXPECT_EQ(base::Time(), last_updated);
310 EXPECT_EQ(end, last_requested); // Updates the last_requested field.
311 }
312
313 TEST_F(ThumbnailDatabaseTest, TouchUpdatesOnlyInfrequently) {
314 ThumbnailDatabase db(nullptr);
315 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
316 db.BeginTransaction();
317
318 base::Time start;
319 ASSERT_TRUE(base::Time::FromUTCExploded({2017, 5, 0, 1, 0, 0, 0, 0}, &start));
320 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
321 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
322
323 // Create an on-demand favicon.
324 GURL url("http://google.com");
325 favicon_base::FaviconID icon = db.AddFavicon(url, favicon_base::FAVICON);
326 ASSERT_NE(0, icon);
327 FaviconBitmapID bitmap = db.AddFaviconBitmap(
328 icon, favicon, FaviconBitmapType::ON_DEMAND, start, gfx::Size());
329 ASSERT_NE(0, bitmap);
330
331 base::Time end = start + base::TimeDelta::FromMinutes(1);
332 EXPECT_TRUE(db.TouchOnDemandFavicon(url, end));
333
334 base::Time last_requested;
335 EXPECT_TRUE(
336 db.GetFaviconBitmap(bitmap, nullptr, &last_requested, nullptr, nullptr));
337 EXPECT_EQ(start, last_requested); // No update.
338 }
339
340 TEST_F(ThumbnailDatabaseTest, TouchDoesNotUpdateStandardFavicons) {
341 ThumbnailDatabase db(nullptr);
342 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
343 db.BeginTransaction();
344
345 base::Time start;
346 ASSERT_TRUE(base::Time::FromUTCExploded({2017, 5, 0, 1, 0, 0, 0, 0}, &start));
347 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
348 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
349
350 // Create a standard favicon.
351 GURL url("http://google.com");
352 favicon_base::FaviconID icon = db.AddFavicon(url, favicon_base::FAVICON);
353 EXPECT_NE(0, icon);
354 FaviconBitmapID bitmap = db.AddFaviconBitmap(
355 icon, favicon, FaviconBitmapType::ON_VISIT, start, gfx::Size());
356 EXPECT_NE(0, bitmap);
357
358 base::Time end =
359 start + base::TimeDelta::FromDays(kFaviconUpdateLastRequestedAfterDays);
360 db.TouchOnDemandFavicon(url, end);
361
362 base::Time last_updated;
363 base::Time last_requested;
364 EXPECT_TRUE(db.GetFaviconBitmap(bitmap, &last_updated, &last_requested,
365 nullptr, nullptr));
366 EXPECT_EQ(start, last_updated); // Does not mess with last_updated.
367 EXPECT_EQ(base::Time(), last_requested); // No update.
258 } 368 }
259 369
260 TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) { 370 TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) {
261 ThumbnailDatabase db(NULL); 371 ThumbnailDatabase db(NULL);
262 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 372 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
263 db.BeginTransaction(); 373 db.BeginTransaction();
264 374
265 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 375 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
266 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 376 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
267 377
268 GURL url("http://google.com"); 378 GURL url("http://google.com");
269 favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::TOUCH_ICON); 379 favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::TOUCH_ICON);
270 base::Time time = base::Time::Now(); 380 base::Time time = base::Time::Now();
271 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); 381 db.AddFaviconBitmap(id, favicon, FaviconBitmapType::ON_VISIT, time,
382 gfx::Size());
272 EXPECT_LT(0, db.AddIconMapping(url, id)); 383 EXPECT_LT(0, db.AddIconMapping(url, id));
273 384
274 favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON); 385 favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON);
275 EXPECT_LT(0, db.AddIconMapping(url, id2)); 386 EXPECT_LT(0, db.AddIconMapping(url, id2));
276 ASSERT_NE(id, id2); 387 ASSERT_NE(id, id2);
277 388
278 std::vector<IconMapping> icon_mapping; 389 std::vector<IconMapping> icon_mapping;
279 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); 390 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
280 ASSERT_EQ(2u, icon_mapping.size()); 391 ASSERT_EQ(2u, icon_mapping.size());
281 EXPECT_EQ(icon_mapping.front().icon_type, favicon_base::TOUCH_ICON); 392 EXPECT_EQ(icon_mapping.front().icon_type, favicon_base::TOUCH_ICON);
(...skipping 10 matching lines...) Expand all
292 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 403 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
293 db.BeginTransaction(); 404 db.BeginTransaction();
294 405
295 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 406 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
296 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 407 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
297 408
298 GURL url("http://google.com"); 409 GURL url("http://google.com");
299 410
300 favicon_base::FaviconID id1 = db.AddFavicon(url, favicon_base::TOUCH_ICON); 411 favicon_base::FaviconID id1 = db.AddFavicon(url, favicon_base::TOUCH_ICON);
301 base::Time time = base::Time::Now(); 412 base::Time time = base::Time::Now();
302 db.AddFaviconBitmap(id1, favicon, time, kSmallSize); 413 db.AddFaviconBitmap(id1, favicon, FaviconBitmapType::ON_VISIT, time,
303 db.AddFaviconBitmap(id1, favicon, time, kLargeSize); 414 kSmallSize);
415 db.AddFaviconBitmap(id1, favicon, FaviconBitmapType::ON_VISIT, time,
416 kLargeSize);
304 EXPECT_LT(0, db.AddIconMapping(url, id1)); 417 EXPECT_LT(0, db.AddIconMapping(url, id1));
305 418
306 favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON); 419 favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON);
307 EXPECT_NE(id1, id2); 420 EXPECT_NE(id1, id2);
308 db.AddFaviconBitmap(id2, favicon, time, kSmallSize); 421 db.AddFaviconBitmap(id2, favicon, FaviconBitmapType::ON_VISIT, time,
422 kSmallSize);
309 EXPECT_LT(0, db.AddIconMapping(url, id2)); 423 EXPECT_LT(0, db.AddIconMapping(url, id2));
310 424
311 std::vector<IconMapping> icon_mappings; 425 std::vector<IconMapping> icon_mappings;
312 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings)); 426 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings));
313 ASSERT_EQ(2u, icon_mappings.size()); 427 ASSERT_EQ(2u, icon_mappings.size());
314 EXPECT_EQ(id1, icon_mappings[0].icon_id); 428 EXPECT_EQ(id1, icon_mappings[0].icon_id);
315 EXPECT_EQ(id2, icon_mappings[1].icon_id); 429 EXPECT_EQ(id2, icon_mappings[1].icon_id);
316 } 430 }
317 431
318 TEST_F(ThumbnailDatabaseTest, RetainDataForPageUrls) { 432 TEST_F(ThumbnailDatabaseTest, RetainDataForPageUrls) {
(...skipping 15 matching lines...) Expand all
334 448
335 // TODO(shess): This would probably make sense as a golden file. 449 // TODO(shess): This would probably make sense as a golden file.
336 450
337 scoped_refptr<base::RefCountedStaticMemory> favicon1( 451 scoped_refptr<base::RefCountedStaticMemory> favicon1(
338 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1))); 452 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1)));
339 scoped_refptr<base::RefCountedStaticMemory> favicon2( 453 scoped_refptr<base::RefCountedStaticMemory> favicon2(
340 new base::RefCountedStaticMemory(kBlob2, sizeof(kBlob2))); 454 new base::RefCountedStaticMemory(kBlob2, sizeof(kBlob2)));
341 455
342 favicon_base::FaviconID kept_id1 = 456 favicon_base::FaviconID kept_id1 =
343 db.AddFavicon(kIconUrl1, favicon_base::FAVICON); 457 db.AddFavicon(kIconUrl1, favicon_base::FAVICON);
344 db.AddFaviconBitmap(kept_id1, favicon1, base::Time::Now(), kLargeSize); 458 db.AddFaviconBitmap(kept_id1, favicon1, FaviconBitmapType::ON_VISIT,
459 base::Time::Now(), kLargeSize);
345 db.AddIconMapping(kPageUrl1, kept_id1); 460 db.AddIconMapping(kPageUrl1, kept_id1);
346 db.AddIconMapping(kPageUrl3, kept_id1); 461 db.AddIconMapping(kPageUrl3, kept_id1);
347 db.AddIconMapping(kPageUrl4, kept_id1); 462 db.AddIconMapping(kPageUrl4, kept_id1);
348 463
349 favicon_base::FaviconID unkept_id = 464 favicon_base::FaviconID unkept_id =
350 db.AddFavicon(kIconUrl2, favicon_base::FAVICON); 465 db.AddFavicon(kIconUrl2, favicon_base::FAVICON);
351 db.AddFaviconBitmap(unkept_id, favicon1, base::Time::Now(), kLargeSize); 466 db.AddFaviconBitmap(unkept_id, favicon1, FaviconBitmapType::ON_VISIT,
467 base::Time::Now(), kLargeSize);
352 db.AddIconMapping(kPageUrl2, unkept_id); 468 db.AddIconMapping(kPageUrl2, unkept_id);
353 469
354 favicon_base::FaviconID kept_id2 = 470 favicon_base::FaviconID kept_id2 =
355 db.AddFavicon(kIconUrl5, favicon_base::FAVICON); 471 db.AddFavicon(kIconUrl5, favicon_base::FAVICON);
356 db.AddFaviconBitmap(kept_id2, favicon2, base::Time::Now(), kLargeSize); 472 db.AddFaviconBitmap(kept_id2, favicon2, FaviconBitmapType::ON_VISIT,
473 base::Time::Now(), kLargeSize);
357 db.AddIconMapping(kPageUrl5, kept_id2); 474 db.AddIconMapping(kPageUrl5, kept_id2);
358 475
359 // RetainDataForPageUrls() uses schema manipulations for efficiency. 476 // RetainDataForPageUrls() uses schema manipulations for efficiency.
360 // Grab a copy of the schema to make sure the final schema matches. 477 // Grab a copy of the schema to make sure the final schema matches.
361 const std::string original_schema = db.db_.GetSchema(); 478 const std::string original_schema = db.db_.GetSchema();
362 479
363 std::vector<GURL> pages_to_keep; 480 std::vector<GURL> pages_to_keep;
364 pages_to_keep.push_back(kPageUrl1); 481 pages_to_keep.push_back(kPageUrl1);
365 pages_to_keep.push_back(kPageUrl3); 482 pages_to_keep.push_back(kPageUrl3);
366 pages_to_keep.push_back(kPageUrl5); 483 pages_to_keep.push_back(kPageUrl5);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 516
400 // Test that RetainDataForPageUrls() expires retained favicons. 517 // Test that RetainDataForPageUrls() expires retained favicons.
401 TEST_F(ThumbnailDatabaseTest, RetainDataForPageUrlsExpiresRetainedFavicons) { 518 TEST_F(ThumbnailDatabaseTest, RetainDataForPageUrlsExpiresRetainedFavicons) {
402 ThumbnailDatabase db(NULL); 519 ThumbnailDatabase db(NULL);
403 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 520 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
404 db.BeginTransaction(); 521 db.BeginTransaction();
405 522
406 scoped_refptr<base::RefCountedStaticMemory> favicon1( 523 scoped_refptr<base::RefCountedStaticMemory> favicon1(
407 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1))); 524 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1)));
408 favicon_base::FaviconID kept_id = db.AddFavicon( 525 favicon_base::FaviconID kept_id = db.AddFavicon(
409 kIconUrl1, favicon_base::FAVICON, favicon1, base::Time::Now(), 526 kIconUrl1, favicon_base::FAVICON, favicon1, FaviconBitmapType::ON_VISIT,
410 gfx::Size()); 527 base::Time::Now(), gfx::Size());
411 db.AddIconMapping(kPageUrl1, kept_id); 528 db.AddIconMapping(kPageUrl1, kept_id);
412 529
413 EXPECT_TRUE(db.RetainDataForPageUrls(std::vector<GURL>(1u, kPageUrl1))); 530 EXPECT_TRUE(db.RetainDataForPageUrls(std::vector<GURL>(1u, kPageUrl1)));
414 531
415 favicon_base::FaviconID new_favicon_id = 532 favicon_base::FaviconID new_favicon_id =
416 db.GetFaviconIDForFaviconURL(kIconUrl1, favicon_base::FAVICON); 533 db.GetFaviconIDForFaviconURL(kIconUrl1, favicon_base::FAVICON);
417 ASSERT_NE(0, new_favicon_id); 534 ASSERT_NE(0, new_favicon_id);
418 std::vector<FaviconBitmap> new_favicon_bitmaps; 535 std::vector<FaviconBitmap> new_favicon_bitmaps;
419 db.GetFaviconBitmaps(new_favicon_id, &new_favicon_bitmaps); 536 db.GetFaviconBitmaps(new_favicon_id, &new_favicon_bitmaps);
420 537
(...skipping 11 matching lines...) Expand all
432 std::vector<unsigned char> data1(kBlob1, kBlob1 + sizeof(kBlob1)); 549 std::vector<unsigned char> data1(kBlob1, kBlob1 + sizeof(kBlob1));
433 scoped_refptr<base::RefCountedBytes> favicon1( 550 scoped_refptr<base::RefCountedBytes> favicon1(
434 new base::RefCountedBytes(data1)); 551 new base::RefCountedBytes(data1));
435 std::vector<unsigned char> data2(kBlob2, kBlob2 + sizeof(kBlob2)); 552 std::vector<unsigned char> data2(kBlob2, kBlob2 + sizeof(kBlob2));
436 scoped_refptr<base::RefCountedBytes> favicon2( 553 scoped_refptr<base::RefCountedBytes> favicon2(
437 new base::RefCountedBytes(data2)); 554 new base::RefCountedBytes(data2));
438 555
439 GURL url("http://google.com"); 556 GURL url("http://google.com");
440 favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::FAVICON); 557 favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::FAVICON);
441 base::Time last_updated = base::Time::Now(); 558 base::Time last_updated = base::Time::Now();
442 db.AddFaviconBitmap(id, favicon1, last_updated, kSmallSize); 559 db.AddFaviconBitmap(id, favicon1, FaviconBitmapType::ON_VISIT, last_updated,
443 db.AddFaviconBitmap(id, favicon2, last_updated, kLargeSize); 560 kSmallSize);
561 db.AddFaviconBitmap(id, favicon2, FaviconBitmapType::ON_VISIT, last_updated,
562 kLargeSize);
444 563
445 EXPECT_TRUE(db.GetFaviconBitmaps(id, NULL)); 564 EXPECT_TRUE(db.GetFaviconBitmaps(id, NULL));
446 565
447 EXPECT_TRUE(db.DeleteFavicon(id)); 566 EXPECT_TRUE(db.DeleteFavicon(id));
448 EXPECT_FALSE(db.GetFaviconBitmaps(id, NULL)); 567 EXPECT_FALSE(db.GetFaviconBitmaps(id, NULL));
449 } 568 }
450 569
451 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { 570 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) {
452 ThumbnailDatabase db(NULL); 571 ThumbnailDatabase db(NULL);
453 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 572 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
454 db.BeginTransaction(); 573 db.BeginTransaction();
455 574
456 // Add a favicon 575 // Add a favicon
457 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 576 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
458 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 577 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
459 578
460 GURL page_url("http://google.com"); 579 GURL page_url("http://google.com");
461 GURL icon_url("http://google.com/favicon.ico"); 580 GURL icon_url("http://google.com/favicon.ico");
462 base::Time time = base::Time::Now(); 581 base::Time time = base::Time::Now();
463 582
464 favicon_base::FaviconID id = db.AddFavicon( 583 favicon_base::FaviconID id =
465 icon_url, favicon_base::FAVICON, favicon, time, gfx::Size()); 584 db.AddFavicon(icon_url, favicon_base::FAVICON, favicon,
585 FaviconBitmapType::ON_VISIT, time, gfx::Size());
466 EXPECT_NE(0, db.AddIconMapping(page_url, id)); 586 EXPECT_NE(0, db.AddIconMapping(page_url, id));
467 std::vector<IconMapping> icon_mappings; 587 std::vector<IconMapping> icon_mappings;
468 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings)); 588 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings));
469 589
470 EXPECT_EQ(page_url, icon_mappings.front().page_url); 590 EXPECT_EQ(page_url, icon_mappings.front().page_url);
471 EXPECT_EQ(id, icon_mappings.front().icon_id); 591 EXPECT_EQ(id, icon_mappings.front().icon_id);
472 EXPECT_EQ(favicon_base::FAVICON, icon_mappings.front().icon_type); 592 EXPECT_EQ(favicon_base::FAVICON, icon_mappings.front().icon_type);
473 EXPECT_EQ(icon_url, icon_mappings.front().icon_url); 593 EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
474 594
475 // Add a touch icon 595 // Add a touch icon
476 std::vector<unsigned char> data2(kBlob2, kBlob2 + sizeof(kBlob2)); 596 std::vector<unsigned char> data2(kBlob2, kBlob2 + sizeof(kBlob2));
477 scoped_refptr<base::RefCountedBytes> favicon2 = 597 scoped_refptr<base::RefCountedBytes> favicon2 =
478 new base::RefCountedBytes(data); 598 new base::RefCountedBytes(data);
479 599
480 favicon_base::FaviconID id2 = db.AddFavicon( 600 favicon_base::FaviconID id2 =
481 icon_url, favicon_base::TOUCH_ICON, favicon2, time, gfx::Size()); 601 db.AddFavicon(icon_url, favicon_base::TOUCH_ICON, favicon2,
602 FaviconBitmapType::ON_VISIT, time, gfx::Size());
482 EXPECT_NE(0, db.AddIconMapping(page_url, id2)); 603 EXPECT_NE(0, db.AddIconMapping(page_url, id2));
483 604
484 icon_mappings.clear(); 605 icon_mappings.clear();
485 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings)); 606 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings));
486 607
487 EXPECT_EQ(page_url, icon_mappings.front().page_url); 608 EXPECT_EQ(page_url, icon_mappings.front().page_url);
488 EXPECT_EQ(id2, icon_mappings.front().icon_id); 609 EXPECT_EQ(id2, icon_mappings.front().icon_id);
489 EXPECT_EQ(favicon_base::TOUCH_ICON, icon_mappings.front().icon_type); 610 EXPECT_EQ(favicon_base::TOUCH_ICON, icon_mappings.front().icon_type);
490 EXPECT_EQ(icon_url, icon_mappings.front().icon_url); 611 EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
491 612
492 // Add a touch precomposed icon 613 // Add a touch precomposed icon
493 scoped_refptr<base::RefCountedBytes> favicon3 = 614 scoped_refptr<base::RefCountedBytes> favicon3 =
494 new base::RefCountedBytes(data2); 615 new base::RefCountedBytes(data2);
495 616
496 favicon_base::FaviconID id3 = 617 favicon_base::FaviconID id3 =
497 db.AddFavicon(icon_url, 618 db.AddFavicon(icon_url, favicon_base::TOUCH_PRECOMPOSED_ICON, favicon3,
498 favicon_base::TOUCH_PRECOMPOSED_ICON, 619 FaviconBitmapType::ON_VISIT, time, gfx::Size());
499 favicon3,
500 time,
501 gfx::Size());
502 EXPECT_NE(0, db.AddIconMapping(page_url, id3)); 620 EXPECT_NE(0, db.AddIconMapping(page_url, id3));
503 621
504 icon_mappings.clear(); 622 icon_mappings.clear();
505 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings)); 623 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings));
506 624
507 EXPECT_EQ(page_url, icon_mappings.front().page_url); 625 EXPECT_EQ(page_url, icon_mappings.front().page_url);
508 EXPECT_EQ(id3, icon_mappings.front().icon_id); 626 EXPECT_EQ(id3, icon_mappings.front().icon_id);
509 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, 627 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON,
510 icon_mappings.front().icon_type); 628 icon_mappings.front().icon_type);
511 EXPECT_EQ(icon_url, icon_mappings.front().icon_url); 629 EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
(...skipping 29 matching lines...) Expand all
541 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { 659 TEST_F(ThumbnailDatabaseTest, HasMappingFor) {
542 ThumbnailDatabase db(NULL); 660 ThumbnailDatabase db(NULL);
543 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); 661 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
544 db.BeginTransaction(); 662 db.BeginTransaction();
545 663
546 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); 664 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1));
547 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 665 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
548 666
549 // Add a favicon which will have icon_mappings 667 // Add a favicon which will have icon_mappings
550 base::Time time = base::Time::Now(); 668 base::Time time = base::Time::Now();
551 favicon_base::FaviconID id1 = db.AddFavicon(GURL("http://google.com"), 669 favicon_base::FaviconID id1 =
552 favicon_base::FAVICON, 670 db.AddFavicon(GURL("http://google.com"), favicon_base::FAVICON, favicon,
553 favicon, 671 FaviconBitmapType::ON_VISIT, time, gfx::Size());
554 time,
555 gfx::Size());
556 EXPECT_NE(id1, 0); 672 EXPECT_NE(id1, 0);
557 673
558 // Add another type of favicon 674 // Add another type of favicon
559 time = base::Time::Now(); 675 time = base::Time::Now();
560 favicon_base::FaviconID id2 = 676 favicon_base::FaviconID id2 = db.AddFavicon(
561 db.AddFavicon(GURL("http://www.google.com/icon"), 677 GURL("http://www.google.com/icon"), favicon_base::TOUCH_ICON, favicon,
562 favicon_base::TOUCH_ICON, 678 FaviconBitmapType::ON_VISIT, time, gfx::Size());
563 favicon,
564 time,
565 gfx::Size());
566 EXPECT_NE(id2, 0); 679 EXPECT_NE(id2, 0);
567 680
568 // Add 3rd favicon 681 // Add 3rd favicon
569 time = base::Time::Now(); 682 time = base::Time::Now();
570 favicon_base::FaviconID id3 = 683 favicon_base::FaviconID id3 = db.AddFavicon(
571 db.AddFavicon(GURL("http://www.google.com/icon"), 684 GURL("http://www.google.com/icon"), favicon_base::TOUCH_ICON, favicon,
572 favicon_base::TOUCH_ICON, 685 FaviconBitmapType::ON_VISIT, time, gfx::Size());
573 favicon,
574 time,
575 gfx::Size());
576 EXPECT_NE(id3, 0); 686 EXPECT_NE(id3, 0);
577 687
578 // Add 2 icon mapping 688 // Add 2 icon mapping
579 GURL page_url("http://www.google.com"); 689 GURL page_url("http://www.google.com");
580 EXPECT_TRUE(db.AddIconMapping(page_url, id1)); 690 EXPECT_TRUE(db.AddIconMapping(page_url, id1));
581 EXPECT_TRUE(db.AddIconMapping(page_url, id2)); 691 EXPECT_TRUE(db.AddIconMapping(page_url, id2));
582 692
583 EXPECT_TRUE(db.HasMappingFor(id1)); 693 EXPECT_TRUE(db.HasMappingFor(id1));
584 EXPECT_TRUE(db.HasMappingFor(id2)); 694 EXPECT_TRUE(db.HasMappingFor(id2));
585 EXPECT_FALSE(db.HasMappingFor(id3)); 695 EXPECT_FALSE(db.HasMappingFor(id3));
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 ThumbnailDatabase db(NULL); 1181 ThumbnailDatabase db(NULL);
1072 ASSERT_EQ(sql::INIT_OK, db.Init(db_path)); 1182 ASSERT_EQ(sql::INIT_OK, db.Init(db_path));
1073 1183
1074 // Verify that the resulting schema is correct, whether it 1184 // Verify that the resulting schema is correct, whether it
1075 // involved razing the file or fixing things in place. 1185 // involved razing the file or fixing things in place.
1076 VerifyTablesAndColumns(&db.db_); 1186 VerifyTablesAndColumns(&db.db_);
1077 } 1187 }
1078 } 1188 }
1079 1189
1080 } // namespace history 1190 } // namespace history
OLDNEW
« no previous file with comments | « components/history/core/browser/thumbnail_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698