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

Unified 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: Changes as per Sky's suggestions on Aug 1 Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
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);
« chrome/browser/history/thumbnail_database.cc ('K') | « chrome/browser/history/thumbnail_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698