91e162b00236deee33ae032bdef1c182f60d806c
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / ntp / most_visited_handler.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/memory/weak_ptr.h"
12 #include "chrome/browser/history/history_types.h"
13 #include "content/public/browser/notification_observer.h"
14 #include "content/public/browser/notification_registrar.h"
15 #include "content/public/browser/web_ui_message_handler.h"
16
17 class GURL;
18 class PageUsageData;
19
20 namespace base {
21 class ListValue;
22 class Value;
23 }
24
25 namespace user_prefs {
26 class PrefRegistrySyncable;
27 }
28
29 // The handler for Javascript messages related to the "most visited" view.
30 //
31 // This class manages one preference:
32 // - The URL blacklist: URLs we do not want to show in the thumbnails list.  It
33 //   is a dictionary for quick access (it associates a dummy boolean to the URL
34 //   string).
35 class MostVisitedHandler : public content::WebUIMessageHandler,
36                            public content::NotificationObserver {
37  public:
38
39   MostVisitedHandler();
40   virtual ~MostVisitedHandler();
41
42   // WebUIMessageHandler override and implementation.
43   virtual void RegisterMessages() OVERRIDE;
44
45   // Callback for the "getMostVisited" message.
46   void HandleGetMostVisited(const base::ListValue* args);
47
48   // Callback for the "blacklistURLFromMostVisited" message.
49   void HandleBlacklistUrl(const base::ListValue* args);
50
51   // Callback for the "removeURLsFromMostVisitedBlacklist" message.
52   void HandleRemoveUrlsFromBlacklist(const base::ListValue* args);
53
54   // Callback for the "clearMostVisitedURLsBlacklist" message.
55   void HandleClearBlacklist(const base::ListValue* args);
56
57   // Callback for the "mostVisitedAction" message.
58   void HandleMostVisitedAction(const base::ListValue* args);
59
60   // Callback for the "mostVisitedSelected" message.
61   void HandleMostVisitedSelected(const base::ListValue* args);
62
63   // content::NotificationObserver implementation.
64   virtual void Observe(int type,
65                        const content::NotificationSource& source,
66                        const content::NotificationDetails& details) OVERRIDE;
67
68   const std::vector<GURL>& most_visited_urls() const {
69     return most_visited_urls_;
70   }
71
72   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
73
74  private:
75   struct MostVisitedPage;
76
77   // Send a request to the HistoryService to get the most visited pages.
78   void StartQueryForMostVisited();
79
80   // Sets pages_value_ from a format produced by TopSites.
81   void SetPagesValueFromTopSites(const history::MostVisitedURLList& data);
82
83   // Callback for TopSites.
84   void OnMostVisitedUrlsAvailable(const history::MostVisitedURLList& data);
85
86   // Puts the passed URL in the blacklist (so it does not show as a thumbnail).
87   void BlacklistUrl(const GURL& url);
88
89   // Returns the key used in url_blacklist_ for the passed |url|.
90   std::string GetDictionaryKeyForUrl(const std::string& url);
91
92   // Sends pages_value_ to the javascript side and resets page_value_.
93   void SendPagesValue();
94
95   content::NotificationRegistrar registrar_;
96
97   // The most visited URLs, in priority order.
98   // Only used for matching up clicks on the page to which most visited entry
99   // was clicked on for metrics purposes.
100   std::vector<GURL> most_visited_urls_;
101
102   // We pre-fetch the first set of result pages.  This variable is false until
103   // we get the first getMostVisited() call.
104   bool got_first_most_visited_request_;
105
106   // Keep the results of the db query here.
107   scoped_ptr<base::ListValue> pages_value_;
108
109   // Whether the user has viewed the 'most visited' pane.
110   bool most_visited_viewed_;
111
112   // Whether the user has performed a "tracked" action to leave the page or not.
113   bool user_action_logged_;
114
115   // For callbacks which may be run after destruction.
116   base::WeakPtrFactory<MostVisitedHandler> weak_ptr_factory_;
117
118   DISALLOW_COPY_AND_ASSIGN(MostVisitedHandler);
119 };
120
121 #endif  // CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_