Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / history / chrome_history_client.h
index 1a02506..92f9186 100644 (file)
@@ -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);
 };