| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |