| Index: chrome/browser/history/thumbnail_database.cc
|
| diff --git a/chrome/browser/history/thumbnail_database.cc b/chrome/browser/history/thumbnail_database.cc
|
| index af8eef90644a34fae7bd53ba09a777dd2bc7a95b..55100d083f09f9e87068211e8c33a90289d7cf7d 100644
|
| --- a/chrome/browser/history/thumbnail_database.cc
|
| +++ b/chrome/browser/history/thumbnail_database.cc
|
| @@ -33,6 +33,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;
|
| }
|
|
|
| @@ -56,7 +57,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;
|
| }
|
|
|
| @@ -400,6 +401,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();
|
| +}
|
| +
|
| bool ThumbnailDatabase::GetFaviconBitmaps(
|
| FaviconID icon_id,
|
| std::vector<FaviconBitmap>* favicon_bitmaps) {
|
| @@ -432,6 +451,32 @@ bool ThumbnailDatabase::GetFaviconBitmaps(
|
| return result;
|
| }
|
|
|
| +bool ThumbnailDatabase::GetFaviconBitmap(FaviconBitmapID bitmap_id,
|
| + FaviconBitmap* favicon_bitmap) {
|
| + DCHECK(bitmap_id);
|
| + sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
|
| + "SELECT icon_id, last_updated, image_data, width, height "
|
| + "FROM favicon_bitmaps WHERE id=?"));
|
| + statement.BindInt64(0, bitmap_id);
|
| +
|
| + if (!statement.Step())
|
| + return false; // No entry for the id.
|
| +
|
| + if (favicon_bitmap) {
|
| + favicon_bitmap->icon_id = statement.ColumnInt64(0);
|
| + favicon_bitmap->last_updated =
|
| + base::Time::FromTimeT(statement.ColumnInt64(1));
|
| + if (statement.ColumnByteLength(2) > 0) {
|
| + scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
|
| + statement.ColumnBlobAsVector(2, &data->data());
|
| + favicon_bitmap->bitmap_data = data;
|
| + }
|
| + favicon_bitmap->pixel_size = gfx::Size(statement.ColumnInt(3),
|
| + statement.ColumnInt(4));
|
| + }
|
| + return true;
|
| +}
|
| +
|
| FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap(
|
| FaviconID icon_id,
|
| scoped_refptr<base::RefCountedMemory> icon_data,
|
| @@ -458,13 +503,12 @@ FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap(
|
| }
|
|
|
| bool ThumbnailDatabase::SetFaviconBitmap(
|
| - FaviconID icon_id,
|
| + FaviconBitmapID bitmap_id,
|
| scoped_refptr<base::RefCountedMemory> icon_data,
|
| base::Time time) {
|
| - DCHECK(icon_id);
|
| + DCHECK(bitmap_id);
|
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
|
| - "UPDATE favicon_bitmaps SET image_data=?, last_updated=? "
|
| - "WHERE icon_id=?"));
|
| + "UPDATE favicon_bitmaps SET image_data=?, last_updated=? WHERE id=?"));
|
| if (icon_data->size()) {
|
| statement.BindBlob(0, icon_data->front(),
|
| static_cast<int>(icon_data->size()));
|
| @@ -472,11 +516,18 @@ bool ThumbnailDatabase::SetFaviconBitmap(
|
| statement.BindNull(0);
|
| }
|
| statement.BindInt64(1, time.ToTimeT());
|
| - statement.BindInt64(2, icon_id);
|
| + 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();
|
| +}
|
| +
|
| bool ThumbnailDatabase::SetFaviconSizes(FaviconID icon_id,
|
| const std::string& sizes) {
|
| sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
|
| @@ -497,45 +548,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.size() == 0)
|
| - 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,
|
| @@ -603,30 +627,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;
|
| + 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 "
|
| @@ -670,6 +697,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 "
|
| @@ -709,7 +744,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 = ?"));
|
|
|