Index: chrome/browser/history/thumbnail_database.cc |
diff --git a/chrome/browser/history/thumbnail_database.cc b/chrome/browser/history/thumbnail_database.cc |
index fbbb731f12935ea8c06145f8d11edca272b10ee6..f0e45f9ae9637f1c67dd7dd02124bd80a0aedbc6 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,29 @@ bool ThumbnailDatabase::ThumbnailScoreForId(URLID id, |
return true; |
} |
+bool ThumbnailDatabase::GetFaviconBitmapIDSizes( |
+ FaviconID icon_id, |
+ std::vector<FaviconBitmapIDSize>* bitmap_id_sizes) { |
+ 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); |
+ |
+ bool result = false; |
+ while (statement.Step()) { |
+ result = true; |
+ if (!bitmap_id_sizes) |
+ return result; |
+ |
+ FaviconBitmapIDSize bitmap_id_size; |
+ bitmap_id_size.bitmap_id = statement.ColumnInt64(0); |
+ bitmap_id_size.pixel_size = gfx::Size(statement.ColumnInt(1), |
+ statement.ColumnInt(2)); |
+ bitmap_id_sizes->push_back(bitmap_id_size); |
+ } |
+ return result; |
+} |
+ |
bool ThumbnailDatabase::GetFaviconBitmaps( |
FaviconID icon_id, |
std::vector<FaviconBitmap>* favicon_bitmaps) { |
@@ -479,6 +503,36 @@ bool ThumbnailDatabase::GetFaviconBitmaps( |
return result; |
} |
+bool ThumbnailDatabase::GetFaviconBitmap( |
+ FaviconBitmapID bitmap_id, |
+ base::Time* last_updated, |
+ scoped_refptr<base::RefCountedMemory>* png_icon_data, |
+ gfx::Size* pixel_size) { |
+ DCHECK(bitmap_id); |
+ sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
+ "SELECT last_updated, image_data, width, height FROM favicon_bitmaps " |
+ "WHERE id=?")); |
+ statement.BindInt64(0, bitmap_id); |
+ |
+ if (!statement.Step()) |
+ return false; |
+ |
+ if (last_updated) |
+ *last_updated = base::Time::FromInternalValue(statement.ColumnInt64(0)); |
+ |
+ if (png_icon_data && statement.ColumnByteLength(1) > 0) { |
+ scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes()); |
+ statement.ColumnBlobAsVector(1, &data->data()); |
+ *png_icon_data = data; |
+ } |
+ |
+ if (pixel_size) { |
+ *pixel_size = gfx::Size(statement.ColumnInt(2), |
+ statement.ColumnInt(3)); |
+ } |
+ return true; |
+} |
+ |
FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap( |
FaviconID icon_id, |
const scoped_refptr<base::RefCountedMemory>& icon_data, |
@@ -504,6 +558,25 @@ FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap( |
return db_.GetLastInsertRowId(); |
} |
+bool ThumbnailDatabase::SetFaviconBitmap( |
+ FaviconBitmapID bitmap_id, |
+ scoped_refptr<base::RefCountedMemory> bitmap_data, |
+ base::Time time) { |
+ DCHECK(bitmap_id); |
+ sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
+ "UPDATE favicon_bitmaps SET image_data=?, last_updated=? WHERE id=?")); |
+ if (bitmap_data.get() && bitmap_data->size()) { |
+ statement.BindBlob(0, bitmap_data->front(), |
+ static_cast<int>(bitmap_data->size())); |
+ } else { |
+ statement.BindNull(0); |
+ } |
+ statement.BindInt64(1, time.ToInternalValue()); |
+ statement.BindInt64(2, bitmap_id); |
+ |
+ return statement.Run(); |
+} |
+ |
bool ThumbnailDatabase::DeleteFaviconBitmapsForFavicon(FaviconID icon_id) { |
sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, |
"DELETE FROM favicon_bitmaps WHERE icon_id=?")); |
@@ -511,6 +584,13 @@ bool ThumbnailDatabase::DeleteFaviconBitmapsForFavicon(FaviconID icon_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(); |
+} |
+ |
bool ThumbnailDatabase::SetFaviconSizes(FaviconID icon_id, |
const FaviconSizes& favicon_sizes) { |
std::string favicon_sizes_as_string; |
@@ -650,7 +730,8 @@ 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 " |
@@ -741,7 +822,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 = ?")); |