Index: chrome/browser/history/chrome_history_client.h |
diff --git a/chrome/browser/history/chrome_history_client.h b/chrome/browser/history/chrome_history_client.h |
index 1a02506fb8ab437cbd147c4c26d5acc818eb197f..92f918609c7c6004b453b46268db77f605171449 100644 |
--- a/chrome/browser/history/chrome_history_client.h |
+++ b/chrome/browser/history/chrome_history_client.h |
@@ -7,14 +7,24 @@ |
#include "base/macros.h" |
#include "components/history/core/browser/history_client.h" |
+#include "components/history/core/browser/top_sites_observer.h" |
class BookmarkModel; |
+class Profile; |
+ |
+namespace history { |
+class TopSites; |
+} |
// This class implements history::HistoryClient to abstract operations that |
// depend on Chrome environment. |
-class ChromeHistoryClient : public history::HistoryClient { |
+class ChromeHistoryClient : public history::HistoryClient, |
+ public history::TopSitesObserver { |
public: |
- explicit ChromeHistoryClient(BookmarkModel* bookmark_model); |
+ explicit ChromeHistoryClient(BookmarkModel* bookmark_model, |
+ Profile* profile, |
+ history::TopSites* top_sites); |
+ virtual ~ChromeHistoryClient(); |
// history::HistoryClient: |
virtual void BlockUntilBookmarksLoaded() OVERRIDE; |
@@ -27,9 +37,25 @@ class ChromeHistoryClient : public history::HistoryClient { |
// KeyedService: |
virtual void Shutdown() OVERRIDE; |
+ // TopSitesObserver: |
+ virtual void TopSitesLoaded(history::TopSites* top_sites) OVERRIDE; |
+ virtual void TopSitesChanged(history::TopSites* top_sites) OVERRIDE; |
+ |
private: |
// The BookmarkModel, this should outlive ChromeHistoryClient. |
BookmarkModel* bookmark_model_; |
+ Profile* profile_; |
+ // The TopSites object is owned by the Profile (see |
+ // chrome/browser/profiles/profile_impl.h) |
+ // and lazily constructed by the getter. |
+ // ChromeHistoryClient is a KeyedService linked to the Profile lifetime by the |
+ // ChromeHistoryClientFactory (which is a BrowserContextKeyedServiceFactory). |
+ // Before the Profile is destroyed, all the KeyedService Shutdown methods are |
+ // called, and the Profile is fully constructed before any of the KeyedService |
+ // can be constructed. The TopSites does not use the HistoryService nor the |
+ // HistoryClient during construction (it uses it later, but supports getting |
+ // an NULL pointer). |
+ history::TopSites* top_sites_; |
DISALLOW_COPY_AND_ASSIGN(ChromeHistoryClient); |
}; |