summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/webui/most_visited_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/webui/most_visited_handler.h')
-rw-r--r--chrome/browser/ui/webui/most_visited_handler.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/chrome/browser/ui/webui/most_visited_handler.h b/chrome/browser/ui/webui/most_visited_handler.h
new file mode 100644
index 0000000..d9e1fc4
--- /dev/null
+++ b/chrome/browser/ui/webui/most_visited_handler.h
@@ -0,0 +1,133 @@
+// Copyright (c) 2011 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_MOST_VISITED_HANDLER_H_
+#define CHROME_BROWSER_UI_WEBUI_MOST_VISITED_HANDLER_H_
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "chrome/browser/history/history_types.h"
+#include "content/browser/cancelable_request.h"
+#include "content/browser/webui/web_ui.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
+
+class GURL;
+class ListValue;
+class PageUsageData;
+class PrefService;
+class Value;
+
+// The handler for Javascript messages related to the "most visited" view.
+//
+// This class manages two preferences:
+// - 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).
+// - Pinned URLs: This is a dictionary for the pinned URLs for the the most
+// visited part of the new tab page. The key of the dictionary is a hash of
+// the URL and the value is a dictionary with title, url and index. This is
+// owned by the PrefService.
+class MostVisitedHandler : public WebUIMessageHandler,
+ public NotificationObserver {
+ public:
+
+ MostVisitedHandler();
+ virtual ~MostVisitedHandler();
+
+ // WebUIMessageHandler override and implementation.
+ virtual WebUIMessageHandler* Attach(WebUI* web_ui);
+ virtual void RegisterMessages();
+
+ // Callback for the "getMostVisited" message.
+ void HandleGetMostVisited(const ListValue* args);
+
+ // Callback for the "blacklistURLFromMostVisited" message.
+ void HandleBlacklistURL(const ListValue* args);
+
+ // Callback for the "removeURLsFromMostVisitedBlacklist" message.
+ void HandleRemoveURLsFromBlacklist(const ListValue* args);
+
+ // Callback for the "clearMostVisitedURLsBlacklist" message.
+ void HandleClearBlacklist(const ListValue* args);
+
+ // Callback for the "addPinnedURL" message.
+ void HandleAddPinnedURL(const ListValue* args);
+
+ // Callback for the "removePinnedURL" message.
+ void HandleRemovePinnedURL(const ListValue* args);
+
+ // NotificationObserver implementation.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ const std::vector<GURL>& most_visited_urls() const {
+ return most_visited_urls_;
+ }
+
+ static void RegisterUserPrefs(PrefService* prefs);
+
+ // Returns a vector containing the urls for the prepopulated pages.
+ // Used only in testing.
+ static std::vector<GURL> GetPrePopulatedUrls();
+
+ 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_ and pinned_urls_ for the passed
+ // |url|.
+ std::string GetDictionaryKeyForURL(const std::string& url);
+
+ // Gets the page data for a pinned URL at a given index. This returns
+ // true if found.
+ bool GetPinnedURLAtIndex(int index, MostVisitedPage* page);
+
+ void AddPinnedURL(const MostVisitedPage& page, int index);
+ void RemovePinnedURL(const GURL& url);
+
+ // Sends pages_value_ to the javascript side to and resets page_value_.
+ void SendPagesValue();
+
+ // Returns true if we should treat this as the first run of the new tab page.
+ bool IsFirstRun();
+
+ static const std::vector<MostVisitedPage>& GetPrePopulatedPages();
+
+ NotificationRegistrar registrar_;
+
+ // Our consumer for the history service.
+ CancelableRequestConsumerTSimple<PageUsageData*> cancelable_consumer_;
+ CancelableRequestConsumer topsites_consumer_;
+
+ // 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<ListValue> pages_value_;
+
+ DISALLOW_COPY_AND_ASSIGN(MostVisitedHandler);
+};
+
+#endif // CHROME_BROWSER_UI_WEBUI_MOST_VISITED_HANDLER_H_