Index: chrome/browser/history/thumbnail_database_unittest.cc |
diff --git a/chrome/browser/history/thumbnail_database_unittest.cc b/chrome/browser/history/thumbnail_database_unittest.cc |
index 011772907e47d200bde7f0f38e317793d9ad3f29..8a4b20a305c2171a8e83e8812d78ec63bfea7d8d 100644 |
--- a/chrome/browser/history/thumbnail_database_unittest.cc |
+++ b/chrome/browser/history/thumbnail_database_unittest.cc |
@@ -121,7 +121,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
GURL url("http://google.com"); |
FaviconID id = db.AddFavicon(url, FAVICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); |
EXPECT_TRUE(db.IsLatestVersion()); |
@@ -152,7 +152,7 @@ TEST_F(ThumbnailDatabaseTest, AddIconMapping) { |
FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
EXPECT_NE(0, id); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
EXPECT_NE(0, db.AddIconMapping(url, id)); |
std::vector<IconMapping> icon_mapping; |
@@ -173,7 +173,7 @@ TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { |
GURL url("http://google.com"); |
FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
std::vector<IconMapping> icon_mapping; |
@@ -205,11 +205,11 @@ TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) { |
GURL url("http://google.com"); |
FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
FaviconID id2 = db.AddFavicon(url, FAVICON); |
- db.SetFavicon(id2, favicon, time); |
+ db.AddFaviconFrame(id2, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
ASSERT_NE(id, id2); |
@@ -237,12 +237,12 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { |
FaviconID id1 = db.AddFavicon(url, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id1, favicon, time); |
+ db.AddFaviconFrame(id1, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id1)); |
FaviconID id2 = db.AddFavicon(url, FAVICON); |
EXPECT_NE(id1, id2); |
- db.SetFavicon(id2, favicon, time); |
+ db.AddFaviconFrame(id2, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
std::vector<IconMapping> icon_mapping; |
@@ -275,19 +275,20 @@ TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) { |
EXPECT_TRUE(db.UpgradeToVersion4()); |
- std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
- scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
- |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
- base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
- EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
- IconMapping icon_mapping; |
- EXPECT_TRUE(db.GetIconMappingForPageURL(url, TOUCH_ICON, &icon_mapping)); |
- EXPECT_EQ(url, icon_mapping.page_url); |
- EXPECT_EQ(id, icon_mapping.icon_id); |
+ sql::Statement statement; |
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
+ "INSERT INTO favicons (url, icon_type) VALUES (?, ?)")); |
+ statement.BindString(0, URLDatabase::GURLToDatabaseURL(url)); |
+ statement.BindInt(1, TOUCH_ICON); |
+ EXPECT_TRUE(statement.Run()); |
+ |
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT icon_type FROM favicons")); |
+ EXPECT_TRUE(statement.Step()); |
+ |
+ EXPECT_EQ(TOUCH_ICON, static_cast<IconType>(statement.ColumnInt(0))); |
} |
TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { |
@@ -318,6 +319,71 @@ TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { |
EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
} |
+TEST_F(ThumbnailDatabaseTest, UpgradeToVersion6) { |
+ ThumbnailDatabase db; |
+ ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
+ db.BeginTransaction(); |
+ |
+ const char* name = "favicons"; |
+ std::string sql; |
+ sql.append("DROP TABLE IF EXISTS "); |
+ sql.append(name); |
+ EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
+ |
+ sql.resize(0); |
+ sql.append("CREATE TABLE "); |
+ sql.append(name); |
+ sql.append("(" |
+ "id INTEGER PRIMARY KEY," |
+ "url LONGVARCHAR NOT NULL," |
+ "last_updated INTEGER DEFAULT 0," |
+ "image_data BLOB," |
+ "icon_type INTEGER DEFAULT 1," |
+ "sizes LONGVARCHAR)"); |
+ EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
+ |
+ int favicon_id = 1; |
+ GURL url("http://google.com"); |
+ time_t last_updated = Time::Now().ToTimeT(); |
+ std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
+ scoped_refptr<base::RefCountedBytes> bitmap_data( |
+ new base::RefCountedBytes(data)); |
+ |
+ sql::Statement statement; |
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
+ "INSERT INTO favicons (id, url, last_updated, image_data, icon_type, " |
+ "sizes) VALUES (?, ?, ?, ?, ?, ?)")); |
+ statement.BindInt(0, favicon_id); |
+ statement.BindString(1, URLDatabase::GURLToDatabaseURL(url)); |
+ statement.BindInt64(2, last_updated); |
+ statement.BindBlob(3, bitmap_data->front(), |
+ static_cast<int>(bitmap_data->size())); |
+ statement.BindInt(4, TOUCH_ICON); |
+ statement.BindCString(5, "Data which happened to be there"); |
+ EXPECT_TRUE(statement.Run()); |
+ |
+ EXPECT_TRUE(db.UpgradeToVersion6()); |
+ |
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT id, url, icon_type, sizes FROM favicons")); |
+ EXPECT_TRUE(statement.Step()); |
+ EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
+ EXPECT_EQ(url, GURL(statement.ColumnString(1))); |
+ EXPECT_EQ(TOUCH_ICON, statement.ColumnInt(2)); |
+ // sizes should not be copied to new version of database. |
+ EXPECT_EQ(std::string(""), statement.ColumnString(3)); |
sky
2012/08/02 19:57:01
no ""
|
+ |
+ // Query width and height to ensure that the columns exist. |
sky
2012/08/02 19:57:01
Can you also verify the size is set to 16x16 in th
|
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT icon_id, last_updated, image_data, width, height " |
+ "FROM favicon_frames")); |
+ EXPECT_TRUE(statement.Step()); |
+ EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
+ EXPECT_EQ(last_updated, statement.ColumnInt64(1)); |
+ EXPECT_EQ(static_cast<int>(bitmap_data->size()), |
+ statement.ColumnByteLength(2)); |
+} |
+ |
TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
ThumbnailDatabase db; |
@@ -333,7 +399,7 @@ TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
GURL url("http://google.com"); |
FaviconID id = db.AddFavicon(url, FAVICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
db.AddToTemporaryIconMappingTable(url, id); |
db.CommitTemporaryIconMappingTable(); |
@@ -343,6 +409,31 @@ TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
EXPECT_EQ(url, icon_mapping.page_url); |
} |
+TEST_F(ThumbnailDatabaseTest, DeleteFavicon) { |
+ ThumbnailDatabase db; |
+ ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
+ db.BeginTransaction(); |
+ |
+ std::vector<unsigned char> data1(blob1, blob1 + sizeof(blob1)); |
+ scoped_refptr<base::RefCountedBytes> favicon1( |
+ new base::RefCountedBytes(data1)); |
+ std::vector<unsigned char> data2(blob2, blob2 + sizeof(blob2)); |
+ scoped_refptr<base::RefCountedBytes> favicon2( |
+ new base::RefCountedBytes(data2)); |
+ |
+ GURL url("http://google.com"); |
+ FaviconID id = db.AddFavicon(url, FAVICON); |
+ base::Time last_updated = base::Time::Now(); |
+ db.AddFaviconFrame(id, favicon1, last_updated); |
+ db.AddFaviconFrame(id, favicon2, last_updated); |
+ |
+ std::vector<unsigned char> result_data; |
+ EXPECT_TRUE(db.GetFaviconFrame(id, NULL, &result_data)); |
+ |
+ EXPECT_TRUE(db.DeleteFavicon(id)); |
+ EXPECT_FALSE(db.GetFaviconFrame(id, NULL, &result_data)); |
+} |
+ |
TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
ThumbnailDatabase db; |
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
@@ -355,7 +446,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
GURL url("http://google.com"); |
FaviconID id = db.AddFavicon(url, FAVICON); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id, favicon, time); |
+ db.AddFaviconFrame(id, favicon, time); |
EXPECT_NE(0, db.AddIconMapping(url, id)); |
std::vector<IconMapping> icon_mapping; |
@@ -371,7 +462,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
new base::RefCountedBytes(data); |
FaviconID id2 = db.AddFavicon(url, TOUCH_ICON); |
- db.SetFavicon(id2, favicon2, time); |
+ db.AddFaviconFrame(id2, favicon2, time); |
EXPECT_NE(0, db.AddIconMapping(url, id2)); |
icon_mapping.clear(); |
@@ -386,7 +477,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
new base::RefCountedBytes(data2); |
FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON); |
- db.SetFavicon(id3, favicon3, time); |
+ db.AddFaviconFrame(id3, favicon3, time); |
EXPECT_NE(0, db.AddIconMapping(url, id3)); |
icon_mapping.clear(); |
@@ -409,19 +500,19 @@ TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
EXPECT_NE(id1, 0); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id1, favicon, time); |
+ db.AddFaviconFrame(id1, favicon, time); |
// Add another type of favicon |
FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
EXPECT_NE(id2, 0); |
time = base::Time::Now(); |
- db.SetFavicon(id2, favicon, time); |
+ db.AddFaviconFrame(id2, favicon, time); |
// Add 3rd favicon |
FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
EXPECT_NE(id3, 0); |
time = base::Time::Now(); |
- db.SetFavicon(id3, favicon, time); |
+ db.AddFaviconFrame(id3, favicon, time); |
// Add 2 icon mapping |
GURL page_url("http://www.google.com"); |
@@ -451,19 +542,19 @@ TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { |
FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
EXPECT_NE(0, id1); |
base::Time time = base::Time::Now(); |
- db.SetFavicon(id1, favicon, time); |
+ db.AddFaviconFrame(id1, favicon, time); |
// Add another type of favicon |
FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
EXPECT_NE(0, id2); |
time = base::Time::Now(); |
- db.SetFavicon(id2, favicon, time); |
+ db.AddFaviconFrame(id2, favicon, time); |
// Add 3rd favicon |
FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
EXPECT_NE(0, id3); |
time = base::Time::Now(); |
- db.SetFavicon(id3, favicon, time); |
+ db.AddFaviconFrame(id3, favicon, time); |
GURL page1_url("http://page1.com"); |
EXPECT_TRUE(db.AddIconMapping(page1_url, id1)); |
@@ -566,20 +657,20 @@ TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) { |
GURL url("http://google.com"); |
FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); |
ASSERT_NE(0, touch_icon_id1); |
- ASSERT_TRUE(db.SetFavicon(touch_icon_id1, favicon, base::Time::Now())); |
+ ASSERT_TRUE(db.AddFaviconFrame(touch_icon_id1, favicon, base::Time::Now())); |
IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1); |
ASSERT_NE(0, touch_mapping_id1); |
FaviconID favicon_id1 = db.AddFavicon(url, FAVICON); |
ASSERT_NE(0, favicon_id1); |
- ASSERT_TRUE(db.SetFavicon(favicon_id1, favicon, base::Time::Now())); |
+ ASSERT_TRUE(db.AddFaviconFrame(favicon_id1, favicon, base::Time::Now())); |
IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1); |
ASSERT_NE(0, favicon_mapping_id1); |
GURL url2("http://chromium.org"); |
FaviconID favicon_id2 = db.AddFavicon(url2, FAVICON); |
ASSERT_NE(0, favicon_id2); |
- ASSERT_TRUE(db.SetFavicon(favicon_id2, favicon, base::Time::Now())); |
+ ASSERT_TRUE(db.AddFaviconFrame(favicon_id2, favicon, base::Time::Now())); |
IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); |
ASSERT_NE(0, favicon_mapping_id2); |