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

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

Powered by Google App Engine
This is Rietveld 408576698