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

Side by Side Diff: chrome/browser/history/thumbnail_database_unittest.cc

Issue 10802066: Adds support for saving favicon size into history database. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 | Annotate | Revision Log
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 <algorithm> 5 #include <algorithm>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 const double kBoringness = 0.25; 42 const double kBoringness = 0.25;
43 const double kWorseBoringness = 0.50; 43 const double kWorseBoringness = 0.50;
44 const double kBetterBoringness = 0.10; 44 const double kBetterBoringness = 0.10;
45 const double kTotallyBoring = 1.0; 45 const double kTotallyBoring = 1.0;
46 46
47 const int64 kPage1 = 1234; 47 const int64 kPage1 = 1234;
48 48
49 const gfx::Size kSmallSize = gfx::Size(16, 16); 49 const gfx::Size kSmallSize = gfx::Size(16, 16);
50 const gfx::Size kLargeSize = gfx::Size(32, 32); 50 const gfx::Size kLargeSize = gfx::Size(32, 32);
51 51
52 const std::string kSizesSmallAndLarge = "16 16 32 32";
53
54 } // namespace 52 } // namespace
55 53
56 class ThumbnailDatabaseTest : public testing::Test { 54 class ThumbnailDatabaseTest : public testing::Test {
57 public: 55 public:
58 ThumbnailDatabaseTest() { 56 ThumbnailDatabaseTest() {
59 } 57 }
60 ~ThumbnailDatabaseTest() { 58 ~ThumbnailDatabaseTest() {
61 } 59 }
62 60
63 protected: 61 protected:
64 virtual void SetUp() { 62 virtual void SetUp() {
65 // Get a temporary directory for the test DB files. 63 // Get a temporary directory for the test DB files.
66 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 64 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
67 65
68 file_name_ = temp_dir_.path().AppendASCII("TestThumbnails.db"); 66 file_name_ = temp_dir_.path().AppendASCII("TestThumbnails.db");
69 new_file_name_ = temp_dir_.path().AppendASCII("TestFavicons.db"); 67 new_file_name_ = temp_dir_.path().AppendASCII("TestFavicons.db");
70 history_db_name_ = temp_dir_.path().AppendASCII("TestHistory.db"); 68 history_db_name_ = temp_dir_.path().AppendASCII("TestHistory.db");
71 google_bitmap_.reset( 69 google_bitmap_.reset(
72 gfx::JPEGCodec::Decode(kGoogleThumbnail, sizeof(kGoogleThumbnail))); 70 gfx::JPEGCodec::Decode(kGoogleThumbnail, sizeof(kGoogleThumbnail)));
73 } 71 }
74 72
73 const FaviconSizes& GetSizesSmallAndLarge() {
74 CR_DEFINE_STATIC_LOCAL(FaviconSizes, kSizesSmallAndLarge, ());
75 if (kSizesSmallAndLarge.empty()) {
76 kSizesSmallAndLarge.push_back(kSmallSize);
77 kSizesSmallAndLarge.push_back(kLargeSize);
78 }
79 return kSizesSmallAndLarge;
80 }
81
75 scoped_ptr<SkBitmap> google_bitmap_; 82 scoped_ptr<SkBitmap> google_bitmap_;
76 83
77 ScopedTempDir temp_dir_; 84 ScopedTempDir temp_dir_;
78 FilePath file_name_; 85 FilePath file_name_;
79 FilePath new_file_name_; 86 FilePath new_file_name_;
80 FilePath history_db_name_; 87 FilePath history_db_name_;
88 FaviconSizes sizes_small_and_large_;
81 }; 89 };
82 90
83 class IconMappingMigrationTest : public HistoryUnitTestBase { 91 class IconMappingMigrationTest : public HistoryUnitTestBase {
84 public: 92 public:
85 IconMappingMigrationTest() { 93 IconMappingMigrationTest() {
86 } 94 }
87 ~IconMappingMigrationTest() { 95 ~IconMappingMigrationTest() {
88 } 96 }
89 97
90 protected: 98 protected:
(...skipping 27 matching lines...) Expand all
118 TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { 126 TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) {
119 ThumbnailDatabase db; 127 ThumbnailDatabase db;
120 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 128 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
121 db.BeginTransaction(); 129 db.BeginTransaction();
122 130
123 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 131 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
124 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 132 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
125 133
126 GURL url("http://google.com"); 134 GURL url("http://google.com");
127 FaviconID icon_id = db.AddFavicon(url, FAVICON); 135 FaviconID icon_id = db.AddFavicon(url, FAVICON);
128 db.SetFaviconSizes(icon_id, kSizesSmallAndLarge); 136 db.SetFaviconSizes(icon_id, GetSizesSmallAndLarge());
129 base::Time time = base::Time::Now(); 137 base::Time time = base::Time::Now();
130 FaviconBitmapID bitmap1_id = db.AddFaviconBitmap(icon_id, favicon, time, 138 FaviconBitmapID bitmap1_id = db.AddFaviconBitmap(icon_id, favicon, time,
131 kSmallSize); 139 kSmallSize);
132 FaviconBitmapID bitmap2_id = db.AddFaviconBitmap(icon_id, favicon, time, 140 FaviconBitmapID bitmap2_id = db.AddFaviconBitmap(icon_id, favicon, time,
133 kLargeSize); 141 kLargeSize);
134 EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); 142 EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_));
135 EXPECT_TRUE(db.IsLatestVersion()); 143 EXPECT_TRUE(db.IsLatestVersion());
136 144
137 GURL url_out; 145 GURL url_out;
138 IconType icon_type_out; 146 IconType icon_type_out;
139 std::string sizes_out; 147 FaviconSizes sizes_out;
140 EXPECT_TRUE(db.GetFaviconHeader(icon_id, &url_out, &icon_type_out, 148 EXPECT_TRUE(db.GetFaviconHeader(icon_id, &url_out, &icon_type_out,
141 &sizes_out)); 149 &sizes_out));
142 150
143 EXPECT_EQ(url, url_out); 151 EXPECT_EQ(url, url_out);
144 EXPECT_EQ(FAVICON, icon_type_out); 152 EXPECT_EQ(FAVICON, icon_type_out);
145 EXPECT_STREQ(kSizesSmallAndLarge.c_str(), sizes_out.c_str()); 153 EXPECT_EQ(GetSizesSmallAndLarge(), sizes_out);
146 154
147 std::vector<FaviconBitmap> favicon_bitmaps_out; 155 std::vector<FaviconBitmap> favicon_bitmaps_out;
148 EXPECT_TRUE(db.GetFaviconBitmaps(icon_id, &favicon_bitmaps_out)); 156 EXPECT_TRUE(db.GetFaviconBitmaps(icon_id, &favicon_bitmaps_out));
149 EXPECT_EQ(2u, favicon_bitmaps_out.size()); 157 EXPECT_EQ(2u, favicon_bitmaps_out.size());
150 158
151 FaviconBitmap favicon_bitmap1 = favicon_bitmaps_out[0]; 159 FaviconBitmap favicon_bitmap1 = favicon_bitmaps_out[0];
152 FaviconBitmap favicon_bitmap2 = favicon_bitmaps_out[1]; 160 FaviconBitmap favicon_bitmap2 = favicon_bitmaps_out[1];
153 161
154 // Bitmaps do not need to be in particular order. 162 // Favicon bitmaps do not need to be in particular order.
155 if (favicon_bitmap1.bitmap_id == bitmap2_id) { 163 if (favicon_bitmap1.bitmap_id == bitmap2_id) {
156 FaviconBitmap tmp_favicon_bitmap = favicon_bitmap1; 164 FaviconBitmap tmp_favicon_bitmap = favicon_bitmap1;
157 favicon_bitmap1 = favicon_bitmap2; 165 favicon_bitmap1 = favicon_bitmap2;
158 favicon_bitmap2 = tmp_favicon_bitmap; 166 favicon_bitmap2 = tmp_favicon_bitmap;
159 } 167 }
160 168
161 EXPECT_EQ(bitmap1_id, favicon_bitmap1.bitmap_id); 169 EXPECT_EQ(bitmap1_id, favicon_bitmap1.bitmap_id);
162 EXPECT_EQ(icon_id, favicon_bitmap1.icon_id); 170 EXPECT_EQ(icon_id, favicon_bitmap1.icon_id);
163 EXPECT_EQ(time.ToTimeT(), favicon_bitmap1.last_updated.ToTimeT()); 171 EXPECT_EQ(time.ToTimeT(), favicon_bitmap1.last_updated.ToTimeT());
164 EXPECT_EQ(data.size(), favicon_bitmap1.bitmap_data->size()); 172 EXPECT_EQ(data.size(), favicon_bitmap1.bitmap_data->size());
(...skipping 20 matching lines...) Expand all
185 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 193 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
186 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 194 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
187 195
188 GURL url("http://google.com"); 196 GURL url("http://google.com");
189 FaviconID id = db.AddFavicon(url, TOUCH_ICON); 197 FaviconID id = db.AddFavicon(url, TOUCH_ICON);
190 EXPECT_NE(0, id); 198 EXPECT_NE(0, id);
191 base::Time time = base::Time::Now(); 199 base::Time time = base::Time::Now();
192 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); 200 db.AddFaviconBitmap(id, favicon, time, gfx::Size());
193 201
194 EXPECT_NE(0, db.AddIconMapping(url, id)); 202 EXPECT_NE(0, db.AddIconMapping(url, id));
195 std::vector<IconMapping> icon_mapping; 203 std::vector<IconMapping> icon_mappings;
196 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); 204 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings));
197 EXPECT_EQ(1u, icon_mapping.size()); 205 EXPECT_EQ(1u, icon_mappings.size());
198 EXPECT_EQ(url, icon_mapping.front().page_url); 206 EXPECT_EQ(url, icon_mappings.front().page_url);
199 EXPECT_EQ(id, icon_mapping.front().icon_id); 207 EXPECT_EQ(id, icon_mappings.front().icon_id);
200 } 208 }
201 209
202 TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { 210 TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) {
203 ThumbnailDatabase db; 211 ThumbnailDatabase db;
204 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 212 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
205 db.BeginTransaction(); 213 db.BeginTransaction();
206 214
207 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 215 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
208 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 216 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
209 217
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 255
248 FaviconID id2 = db.AddFavicon(url, FAVICON); 256 FaviconID id2 = db.AddFavicon(url, FAVICON);
249 db.AddFaviconBitmap(id2, favicon, time, gfx::Size()); 257 db.AddFaviconBitmap(id2, favicon, time, gfx::Size());
250 EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); 258 EXPECT_TRUE(0 < db.AddIconMapping(url, id2));
251 ASSERT_NE(id, id2); 259 ASSERT_NE(id, id2);
252 260
253 std::vector<IconMapping> icon_mapping; 261 std::vector<IconMapping> icon_mapping;
254 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); 262 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
255 ASSERT_EQ(2u, icon_mapping.size()); 263 ASSERT_EQ(2u, icon_mapping.size());
256 EXPECT_EQ(icon_mapping.front().icon_type, TOUCH_ICON); 264 EXPECT_EQ(icon_mapping.front().icon_type, TOUCH_ICON);
257 EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); 265 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON, NULL));
258 266
259 db.DeleteIconMappings(url); 267 db.DeleteIconMappings(url);
260 268
261 EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL)); 269 EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL));
262 EXPECT_FALSE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); 270 EXPECT_FALSE(db.GetIconMappingsForPageURL(url, FAVICON, NULL));
263 } 271 }
264 272
265 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { 273 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) {
266 ThumbnailDatabase db; 274 ThumbnailDatabase db;
267 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 275 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
268 db.BeginTransaction(); 276 db.BeginTransaction();
269 277
270 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 278 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
271 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 279 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
272 280
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 db.AddIconMapping(page_url, kept_id); 461 db.AddIconMapping(page_url, kept_id);
454 462
455 FaviconID new_favicon_id = 463 FaviconID new_favicon_id =
456 db.CopyFaviconAndFaviconBitmapsToTemporaryTables(kept_id); 464 db.CopyFaviconAndFaviconBitmapsToTemporaryTables(kept_id);
457 EXPECT_NE(0, new_favicon_id); 465 EXPECT_NE(0, new_favicon_id);
458 EXPECT_TRUE(db.AddToTemporaryIconMappingTable(page_url, new_favicon_id)); 466 EXPECT_TRUE(db.AddToTemporaryIconMappingTable(page_url, new_favicon_id));
459 467
460 EXPECT_TRUE(db.CommitTemporaryTables()); 468 EXPECT_TRUE(db.CommitTemporaryTables());
461 469
462 // Only copied data should be left. 470 // Only copied data should be left.
463 IconMapping icon_mapping; 471 std::vector<IconMapping> icon_mappings;
464 EXPECT_TRUE(db.GetIconMappingForPageURL(page_url, FAVICON, &icon_mapping)); 472 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, FAVICON, &icon_mappings));
465 EXPECT_EQ(new_favicon_id, icon_mapping.icon_id); 473 EXPECT_EQ(1u, icon_mappings.size());
466 EXPECT_EQ(page_url, icon_mapping.page_url); 474 EXPECT_EQ(new_favicon_id, icon_mappings[0].icon_id);
475 EXPECT_EQ(page_url, icon_mappings[0].page_url);
467 476
468 std::vector<FaviconBitmap> favicon_bitmaps; 477 std::vector<FaviconBitmap> favicon_bitmaps;
469 EXPECT_TRUE(db.GetFaviconBitmaps(icon_mapping.icon_id, &favicon_bitmaps)); 478 EXPECT_TRUE(db.GetFaviconBitmaps(icon_mappings[0].icon_id, &favicon_bitmaps));
470 EXPECT_EQ(1u, favicon_bitmaps.size()); 479 EXPECT_EQ(1u, favicon_bitmaps.size());
471 EXPECT_EQ(kLargeSize, favicon_bitmaps[0].pixel_size); 480 EXPECT_EQ(kLargeSize, favicon_bitmaps[0].pixel_size);
472 481
473 EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false, NULL)); 482 EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false));
474 } 483 }
475 484
476 // Tests that deleting a favicon deletes the favicon row and favicon bitmap 485 // Tests that deleting a favicon deletes the favicon row and favicon bitmap
477 // rows from the database. 486 // rows from the database.
478 TEST_F(ThumbnailDatabaseTest, DeleteFavicon) { 487 TEST_F(ThumbnailDatabaseTest, DeleteFavicon) {
479 ThumbnailDatabase db; 488 ThumbnailDatabase db;
480 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 489 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
481 db.BeginTransaction(); 490 db.BeginTransaction();
482 491
483 std::vector<unsigned char> data1(blob1, blob1 + sizeof(blob1)); 492 std::vector<unsigned char> data1(blob1, blob1 + sizeof(blob1));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 EXPECT_NE(0, db.AddIconMapping(url, id3)); 555 EXPECT_NE(0, db.AddIconMapping(url, id3));
547 556
548 icon_mapping.clear(); 557 icon_mapping.clear();
549 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); 558 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
550 559
551 EXPECT_EQ(url, icon_mapping.front().page_url); 560 EXPECT_EQ(url, icon_mapping.front().page_url);
552 EXPECT_EQ(id3, icon_mapping.front().icon_id); 561 EXPECT_EQ(id3, icon_mapping.front().icon_id);
553 EXPECT_EQ(TOUCH_PRECOMPOSED_ICON, icon_mapping.front().icon_type); 562 EXPECT_EQ(TOUCH_PRECOMPOSED_ICON, icon_mapping.front().icon_type);
554 } 563 }
555 564
565 // Test result of GetIconMappingsForPageURL when an icon type is passed in.
566 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconType) {
567 ThumbnailDatabase db;
568 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
569 db.BeginTransaction();
570
571 GURL url("http://google.com");
572 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
573 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
574 base::Time time = base::Time::Now();
575
576 FaviconID id1 = db.AddFavicon(url, FAVICON, kDefaultFaviconSizes, favicon,
577 time, gfx::Size());
578 EXPECT_NE(0, db.AddIconMapping(url, id1));
579
580 FaviconID id2 = db.AddFavicon(url, TOUCH_ICON, kDefaultFaviconSizes, favicon,
581 time, gfx::Size());
582 EXPECT_NE(0, db.AddIconMapping(url, id2));
583
584 std::vector<IconMapping> icon_mappings;
585 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON | TOUCH_ICON,
586 &icon_mappings));
587 EXPECT_EQ(2u, icon_mappings.size());
588 EXPECT_EQ(id2, icon_mappings[0].icon_id);
589 EXPECT_EQ(id1, icon_mappings[1].icon_id);
590
591 icon_mappings.clear();
592 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, TOUCH_ICON, &icon_mappings));
593 EXPECT_EQ(1u, icon_mappings.size());
594 EXPECT_EQ(id2, icon_mappings[0].icon_id);
595 }
596
556 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { 597 TEST_F(ThumbnailDatabaseTest, HasMappingFor) {
557 ThumbnailDatabase db; 598 ThumbnailDatabase db;
558 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 599 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
559 db.BeginTransaction(); 600 db.BeginTransaction();
560 601
561 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 602 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
562 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 603 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
563 604
564 // Add a favicon which will have icon_mappings 605 // Add a favicon which will have icon_mappings
565 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); 606 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON);
(...skipping 22 matching lines...) Expand all
588 EXPECT_TRUE(db.HasMappingFor(id2)); 629 EXPECT_TRUE(db.HasMappingFor(id2));
589 EXPECT_FALSE(db.HasMappingFor(id3)); 630 EXPECT_FALSE(db.HasMappingFor(id3));
590 631
591 // Remove all mappings 632 // Remove all mappings
592 db.DeleteIconMappings(page_url); 633 db.DeleteIconMappings(page_url);
593 EXPECT_FALSE(db.HasMappingFor(id1)); 634 EXPECT_FALSE(db.HasMappingFor(id1));
594 EXPECT_FALSE(db.HasMappingFor(id2)); 635 EXPECT_FALSE(db.HasMappingFor(id2));
595 EXPECT_FALSE(db.HasMappingFor(id3)); 636 EXPECT_FALSE(db.HasMappingFor(id3));
596 } 637 }
597 638
598 TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { 639 TEST_F(ThumbnailDatabaseTest, CloneIconMappings) {
599 ThumbnailDatabase db; 640 ThumbnailDatabase db;
600 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 641 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
601 db.BeginTransaction(); 642 db.BeginTransaction();
602 643
603 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 644 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
604 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 645 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
605 646
606 // Add a favicon which will have icon_mappings 647 // Add a favicon which will have icon_mappings
607 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); 648 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON);
608 EXPECT_NE(0, id1); 649 EXPECT_NE(0, id1);
(...skipping 17 matching lines...) Expand all
626 EXPECT_TRUE(db.AddIconMapping(page1_url, id2)); 667 EXPECT_TRUE(db.AddIconMapping(page1_url, id2));
627 668
628 GURL page2_url("http://page2.com"); 669 GURL page2_url("http://page2.com");
629 EXPECT_TRUE(db.AddIconMapping(page2_url, id3)); 670 EXPECT_TRUE(db.AddIconMapping(page2_url, id3));
630 671
631 // Test we do nothing with existing mappings. 672 // Test we do nothing with existing mappings.
632 std::vector<IconMapping> icon_mapping; 673 std::vector<IconMapping> icon_mapping;
633 EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping)); 674 EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping));
634 ASSERT_EQ(1U, icon_mapping.size()); 675 ASSERT_EQ(1U, icon_mapping.size());
635 676
636 EXPECT_TRUE(db.CloneIconMapping(page1_url, page2_url)); 677 EXPECT_TRUE(db.CloneIconMappings(page1_url, page2_url));
637 678
638 icon_mapping.clear(); 679 icon_mapping.clear();
639 EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping)); 680 EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping));
640 ASSERT_EQ(1U, icon_mapping.size()); 681 ASSERT_EQ(1U, icon_mapping.size());
641 EXPECT_EQ(page2_url, icon_mapping[0].page_url); 682 EXPECT_EQ(page2_url, icon_mapping[0].page_url);
642 EXPECT_EQ(id3, icon_mapping[0].icon_id); 683 EXPECT_EQ(id3, icon_mapping[0].icon_id);
643 684
644 // Test we clone if the new page has no mappings. 685 // Test we clone if the new page has no mappings.
645 GURL page3_url("http://page3.com"); 686 GURL page3_url("http://page3.com");
646 EXPECT_TRUE(db.CloneIconMapping(page1_url, page3_url)); 687 EXPECT_TRUE(db.CloneIconMappings(page1_url, page3_url));
647 688
648 icon_mapping.clear(); 689 icon_mapping.clear();
649 EXPECT_TRUE(db.GetIconMappingsForPageURL(page3_url, &icon_mapping)); 690 EXPECT_TRUE(db.GetIconMappingsForPageURL(page3_url, &icon_mapping));
650 691
651 ASSERT_EQ(2U, icon_mapping.size()); 692 ASSERT_EQ(2U, icon_mapping.size());
652 if (icon_mapping[0].icon_id == id2) 693 if (icon_mapping[0].icon_id == id2)
653 std::swap(icon_mapping[0], icon_mapping[1]); 694 std::swap(icon_mapping[0], icon_mapping[1]);
654 EXPECT_EQ(page3_url, icon_mapping[0].page_url); 695 EXPECT_EQ(page3_url, icon_mapping[0].page_url);
655 EXPECT_EQ(id1, icon_mapping[0].icon_id); 696 EXPECT_EQ(id1, icon_mapping[0].icon_id);
656 EXPECT_EQ(page3_url, icon_mapping[1].page_url); 697 EXPECT_EQ(page3_url, icon_mapping[1].page_url);
(...skipping 14 matching lines...) Expand all
671 712
672 // Migration should be done. 713 // Migration should be done.
673 // Test one icon_mapping. 714 // Test one icon_mapping.
674 GURL page_url1 = GURL("http://google.com/"); 715 GURL page_url1 = GURL("http://google.com/");
675 std::vector<IconMapping> icon_mappings; 716 std::vector<IconMapping> icon_mappings;
676 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url1, &icon_mappings)); 717 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url1, &icon_mappings));
677 ASSERT_EQ(1u, icon_mappings.size()); 718 ASSERT_EQ(1u, icon_mappings.size());
678 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type); 719 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
679 EXPECT_EQ(page_url1, icon_mappings[0].page_url); 720 EXPECT_EQ(page_url1, icon_mappings[0].page_url);
680 EXPECT_EQ(1, icon_mappings[0].icon_id); 721 EXPECT_EQ(1, icon_mappings[0].icon_id);
681 base::Time time; 722 EXPECT_EQ(icon1, icon_mappings[0].icon_url);
682 scoped_refptr<base::RefCountedMemory> out_data;
683 GURL out_icon_url;
684 ASSERT_TRUE(db.GetFavicon(
685 icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL));
686 EXPECT_EQ(icon1, out_icon_url);
687 723
688 // Test a page which has the same icon. 724 // Test a page which has the same icon.
689 GURL page_url3 = GURL("http://www.google.com/"); 725 GURL page_url3 = GURL("http://www.google.com/");
690 icon_mappings.clear(); 726 icon_mappings.clear();
691 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url3, &icon_mappings)); 727 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url3, &icon_mappings));
692 ASSERT_EQ(1u, icon_mappings.size()); 728 ASSERT_EQ(1u, icon_mappings.size());
693 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type); 729 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
694 EXPECT_EQ(page_url3, icon_mappings[0].page_url); 730 EXPECT_EQ(page_url3, icon_mappings[0].page_url);
695 EXPECT_EQ(1, icon_mappings[0].icon_id); 731 EXPECT_EQ(1, icon_mappings[0].icon_id);
732 EXPECT_EQ(icon1, icon_mappings[0].icon_url);
696 733
697 // Test a icon_mapping with different IconID. 734 // Test a icon_mapping with different IconID.
698 GURL page_url2 = GURL("http://yahoo.com/"); 735 GURL page_url2 = GURL("http://yahoo.com/");
699 icon_mappings.clear(); 736 icon_mappings.clear();
700 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url2, &icon_mappings)); 737 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url2, &icon_mappings));
701 ASSERT_EQ(1u, icon_mappings.size()); 738 ASSERT_EQ(1u, icon_mappings.size());
702 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type); 739 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
703 EXPECT_EQ(page_url2, icon_mappings[0].page_url); 740 EXPECT_EQ(page_url2, icon_mappings[0].page_url);
704 EXPECT_EQ(2, icon_mappings[0].icon_id); 741 EXPECT_EQ(2, icon_mappings[0].icon_id);
705 ASSERT_TRUE(db.GetFavicon( 742 EXPECT_EQ(icon2, icon_mappings[0].icon_url);
706 icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL));
707 EXPECT_EQ(icon2, out_icon_url);
708 743
709 // Test a page without icon 744 // Test a page without icon
710 GURL page_url4 = GURL("http://www.google.com/blank.html"); 745 GURL page_url4 = GURL("http://www.google.com/blank.html");
711 EXPECT_FALSE(db.GetIconMappingsForPageURL(page_url4, NULL)); 746 EXPECT_FALSE(db.GetIconMappingsForPageURL(page_url4, NULL));
712 } 747 }
713 748
714 TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) { 749 TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) {
715 ThumbnailDatabase db; 750 ThumbnailDatabase db;
716 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); 751 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
717 db.BeginTransaction(); 752 db.BeginTransaction();
718 753
719 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); 754 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
720 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); 755 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
721 756
722 GURL url("http://google.com"); 757 GURL url("http://google.com");
723 FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); 758 GURL icon_url1("http://google.com/favicon.ico");
759 FaviconID touch_icon_id1 = db.AddFavicon(icon_url1, TOUCH_ICON,
760 GetSizesSmallAndLarge(), favicon, base::Time::Now(), kSmallSize);
724 ASSERT_NE(0, touch_icon_id1); 761 ASSERT_NE(0, touch_icon_id1);
725 ASSERT_TRUE(db.AddFaviconBitmap(touch_icon_id1, favicon, base::Time::Now(),
726 gfx::Size()));
727 IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1); 762 IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1);
728 ASSERT_NE(0, touch_mapping_id1); 763 ASSERT_NE(0, touch_mapping_id1);
729 764
730 FaviconID favicon_id1 = db.AddFavicon(url, FAVICON); 765 FaviconID favicon_id1 = db.AddFavicon(icon_url1, FAVICON,
766 GetSizesSmallAndLarge(),
767 favicon, base::Time::Now(), kSmallSize);
731 ASSERT_NE(0, favicon_id1); 768 ASSERT_NE(0, favicon_id1);
732 ASSERT_TRUE(db.AddFaviconBitmap(favicon_id1, favicon, base::Time::Now(),
733 gfx::Size()));
734 IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1); 769 IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1);
735 ASSERT_NE(0, favicon_mapping_id1); 770 ASSERT_NE(0, favicon_mapping_id1);
736 771
737 GURL url2("http://chromium.org"); 772 GURL url2("http://chromium.org");
738 FaviconID favicon_id2 = db.AddFavicon(url2, FAVICON); 773 GURL icon_url2("http://chromium.org/favicon.ico");
774 FaviconID favicon_id2 = db.AddFavicon(icon_url2, FAVICON,
775 GetSizesSmallAndLarge(),
776 favicon, base::Time::Now(), kSmallSize);
739 ASSERT_NE(0, favicon_id2); 777 ASSERT_NE(0, favicon_id2);
740 ASSERT_TRUE(db.AddFaviconBitmap(favicon_id2, favicon, base::Time::Now(),
741 gfx::Size()));
742 IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); 778 IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2);
743 ASSERT_NE(0, favicon_mapping_id2); 779 ASSERT_NE(0, favicon_mapping_id2);
744 780
745 IconMapping icon_mapping; 781 IconMapping icon_mapping;
746 ThumbnailDatabase::IconMappingEnumerator enumerator1; 782 ThumbnailDatabase::IconMappingEnumerator enumerator1;
747 ASSERT_TRUE(db.InitIconMappingEnumerator(FAVICON, &enumerator1)); 783 ASSERT_TRUE(db.InitIconMappingEnumerator(FAVICON, &enumerator1));
748 // There are 2 favicon mappings. 784 // There are 2 favicon mappings.
749 bool has_favicon_mapping1 = false; 785 bool has_favicon_mapping1 = false;
750 bool has_favicon_mapping2 = false; 786 bool has_favicon_mapping2 = false;
751 int mapping_count = 0; 787 int mapping_count = 0;
752 while (enumerator1.GetNextIconMapping(&icon_mapping)) { 788 while (enumerator1.GetNextIconMapping(&icon_mapping)) {
753 mapping_count++; 789 mapping_count++;
754 if (favicon_mapping_id1 == icon_mapping.mapping_id) { 790 if (favicon_mapping_id1 == icon_mapping.mapping_id) {
755 has_favicon_mapping1 = true; 791 has_favicon_mapping1 = true;
756 EXPECT_EQ(url, icon_mapping.page_url); 792 EXPECT_EQ(url, icon_mapping.page_url);
757 EXPECT_EQ(favicon_id1, icon_mapping.icon_id); 793 EXPECT_EQ(favicon_id1, icon_mapping.icon_id);
794 EXPECT_EQ(icon_url1, icon_mapping.icon_url);
758 EXPECT_EQ(FAVICON, icon_mapping.icon_type); 795 EXPECT_EQ(FAVICON, icon_mapping.icon_type);
759 } else if (favicon_mapping_id2 == icon_mapping.mapping_id) { 796 } else if (favicon_mapping_id2 == icon_mapping.mapping_id) {
760 has_favicon_mapping2 = true; 797 has_favicon_mapping2 = true;
761 EXPECT_EQ(url2, icon_mapping.page_url); 798 EXPECT_EQ(url2, icon_mapping.page_url);
762 EXPECT_EQ(favicon_id2, icon_mapping.icon_id); 799 EXPECT_EQ(favicon_id2, icon_mapping.icon_id);
800 EXPECT_EQ(icon_url2, icon_mapping.icon_url);
763 EXPECT_EQ(FAVICON, icon_mapping.icon_type); 801 EXPECT_EQ(FAVICON, icon_mapping.icon_type);
764 } 802 }
765 } 803 }
766 EXPECT_EQ(2, mapping_count); 804 EXPECT_EQ(2, mapping_count);
767 EXPECT_TRUE(has_favicon_mapping1); 805 EXPECT_TRUE(has_favicon_mapping1);
768 EXPECT_TRUE(has_favicon_mapping2); 806 EXPECT_TRUE(has_favicon_mapping2);
769 807
770 ThumbnailDatabase::IconMappingEnumerator enumerator2; 808 ThumbnailDatabase::IconMappingEnumerator enumerator2;
771 ASSERT_TRUE(db.InitIconMappingEnumerator(TOUCH_ICON, &enumerator2)); 809 ASSERT_TRUE(db.InitIconMappingEnumerator(TOUCH_ICON, &enumerator2));
772 ASSERT_TRUE(enumerator2.GetNextIconMapping(&icon_mapping)); 810 ASSERT_TRUE(enumerator2.GetNextIconMapping(&icon_mapping));
773 EXPECT_EQ(touch_mapping_id1, icon_mapping.mapping_id); 811 EXPECT_EQ(touch_mapping_id1, icon_mapping.mapping_id);
774 EXPECT_EQ(url, icon_mapping.page_url); 812 EXPECT_EQ(url, icon_mapping.page_url);
775 EXPECT_EQ(touch_icon_id1, icon_mapping.icon_id); 813 EXPECT_EQ(touch_icon_id1, icon_mapping.icon_id);
814 EXPECT_EQ(icon_url1, icon_mapping.icon_url);
776 EXPECT_EQ(TOUCH_ICON, icon_mapping.icon_type); 815 EXPECT_EQ(TOUCH_ICON, icon_mapping.icon_type);
777 816
778 EXPECT_FALSE(enumerator2.GetNextIconMapping(&icon_mapping)); 817 EXPECT_FALSE(enumerator2.GetNextIconMapping(&icon_mapping));
779 } 818 }
780 819
820 TEST_F(ThumbnailDatabaseTest, FaviconSizesToAndFromString) {
821 // Invalid input.
822 FaviconSizes sizes_missing_height;
823 EXPECT_FALSE(ThumbnailDatabase::DatabaseStringToFaviconSizes("0 0 10",
824 &sizes_missing_height));
825 EXPECT_EQ(0u, sizes_missing_height.size());
826
827 FaviconSizes sizes_non_int;
828 EXPECT_FALSE(ThumbnailDatabase::DatabaseStringToFaviconSizes("0 0 a 10",
829 &sizes_non_int));
830 EXPECT_EQ(0u, sizes_missing_height.size());
831
832 // Valid input.
833 FaviconSizes sizes_empty;
834 EXPECT_TRUE(ThumbnailDatabase::DatabaseStringToFaviconSizes("",
835 &sizes_empty));
836 EXPECT_EQ(0u, sizes_empty.size());
837
838 FaviconSizes sizes_valid;
839 EXPECT_TRUE(ThumbnailDatabase::DatabaseStringToFaviconSizes("10 15 20 25",
840 &sizes_valid));
841 EXPECT_EQ(2u, sizes_valid.size());
842 if (sizes_valid[0] == gfx::Size(10, 15)) {
843 EXPECT_EQ(sizes_valid[1], gfx::Size(20, 25));
844 } else {
845 EXPECT_EQ(sizes_valid[0], gfx::Size(20, 25));
846 EXPECT_EQ(sizes_valid[1], gfx::Size(10, 15));
847 }
848
849 std::string sizes_as_string;
850 ThumbnailDatabase::FaviconSizesToDatabaseString(sizes_valid,
851 &sizes_as_string);
852 EXPECT_TRUE(sizes_as_string == "10 15 20 25" ||
853 sizes_as_string == "20 25 10 15");
854 }
855
781 } // namespace history 856 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698