OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ | 5 #ifndef CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ |
6 #define CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ | 6 #define CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ |
7 | 7 |
8 #include "chrome/browser/bookmarks/bookmark_model.h" | 8 #include "chrome/browser/bookmarks/bookmark_model.h" |
9 #include "chrome/browser/dom_ui/dom_ui_host.h" | 9 #include "chrome/browser/dom_ui/dom_ui.h" |
10 #include "chrome/browser/dom_ui/chrome_url_data_manager.h" | 10 #include "chrome/browser/dom_ui/chrome_url_data_manager.h" |
11 #include "chrome/browser/history/history.h" | 11 #include "chrome/browser/history/history.h" |
12 #include "chrome/browser/search_engines/template_url_model.h" | 12 #include "chrome/browser/search_engines/template_url_model.h" |
13 #include "chrome/browser/sessions/tab_restore_service.h" | 13 #include "chrome/browser/sessions/tab_restore_service.h" |
14 | 14 |
15 class DictionaryValue; | 15 class DictionaryValue; |
16 class GURL; | 16 class GURL; |
17 class Profile; | 17 class Profile; |
18 class Value; | 18 class Value; |
19 enum TabContentsType; | 19 enum TabContentsType; |
20 | 20 |
21 // Return the URL for the new tab page. | |
22 GURL NewTabUIURL(); | |
23 | |
24 // If a |url| is a chrome-internal: URL, this method sets up |url|, and | |
25 // |result_type| to the appropriate values for displaying the new tab page | |
26 // and returns true. Exposed for use by BrowserURLHandler. | |
27 bool NewTabUIHandleURL(GURL* url, TabContentsType* result_type); | |
28 | |
29 // The following classes aren't used outside of new_tab_ui.cc but are | 21 // The following classes aren't used outside of new_tab_ui.cc but are |
30 // put here for clarity. | 22 // put here for clarity. |
31 | 23 |
32 class NewTabHTMLSource : public ChromeURLDataManager::DataSource { | 24 class NewTabHTMLSource : public ChromeURLDataManager::DataSource { |
33 public: | 25 public: |
34 NewTabHTMLSource(); | 26 NewTabHTMLSource(); |
35 | 27 |
36 // Called when the network layer has requested a resource underneath | 28 // Called when the network layer has requested a resource underneath |
37 // the path we registered. | 29 // the path we registered. |
38 virtual void StartDataRequest(const std::string& path, int request_id); | 30 virtual void StartDataRequest(const std::string& path, int request_id); |
(...skipping 28 matching lines...) Expand all Loading... |
67 } | 59 } |
68 | 60 |
69 private: | 61 private: |
70 DISALLOW_EVIL_CONSTRUCTORS(IncognitoTabHTMLSource); | 62 DISALLOW_EVIL_CONSTRUCTORS(IncognitoTabHTMLSource); |
71 }; | 63 }; |
72 | 64 |
73 // The handler for Javascript messages related to the "most visited" view. | 65 // The handler for Javascript messages related to the "most visited" view. |
74 class MostVisitedHandler : public DOMMessageHandler, | 66 class MostVisitedHandler : public DOMMessageHandler, |
75 public NotificationObserver { | 67 public NotificationObserver { |
76 public: | 68 public: |
77 explicit MostVisitedHandler(DOMUIHost* dom_ui_host); | 69 explicit MostVisitedHandler(DOMUI* dom_ui); |
78 virtual ~MostVisitedHandler(); | 70 virtual ~MostVisitedHandler(); |
79 | 71 |
80 // Callback for the "getMostVisited" message. | 72 // Callback for the "getMostVisited" message. |
81 void HandleGetMostVisited(const Value* value); | 73 void HandleGetMostVisited(const Value* value); |
82 | 74 |
83 // NotificationObserver implementation. | 75 // NotificationObserver implementation. |
84 virtual void Observe(NotificationType type, | 76 virtual void Observe(NotificationType type, |
85 const NotificationSource& source, | 77 const NotificationSource& source, |
86 const NotificationDetails& details); | 78 const NotificationDetails& details); |
87 | 79 |
88 const std::vector<GURL>& most_visited_urls() const { | 80 const std::vector<GURL>& most_visited_urls() const { |
89 return most_visited_urls_; | 81 return most_visited_urls_; |
90 } | 82 } |
91 | 83 |
92 private: | 84 private: |
93 // Callback from the history system when the most visited list is available. | 85 // Callback from the history system when the most visited list is available. |
94 void OnSegmentUsageAvailable(CancelableRequestProvider::Handle handle, | 86 void OnSegmentUsageAvailable(CancelableRequestProvider::Handle handle, |
95 std::vector<PageUsageData*>* data); | 87 std::vector<PageUsageData*>* data); |
96 | 88 |
97 DOMUIHost* dom_ui_host_; | 89 DOMUI* dom_ui_; |
98 | 90 |
99 // Our consumer for the history service. | 91 // Our consumer for the history service. |
100 CancelableRequestConsumerTSimple<PageUsageData*> cancelable_consumer_; | 92 CancelableRequestConsumerTSimple<PageUsageData*> cancelable_consumer_; |
101 | 93 |
102 // The most visited URLs, in priority order. | 94 // The most visited URLs, in priority order. |
103 // Only used for matching up clicks on the page to which most visited entry | 95 // Only used for matching up clicks on the page to which most visited entry |
104 // was clicked on for metrics purposes. | 96 // was clicked on for metrics purposes. |
105 std::vector<GURL> most_visited_urls_; | 97 std::vector<GURL> most_visited_urls_; |
106 | 98 |
107 DISALLOW_EVIL_CONSTRUCTORS(MostVisitedHandler); | 99 DISALLOW_EVIL_CONSTRUCTORS(MostVisitedHandler); |
108 }; | 100 }; |
109 | 101 |
110 // The handler for Javascript messages related to the "common searches" view. | 102 // The handler for Javascript messages related to the "common searches" view. |
111 class TemplateURLHandler : public DOMMessageHandler, | 103 class TemplateURLHandler : public DOMMessageHandler, |
112 public TemplateURLModelObserver { | 104 public TemplateURLModelObserver { |
113 public: | 105 public: |
114 explicit TemplateURLHandler(DOMUIHost* dom_ui_host); | 106 explicit TemplateURLHandler(DOMUI* dom_ui); |
115 virtual ~TemplateURLHandler(); | 107 virtual ~TemplateURLHandler(); |
116 | 108 |
117 // Callback for the "getMostSearched" message, sent when the page requests | 109 // Callback for the "getMostSearched" message, sent when the page requests |
118 // the list of available searches. | 110 // the list of available searches. |
119 void HandleGetMostSearched(const Value* content); | 111 void HandleGetMostSearched(const Value* content); |
120 // Callback for the "doSearch" message, sent when the user wants to | 112 // Callback for the "doSearch" message, sent when the user wants to |
121 // run a search. Content of the message is an array containing | 113 // run a search. Content of the message is an array containing |
122 // [<the search keyword>, <the search term>]. | 114 // [<the search keyword>, <the search term>]. |
123 void HandleDoSearch(const Value* content); | 115 void HandleDoSearch(const Value* content); |
124 | 116 |
125 // TemplateURLModelObserver implementation. | 117 // TemplateURLModelObserver implementation. |
126 virtual void OnTemplateURLModelChanged(); | 118 virtual void OnTemplateURLModelChanged(); |
127 | 119 |
128 private: | 120 private: |
129 DOMUIHost* dom_ui_host_; | 121 DOMUI* dom_ui_; |
130 TemplateURLModel* template_url_model_; // Owned by profile. | 122 TemplateURLModel* template_url_model_; // Owned by profile. |
131 | 123 |
132 DISALLOW_EVIL_CONSTRUCTORS(TemplateURLHandler); | 124 DISALLOW_EVIL_CONSTRUCTORS(TemplateURLHandler); |
133 }; | 125 }; |
134 | 126 |
135 class RecentlyBookmarkedHandler : public DOMMessageHandler, | 127 class RecentlyBookmarkedHandler : public DOMMessageHandler, |
136 public BookmarkModelObserver { | 128 public BookmarkModelObserver { |
137 public: | 129 public: |
138 explicit RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host); | 130 explicit RecentlyBookmarkedHandler(DOMUI* dom_ui); |
139 ~RecentlyBookmarkedHandler(); | 131 ~RecentlyBookmarkedHandler(); |
140 | 132 |
141 // Callback which navigates to the bookmarks page. | 133 // Callback which navigates to the bookmarks page. |
142 void HandleShowBookmarkPage(const Value*); | 134 void HandleShowBookmarkPage(const Value*); |
143 | 135 |
144 // Callback for the "getRecentlyBookmarked" message. | 136 // Callback for the "getRecentlyBookmarked" message. |
145 // It takes no arguments. | 137 // It takes no arguments. |
146 void HandleGetRecentlyBookmarked(const Value*); | 138 void HandleGetRecentlyBookmarked(const Value*); |
147 | 139 |
148 private: | 140 private: |
(...skipping 12 matching lines...) Expand all Loading... |
161 | 153 |
162 // These two won't effect what is shown, so they do nothing. | 154 // These two won't effect what is shown, so they do nothing. |
163 virtual void BookmarkNodeMoved(BookmarkModel* model, | 155 virtual void BookmarkNodeMoved(BookmarkModel* model, |
164 BookmarkNode* old_parent, | 156 BookmarkNode* old_parent, |
165 int old_index, | 157 int old_index, |
166 BookmarkNode* new_parent, | 158 BookmarkNode* new_parent, |
167 int new_index) {} | 159 int new_index) {} |
168 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, | 160 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, |
169 BookmarkNode* node) {} | 161 BookmarkNode* node) {} |
170 | 162 |
171 DOMUIHost* dom_ui_host_; | 163 DOMUI* dom_ui_; |
172 // The model we're getting bookmarks from. The model is owned by the Profile. | 164 // The model we're getting bookmarks from. The model is owned by the Profile. |
173 BookmarkModel* model_; | 165 BookmarkModel* model_; |
174 | 166 |
175 DISALLOW_EVIL_CONSTRUCTORS(RecentlyBookmarkedHandler); | 167 DISALLOW_EVIL_CONSTRUCTORS(RecentlyBookmarkedHandler); |
176 }; | 168 }; |
177 | 169 |
178 class RecentlyClosedTabsHandler : public DOMMessageHandler, | 170 class RecentlyClosedTabsHandler : public DOMMessageHandler, |
179 public TabRestoreService::Observer { | 171 public TabRestoreService::Observer { |
180 public: | 172 public: |
181 explicit RecentlyClosedTabsHandler(DOMUIHost* dom_ui_host); | 173 explicit RecentlyClosedTabsHandler(DOMUI* dom_ui); |
182 virtual ~RecentlyClosedTabsHandler(); | 174 virtual ~RecentlyClosedTabsHandler(); |
183 | 175 |
184 // Callback for the "reopenTab" message. Rewrites the history of the | 176 // Callback for the "reopenTab" message. Rewrites the history of the |
185 // currently displayed tab to be the one in TabRestoreService with a | 177 // currently displayed tab to be the one in TabRestoreService with a |
186 // history of a session passed in through the content pointer. | 178 // history of a session passed in through the content pointer. |
187 void HandleReopenTab(const Value* content); | 179 void HandleReopenTab(const Value* content); |
188 | 180 |
189 // Callback for the "getRecentlyClosedTabs" message. | 181 // Callback for the "getRecentlyClosedTabs" message. |
190 void HandleGetRecentlyClosedTabs(const Value* content); | 182 void HandleGetRecentlyClosedTabs(const Value* content); |
191 | 183 |
(...skipping 10 matching lines...) Expand all Loading... |
202 // Converts a closed tab to the value sent down to the NTP. Returns true on | 194 // Converts a closed tab to the value sent down to the NTP. Returns true on |
203 // success, false if the value shouldn't be sent down. | 195 // success, false if the value shouldn't be sent down. |
204 bool TabToValue(const TabRestoreService::Tab& tab, | 196 bool TabToValue(const TabRestoreService::Tab& tab, |
205 DictionaryValue* dictionary); | 197 DictionaryValue* dictionary); |
206 | 198 |
207 // Converts a closed window to the value sent down to the NTP. Returns true | 199 // Converts a closed window to the value sent down to the NTP. Returns true |
208 // on success, false if the value shouldn't be sent down. | 200 // on success, false if the value shouldn't be sent down. |
209 bool WindowToValue(const TabRestoreService::Window& window, | 201 bool WindowToValue(const TabRestoreService::Window& window, |
210 DictionaryValue* dictionary); | 202 DictionaryValue* dictionary); |
211 | 203 |
212 DOMUIHost* dom_ui_host_; | 204 DOMUI* dom_ui_; |
213 | 205 |
214 /// TabRestoreService that we are observing. | 206 /// TabRestoreService that we are observing. |
215 TabRestoreService* tab_restore_service_; | 207 TabRestoreService* tab_restore_service_; |
216 | 208 |
217 DISALLOW_EVIL_CONSTRUCTORS(RecentlyClosedTabsHandler); | 209 DISALLOW_EVIL_CONSTRUCTORS(RecentlyClosedTabsHandler); |
218 }; | 210 }; |
219 | 211 |
220 class HistoryHandler : public DOMMessageHandler { | 212 class HistoryHandler : public DOMMessageHandler { |
221 public: | 213 public: |
222 explicit HistoryHandler(DOMUIHost* dom_ui_host); | 214 explicit HistoryHandler(DOMUI* dom_ui); |
223 | 215 |
224 // Callback which navigates to the history page. | 216 // Callback which navigates to the history page. |
225 void HandleShowHistoryPage(const Value*); | 217 void HandleShowHistoryPage(const Value*); |
226 | 218 |
227 // Callback which navigates to the history page and performs a search. | 219 // Callback which navigates to the history page and performs a search. |
228 void HandleSearchHistoryPage(const Value* content); | 220 void HandleSearchHistoryPage(const Value* content); |
229 | 221 |
230 private: | 222 private: |
231 DOMUIHost* dom_ui_host_; | 223 DOMUI* dom_ui_; |
232 DISALLOW_EVIL_CONSTRUCTORS(HistoryHandler); | 224 DISALLOW_EVIL_CONSTRUCTORS(HistoryHandler); |
233 }; | 225 }; |
234 | 226 |
235 // Let the page contents record UMA actions. Only use when you can't do it from | 227 // Let the page contents record UMA actions. Only use when you can't do it from |
236 // C++. For example, we currently use it to let the NTP log the postion of the | 228 // C++. For example, we currently use it to let the NTP log the postion of the |
237 // Most Visited or Bookmark the user clicked on, as we don't get that | 229 // Most Visited or Bookmark the user clicked on, as we don't get that |
238 // information through RequestOpenURL. You will need to update the metrics | 230 // information through RequestOpenURL. You will need to update the metrics |
239 // dashboard with the action names you use, as our processor won't catch that | 231 // dashboard with the action names you use, as our processor won't catch that |
240 // information (treat it as RecordComputedMetrics) | 232 // information (treat it as RecordComputedMetrics) |
241 class MetricsHandler : public DOMMessageHandler { | 233 class MetricsHandler : public DOMMessageHandler { |
242 public: | 234 public: |
243 explicit MetricsHandler(DOMUIHost* dom_ui_host); | 235 explicit MetricsHandler(DOMUI* dom_ui); |
244 | 236 |
245 // Callback which records a user action. | 237 // Callback which records a user action. |
246 void HandleMetrics(const Value* content); | 238 void HandleMetrics(const Value* content); |
247 | 239 |
248 private: | 240 private: |
249 DOMUIHost* dom_ui_host_; | 241 DOMUI* dom_ui_; |
250 DISALLOW_EVIL_CONSTRUCTORS(MetricsHandler); | 242 DISALLOW_EVIL_CONSTRUCTORS(MetricsHandler); |
251 }; | 243 }; |
252 | 244 |
253 // The TabContents used for the New Tab page. | 245 // The TabContents used for the New Tab page. |
254 class NewTabUIContents : public DOMUIHost { | 246 class NewTabUI : public DOMUI { |
255 public: | 247 public: |
256 NewTabUIContents(Profile* profile, | 248 explicit NewTabUI(DOMUIContents* contents); |
257 SiteInstance* instance, | 249 |
258 RenderViewHostFactory* render_view_factory); | 250 // Return the URL for the front page of this UI. |
| 251 static GURL GetBaseURL(); |
| 252 |
| 253 // DOMUI Implementation |
| 254 virtual void Init(); |
259 | 255 |
260 // Set the title that overrides any other title provided for the tab. | 256 // Set the title that overrides any other title provided for the tab. |
261 // This lets you set the title that's displayed before the content loads, | 257 // This lets you set the title that's displayed before the content loads, |
262 // as well as override any "Loading..." text. | 258 // as well as override any "Loading..." text. |
263 void set_forced_title(const std::wstring& title) { | 259 void set_forced_title(const std::wstring& title) { |
264 forced_title_ = title; | 260 forced_title_ = title; |
265 } | 261 } |
266 | 262 |
267 // DOMUIHost implementation. | 263 // Overridden from DOMUI. |
268 virtual void AttachMessageHandlers(); | 264 // Favicon should not be displayed. |
| 265 virtual bool ShouldDisplayFavIcon() { return false; } |
| 266 // Bookmark bar should always be visible. |
| 267 virtual bool IsBookmarkBarAlwaysVisible() { return true; } |
| 268 // When NTP gets the initial focus, focus the URL bar. |
| 269 virtual void SetInitialFocus(); |
| 270 // Should not display our URL. |
| 271 virtual bool ShouldDisplayURL() { return false; } |
| 272 // Control what happens when a link is clicked. |
| 273 virtual void RequestOpenURL(const GURL& url, const GURL& referrer, |
| 274 WindowOpenDisposition disposition); |
269 | 275 |
270 // WebContents overrides. | |
271 // Overriden to force the title of the page to forced_title_. | |
272 virtual bool NavigateToPendingEntry(bool reload); | |
273 // We don't want a favicon on the new tab page. | |
274 virtual bool ShouldDisplayFavIcon() { return false; } | |
275 // The bookmark bar is always visible on the new tab. | |
276 virtual bool IsBookmarkBarAlwaysVisible() { return true; } | |
277 // Return forced_title_ if it's available. | |
278 virtual const std::wstring& GetTitle() const; | |
279 // When we get the initial focus, focus the URL bar. | |
280 virtual void SetInitialFocus(); | |
281 // The URL bar should not display the current page's URL. | |
282 virtual bool ShouldDisplayURL() { return false; } | |
283 virtual bool SupportsURL(GURL* url); | |
284 // Clicking a URL on the page should count as an autobookmark click. | |
285 virtual void RequestOpenURL(const GURL& url, const GURL& referrer, | |
286 WindowOpenDisposition disposition); | |
287 private: | 276 private: |
| 277 DOMUIContents* contents_; |
| 278 |
288 // The message id that should be displayed in this NewTabUIContents | 279 // The message id that should be displayed in this NewTabUIContents |
289 // instance's motd area. | 280 // instance's motd area. |
290 int motd_message_id_; | 281 int motd_message_id_; |
291 | 282 |
292 // Whether the user is in incognito mode or not, used to determine | 283 // Whether the user is in incognito mode or not, used to determine |
293 // what HTML to load. | 284 // what HTML to load. |
294 bool incognito_; | 285 bool incognito_; |
295 | 286 |
296 // A title for the page we force display of. | 287 // A title for the page we force display of. |
297 // This prevents intermediate titles (like "Loading...") from displaying. | 288 // This prevents intermediate titles (like "Loading...") from displaying. |
298 std::wstring forced_title_; | 289 std::wstring forced_title_; |
299 | 290 |
300 // A pointer to the handler for most visited. | 291 // A pointer to the handler for most visited. |
301 // Owned by the DOMUIHost. | 292 // Owned by the DOMUIHost. |
302 MostVisitedHandler* most_visited_handler_; | 293 MostVisitedHandler* most_visited_handler_; |
303 | 294 |
304 DISALLOW_EVIL_CONSTRUCTORS(NewTabUIContents); | 295 DISALLOW_EVIL_CONSTRUCTORS(NewTabUI); |
305 }; | 296 }; |
306 | 297 |
307 #endif // CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ | 298 #endif // CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ |
308 | 299 |
OLD | NEW |