// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Contains the history backend wrapper around the in-memory URL database. This // object maintains an in-memory cache of the subset of history required to do // in-line autocomplete. // // It is created on the history thread and passed to the main thread where // operations can be completed synchronously. It listens for notifications // from the "regular" history backend and keeps itself in sync. #ifndef CHROME_BROWSER_HISTORY_IN_MEMORY_HISTORY_BACKEND_H_ #define CHROME_BROWSER_HISTORY_IN_MEMORY_HISTORY_BACKEND_H_ #include <string> #include "base/basictypes.h" #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" class GURL; class Profile; namespace base { class FilePath; } namespace history { class InMemoryDatabase; class InMemoryURLIndex; struct KeywordSearchUpdatedDetails; struct KeywordSearchDeletedDetails; class URLDatabase; struct URLsDeletedDetails; struct URLsModifiedDetails; class InMemoryHistoryBackend : public content::NotificationObserver { public: InMemoryHistoryBackend(); virtual ~InMemoryHistoryBackend(); // Initializes the backend from the history database pointed to by the // full path in |history_filename|. |db| is used for setting up the // InMemoryDatabase. bool Init(const base::FilePath& history_filename, URLDatabase* db); // Does initialization work when this object is attached to the history // system on the main thread. The argument is the profile with which the // attached history service is under. void AttachToHistoryService(Profile* profile); // Returns the underlying database associated with this backend. The current // autocomplete code was written fro this, but it should probably be removed // so that it can deal directly with this object, rather than the DB. InMemoryDatabase* db() const { return db_.get(); } // Notification callback. virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; private: FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAll); // Handler for NOTIFY_HISTORY_TYPED_URLS_MODIFIED. void OnTypedURLsModified(const URLsModifiedDetails& details); // Handler for NOTIFY_HISTORY_URLS_DELETED. void OnURLsDeleted(const URLsDeletedDetails& details); // Handler for HISTORY_KEYWORD_SEARCH_TERM_UPDATED. void OnKeywordSearchTermUpdated(const KeywordSearchUpdatedDetails& details); // Handler for HISTORY_KEYWORD_SEARCH_TERM_DELETED. void OnKeywordSearchTermDeleted(const KeywordSearchDeletedDetails& details); // Returns true if there is a keyword associated with the specified url. bool HasKeyword(const GURL& url); content::NotificationRegistrar registrar_; scoped_ptr<InMemoryDatabase> db_; // The profile that this object is attached. May be NULL before // initialization. Profile* profile_; DISALLOW_COPY_AND_ASSIGN(InMemoryHistoryBackend); }; } // namespace history #endif // CHROME_BROWSER_HISTORY_IN_MEMORY_HISTORY_BACKEND_H_