Index: chrome/browser/thumbnail_store.h |
=================================================================== |
--- chrome/browser/thumbnail_store.h (revision 20100) |
+++ chrome/browser/thumbnail_store.h (working copy) |
@@ -15,19 +15,17 @@ |
#include "base/timer.h" |
#include "chrome/browser/cancelable_request.h" |
#include "chrome/browser/history/history.h" |
-#include "chrome/browser/history/url_database.h" // For DBCloseScoper |
#include "chrome/common/pref_names.h" |
#include "chrome/common/ref_counted_util.h" |
-#include "chrome/common/sqlite_compiled_statement.h" |
-#include "chrome/common/thumbnail_score.h" |
#include "testing/gtest/include/gtest/gtest_prod.h" |
class DictionaryValue; |
class GURL; |
class HistoryService; |
+class Pickle; |
class Profile; |
class SkBitmap; |
-struct sqlite3; |
+struct ThumbnailScore; |
namespace base { |
class Time; |
} |
@@ -40,13 +38,17 @@ |
~ThumbnailStore(); |
// Must be called after creation but before other methods are called. |
- void Init(const FilePath& db_name, // The location of the database. |
- Profile* profile); // To get to the HistoryService. |
+ // file_path is a directory where a new database should be created |
+ // or the location of an existing databse. |
+ void Init(const FilePath& file_path, Profile* profile); |
// Stores the given thumbnail and score with the associated url in the cache. |
+ // If write_to_disk is true, the thumbnail data is written to disk on the |
+ // file_thread. |
bool SetPageThumbnail(const GURL& url, |
const SkBitmap& thumbnail, |
- const ThumbnailScore& score); |
+ const ThumbnailScore& score, |
+ bool write_to_disk); |
// Sets *data to point to the thumbnail for the given url. |
// Returns false if no thumbnail available. |
@@ -59,22 +61,9 @@ |
FRIEND_TEST(ThumbnailStoreTest, FollowRedirects); |
friend class ThumbnailStoreTest; |
- struct CacheEntry { |
- scoped_refptr<RefCountedBytes> data_; |
- ThumbnailScore score_; |
- bool dirty_; |
- |
- CacheEntry() : data_(NULL), score_(ThumbnailScore()), dirty_(false) {} |
- CacheEntry(RefCountedBytes* data, |
- const ThumbnailScore& score, |
- bool dirty) |
- : data_(data), |
- score_(score), |
- dirty_(dirty) {} |
- }; |
- |
// Data structure used to store thumbnail data in memory. |
- typedef std::map<GURL, CacheEntry> Cache; |
+ typedef std::map<GURL, std::pair<scoped_refptr<RefCountedBytes>, |
+ ThumbnailScore> > Cache; |
// Most visited URLs and their redirect lists ------------------------------- |
@@ -83,7 +72,8 @@ |
// callback is OnURLDataAvailable. |
void UpdateURLData(); |
- // The callback for UpdateURLData. |
+ // The callback for UpdateURLData. The ThumbnailStore takes ownership of |
+ // the most visited urls list and redirect lists passed in. |
void OnURLDataAvailable(std::vector<GURL>* urls, |
history::RedirectMap* redirects); |
@@ -94,27 +84,44 @@ |
// visited sites. |
void CleanCacheData(); |
+ // Deletes thumbnail data from disk for the given list of urls. |
+ void DeleteThumbnails( |
+ scoped_refptr<RefCountedVector<GURL> > thumbnail_urls) const; |
+ |
// Disk operations ---------------------------------------------------------- |
- // Initialize |db_| to the database specified in |db_name|. If |cb_loop| |
- // is non-null, calls GetAllThumbnailsFromDisk. Done on the file_thread. |
- void InitializeFromDB(const FilePath& db_name, MessageLoop* cb_loop); |
- |
// Read all thumbnail data from the specified FilePath into a Cache object. |
// Done on the file_thread and returns to OnDiskDataAvailable on the thread |
// owning the specified MessageLoop. |
- void GetAllThumbnailsFromDisk(MessageLoop* cb_loop); |
+ void GetAllThumbnailsFromDisk(FilePath filepath, MessageLoop* cb_loop); |
+ // Read the thumbnail data from the given file and stores it in the |
+ // out parameters GURL, SkBitmap, and ThumbnailScore. |
+ bool GetPageThumbnailFromDisk(const FilePath& file, |
+ GURL* url, |
+ RefCountedBytes* data, |
+ ThumbnailScore* score) const; |
+ |
// Once thumbnail data from the disk is available from the file_thread, |
// this function is invoked on the main thread. It takes ownership of the |
// Cache* passed in and retains this Cache* for the lifetime of the object. |
void OnDiskDataAvailable(Cache* cache); |
- // Delete each URL in the given vector from the DB and write all dirty |
- // cache entries to the DB. |
- void CommitCacheToDB( |
- scoped_refptr<RefCountedVector<GURL> > stale_urls) const; |
+ // Write thumbnail data to disk for a given url. |
+ bool WriteThumbnailToDisk(const GURL& url, |
+ scoped_refptr<RefCountedBytes> data, |
+ const ThumbnailScore& score) const; |
+ |
+ // Pack the given ThumbnailScore into the given Pickle. |
+ void PackScore(const ThumbnailScore& score, Pickle* packed) const; |
+ |
+ // Unpack a ThumbnailScore from a given Pickle and associated iterator. |
+ // Returns false is a ThumbnailScore could not be unpacked. |
+ bool UnpackScore(ThumbnailScore* score, |
+ const Pickle& packed, |
+ void*& iter) const; |
+ |
// Decide whether to store data --------------------------------------------- |
bool ShouldStoreThumbnailForURL(const GURL& url) const; |
@@ -132,11 +139,10 @@ |
// The Cache maintained by the object. |
scoped_ptr<Cache> cache_; |
+ bool cache_initialized_; |
- // The database holding the thumbnails on disk. |
- sqlite3* db_; |
- SqliteStatementCache* statement_cache_; |
- history::DBCloseScoper close_scoper_; |
+ // The location of the thumbnail store. |
+ FilePath file_path_; |
// We hold a reference to the history service to query for most visited URLs |
// and redirect information. |