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

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

Issue 9316109: Move Ownership of IMUI to HistoryService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Qualify globally scoped friend classes. Created 8 years, 10 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
« no previous file with comments | « chrome/browser/history/in_memory_history_backend.cc ('k') | chrome/browser/history/in_memory_url_index.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/history/in_memory_url_index.h
===================================================================
--- chrome/browser/history/in_memory_url_index.h (revision 120346)
+++ chrome/browser/history/in_memory_url_index.h (working copy)
@@ -20,12 +20,18 @@
#include "base/string16.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/autocomplete/history_provider_util.h"
+#include "chrome/browser/cancelable_request.h"
+#include "chrome/browser/history/history.h"
#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 "chrome/browser/history/url_index_private_data.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "sql/connection.h"
+class HistoryQuickProviderTest;
+class Profile;
+
namespace base {
class Time;
}
@@ -38,7 +44,11 @@
namespace imui = in_memory_url_index;
-class URLDatabase;
+class HistoryDatabase;
+class URLIndexPrivateData;
+struct URLVisitedDetails;
+struct URLsModifiedDetails;
+struct URLsDeletedDetails;
// The URL history source.
// Holds portions of the URL database in memory in an indexed form. Used to
@@ -59,66 +69,116 @@
// 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);
+ // |profile|, which may be NULL during unit testing, is used to register for
+ // history changes. |history_dir| is a path to the directory containing the
+ // history database within the profile wherein the cache and transaction
+ // journals will be stored. |languages| gives a list of language encodings by
+ // which URLs and omnibox searches are broken down into words and characters.
+ InMemoryURLIndex(Profile* profile,
+ const FilePath& history_dir,
+ const std::string& languages);
virtual ~InMemoryURLIndex();
- // Opens and indexes the URL history database. If the index private data
- // cannot be restored from its cache file then it is rebuilt from the
- // |history_db|. |languages| gives a list of language encodings by which URLs
- // and omnibox searches are broken down into words and characters.
- bool Init(URLDatabase* history_db, const std::string& languages);
+ // Opens and prepares the index of historical URL visits. If the index private
+ // data cannot be restored from its cache file then it is rebuilt from the
+ // history database.
+ void Init();
// Signals that any outstanding initialization should be canceled and
// flushes the cache to disk.
void ShutDown();
- // Reloads the history index from |history_db| ignoring any cache file that
- // may be available, clears the cache and saves the cache after reloading.
- bool ReloadFromHistory(history::URLDatabase* history_db);
-
// Scans the history index and returns a vector with all scored, matching
// history items. This entry point simply forwards the call on to the
// URLIndexPrivateData class. For a complete description of this function
// refer to that class.
ScoredHistoryMatches HistoryItemsForTerms(const string16& term_string);
- // Updates or adds an history item to the index if it meets the minimum
- // 'quick' criteria.
- void UpdateURL(URLID row_id, 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);
-
private:
+ friend class ::HistoryQuickProviderTest;
friend class InMemoryURLIndexTest;
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, CacheFilePath);
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, CacheSaveRestore);
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, HugeResultSet);
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, TitleSearch);
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, TypedCharacterCaching);
- FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexTest, WhitelistedURLs);
FRIEND_TEST_ALL_PREFIXES(LimitedInMemoryURLIndexTest, Initialization);
+ FRIEND_TEST_ALL_PREFIXES(InMemoryURLIndexCacheTest, CacheFilePath);
// Creating one of me without a history path is not allowed (tests excepted).
InMemoryURLIndex();
+ // HistoryDBTask used to rebuild our private data from the history database.
+ class RebuildPrivateDataFromHistoryDBTask : public HistoryDBTask {
+ public:
+ explicit RebuildPrivateDataFromHistoryDBTask(InMemoryURLIndex* index);
+ virtual ~RebuildPrivateDataFromHistoryDBTask();
+
+ virtual bool RunOnDBThread(HistoryBackend* backend,
+ history::HistoryDatabase* db) OVERRIDE;
+ virtual void DoneRunOnMainThread() OVERRIDE;
+
+ private:
+ InMemoryURLIndex* index_; // Call back to this index at completion.
+ bool succeeded_; // Indicates if the rebuild was successful.
+ scoped_ptr<URLIndexPrivateData> data_; // The rebuilt private data.
+
+ DISALLOW_COPY_AND_ASSIGN(RebuildPrivateDataFromHistoryDBTask);
+ };
+
// Initializes all index data members in preparation for restoring the index
// from the cache or a complete rebuild from the history database.
void ClearPrivateData();
- // Construct a file path for the cache file within the same directory where
+ // Constructs a file path for the cache file within the same directory where
// the history database is kept and saves that path to |file_path|. Returns
// true if |file_path| can be successfully constructed. (This function
// provided as a hook for unit testing.)
bool GetCacheFilePath(FilePath* file_path);
+ // Restores the index's private data from the cache file stored in the
+ // profile directory.
+ void RestoreFromCacheFile();
+
+ // Restores private_data_ from the given |path|. Runs on the UI thread.
+ // Provided for unit testing so that a test cache file can be used.
+ void DoRestoreFromCacheFile(const FilePath& path);
+
+ // Schedules a history task to rebuild our private data from the history
+ // database.
+ void ScheduleRebuildFromHistory();
+
+ // Callback used by RebuildPrivateDataFromHistoryDBTask to signal completion
+ // or rebuilding our private data from the history database. |data| points to
+ // a new instance of the private data just rebuilt. This callback is only
+ // called upon a successful restore from the history database.
+ void DoneRebuidingPrivateDataFromHistoryDB(URLIndexPrivateData* data);
+
+ // Rebuilds the history index from the history database in |history_db|.
+ // Used for unit testing only.
+ void RebuildFromHistory(HistoryDatabase* history_db);
+
+ // Caches the index private data and writes the cache file to the profile
+ // directory.
+ void SaveToCacheFile();
+
+ // Saves private_data_ to the given |path|. Runs on the UI thread.
+ // Provided for unit testing so that a test cache file can be used.
+ void DoSaveToCacheFile(const FilePath& path);
+
+ // Handles notifications of history changes.
+ virtual void Observe(int notification_type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ // Notification handlers.
+ void OnURLVisited(const URLVisitedDetails* details);
+ void OnURLsModified(const URLsModifiedDetails* details);
+ void OnURLsDeleted(const URLsDeletedDetails* details);
+
+ // Returns a pointer to our private data. For unit testing only.
+ URLIndexPrivateData* private_data() { return private_data_.get(); }
+
+ // The profile, may be null when testing.
+ 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.
@@ -127,12 +187,19 @@
// The index's durable private data.
scoped_ptr<URLIndexPrivateData> private_data_;
- // Set to true at shutdown when the cache has been written to disk. Used
- // as a temporary safety check to insure that the cache is saved before
- // the index has been destructed.
+ // Set to true once the shutdown process has begun.
+ bool shutdown_;
+
+ CancelableRequestConsumer cache_reader_consumer_;
+ content::NotificationRegistrar registrar_;
+
+ // Set to true when changes to the index have been made and the index needs
+ // to be cached. Set to false when the index has been cached. Used as a
+ // temporary safety check to insure that the cache is saved before the
+ // index has been destructed.
// TODO(mrossetti): Eliminate once the transition to SQLite has been done.
// http://crbug.com/83659
- bool cached_at_shutdown_;
+ bool needs_to_be_cached_;
DISALLOW_COPY_AND_ASSIGN(InMemoryURLIndex);
};
« no previous file with comments | « chrome/browser/history/in_memory_history_backend.cc ('k') | chrome/browser/history/in_memory_url_index.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698