Chromium Code Reviews| Index: chrome/browser/history/thumbnail_database.cc |
| diff --git a/chrome/browser/history/thumbnail_database.cc b/chrome/browser/history/thumbnail_database.cc |
| index d9462ada00ae4b5b1ce8bef8a5a18c56d1f07aeb..23848fe61e2696d0948cf384c7fdee40857c7e5a 100644 |
| --- a/chrome/browser/history/thumbnail_database.cc |
| +++ b/chrome/browser/history/thumbnail_database.cc |
| @@ -80,6 +80,7 @@ static void FillIconMapping(const sql::Statement& statement, |
| icon_mapping->icon_id = statement.ColumnInt64(1); |
| icon_mapping->icon_type = |
| static_cast<history::IconType>(statement.ColumnInt(2)); |
| + icon_mapping->icon_url = GURL(statement.ColumnString(3)); |
| icon_mapping->page_url = page_url; |
| } |
| @@ -103,7 +104,7 @@ bool ThumbnailDatabase::IconMappingEnumerator::GetNextIconMapping( |
| IconMapping* icon_mapping) { |
| if (!statement_.Step()) |
| return false; |
| - FillIconMapping(statement_, GURL(statement_.ColumnString(3)), icon_mapping); |
| + FillIconMapping(statement_, GURL(statement_.ColumnString(4)), icon_mapping); |
| return true; |
| } |
| @@ -447,6 +448,24 @@ bool ThumbnailDatabase::ThumbnailScoreForId(URLID id, |
| return true; |
| } |
| +bool ThumbnailDatabase::GetFaviconBitmapIDSizeListing( |
| + FaviconID icon_id, |
| + std::vector<FaviconBitmapIDSize>* bitmap_id_size_listing) { |
| + DCHECK(icon_id); |
| + sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| + "SELECT id, width, height FROM favicon_bitmaps WHERE icon_id=?")); |
| + statement.BindInt64(0, icon_id); |
| + |
| + while (statement.Step()) { |
| + FaviconBitmapIDSize bitmap_id_size; |
| + bitmap_id_size.bitmap_id = statement.ColumnInt(0); |
| + bitmap_id_size.pixel_size = gfx::Size(statement.ColumnInt(1), |
| + statement.ColumnInt(2)); |
| + bitmap_id_size_listing->push_back(bitmap_id_size); |
| + } |
| + return !bitmap_id_size_listing->empty(); |
|
sky
2012/08/21 20:16:56
In this one you return whether non-empty, but not
|
| +} |
| + |
| bool ThumbnailDatabase::GetFaviconBitmaps( |
| FaviconID icon_id, |
| std::vector<FaviconBitmap>* favicon_bitmaps) { |
| @@ -504,10 +523,29 @@ FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap( |
| return db_.GetLastInsertRowId(); |
| } |
| -bool ThumbnailDatabase::DeleteFaviconBitmapsForFavicon(FaviconID icon_id) { |
| +bool ThumbnailDatabase::SetFaviconBitmap( |
| + FaviconBitmapID bitmap_id, |
| + scoped_refptr<base::RefCountedMemory> icon_data, |
|
sky
2012/08/21 20:16:56
Shouldn't this take the size too?
pkotwicz
2012/09/04 16:18:36
In my opinion a favicon bitmap is uniquely identif
|
| + base::Time time) { |
| + DCHECK(bitmap_id); |
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| - "DELETE FROM favicon_bitmaps WHERE icon_id=?")); |
| - statement.BindInt64(0, icon_id); |
| + "UPDATE favicon_bitmaps SET image_data=?, last_updated=? WHERE id=?")); |
| + if (icon_data.get() && icon_data->size()) { |
| + statement.BindBlob(0, icon_data->front(), |
| + static_cast<int>(icon_data->size())); |
| + } else { |
| + statement.BindNull(0); |
| + } |
| + statement.BindInt64(1, time.ToTimeT()); |
| + statement.BindInt64(2, bitmap_id); |
| + |
| + return statement.Run(); |
| +} |
| + |
| +bool ThumbnailDatabase::DeleteFaviconBitmap(FaviconBitmapID bitmap_id) { |
| + sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| + "DELETE FROM favicon_bitmaps WHERE id=?")); |
| + statement.BindInt64(0, bitmap_id); |
| return statement.Run(); |
| } |
| @@ -531,45 +569,18 @@ bool ThumbnailDatabase::SetFaviconOutOfDate(FaviconID icon_id) { |
| } |
| FaviconID ThumbnailDatabase::GetFaviconIDForFaviconURL(const GURL& icon_url, |
| - int required_icon_type, |
| - IconType* icon_type) { |
| + int required_icon_type) { |
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| - "SELECT id, icon_type FROM favicons WHERE url=? AND (icon_type & ? > 0) " |
| + "SELECT id FROM favicons WHERE url=? AND (icon_type & ? > 0) " |
| "ORDER BY icon_type DESC")); |
| statement.BindString(0, URLDatabase::GURLToDatabaseURL(icon_url)); |
| statement.BindInt(1, required_icon_type); |
| if (!statement.Step()) |
| return 0; // not cached |
| - |
| - if (icon_type) |
| - *icon_type = static_cast<IconType>(statement.ColumnInt(1)); |
| return statement.ColumnInt64(0); |
| } |
| -bool ThumbnailDatabase::GetFavicon( |
| - FaviconID icon_id, |
| - base::Time* last_updated, |
| - scoped_refptr<base::RefCountedMemory>* png_icon_data, |
| - GURL* icon_url, |
| - IconType* icon_type) { |
| - DCHECK(icon_id); |
| - |
| - std::vector<FaviconBitmap> favicon_bitmaps; |
| - if (!GetFaviconBitmaps(icon_id, &favicon_bitmaps)) |
| - return false; |
| - |
| - if (favicon_bitmaps.empty()) |
| - return false; |
| - |
| - if (last_updated) |
| - *last_updated = favicon_bitmaps[0].last_updated; |
| - |
| - *png_icon_data = favicon_bitmaps[0].bitmap_data; |
| - |
| - return GetFaviconHeader(icon_id, icon_url, icon_type, NULL); |
| -} |
| - |
| bool ThumbnailDatabase::GetFaviconHeader( |
| FaviconID icon_id, |
| GURL* icon_url, |
| @@ -637,30 +648,33 @@ bool ThumbnailDatabase::DeleteFavicon(FaviconID id) { |
| return statement.Run(); |
| } |
| -bool ThumbnailDatabase::GetIconMappingForPageURL(const GURL& page_url, |
| - IconType required_icon_type, |
| - IconMapping* icon_mapping) { |
| - std::vector<IconMapping> icon_mappings; |
| - if (!GetIconMappingsForPageURL(page_url, &icon_mappings)) |
| +bool ThumbnailDatabase::GetIconMappingsForPageURL( |
| + const GURL& page_url, |
| + int required_icon_types, |
| + std::vector<IconMapping>* filtered_mapping_data) { |
| + std::vector<IconMapping> mapping_data; |
| + if (!GetIconMappingsForPageURL(page_url, &mapping_data)) |
| return false; |
| - for (std::vector<IconMapping>::iterator m = icon_mappings.begin(); |
| - m != icon_mappings.end(); ++m) { |
| - if (m->icon_type == required_icon_type) { |
| - if (icon_mapping != NULL) |
| - *icon_mapping = *m; |
| - return true; |
| + bool result = false; |
|
sky
2012/08/21 20:16:56
Same comment as in GetFaviconBitmapIDSizeListing:
|
| + for (std::vector<IconMapping>::iterator m = mapping_data.begin(); |
| + m != mapping_data.end(); ++m) { |
| + if (m->icon_type & required_icon_types) { |
| + result = true; |
| + if (filtered_mapping_data == NULL) |
| + return result; |
| + filtered_mapping_data->push_back(*m); |
| } |
| } |
| - |
| - return false; |
| + return result; |
| } |
| bool ThumbnailDatabase::GetIconMappingsForPageURL( |
| const GURL& page_url, |
| std::vector<IconMapping>* mapping_data) { |
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| - "SELECT icon_mapping.id, icon_mapping.icon_id, favicons.icon_type " |
| + "SELECT icon_mapping.id, icon_mapping.icon_id, favicons.icon_type, " |
| + "favicons.url " |
| "FROM icon_mapping " |
| "INNER JOIN favicons " |
| "ON icon_mapping.icon_id = favicons.id " |
| @@ -704,6 +718,14 @@ bool ThumbnailDatabase::DeleteIconMappings(const GURL& page_url) { |
| return statement.Run(); |
| } |
| +bool ThumbnailDatabase::DeleteIconMapping(IconMappingID mapping_id) { |
| + sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| + "DELETE FROM icon_mapping WHERE id=?")); |
| + statement.BindInt64(0, mapping_id); |
| + |
| + return statement.Run(); |
| +} |
| + |
| bool ThumbnailDatabase::HasMappingFor(FaviconID id) { |
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| "SELECT id FROM icon_mapping " |
| @@ -713,8 +735,8 @@ bool ThumbnailDatabase::HasMappingFor(FaviconID id) { |
| return statement.Step(); |
| } |
| -bool ThumbnailDatabase::CloneIconMapping(const GURL& old_page_url, |
| - const GURL& new_page_url) { |
| +bool ThumbnailDatabase::CloneIconMappings(const GURL& old_page_url, |
| + const GURL& new_page_url) { |
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
| "SELECT icon_id FROM icon_mapping " |
| "WHERE page_url=?")); |
| @@ -743,7 +765,7 @@ bool ThumbnailDatabase::InitIconMappingEnumerator( |
| enumerator->statement_.Assign(db_.GetCachedStatement( |
| SQL_FROM_HERE, |
| "SELECT icon_mapping.id, icon_mapping.icon_id, favicons.icon_type, " |
| - "icon_mapping.page_url " |
| + "favicons.url, icon_mapping.page_url " |
| "FROM icon_mapping JOIN favicons ON (" |
| "icon_mapping.icon_id = favicons.id) " |
| "WHERE favicons.icon_type = ?")); |