diff options
Diffstat (limited to 'chrome/browser/ui/webui/most_visited_handler.h')
-rw-r--r-- | chrome/browser/ui/webui/most_visited_handler.h | 133 |
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_ |