Index: chrome/browser/ui/webui/ntp/most_visited_handler.h |
diff --git a/chrome/browser/ui/webui/ntp/most_visited_handler.h b/chrome/browser/ui/webui/ntp/most_visited_handler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7e04d42aeaa10d8c15397169c2cde1317cd1e552 |
--- /dev/null |
+++ b/chrome/browser/ui/webui/ntp/most_visited_handler.h |
@@ -0,0 +1,120 @@ |
+// 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. |
+ |
+#ifndef CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_ |
+#define CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/memory/weak_ptr.h" |
+#include "base/scoped_observer.h" |
+#include "components/history/core/browser/history_types.h" |
+#include "components/history/core/browser/top_sites_observer.h" |
+#include "content/public/browser/web_ui_message_handler.h" |
+ |
+class GURL; |
+ |
+namespace base { |
+class ListValue; |
+class Value; |
+} |
+ |
+namespace user_prefs { |
+class PrefRegistrySyncable; |
+} |
+ |
+// The handler for Javascript messages related to the "most visited" view. |
+// |
+// This class manages one preference: |
+// - The URL blacklist: URLs we do not want to show in the thumbnails list. It |
+// is a dictionary for quick access (it associates a dummy boolean to the URL |
+// string). |
+class MostVisitedHandler : public content::WebUIMessageHandler, |
+ public history::TopSitesObserver { |
+ public: |
+ |
+ MostVisitedHandler(); |
+ ~MostVisitedHandler() override; |
+ |
+ // WebUIMessageHandler override and implementation. |
+ void RegisterMessages() override; |
+ |
+ // Callback for the "getMostVisited" message. |
+ void HandleGetMostVisited(const base::ListValue* args); |
+ |
+ // Callback for the "blacklistURLFromMostVisited" message. |
+ void HandleBlacklistUrl(const base::ListValue* args); |
+ |
+ // Callback for the "removeURLsFromMostVisitedBlacklist" message. |
+ void HandleRemoveUrlsFromBlacklist(const base::ListValue* args); |
+ |
+ // Callback for the "clearMostVisitedURLsBlacklist" message. |
+ void HandleClearBlacklist(const base::ListValue* args); |
+ |
+ // Callback for the "mostVisitedAction" message. |
+ void HandleMostVisitedAction(const base::ListValue* args); |
+ |
+ // Callback for the "mostVisitedSelected" message. |
+ void HandleMostVisitedSelected(const base::ListValue* args); |
+ |
+ const std::vector<GURL>& most_visited_urls() const { |
+ return most_visited_urls_; |
+ } |
+ |
+ static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
+ |
+ private: |
+ struct MostVisitedPage; |
+ |
+ // Send a request to the HistoryService to get the most visited pages. |
+ void StartQueryForMostVisited(); |
+ |
+ // Sets pages_value_ from a format produced by TopSites. |
+ void SetPagesValueFromTopSites(const history::MostVisitedURLList& data); |
+ |
+ // Callback for TopSites. |
+ void OnMostVisitedUrlsAvailable(const history::MostVisitedURLList& data); |
+ |
+ // Puts the passed URL in the blacklist (so it does not show as a thumbnail). |
+ void BlacklistUrl(const GURL& url); |
+ |
+ // Returns the key used in url_blacklist_ for the passed |url|. |
+ std::string GetDictionaryKeyForUrl(const std::string& url); |
+ |
+ // Sends pages_value_ to the javascript side and resets page_value_. |
+ void SendPagesValue(); |
+ |
+ // history::TopSitesObserver implementation. |
+ void TopSitesLoaded(history::TopSites* top_sites) override; |
+ void TopSitesChanged(history::TopSites* top_sites) override; |
+ |
+ // Scoped observer to help with TopSitesObserver registration. |
+ ScopedObserver<history::TopSites, history::TopSitesObserver> scoped_observer_; |
+ |
+ // The most visited URLs, in priority order. |
+ // Only used for matching up clicks on the page to which most visited entry |
+ // was clicked on for metrics purposes. |
+ std::vector<GURL> most_visited_urls_; |
+ |
+ // We pre-fetch the first set of result pages. This variable is false until |
+ // we get the first getMostVisited() call. |
+ bool got_first_most_visited_request_; |
+ |
+ // Keep the results of the db query here. |
+ scoped_ptr<base::ListValue> pages_value_; |
+ |
+ // Whether the user has viewed the 'most visited' pane. |
+ bool most_visited_viewed_; |
+ |
+ // Whether the user has performed a "tracked" action to leave the page or not. |
+ bool user_action_logged_; |
+ |
+ // For callbacks which may be run after destruction. |
+ base::WeakPtrFactory<MostVisitedHandler> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MostVisitedHandler); |
+}; |
+ |
+#endif // CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_ |