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

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

Issue 10815068: Changes favicon database to support storing bitmaps of different sizes for the same icon_url (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as per Sky's suggestions on Aug 1 Created 8 years, 5 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.h
diff --git a/chrome/browser/history/thumbnail_database.h b/chrome/browser/history/thumbnail_database.h
index e2209e17a6af2405519645408b3f8c46e1721637..586ebf3a90d8c62edab2a6a0df1dd47a4bcb82b0 100644
--- a/chrome/browser/history/thumbnail_database.h
+++ b/chrome/browser/history/thumbnail_database.h
@@ -99,15 +99,19 @@ class ThumbnailDatabase {
// Favicons ------------------------------------------------------------------
- // Sets the bits for a favicon. This should be png encoded data.
+ // Add a favicon frame. A favicon frame represents a bitmap component for a
+ // particular size in an image file. Only favicons representing a .ico file
+ // should have multiple favicon frames per favicon.
+ // |icon_data| is the png encoded data.
// The time indicates the access time, and is used to detect when the favicon
// should be refreshed.
- bool SetFavicon(FaviconID icon_id,
- scoped_refptr<base::RefCountedMemory> icon_data,
- base::Time time);
+ bool AddFaviconFrame(FaviconID icon_id,
sky 2012/08/02 19:50:31 Can you use Image or Bitmap instead of Frame in al
+ scoped_refptr<base::RefCountedMemory> icon_data,
+ base::Time time);
- // Sets the time the favicon was last updated.
- bool SetFaviconLastUpdateTime(FaviconID icon_id, base::Time time);
+ // Sets the the favicon as out of date. This will set |last_updated| for all
+ // of the frames for |icon_id| to be out of date.
+ bool SetFaviconOutOfDate(FaviconID icon_id);
// Returns the id of the entry in the favicon database with the specified url
// and icon type. If |required_icon_type| contains multiple icon types and
@@ -128,6 +132,12 @@ class ThumbnailDatabase {
GURL* icon_url,
IconType* icon_type);
+ // Gets the png encoded favicon and last updated time for the specified
+ // favicon id.
+ bool GetFaviconFrame(FaviconID icon_id,
sky 2012/08/02 19:50:31 Won't this need to take something that returns a v
+ base::Time* last_updated,
+ std::vector<unsigned char>* png_icon_data);
+
// Adds the favicon URL and icon type to the favicon db, returning its id.
FaviconID AddFavicon(const GURL& icon_url, IconType icon_type);
@@ -238,11 +248,30 @@ class ThumbnailDatabase {
// is returned, or 0 on failure.
FaviconID CopyToTemporaryFaviconTable(FaviconID source);
- // Replaces the main URL table with the temporary table created by
+ // Replaces the main favicon table with the temporary table created by
// InitTemporaryFaviconsTable(). This will mean all favicons not copied over
// will be deleted. Returns true on success.
bool CommitTemporaryFaviconTable();
+ // Create a temporary table to store the favicon frames. Favicon frames will
+ // be copied to this table by CopyToTemporaryFaviconFramesTable() and then the
+ // original table will be dropped, leaving only the copied favicons
+ // remaining.
+ bool InitTemporaryFaviconFramesTable() {
+ return InitFaviconFramesTable(&db_, true);
+ }
+
+ // Copies the frames corresponding to |icon_id| from the "main" favicon table
+ // to the temporary one. This is only valid in between calls to
+ // InitTemporaryFaviconFramesTable()
+ // and CommitTemporaryFaviconFrameTable().
+ void CopyToTemporaryFaviconFramesTable(FaviconID icon_id);
+
+ // Replaces the main favicon frame table with the temporary table created by
+ // InitTemporaryFaviconFramesTable(). This means that all favicon frames not
+ // copied over will be deleted. Returns true on success.
+ bool CommitTemporaryFaviconFrameTable();
+
// Returns true iff the thumbnails table exists.
// Migrating to TopSites is dropping the thumbnails table.
bool NeedsMigrationToTopSites();
@@ -257,21 +286,13 @@ class ThumbnailDatabase {
GetFaviconAfterMigrationToTopSites);
FRIEND_TEST_ALL_PREFIXES(ThumbnailDatabaseTest, UpgradeToVersion4);
FRIEND_TEST_ALL_PREFIXES(ThumbnailDatabaseTest, UpgradeToVersion5);
+ FRIEND_TEST_ALL_PREFIXES(ThumbnailDatabaseTest, UpgradeToVersion6);
FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationIconMapping);
// Creates the thumbnail table, returning true if the table already exists
// or was successfully created.
bool InitThumbnailTable();
- // Creates the favicon table, returning true if the table already exists,
- // or was successfully created. |is_temporary| will be false when generating
- // the "regular" favicons table. The expirer sets this to true to generate the
- // temporary table, which will have a different name but the same schema.
- // |db| is the connection to use for initializing the table.
- // A different connection is used in RenameAndDropThumbnails, when we
- // need to copy the favicons between two database files.
- bool InitFaviconsTable(sql::Connection* db, bool is_temporary);
-
// Helper function to handle cleanup on upgrade failures.
sql::InitStatus CantUpgradeToVersion(int cur_version);
@@ -284,16 +305,39 @@ class ThumbnailDatabase {
// Adds support for sizes in favicon table.
bool UpgradeToVersion5();
+ // Adds support for size in favicons table and removes sizes column.
+ bool UpgradeToVersion6();
+
// Migrates the icon mapping data from URL database to Thumbnail database.
// Return whether the migration succeeds.
bool MigrateIconMappingData(URLDatabase* url_db);
+ // Creates the favicon table, returning true if the table already exists,
+ // or was successfully created. |is_temporary| will be false when generating
+ // the "regular" favicons table. The expirer sets this to true to generate the
+ // temporary table, which will have a different name but the same schema.
+ // |db| is the connection to use for initializing the table.
+ // A different connection is used in RenameAndDropThumbnails, when we
+ // need to copy the favicons between two database files.
+ bool InitFaviconsTable(sql::Connection* db, bool is_temporary);
+
// Creates the index over the favicon table. This will be called during
// initialization after the table is created. This is a separate function
// because it is used by SwapFaviconTables to create an index over the
// newly-renamed favicons table (formerly the temporary table with no index).
bool InitFaviconsIndex();
+ // Creates the favicon_frames table, return true if the table already exists
+ // or was successfully created.
+ bool InitFaviconFramesTable(sql::Connection* db, bool is_temporary);
+
+ // Creates the index over the favicon_frames table. This will be called
+ // during initialization after the table is created. This is a separate
+ // function because it is used by CommitTemporaryFaviconFrameTable to create
+ // an index over the newly-renamed favicon_frames table (formerly the
+ // temporary table with no index).
+ bool InitFaviconFramesIndex();
+
// Creates the icon_map table, return true if the table already exists or was
// successfully created.
bool InitIconMappingTable(sql::Connection* db, bool is_temporary);

Powered by Google App Engine
This is Rietveld 408576698