| 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 <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 28 matching lines...) Expand all Loading... |
| 39 "goiwuegrqrcomizqyzkjalitbahxfjytrqvpqeroicxmnlkhlzunacxaneviawrtxcywhgef"; | 39 "goiwuegrqrcomizqyzkjalitbahxfjytrqvpqeroicxmnlkhlzunacxaneviawrtxcywhgef"; |
| 40 static const unsigned char blob3[] = | 40 static const unsigned char blob3[] = |
| 41 "3716871354098370776510470746794707624107647054607467847164027"; | 41 "3716871354098370776510470746794707624107647054607467847164027"; |
| 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); |
| 50 const gfx::Size kLargeSize = gfx::Size(32, 32); |
| 51 |
| 52 const std::string kSizesSmallAndLarge = "16 16 32 32"; |
| 53 |
| 49 } // namespace | 54 } // namespace |
| 50 | 55 |
| 51 class ThumbnailDatabaseTest : public testing::Test { | 56 class ThumbnailDatabaseTest : public testing::Test { |
| 52 public: | 57 public: |
| 53 ThumbnailDatabaseTest() { | 58 ThumbnailDatabaseTest() { |
| 54 } | 59 } |
| 55 ~ThumbnailDatabaseTest() { | 60 ~ThumbnailDatabaseTest() { |
| 56 } | 61 } |
| 57 | 62 |
| 58 protected: | 63 protected: |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 117 |
| 113 TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { | 118 TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
| 114 ThumbnailDatabase db; | 119 ThumbnailDatabase db; |
| 115 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 120 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 116 db.BeginTransaction(); | 121 db.BeginTransaction(); |
| 117 | 122 |
| 118 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 123 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 119 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 124 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 120 | 125 |
| 121 GURL url("http://google.com"); | 126 GURL url("http://google.com"); |
| 122 FaviconID id = db.AddFavicon(url, FAVICON); | 127 FaviconID icon_id = db.AddFavicon(url, FAVICON); |
| 128 db.SetFaviconSizes(icon_id, kSizesSmallAndLarge); |
| 123 base::Time time = base::Time::Now(); | 129 base::Time time = base::Time::Now(); |
| 124 db.SetFavicon(id, favicon, time); | 130 FaviconBitmapID bitmap1_id = db.AddFaviconBitmap(icon_id, favicon, time, |
| 131 kSmallSize); |
| 132 FaviconBitmapID bitmap2_id = db.AddFaviconBitmap(icon_id, favicon, time, |
| 133 kLargeSize); |
| 125 EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); | 134 EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); |
| 126 EXPECT_TRUE(db.IsLatestVersion()); | 135 EXPECT_TRUE(db.IsLatestVersion()); |
| 127 | 136 |
| 128 base::Time time_out; | |
| 129 std::vector<unsigned char> favicon_out; | |
| 130 GURL url_out; | 137 GURL url_out; |
| 131 IconType icon_type_out; | 138 IconType icon_type_out; |
| 132 EXPECT_TRUE(db.GetFavicon(id, &time_out, &favicon_out, &url_out, | 139 std::string sizes_out; |
| 133 &icon_type_out)); | 140 EXPECT_TRUE(db.GetFaviconHeader(icon_id, &url_out, &icon_type_out, |
| 141 &sizes_out)); |
| 142 |
| 134 EXPECT_EQ(url, url_out); | 143 EXPECT_EQ(url, url_out); |
| 135 EXPECT_EQ(time.ToTimeT(), time_out.ToTimeT()); | 144 EXPECT_EQ(FAVICON, icon_type_out); |
| 136 ASSERT_EQ(data.size(), favicon_out.size()); | 145 EXPECT_STREQ(kSizesSmallAndLarge.c_str(), sizes_out.c_str()); |
| 146 |
| 147 std::vector<FaviconBitmap> favicon_bitmaps_out; |
| 148 EXPECT_TRUE(db.GetFaviconBitmaps(icon_id, &favicon_bitmaps_out)); |
| 149 EXPECT_EQ(2u, favicon_bitmaps_out.size()); |
| 150 |
| 151 FaviconBitmap favicon_bitmap1 = favicon_bitmaps_out[0]; |
| 152 FaviconBitmap favicon_bitmap2 = favicon_bitmaps_out[1]; |
| 153 |
| 154 // Bitmaps do not need to be in particular order. |
| 155 if (favicon_bitmap1.bitmap_id == bitmap2_id) { |
| 156 FaviconBitmap tmp_favicon_bitmap = favicon_bitmap1; |
| 157 favicon_bitmap1 = favicon_bitmap2; |
| 158 favicon_bitmap2 = tmp_favicon_bitmap; |
| 159 } |
| 160 |
| 161 EXPECT_EQ(bitmap1_id, favicon_bitmap1.bitmap_id); |
| 162 EXPECT_EQ(icon_id, favicon_bitmap1.icon_id); |
| 163 EXPECT_EQ(time.ToTimeT(), favicon_bitmap1.last_updated.ToTimeT()); |
| 164 EXPECT_EQ(data.size(), favicon_bitmap1.bitmap_data->size()); |
| 137 EXPECT_TRUE(std::equal(data.begin(), | 165 EXPECT_TRUE(std::equal(data.begin(), |
| 138 data.end(), | 166 data.end(), |
| 139 favicon_out.begin())); | 167 favicon_bitmap1.bitmap_data->front())); |
| 140 EXPECT_EQ(FAVICON, icon_type_out); | 168 EXPECT_EQ(kSmallSize, favicon_bitmap1.pixel_size); |
| 169 |
| 170 EXPECT_EQ(bitmap2_id, favicon_bitmap2.bitmap_id); |
| 171 EXPECT_EQ(icon_id, favicon_bitmap2.icon_id); |
| 172 EXPECT_EQ(time.ToTimeT(), favicon_bitmap2.last_updated.ToTimeT()); |
| 173 EXPECT_EQ(data.size(), favicon_bitmap2.bitmap_data->size()); |
| 174 EXPECT_TRUE(std::equal(data.begin(), |
| 175 data.end(), |
| 176 favicon_bitmap2.bitmap_data->front())); |
| 177 EXPECT_EQ(kLargeSize, favicon_bitmap2.pixel_size); |
| 141 } | 178 } |
| 142 | 179 |
| 143 TEST_F(ThumbnailDatabaseTest, AddIconMapping) { | 180 TEST_F(ThumbnailDatabaseTest, AddIconMapping) { |
| 144 ThumbnailDatabase db; | 181 ThumbnailDatabase db; |
| 145 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 182 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 146 db.BeginTransaction(); | 183 db.BeginTransaction(); |
| 147 | 184 |
| 148 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 185 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 149 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 186 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 150 | 187 |
| 151 GURL url("http://google.com"); | 188 GURL url("http://google.com"); |
| 152 FaviconID id = db.AddFavicon(url, TOUCH_ICON); | 189 FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| 153 EXPECT_NE(0, id); | 190 EXPECT_NE(0, id); |
| 154 base::Time time = base::Time::Now(); | 191 base::Time time = base::Time::Now(); |
| 155 db.SetFavicon(id, favicon, time); | 192 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); |
| 156 | 193 |
| 157 EXPECT_NE(0, db.AddIconMapping(url, id)); | 194 EXPECT_NE(0, db.AddIconMapping(url, id)); |
| 158 std::vector<IconMapping> icon_mapping; | 195 std::vector<IconMapping> icon_mapping; |
| 159 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 196 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 160 EXPECT_EQ(1u, icon_mapping.size()); | 197 EXPECT_EQ(1u, icon_mapping.size()); |
| 161 EXPECT_EQ(url, icon_mapping.front().page_url); | 198 EXPECT_EQ(url, icon_mapping.front().page_url); |
| 162 EXPECT_EQ(id, icon_mapping.front().icon_id); | 199 EXPECT_EQ(id, icon_mapping.front().icon_id); |
| 163 } | 200 } |
| 164 | 201 |
| 165 TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { | 202 TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { |
| 166 ThumbnailDatabase db; | 203 ThumbnailDatabase db; |
| 167 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 204 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 168 db.BeginTransaction(); | 205 db.BeginTransaction(); |
| 169 | 206 |
| 170 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 207 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 171 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 208 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 172 | 209 |
| 173 GURL url("http://google.com"); | 210 GURL url("http://google.com"); |
| 174 FaviconID id = db.AddFavicon(url, TOUCH_ICON); | 211 FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| 175 base::Time time = base::Time::Now(); | 212 base::Time time = base::Time::Now(); |
| 176 db.SetFavicon(id, favicon, time); | 213 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); |
| 177 | 214 |
| 178 EXPECT_TRUE(0 < db.AddIconMapping(url, id)); | 215 EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
| 179 std::vector<IconMapping> icon_mapping; | 216 std::vector<IconMapping> icon_mapping; |
| 180 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 217 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 181 ASSERT_EQ(1u, icon_mapping.size()); | 218 ASSERT_EQ(1u, icon_mapping.size()); |
| 182 EXPECT_EQ(url, icon_mapping.front().page_url); | 219 EXPECT_EQ(url, icon_mapping.front().page_url); |
| 183 EXPECT_EQ(id, icon_mapping.front().icon_id); | 220 EXPECT_EQ(id, icon_mapping.front().icon_id); |
| 184 | 221 |
| 185 GURL url1("http://www.google.com/"); | 222 GURL url1("http://www.google.com/"); |
| 186 FaviconID new_id = db.AddFavicon(url1, TOUCH_ICON); | 223 FaviconID new_id = db.AddFavicon(url1, TOUCH_ICON); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 198 ThumbnailDatabase db; | 235 ThumbnailDatabase db; |
| 199 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 236 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 200 db.BeginTransaction(); | 237 db.BeginTransaction(); |
| 201 | 238 |
| 202 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 239 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 203 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 240 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 204 | 241 |
| 205 GURL url("http://google.com"); | 242 GURL url("http://google.com"); |
| 206 FaviconID id = db.AddFavicon(url, TOUCH_ICON); | 243 FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| 207 base::Time time = base::Time::Now(); | 244 base::Time time = base::Time::Now(); |
| 208 db.SetFavicon(id, favicon, time); | 245 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); |
| 209 EXPECT_TRUE(0 < db.AddIconMapping(url, id)); | 246 EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
| 210 | 247 |
| 211 FaviconID id2 = db.AddFavicon(url, FAVICON); | 248 FaviconID id2 = db.AddFavicon(url, FAVICON); |
| 212 db.SetFavicon(id2, favicon, time); | 249 db.AddFaviconBitmap(id2, favicon, time, gfx::Size()); |
| 213 EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); | 250 EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
| 214 ASSERT_NE(id, id2); | 251 ASSERT_NE(id, id2); |
| 215 | 252 |
| 216 std::vector<IconMapping> icon_mapping; | 253 std::vector<IconMapping> icon_mapping; |
| 217 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 254 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 218 ASSERT_EQ(2u, icon_mapping.size()); | 255 ASSERT_EQ(2u, icon_mapping.size()); |
| 219 EXPECT_EQ(icon_mapping.front().icon_type, TOUCH_ICON); | 256 EXPECT_EQ(icon_mapping.front().icon_type, TOUCH_ICON); |
| 220 EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); | 257 EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); |
| 221 | 258 |
| 222 db.DeleteIconMappings(url); | 259 db.DeleteIconMappings(url); |
| 223 | 260 |
| 224 EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL)); | 261 EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL)); |
| 225 EXPECT_FALSE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); | 262 EXPECT_FALSE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); |
| 226 } | 263 } |
| 227 | 264 |
| 228 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { | 265 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { |
| 229 ThumbnailDatabase db; | 266 ThumbnailDatabase db; |
| 230 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 267 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 231 db.BeginTransaction(); | 268 db.BeginTransaction(); |
| 232 | 269 |
| 233 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 270 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 234 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 271 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 235 | 272 |
| 236 GURL url("http://google.com"); | 273 GURL url("http://google.com"); |
| 237 | 274 |
| 238 FaviconID id1 = db.AddFavicon(url, TOUCH_ICON); | 275 FaviconID id1 = db.AddFavicon(url, TOUCH_ICON); |
| 239 base::Time time = base::Time::Now(); | 276 base::Time time = base::Time::Now(); |
| 240 db.SetFavicon(id1, favicon, time); | 277 db.AddFaviconBitmap(id1, favicon, time, kSmallSize); |
| 278 db.AddFaviconBitmap(id1, favicon, time, kLargeSize); |
| 241 EXPECT_TRUE(0 < db.AddIconMapping(url, id1)); | 279 EXPECT_TRUE(0 < db.AddIconMapping(url, id1)); |
| 242 | 280 |
| 243 FaviconID id2 = db.AddFavicon(url, FAVICON); | 281 FaviconID id2 = db.AddFavicon(url, FAVICON); |
| 244 EXPECT_NE(id1, id2); | 282 EXPECT_NE(id1, id2); |
| 245 db.SetFavicon(id2, favicon, time); | 283 db.AddFaviconBitmap(id2, favicon, time, kSmallSize); |
| 246 EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); | 284 EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
| 247 | 285 |
| 248 std::vector<IconMapping> icon_mapping; | 286 std::vector<IconMapping> icon_mappings; |
| 249 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 287 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings)); |
| 250 ASSERT_EQ(2u, icon_mapping.size()); | 288 ASSERT_EQ(2u, icon_mappings.size()); |
| 251 EXPECT_NE(icon_mapping[0].icon_id, icon_mapping[1].icon_id); | 289 EXPECT_EQ(id1, icon_mappings[0].icon_id); |
| 252 EXPECT_TRUE(icon_mapping[0].icon_id == id1 && icon_mapping[1].icon_id == id2); | 290 EXPECT_EQ(id2, icon_mappings[1].icon_id); |
| 253 } | 291 } |
| 254 | 292 |
| 293 // Test upgrading database to version 4. |
| 255 TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) { | 294 TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) { |
| 256 ThumbnailDatabase db; | 295 ThumbnailDatabase db; |
| 257 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 296 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 258 db.BeginTransaction(); | 297 db.BeginTransaction(); |
| 259 | 298 |
| 260 const char* name = "favicons"; | 299 const char* name = "favicons"; |
| 261 std::string sql; | 300 std::string sql; |
| 262 sql.append("DROP TABLE IF EXISTS "); | 301 sql.append("DROP TABLE IF EXISTS "); |
| 263 sql.append(name); | 302 sql.append(name); |
| 264 EXPECT_TRUE(db.db_.Execute(sql.c_str())); | 303 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 265 | 304 |
| 266 sql.resize(0); | 305 sql.resize(0); |
| 267 sql.append("CREATE TABLE "); | 306 sql.append("CREATE TABLE "); |
| 268 sql.append(name); | 307 sql.append(name); |
| 269 sql.append("(" | 308 sql.append("(" |
| 270 "id INTEGER PRIMARY KEY," | 309 "id INTEGER PRIMARY KEY," |
| 271 "url LONGVARCHAR NOT NULL," | 310 "url LONGVARCHAR NOT NULL," |
| 272 "last_updated INTEGER DEFAULT 0," | 311 "last_updated INTEGER DEFAULT 0," |
| 273 "image_data BLOB)"); | 312 "image_data BLOB)"); |
| 274 EXPECT_TRUE(db.db_.Execute(sql.c_str())); | 313 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 275 | 314 |
| 276 EXPECT_TRUE(db.UpgradeToVersion4()); | 315 EXPECT_TRUE(db.UpgradeToVersion4()); |
| 277 | 316 |
| 278 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 317 GURL url("http://google.com"); |
| 279 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | |
| 280 | 318 |
| 281 GURL url("http://google.com"); | 319 sql::Statement statement; |
| 282 FaviconID id = db.AddFavicon(url, TOUCH_ICON); | 320 statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| 283 base::Time time = base::Time::Now(); | 321 "INSERT INTO favicons (url, icon_type) VALUES (?, ?)")); |
| 284 db.SetFavicon(id, favicon, time); | 322 statement.BindString(0, URLDatabase::GURLToDatabaseURL(url)); |
| 323 statement.BindInt(1, TOUCH_ICON); |
| 324 EXPECT_TRUE(statement.Run()); |
| 285 | 325 |
| 286 EXPECT_TRUE(0 < db.AddIconMapping(url, id)); | 326 statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| 287 IconMapping icon_mapping; | 327 "SELECT icon_type FROM favicons")); |
| 288 EXPECT_TRUE(db.GetIconMappingForPageURL(url, TOUCH_ICON, &icon_mapping)); | 328 EXPECT_TRUE(statement.Step()); |
| 289 EXPECT_EQ(url, icon_mapping.page_url); | 329 |
| 290 EXPECT_EQ(id, icon_mapping.icon_id); | 330 EXPECT_EQ(TOUCH_ICON, static_cast<IconType>(statement.ColumnInt(0))); |
| 291 } | 331 } |
| 292 | 332 |
| 333 // Test upgrading database to version 5. |
| 293 TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { | 334 TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { |
| 294 ThumbnailDatabase db; | 335 ThumbnailDatabase db; |
| 295 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 336 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 296 db.BeginTransaction(); | 337 db.BeginTransaction(); |
| 297 | 338 |
| 298 const char* name = "favicons"; | 339 const char* name = "favicons"; |
| 299 std::string sql; | 340 std::string sql; |
| 300 sql.append("DROP TABLE IF EXISTS "); | 341 sql.append("DROP TABLE IF EXISTS "); |
| 301 sql.append(name); | 342 sql.append(name); |
| 302 EXPECT_TRUE(db.db_.Execute(sql.c_str())); | 343 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 303 | 344 |
| 304 sql.resize(0); | 345 sql.resize(0); |
| 305 sql.append("CREATE TABLE "); | 346 sql.append("CREATE TABLE "); |
| 306 sql.append(name); | 347 sql.append(name); |
| 307 sql.append("(" | 348 sql.append("(" |
| 308 "id INTEGER PRIMARY KEY," | 349 "id INTEGER PRIMARY KEY," |
| 309 "url LONGVARCHAR NOT NULL," | 350 "url LONGVARCHAR NOT NULL," |
| 310 "last_updated INTEGER DEFAULT 0," | 351 "last_updated INTEGER DEFAULT 0," |
| 311 "image_data BLOB," | 352 "image_data BLOB," |
| 312 "icon_type INTEGER DEFAULT 1)"); | 353 "icon_type INTEGER DEFAULT 1)"); |
| 313 ASSERT_TRUE(db.db_.Execute(sql.c_str())); | 354 ASSERT_TRUE(db.db_.Execute(sql.c_str())); |
| 314 | 355 |
| 315 ASSERT_TRUE(db.UpgradeToVersion5()); | 356 ASSERT_TRUE(db.UpgradeToVersion5()); |
| 316 | 357 |
| 317 sql = "SELECT sizes FROM favicons"; | 358 sql = "SELECT sizes FROM favicons"; |
| 318 EXPECT_TRUE(db.db_.Execute(sql.c_str())); | 359 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 319 } | 360 } |
| 320 | 361 |
| 321 TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { | 362 // Test upgrading database to version 6. |
| 363 TEST_F(ThumbnailDatabaseTest, UpgradeToVersion6) { |
| 364 ThumbnailDatabase db; |
| 365 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 366 db.BeginTransaction(); |
| 367 |
| 368 const char* name = "favicons"; |
| 369 std::string sql; |
| 370 sql.append("DROP TABLE IF EXISTS "); |
| 371 sql.append(name); |
| 372 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 373 |
| 374 sql.clear(); |
| 375 sql.append("CREATE TABLE "); |
| 376 sql.append(name); |
| 377 sql.append("(" |
| 378 "id INTEGER PRIMARY KEY," |
| 379 "url LONGVARCHAR NOT NULL," |
| 380 "last_updated INTEGER DEFAULT 0," |
| 381 "image_data BLOB," |
| 382 "icon_type INTEGER DEFAULT 1," |
| 383 "sizes LONGVARCHAR)"); |
| 384 EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| 385 |
| 386 int favicon_id = 1; |
| 387 GURL url("http://google.com"); |
| 388 time_t last_updated = Time::Now().ToTimeT(); |
| 389 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 390 scoped_refptr<base::RefCountedBytes> bitmap_data( |
| 391 new base::RefCountedBytes(data)); |
| 392 |
| 393 sql::Statement statement; |
| 394 statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| 395 "INSERT INTO favicons (id, url, last_updated, image_data, icon_type, " |
| 396 "sizes) VALUES (?, ?, ?, ?, ?, ?)")); |
| 397 statement.BindInt(0, favicon_id); |
| 398 statement.BindString(1, URLDatabase::GURLToDatabaseURL(url)); |
| 399 statement.BindInt64(2, last_updated); |
| 400 statement.BindBlob(3, bitmap_data->front(), |
| 401 static_cast<int>(bitmap_data->size())); |
| 402 statement.BindInt(4, TOUCH_ICON); |
| 403 statement.BindCString(5, "Data which happened to be there"); |
| 404 EXPECT_TRUE(statement.Run()); |
| 405 |
| 406 EXPECT_TRUE(db.UpgradeToVersion6()); |
| 407 |
| 408 statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| 409 "SELECT id, url, icon_type, sizes FROM favicons")); |
| 410 EXPECT_TRUE(statement.Step()); |
| 411 EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
| 412 EXPECT_EQ(url, GURL(statement.ColumnString(1))); |
| 413 EXPECT_EQ(TOUCH_ICON, statement.ColumnInt(2)); |
| 414 // Any previous data in sizes should be cleared. |
| 415 EXPECT_EQ(std::string(""), statement.ColumnString(3)); |
| 416 |
| 417 statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| 418 "SELECT icon_id, last_updated, image_data, width, height " |
| 419 "FROM favicon_bitmaps")); |
| 420 EXPECT_TRUE(statement.Step()); |
| 421 EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
| 422 EXPECT_EQ(last_updated, statement.ColumnInt64(1)); |
| 423 EXPECT_EQ(static_cast<int>(bitmap_data->size()), |
| 424 statement.ColumnByteLength(2)); |
| 425 EXPECT_EQ(0, statement.ColumnInt(3)); |
| 426 EXPECT_EQ(0, statement.ColumnInt(4)); |
| 427 } |
| 428 |
| 429 // Test that only data moved to a temporary table is left in the main table |
| 430 // once the temporary table is committed. |
| 431 TEST_F(ThumbnailDatabaseTest, TemporaryTables) { |
| 322 ThumbnailDatabase db; | 432 ThumbnailDatabase db; |
| 323 | 433 |
| 324 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 434 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 325 | 435 |
| 326 db.BeginTransaction(); | 436 db.BeginTransaction(); |
| 327 | 437 |
| 328 EXPECT_TRUE(db.InitTemporaryIconMappingTable()); | 438 EXPECT_TRUE(db.InitTemporaryTables()); |
| 329 | 439 |
| 330 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 440 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 331 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 441 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 332 | 442 |
| 443 GURL unkept_url("http://google.com/favicon2.ico"); |
| 444 FaviconID unkept_id = db.AddFavicon(unkept_url, FAVICON); |
| 445 db.AddFaviconBitmap(unkept_id, favicon, base::Time::Now(), kSmallSize); |
| 446 |
| 447 GURL kept_url("http://google.com/favicon.ico"); |
| 448 FaviconID kept_id = db.AddFavicon(kept_url, FAVICON); |
| 449 db.AddFaviconBitmap(kept_id, favicon, base::Time::Now(), kLargeSize); |
| 450 |
| 451 GURL page_url("http://google.com"); |
| 452 db.AddIconMapping(page_url, unkept_id); |
| 453 db.AddIconMapping(page_url, kept_id); |
| 454 |
| 455 FaviconID new_favicon_id = |
| 456 db.CopyFaviconAndFaviconBitmapsToTemporaryTables(kept_id); |
| 457 EXPECT_NE(0, new_favicon_id); |
| 458 EXPECT_TRUE(db.AddToTemporaryIconMappingTable(page_url, new_favicon_id)); |
| 459 |
| 460 EXPECT_TRUE(db.CommitTemporaryTables()); |
| 461 |
| 462 // Only copied data should be left. |
| 463 IconMapping icon_mapping; |
| 464 EXPECT_TRUE(db.GetIconMappingForPageURL(page_url, FAVICON, &icon_mapping)); |
| 465 EXPECT_EQ(new_favicon_id, icon_mapping.icon_id); |
| 466 EXPECT_EQ(page_url, icon_mapping.page_url); |
| 467 |
| 468 std::vector<FaviconBitmap> favicon_bitmaps; |
| 469 EXPECT_TRUE(db.GetFaviconBitmaps(icon_mapping.icon_id, &favicon_bitmaps)); |
| 470 EXPECT_EQ(1u, favicon_bitmaps.size()); |
| 471 EXPECT_EQ(kLargeSize, favicon_bitmaps[0].pixel_size); |
| 472 |
| 473 EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false, NULL)); |
| 474 } |
| 475 |
| 476 // Tests that deleting a favicon deletes the favicon row and favicon bitmap |
| 477 // rows from the database. |
| 478 TEST_F(ThumbnailDatabaseTest, DeleteFavicon) { |
| 479 ThumbnailDatabase db; |
| 480 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 481 db.BeginTransaction(); |
| 482 |
| 483 std::vector<unsigned char> data1(blob1, blob1 + sizeof(blob1)); |
| 484 scoped_refptr<base::RefCountedBytes> favicon1( |
| 485 new base::RefCountedBytes(data1)); |
| 486 std::vector<unsigned char> data2(blob2, blob2 + sizeof(blob2)); |
| 487 scoped_refptr<base::RefCountedBytes> favicon2( |
| 488 new base::RefCountedBytes(data2)); |
| 489 |
| 333 GURL url("http://google.com"); | 490 GURL url("http://google.com"); |
| 334 FaviconID id = db.AddFavicon(url, FAVICON); | 491 FaviconID id = db.AddFavicon(url, FAVICON); |
| 335 base::Time time = base::Time::Now(); | 492 base::Time last_updated = base::Time::Now(); |
| 336 db.SetFavicon(id, favicon, time); | 493 db.AddFaviconBitmap(id, favicon1, last_updated, kSmallSize); |
| 494 db.AddFaviconBitmap(id, favicon2, last_updated, kLargeSize); |
| 337 | 495 |
| 338 db.AddToTemporaryIconMappingTable(url, id); | 496 EXPECT_TRUE(db.GetFaviconBitmaps(id, NULL)); |
| 339 db.CommitTemporaryIconMappingTable(); | 497 |
| 340 IconMapping icon_mapping; | 498 EXPECT_TRUE(db.DeleteFavicon(id)); |
| 341 EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, &icon_mapping)); | 499 EXPECT_FALSE(db.GetFaviconBitmaps(id, NULL)); |
| 342 EXPECT_EQ(id, icon_mapping.icon_id); | |
| 343 EXPECT_EQ(url, icon_mapping.page_url); | |
| 344 } | 500 } |
| 345 | 501 |
| 346 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { | 502 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| 347 ThumbnailDatabase db; | 503 ThumbnailDatabase db; |
| 348 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 504 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 349 db.BeginTransaction(); | 505 db.BeginTransaction(); |
| 350 | 506 |
| 351 // Add a favicon | 507 // Add a favicon |
| 352 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 508 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 353 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 509 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 354 | 510 |
| 355 GURL url("http://google.com"); | 511 GURL url("http://google.com"); |
| 356 FaviconID id = db.AddFavicon(url, FAVICON); | 512 FaviconID id = db.AddFavicon(url, FAVICON); |
| 357 base::Time time = base::Time::Now(); | 513 base::Time time = base::Time::Now(); |
| 358 db.SetFavicon(id, favicon, time); | 514 db.AddFaviconBitmap(id, favicon, time, gfx::Size()); |
| 359 | 515 |
| 360 EXPECT_NE(0, db.AddIconMapping(url, id)); | 516 EXPECT_NE(0, db.AddIconMapping(url, id)); |
| 361 std::vector<IconMapping> icon_mapping; | 517 std::vector<IconMapping> icon_mapping; |
| 362 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 518 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 363 | 519 |
| 364 EXPECT_EQ(url, icon_mapping.front().page_url); | 520 EXPECT_EQ(url, icon_mapping.front().page_url); |
| 365 EXPECT_EQ(id, icon_mapping.front().icon_id); | 521 EXPECT_EQ(id, icon_mapping.front().icon_id); |
| 366 EXPECT_EQ(FAVICON, icon_mapping.front().icon_type); | 522 EXPECT_EQ(FAVICON, icon_mapping.front().icon_type); |
| 367 | 523 |
| 368 // Add a touch icon | 524 // Add a touch icon |
| 369 std::vector<unsigned char> data2(blob2, blob2 + sizeof(blob2)); | 525 std::vector<unsigned char> data2(blob2, blob2 + sizeof(blob2)); |
| 370 scoped_refptr<base::RefCountedBytes> favicon2 = | 526 scoped_refptr<base::RefCountedBytes> favicon2 = |
| 371 new base::RefCountedBytes(data); | 527 new base::RefCountedBytes(data); |
| 372 | 528 |
| 373 FaviconID id2 = db.AddFavicon(url, TOUCH_ICON); | 529 FaviconID id2 = db.AddFavicon(url, TOUCH_ICON); |
| 374 db.SetFavicon(id2, favicon2, time); | 530 db.AddFaviconBitmap(id2, favicon2, time, gfx::Size()); |
| 375 EXPECT_NE(0, db.AddIconMapping(url, id2)); | 531 EXPECT_NE(0, db.AddIconMapping(url, id2)); |
| 376 | 532 |
| 377 icon_mapping.clear(); | 533 icon_mapping.clear(); |
| 378 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 534 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 379 | 535 |
| 380 EXPECT_EQ(url, icon_mapping.front().page_url); | 536 EXPECT_EQ(url, icon_mapping.front().page_url); |
| 381 EXPECT_EQ(id2, icon_mapping.front().icon_id); | 537 EXPECT_EQ(id2, icon_mapping.front().icon_id); |
| 382 EXPECT_EQ(TOUCH_ICON, icon_mapping.front().icon_type); | 538 EXPECT_EQ(TOUCH_ICON, icon_mapping.front().icon_type); |
| 383 | 539 |
| 384 // Add a touch precomposed icon | 540 // Add a touch precomposed icon |
| 385 scoped_refptr<base::RefCountedBytes> favicon3 = | 541 scoped_refptr<base::RefCountedBytes> favicon3 = |
| 386 new base::RefCountedBytes(data2); | 542 new base::RefCountedBytes(data2); |
| 387 | 543 |
| 388 FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON); | 544 FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON); |
| 389 db.SetFavicon(id3, favicon3, time); | 545 db.AddFaviconBitmap(id3, favicon3, time, gfx::Size()); |
| 390 EXPECT_NE(0, db.AddIconMapping(url, id3)); | 546 EXPECT_NE(0, db.AddIconMapping(url, id3)); |
| 391 | 547 |
| 392 icon_mapping.clear(); | 548 icon_mapping.clear(); |
| 393 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); | 549 EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
| 394 | 550 |
| 395 EXPECT_EQ(url, icon_mapping.front().page_url); | 551 EXPECT_EQ(url, icon_mapping.front().page_url); |
| 396 EXPECT_EQ(id3, icon_mapping.front().icon_id); | 552 EXPECT_EQ(id3, icon_mapping.front().icon_id); |
| 397 EXPECT_EQ(TOUCH_PRECOMPOSED_ICON, icon_mapping.front().icon_type); | 553 EXPECT_EQ(TOUCH_PRECOMPOSED_ICON, icon_mapping.front().icon_type); |
| 398 } | 554 } |
| 399 | 555 |
| 400 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { | 556 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
| 401 ThumbnailDatabase db; | 557 ThumbnailDatabase db; |
| 402 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 558 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 403 db.BeginTransaction(); | 559 db.BeginTransaction(); |
| 404 | 560 |
| 405 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 561 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 406 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 562 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 407 | 563 |
| 408 // Add a favicon which will have icon_mappings | 564 // Add a favicon which will have icon_mappings |
| 409 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); | 565 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
| 410 EXPECT_NE(id1, 0); | 566 EXPECT_NE(id1, 0); |
| 411 base::Time time = base::Time::Now(); | 567 base::Time time = base::Time::Now(); |
| 412 db.SetFavicon(id1, favicon, time); | 568 db.AddFaviconBitmap(id1, favicon, time, gfx::Size()); |
| 413 | 569 |
| 414 // Add another type of favicon | 570 // Add another type of favicon |
| 415 FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); | 571 FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| 416 EXPECT_NE(id2, 0); | 572 EXPECT_NE(id2, 0); |
| 417 time = base::Time::Now(); | 573 time = base::Time::Now(); |
| 418 db.SetFavicon(id2, favicon, time); | 574 db.AddFaviconBitmap(id2, favicon, time, gfx::Size()); |
| 419 | 575 |
| 420 // Add 3rd favicon | 576 // Add 3rd favicon |
| 421 FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); | 577 FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| 422 EXPECT_NE(id3, 0); | 578 EXPECT_NE(id3, 0); |
| 423 time = base::Time::Now(); | 579 time = base::Time::Now(); |
| 424 db.SetFavicon(id3, favicon, time); | 580 db.AddFaviconBitmap(id3, favicon, time, gfx::Size()); |
| 425 | 581 |
| 426 // Add 2 icon mapping | 582 // Add 2 icon mapping |
| 427 GURL page_url("http://www.google.com"); | 583 GURL page_url("http://www.google.com"); |
| 428 EXPECT_TRUE(db.AddIconMapping(page_url, id1)); | 584 EXPECT_TRUE(db.AddIconMapping(page_url, id1)); |
| 429 EXPECT_TRUE(db.AddIconMapping(page_url, id2)); | 585 EXPECT_TRUE(db.AddIconMapping(page_url, id2)); |
| 430 | 586 |
| 431 EXPECT_TRUE(db.HasMappingFor(id1)); | 587 EXPECT_TRUE(db.HasMappingFor(id1)); |
| 432 EXPECT_TRUE(db.HasMappingFor(id2)); | 588 EXPECT_TRUE(db.HasMappingFor(id2)); |
| 433 EXPECT_FALSE(db.HasMappingFor(id3)); | 589 EXPECT_FALSE(db.HasMappingFor(id3)); |
| 434 | 590 |
| 435 // Remove all mappings | 591 // Remove all mappings |
| 436 db.DeleteIconMappings(page_url); | 592 db.DeleteIconMappings(page_url); |
| 437 EXPECT_FALSE(db.HasMappingFor(id1)); | 593 EXPECT_FALSE(db.HasMappingFor(id1)); |
| 438 EXPECT_FALSE(db.HasMappingFor(id2)); | 594 EXPECT_FALSE(db.HasMappingFor(id2)); |
| 439 EXPECT_FALSE(db.HasMappingFor(id3)); | 595 EXPECT_FALSE(db.HasMappingFor(id3)); |
| 440 } | 596 } |
| 441 | 597 |
| 442 TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { | 598 TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { |
| 443 ThumbnailDatabase db; | 599 ThumbnailDatabase db; |
| 444 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 600 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 445 db.BeginTransaction(); | 601 db.BeginTransaction(); |
| 446 | 602 |
| 447 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 603 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 448 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 604 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 449 | 605 |
| 450 // Add a favicon which will have icon_mappings | 606 // Add a favicon which will have icon_mappings |
| 451 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); | 607 FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
| 452 EXPECT_NE(0, id1); | 608 EXPECT_NE(0, id1); |
| 453 base::Time time = base::Time::Now(); | 609 base::Time time = base::Time::Now(); |
| 454 db.SetFavicon(id1, favicon, time); | 610 db.AddFaviconBitmap(id1, favicon, time, gfx::Size()); |
| 455 | 611 |
| 456 // Add another type of favicon | 612 // Add another type of favicon |
| 457 FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); | 613 FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| 458 EXPECT_NE(0, id2); | 614 EXPECT_NE(0, id2); |
| 459 time = base::Time::Now(); | 615 time = base::Time::Now(); |
| 460 db.SetFavicon(id2, favicon, time); | 616 db.AddFaviconBitmap(id2, favicon, time, gfx::Size()); |
| 461 | 617 |
| 462 // Add 3rd favicon | 618 // Add 3rd favicon |
| 463 FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); | 619 FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| 464 EXPECT_NE(0, id3); | 620 EXPECT_NE(0, id3); |
| 465 time = base::Time::Now(); | 621 time = base::Time::Now(); |
| 466 db.SetFavicon(id3, favicon, time); | 622 db.AddFaviconBitmap(id3, favicon, time, gfx::Size()); |
| 467 | 623 |
| 468 GURL page1_url("http://page1.com"); | 624 GURL page1_url("http://page1.com"); |
| 469 EXPECT_TRUE(db.AddIconMapping(page1_url, id1)); | 625 EXPECT_TRUE(db.AddIconMapping(page1_url, id1)); |
| 470 EXPECT_TRUE(db.AddIconMapping(page1_url, id2)); | 626 EXPECT_TRUE(db.AddIconMapping(page1_url, id2)); |
| 471 | 627 |
| 472 GURL page2_url("http://page2.com"); | 628 GURL page2_url("http://page2.com"); |
| 473 EXPECT_TRUE(db.AddIconMapping(page2_url, id3)); | 629 EXPECT_TRUE(db.AddIconMapping(page2_url, id3)); |
| 474 | 630 |
| 475 // Test we do nothing with existing mappings. | 631 // Test we do nothing with existing mappings. |
| 476 std::vector<IconMapping> icon_mapping; | 632 std::vector<IconMapping> icon_mapping; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 // Migration should be done. | 672 // Migration should be done. |
| 517 // Test one icon_mapping. | 673 // Test one icon_mapping. |
| 518 GURL page_url1 = GURL("http://google.com/"); | 674 GURL page_url1 = GURL("http://google.com/"); |
| 519 std::vector<IconMapping> icon_mappings; | 675 std::vector<IconMapping> icon_mappings; |
| 520 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url1, &icon_mappings)); | 676 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url1, &icon_mappings)); |
| 521 ASSERT_EQ(1u, icon_mappings.size()); | 677 ASSERT_EQ(1u, icon_mappings.size()); |
| 522 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type); | 678 EXPECT_EQ(FAVICON, icon_mappings[0].icon_type); |
| 523 EXPECT_EQ(page_url1, icon_mappings[0].page_url); | 679 EXPECT_EQ(page_url1, icon_mappings[0].page_url); |
| 524 EXPECT_EQ(1, icon_mappings[0].icon_id); | 680 EXPECT_EQ(1, icon_mappings[0].icon_id); |
| 525 base::Time time; | 681 base::Time time; |
| 526 std::vector<unsigned char> out_data; | 682 scoped_refptr<base::RefCountedMemory> out_data; |
| 527 GURL out_icon_url; | 683 GURL out_icon_url; |
| 528 ASSERT_TRUE(db.GetFavicon( | 684 ASSERT_TRUE(db.GetFavicon( |
| 529 icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL)); | 685 icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL)); |
| 530 EXPECT_EQ(icon1, out_icon_url); | 686 EXPECT_EQ(icon1, out_icon_url); |
| 531 | 687 |
| 532 // Test a page which has the same icon. | 688 // Test a page which has the same icon. |
| 533 GURL page_url3 = GURL("http://www.google.com/"); | 689 GURL page_url3 = GURL("http://www.google.com/"); |
| 534 icon_mappings.clear(); | 690 icon_mappings.clear(); |
| 535 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url3, &icon_mappings)); | 691 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url3, &icon_mappings)); |
| 536 ASSERT_EQ(1u, icon_mappings.size()); | 692 ASSERT_EQ(1u, icon_mappings.size()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 559 ThumbnailDatabase db; | 715 ThumbnailDatabase db; |
| 560 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); | 716 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| 561 db.BeginTransaction(); | 717 db.BeginTransaction(); |
| 562 | 718 |
| 563 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); | 719 std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| 564 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 720 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 565 | 721 |
| 566 GURL url("http://google.com"); | 722 GURL url("http://google.com"); |
| 567 FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); | 723 FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); |
| 568 ASSERT_NE(0, touch_icon_id1); | 724 ASSERT_NE(0, touch_icon_id1); |
| 569 ASSERT_TRUE(db.SetFavicon(touch_icon_id1, favicon, base::Time::Now())); | 725 ASSERT_TRUE(db.AddFaviconBitmap(touch_icon_id1, favicon, base::Time::Now(), |
| 726 gfx::Size())); |
| 570 IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1); | 727 IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1); |
| 571 ASSERT_NE(0, touch_mapping_id1); | 728 ASSERT_NE(0, touch_mapping_id1); |
| 572 | 729 |
| 573 FaviconID favicon_id1 = db.AddFavicon(url, FAVICON); | 730 FaviconID favicon_id1 = db.AddFavicon(url, FAVICON); |
| 574 ASSERT_NE(0, favicon_id1); | 731 ASSERT_NE(0, favicon_id1); |
| 575 ASSERT_TRUE(db.SetFavicon(favicon_id1, favicon, base::Time::Now())); | 732 ASSERT_TRUE(db.AddFaviconBitmap(favicon_id1, favicon, base::Time::Now(), |
| 733 gfx::Size())); |
| 576 IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1); | 734 IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1); |
| 577 ASSERT_NE(0, favicon_mapping_id1); | 735 ASSERT_NE(0, favicon_mapping_id1); |
| 578 | 736 |
| 579 GURL url2("http://chromium.org"); | 737 GURL url2("http://chromium.org"); |
| 580 FaviconID favicon_id2 = db.AddFavicon(url2, FAVICON); | 738 FaviconID favicon_id2 = db.AddFavicon(url2, FAVICON); |
| 581 ASSERT_NE(0, favicon_id2); | 739 ASSERT_NE(0, favicon_id2); |
| 582 ASSERT_TRUE(db.SetFavicon(favicon_id2, favicon, base::Time::Now())); | 740 ASSERT_TRUE(db.AddFaviconBitmap(favicon_id2, favicon, base::Time::Now(), |
| 741 gfx::Size())); |
| 583 IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); | 742 IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); |
| 584 ASSERT_NE(0, favicon_mapping_id2); | 743 ASSERT_NE(0, favicon_mapping_id2); |
| 585 | 744 |
| 586 IconMapping icon_mapping; | 745 IconMapping icon_mapping; |
| 587 ThumbnailDatabase::IconMappingEnumerator enumerator1; | 746 ThumbnailDatabase::IconMappingEnumerator enumerator1; |
| 588 ASSERT_TRUE(db.InitIconMappingEnumerator(FAVICON, &enumerator1)); | 747 ASSERT_TRUE(db.InitIconMappingEnumerator(FAVICON, &enumerator1)); |
| 589 // There are 2 favicon mappings. | 748 // There are 2 favicon mappings. |
| 590 bool has_favicon_mapping1 = false; | 749 bool has_favicon_mapping1 = false; |
| 591 bool has_favicon_mapping2 = false; | 750 bool has_favicon_mapping2 = false; |
| 592 int mapping_count = 0; | 751 int mapping_count = 0; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 613 ASSERT_TRUE(enumerator2.GetNextIconMapping(&icon_mapping)); | 772 ASSERT_TRUE(enumerator2.GetNextIconMapping(&icon_mapping)); |
| 614 EXPECT_EQ(touch_mapping_id1, icon_mapping.mapping_id); | 773 EXPECT_EQ(touch_mapping_id1, icon_mapping.mapping_id); |
| 615 EXPECT_EQ(url, icon_mapping.page_url); | 774 EXPECT_EQ(url, icon_mapping.page_url); |
| 616 EXPECT_EQ(touch_icon_id1, icon_mapping.icon_id); | 775 EXPECT_EQ(touch_icon_id1, icon_mapping.icon_id); |
| 617 EXPECT_EQ(TOUCH_ICON, icon_mapping.icon_type); | 776 EXPECT_EQ(TOUCH_ICON, icon_mapping.icon_type); |
| 618 | 777 |
| 619 EXPECT_FALSE(enumerator2.GetNextIconMapping(&icon_mapping)); | 778 EXPECT_FALSE(enumerator2.GetNextIconMapping(&icon_mapping)); |
| 620 } | 779 } |
| 621 | 780 |
| 622 } // namespace history | 781 } // namespace history |
| OLD | NEW |