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

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

Issue 10815068: Changes favicon database to support storing bitmaps of different sizes for the same icon_url (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
« no previous file with comments | « chrome/browser/history/thumbnail_database.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/history/thumbnail_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698