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 = ?")); |