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

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: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/history/thumbnail_database.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..21a649eec71dfdce7f9b1c11491c6269b36ff18a 100644
--- a/chrome/browser/history/thumbnail_database_unittest.cc
+++ b/chrome/browser/history/thumbnail_database_unittest.cc
@@ -46,6 +46,11 @@ const double kTotallyBoring = 1.0;
const int64 kPage1 = 1234;
+const gfx::Size kSmallSize = gfx::Size(16, 16);
+const gfx::Size kLargeSize = gfx::Size(32, 32);
+
+const std::string kSizesSmallAndLarge = "16 16 32 32";
+
} // namespace
class ThumbnailDatabaseTest : public testing::Test {
@@ -119,25 +124,57 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) {
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
GURL url("http://google.com");
- FaviconID id = db.AddFavicon(url, FAVICON);
+ FaviconID icon_id = db.AddFavicon(url, FAVICON);
+ db.SetFaviconSizes(icon_id, kSizesSmallAndLarge);
base::Time time = base::Time::Now();
- db.SetFavicon(id, favicon, time);
+ FaviconBitmapID bitmap1_id = db.AddFaviconBitmap(icon_id, favicon, time,
+ kSmallSize);
+ FaviconBitmapID bitmap2_id = db.AddFaviconBitmap(icon_id, favicon, time,
+ kLargeSize);
EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_));
EXPECT_TRUE(db.IsLatestVersion());
- base::Time time_out;
- std::vector<unsigned char> favicon_out;
GURL url_out;
IconType icon_type_out;
- EXPECT_TRUE(db.GetFavicon(id, &time_out, &favicon_out, &url_out,
- &icon_type_out));
+ std::string sizes_out;
+ EXPECT_TRUE(db.GetFaviconHeader(icon_id, &url_out, &icon_type_out,
+ &sizes_out));
+
EXPECT_EQ(url, url_out);
- EXPECT_EQ(time.ToTimeT(), time_out.ToTimeT());
- ASSERT_EQ(data.size(), favicon_out.size());
+ EXPECT_EQ(FAVICON, icon_type_out);
+ EXPECT_STREQ(kSizesSmallAndLarge.c_str(), sizes_out.c_str());
+
+ std::vector<FaviconBitmap> favicon_bitmaps_out;
+ EXPECT_TRUE(db.GetFaviconBitmaps(icon_id, &favicon_bitmaps_out));
+ EXPECT_EQ(2u, favicon_bitmaps_out.size());
+
+ FaviconBitmap favicon_bitmap1 = favicon_bitmaps_out[0];
+ FaviconBitmap favicon_bitmap2 = favicon_bitmaps_out[1];
+
+ // Bitmaps do not need to be in particular order.
+ if (favicon_bitmap1.bitmap_id == bitmap2_id) {
+ FaviconBitmap tmp_favicon_bitmap = favicon_bitmap1;
+ favicon_bitmap1 = favicon_bitmap2;
+ favicon_bitmap2 = tmp_favicon_bitmap;
+ }
+
+ EXPECT_EQ(bitmap1_id, favicon_bitmap1.bitmap_id);
+ EXPECT_EQ(icon_id, favicon_bitmap1.icon_id);
+ EXPECT_EQ(time.ToTimeT(), favicon_bitmap1.last_updated.ToTimeT());
+ EXPECT_EQ(data.size(), favicon_bitmap1.bitmap_data->size());
EXPECT_TRUE(std::equal(data.begin(),
data.end(),
- favicon_out.begin()));
- EXPECT_EQ(FAVICON, icon_type_out);
+ favicon_bitmap1.bitmap_data->front()));
+ EXPECT_EQ(kSmallSize, favicon_bitmap1.pixel_size);
+
+ EXPECT_EQ(bitmap2_id, favicon_bitmap2.bitmap_id);
+ EXPECT_EQ(icon_id, favicon_bitmap2.icon_id);
+ EXPECT_EQ(time.ToTimeT(), favicon_bitmap2.last_updated.ToTimeT());
+ EXPECT_EQ(data.size(), favicon_bitmap2.bitmap_data->size());
+ EXPECT_TRUE(std::equal(data.begin(),
+ data.end(),
+ favicon_bitmap2.bitmap_data->front()));
+ EXPECT_EQ(kLargeSize, favicon_bitmap2.pixel_size);
}
TEST_F(ThumbnailDatabaseTest, AddIconMapping) {
@@ -152,7 +189,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.AddFaviconBitmap(id, favicon, time, gfx::Size());
EXPECT_NE(0, db.AddIconMapping(url, id));
std::vector<IconMapping> icon_mapping;
@@ -173,7 +210,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.AddFaviconBitmap(id, favicon, time, gfx::Size());
EXPECT_TRUE(0 < db.AddIconMapping(url, id));
std::vector<IconMapping> icon_mapping;
@@ -205,11 +242,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.AddFaviconBitmap(id, favicon, time, gfx::Size());
EXPECT_TRUE(0 < db.AddIconMapping(url, id));
FaviconID id2 = db.AddFavicon(url, FAVICON);
- db.SetFavicon(id2, favicon, time);
+ db.AddFaviconBitmap(id2, favicon, time, gfx::Size());
EXPECT_TRUE(0 < db.AddIconMapping(url, id2));
ASSERT_NE(id, id2);
@@ -237,21 +274,23 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) {
FaviconID id1 = db.AddFavicon(url, TOUCH_ICON);
base::Time time = base::Time::Now();
- db.SetFavicon(id1, favicon, time);
+ db.AddFaviconBitmap(id1, favicon, time, kSmallSize);
+ db.AddFaviconBitmap(id1, favicon, time, kLargeSize);
EXPECT_TRUE(0 < db.AddIconMapping(url, id1));
FaviconID id2 = db.AddFavicon(url, FAVICON);
EXPECT_NE(id1, id2);
- db.SetFavicon(id2, favicon, time);
+ db.AddFaviconBitmap(id2, favicon, time, kSmallSize);
EXPECT_TRUE(0 < db.AddIconMapping(url, id2));
- std::vector<IconMapping> icon_mapping;
- EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
- ASSERT_EQ(2u, icon_mapping.size());
- EXPECT_NE(icon_mapping[0].icon_id, icon_mapping[1].icon_id);
- EXPECT_TRUE(icon_mapping[0].icon_id == id1 && icon_mapping[1].icon_id == id2);
+ std::vector<IconMapping> icon_mappings;
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings));
+ ASSERT_EQ(2u, icon_mappings.size());
+ EXPECT_EQ(id1, icon_mappings[0].icon_id);
+ EXPECT_EQ(id2, icon_mappings[1].icon_id);
}
+// Test upgrading database to version 4.
TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) {
ThumbnailDatabase db;
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
@@ -275,21 +314,23 @@ 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 upgrading database to version 5.
TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) {
ThumbnailDatabase db;
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
@@ -318,29 +359,144 @@ TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) {
EXPECT_TRUE(db.db_.Execute(sql.c_str()));
}
-TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) {
+// Test upgrading database to version 6.
+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.clear();
+ 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));
+ // Any previous data in sizes should be cleared.
+ EXPECT_EQ(std::string(""), statement.ColumnString(3));
+
+ statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE,
+ "SELECT icon_id, last_updated, image_data, width, height "
+ "FROM favicon_bitmaps"));
+ 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));
+ EXPECT_EQ(0, statement.ColumnInt(3));
+ EXPECT_EQ(0, statement.ColumnInt(4));
+}
+
+// Test that only data moved to a temporary table is left in the main table
+// once the temporary table is committed.
+TEST_F(ThumbnailDatabaseTest, TemporaryTables) {
ThumbnailDatabase db;
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
db.BeginTransaction();
- EXPECT_TRUE(db.InitTemporaryIconMappingTable());
+ EXPECT_TRUE(db.InitTemporaryTables());
std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
+ GURL unkept_url("http://google.com/favicon2.ico");
+ FaviconID unkept_id = db.AddFavicon(unkept_url, FAVICON);
+ db.AddFaviconBitmap(unkept_id, favicon, base::Time::Now(), kSmallSize);
+
+ GURL kept_url("http://google.com/favicon.ico");
+ FaviconID kept_id = db.AddFavicon(kept_url, FAVICON);
+ db.AddFaviconBitmap(kept_id, favicon, base::Time::Now(), kLargeSize);
+
+ GURL page_url("http://google.com");
+ db.AddIconMapping(page_url, unkept_id);
+ db.AddIconMapping(page_url, kept_id);
+
+ FaviconID new_favicon_id =
+ db.CopyFaviconAndFaviconBitmapsToTemporaryTables(kept_id);
+ EXPECT_NE(0, new_favicon_id);
+ EXPECT_TRUE(db.AddToTemporaryIconMappingTable(page_url, new_favicon_id));
+
+ EXPECT_TRUE(db.CommitTemporaryTables());
+
+ // Only copied data should be left.
+ IconMapping icon_mapping;
+ EXPECT_TRUE(db.GetIconMappingForPageURL(page_url, FAVICON, &icon_mapping));
+ EXPECT_EQ(new_favicon_id, icon_mapping.icon_id);
+ EXPECT_EQ(page_url, icon_mapping.page_url);
+
+ std::vector<FaviconBitmap> favicon_bitmaps;
+ EXPECT_TRUE(db.GetFaviconBitmaps(icon_mapping.icon_id, &favicon_bitmaps));
+ EXPECT_EQ(1u, favicon_bitmaps.size());
+ EXPECT_EQ(kLargeSize, favicon_bitmaps[0].pixel_size);
+
+ EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false, NULL));
+}
+
+// Tests that deleting a favicon deletes the favicon row and favicon bitmap
+// rows from the database.
+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 time = base::Time::Now();
- db.SetFavicon(id, favicon, time);
+ base::Time last_updated = base::Time::Now();
+ db.AddFaviconBitmap(id, favicon1, last_updated, kSmallSize);
+ db.AddFaviconBitmap(id, favicon2, last_updated, kLargeSize);
- db.AddToTemporaryIconMappingTable(url, id);
- db.CommitTemporaryIconMappingTable();
- IconMapping icon_mapping;
- EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, &icon_mapping));
- EXPECT_EQ(id, icon_mapping.icon_id);
- EXPECT_EQ(url, icon_mapping.page_url);
+ EXPECT_TRUE(db.GetFaviconBitmaps(id, NULL));
+
+ EXPECT_TRUE(db.DeleteFavicon(id));
+ EXPECT_FALSE(db.GetFaviconBitmaps(id, NULL));
}
TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) {
@@ -355,7 +511,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.AddFaviconBitmap(id, favicon, time, gfx::Size());
EXPECT_NE(0, db.AddIconMapping(url, id));
std::vector<IconMapping> icon_mapping;
@@ -371,7 +527,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) {
new base::RefCountedBytes(data);
FaviconID id2 = db.AddFavicon(url, TOUCH_ICON);
- db.SetFavicon(id2, favicon2, time);
+ db.AddFaviconBitmap(id2, favicon2, time, gfx::Size());
EXPECT_NE(0, db.AddIconMapping(url, id2));
icon_mapping.clear();
@@ -386,7 +542,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) {
new base::RefCountedBytes(data2);
FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON);
- db.SetFavicon(id3, favicon3, time);
+ db.AddFaviconBitmap(id3, favicon3, time, gfx::Size());
EXPECT_NE(0, db.AddIconMapping(url, id3));
icon_mapping.clear();
@@ -409,19 +565,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.AddFaviconBitmap(id1, favicon, time, gfx::Size());
// 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.AddFaviconBitmap(id2, favicon, time, gfx::Size());
// 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.AddFaviconBitmap(id3, favicon, time, gfx::Size());
// Add 2 icon mapping
GURL page_url("http://www.google.com");
@@ -451,19 +607,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.AddFaviconBitmap(id1, favicon, time, gfx::Size());
// 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.AddFaviconBitmap(id2, favicon, time, gfx::Size());
// 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.AddFaviconBitmap(id3, favicon, time, gfx::Size());
GURL page1_url("http://page1.com");
EXPECT_TRUE(db.AddIconMapping(page1_url, id1));
@@ -523,7 +679,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) {
EXPECT_EQ(page_url1, icon_mappings[0].page_url);
EXPECT_EQ(1, icon_mappings[0].icon_id);
base::Time time;
- std::vector<unsigned char> out_data;
+ scoped_refptr<base::RefCountedMemory> out_data;
GURL out_icon_url;
ASSERT_TRUE(db.GetFavicon(
icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL));
@@ -566,20 +722,23 @@ 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.AddFaviconBitmap(touch_icon_id1, favicon, base::Time::Now(),
+ gfx::Size()));
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.AddFaviconBitmap(favicon_id1, favicon, base::Time::Now(),
+ gfx::Size()));
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.AddFaviconBitmap(favicon_id2, favicon, base::Time::Now(),
+ gfx::Size()));
IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2);
ASSERT_NE(0, favicon_mapping_id2);
« 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