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

Unified Diff: chrome/browser/history/thumbnail_database.cc

Issue 10802066: Adds support for saving favicon size into history database. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as requested by Sky and stevenjb 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
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 = ?"));

Powered by Google App Engine
This is Rietveld 408576698