Index: chrome/browser/history/in_memory_url_index.h |
=================================================================== |
--- chrome/browser/history/in_memory_url_index.h (revision 111352) |
+++ chrome/browser/history/in_memory_url_index.h (working copy) |
@@ -23,12 +23,12 @@ |
#include "chrome/browser/history/history_types.h" |
#include "chrome/browser/history/in_memory_url_index_types.h" |
#include "chrome/browser/history/in_memory_url_index_cache.pb.h" |
+#include "content/public/browser/notification_observer.h" |
+#include "content/public/browser/notification_registrar.h" |
#include "sql/connection.h" |
#include "testing/gtest/include/gtest/gtest_prod.h" |
-namespace base { |
-class Time; |
-} |
+class Profile; |
namespace in_memory_url_index { |
class InMemoryURLIndexCacheItem; |
@@ -39,6 +39,9 @@ |
namespace imui = in_memory_url_index; |
class URLDatabase; |
+struct URLsDeletedDetails; |
+struct URLsModifiedDetails; |
+struct URLVisitedDetails; |
// The URL history source. |
// Holds portions of the URL database in memory in an indexed form. Used to |
@@ -59,33 +62,29 @@ |
// will eliminate such words except in the case where a single character |
// is being searched on and which character occurs as the second char16 of a |
// multi-char16 instance. |
-class InMemoryURLIndex { |
+class InMemoryURLIndex : public content::NotificationObserver { |
public: |
// |history_dir| is a path to the directory containing the history database |
// within the profile wherein the cache and transaction journals will be |
// stored. |
- explicit InMemoryURLIndex(const FilePath& history_dir); |
+ InMemoryURLIndex(Profile* profile, const FilePath& history_dir); |
virtual ~InMemoryURLIndex(); |
- // Opens and indexes the URL history database. |
+ // Restores our index from its cache, if possible. If the cache is not |
+ // available then we will register for the NOTIFICATION_HISTORY_LOADED |
+ // notifications and then rebuild the index from the history database. |
// |languages| gives a list of language encodings with which the history |
// URLs and omnibox searches are interpreted, i.e. when each is broken |
// down into words and each word is broken down into characters. |
- bool Init(URLDatabase* history_db, const std::string& languages); |
+ void Init(const std::string& languages); |
- // Reloads the history index. Attempts to reload from the cache unless |
- // |clear_cache| is true. If the cache is unavailable then reload the |
- // index from |history_db|. |
- bool ReloadFromHistory(URLDatabase* history_db, bool clear_cache); |
+ // Reloads the history index from the history database given in |history_db|. |
+ void ReloadFromHistory(URLDatabase* history_db); |
// Signals that any outstanding initialization should be canceled and |
// flushes the cache to disk. |
void ShutDown(); |
- // Restores the index's private data from the cache file stored in the |
- // profile directory and returns true if successful. |
- bool RestoreFromCacheFile(); |
- |
// Caches the index private data and writes the cache file to the profile |
// directory. |
bool SaveToCacheFile(); |
@@ -105,14 +104,19 @@ |
ScoredHistoryMatches HistoryItemsForTerms(const String16Vector& terms); |
// Updates or adds an history item to the index if it meets the minimum |
- // 'quick' criteria. |
- void UpdateURL(URLID row_id, const URLRow& row); |
+ // selection criteria. |
+ void UpdateURL(const URLRow& row); |
// Deletes indexing data for an history item. The item may not have actually |
// been indexed (which is the case if it did not previously meet minimum |
// 'quick' criteria). |
- void DeleteURL(URLID row_id); |
+ void DeleteURL(const URLRow& row); |
+ // Notification callback. |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details); |
+ |
private: |
friend class AddHistoryMatch; |
friend class InMemoryURLIndexTest; |
@@ -184,6 +188,16 @@ |
const String16Vector& lower_terms_; |
}; |
+ // Initialization and Restoration -------------------------------------------- |
+ |
+ // Restores the index's private data from the cache, if possible, otherwise |
+ // registers to be notified when the history database becomes available. |
+ void RestoreFromCache(); |
+ |
+ // Restores the index's private data from the cache file stored in the |
+ // profile directory and returns true if successful. |
+ bool RestoreFromCacheFile(); |
+ |
// Initializes all index data members in preparation for restoring the index |
// from the cache or a complete rebuild from the history database. |
void ClearPrivateData(); |
@@ -191,7 +205,7 @@ |
// Initializes the whitelist of URL schemes. |
static void InitializeSchemeWhitelist(std::set<std::string>* whitelist); |
- // URL History indexing support functions. |
+ // URL History Indexing ------------------------------------------------------ |
// Indexes one URL history item. |
void IndexRow(const URLRow& row); |
@@ -251,6 +265,11 @@ |
// Determines if |gurl| has a whitelisted scheme and returns true if so. |
bool URLSchemeIsWhitelisted(const GURL& gurl) const; |
+ // Notification handlers. |
+ void OnURLVisited(const URLVisitedDetails* details); |
+ void OnURLsModified(const URLsModifiedDetails* details); |
+ void OnURLsDeleted(const URLsDeletedDetails* details); |
+ |
// Utility functions supporting RestoreFromCache and SaveToCache. |
// Construct a file path for the cache file within the same directory where |
@@ -276,6 +295,11 @@ |
bool RestoreWordIDHistoryMap(const imui::InMemoryURLIndexCacheItem& cache); |
bool RestoreHistoryInfoMap(const imui::InMemoryURLIndexCacheItem& cache); |
+ content::NotificationRegistrar registrar_; |
+ |
+ // The profile with which we are associated. |
+ Profile* profile_; |
+ |
// Directory where cache file resides. This is, except when unit testing, |
// the same directory in which the profile's history database is found. It |
// should never be empty. |