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 |