summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui/new_tab_ui.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/dom_ui/new_tab_ui.h')
-rw-r--r--chrome/browser/dom_ui/new_tab_ui.h330
1 files changed, 330 insertions, 0 deletions
diff --git a/chrome/browser/dom_ui/new_tab_ui.h b/chrome/browser/dom_ui/new_tab_ui.h
new file mode 100644
index 0000000..04d0855
--- /dev/null
+++ b/chrome/browser/dom_ui/new_tab_ui.h
@@ -0,0 +1,330 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__
+#define CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__
+
+#include "chrome/browser/dom_ui/dom_ui_host.h"
+#include "chrome/browser/dom_ui/chrome_url_data_manager.h"
+#include "chrome/browser/history/history.h"
+#include "chrome/browser/tab_restore_service.h"
+#include "chrome/browser/template_url_model.h"
+
+class GURL;
+class Profile;
+class Value;
+enum TabContentsType;
+
+// Return the URL for the new tab page.
+GURL NewTabUIURL();
+
+// If a |url| is a chrome: URL, this method sets up |url|, and |result_type|
+// to the appropriate values for displaying the new tab page and returns true.
+// Exposed for use by BrowserURLHandler.
+bool NewTabUIHandleURL(GURL* url, TabContentsType* result_type);
+
+// The following classes aren't used outside of new_tab_ui.cc but are
+// put here for clarity.
+
+class NewTabHTMLSource : public ChromeURLDataManager::DataSource {
+ public:
+ // Creates our datasource and sets our user message to a specific message
+ // from our string bundle.
+ NewTabHTMLSource(int message_id);
+
+ // Called when the network layer has requested a resource underneath
+ // the path we registered.
+ virtual void StartDataRequest(const std::string& path, int request_id);
+
+ private:
+ // The ID of the message from our string bundle to display to the user.
+ int message_id_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(NewTabHTMLSource);
+};
+
+class IncognitoTabHTMLSource : public ChromeURLDataManager::DataSource {
+ public:
+ // Creates our datasource and sets our user message to a specific message
+ // from our string bundle.
+ IncognitoTabHTMLSource();
+
+ // Called when the network layer has requested a resource underneath
+ // the path we registered.
+ virtual void StartDataRequest(const std::string& path, int request_id);
+
+ private:
+ DISALLOW_EVIL_CONSTRUCTORS(IncognitoTabHTMLSource);
+};
+
+// ThumbnailSource is the gateway between network-level chrome-resource:
+// requests for thumbnails and the history backend that serves these.
+class ThumbnailSource : public ChromeURLDataManager::DataSource {
+ public:
+ explicit ThumbnailSource(Profile* profile);
+
+ // Called when the network layer has requested a resource underneath
+ // the path we registered.
+ virtual void StartDataRequest(const std::string& path, int request_id);
+
+ // Called when thumbnail data is available from the history backend.
+ void OnThumbnailDataAvailable(
+ HistoryService::Handle request_handle,
+ scoped_refptr<RefCountedBytes> data);
+
+ private:
+ Profile* profile_;
+ CancelableRequestConsumerT<int, 0> cancelable_consumer_;
+
+ // Raw PNG representation of the thumbnail to show when the thumbnail
+ // database doesn't have a thumbnail for a webpage.
+ scoped_refptr<RefCountedBytes> default_thumbnail_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(ThumbnailSource);
+};
+
+// ThumbnailSource is the gateway between network-level chrome-resource:
+// requests for favicons and the history backend that serves these.
+class FavIconSource : public ChromeURLDataManager::DataSource {
+ public:
+ explicit FavIconSource(Profile* profile);
+
+ // Called when the network layer has requested a resource underneath
+ // the path we registered.
+ virtual void StartDataRequest(const std::string& path, int request_id);
+
+ // Called when favicon data is available from the history backend.
+ void OnFavIconDataAvailable(
+ HistoryService::Handle request_handle,
+ bool know_favicon,
+ scoped_refptr<RefCountedBytes> data,
+ bool expired,
+ GURL url);
+
+ private:
+ Profile* profile_;
+ CancelableRequestConsumerT<int, 0> cancelable_consumer_;
+
+ // Raw PNG representation of the favicon to show when the favicon
+ // database doesn't have a favicon for a webpage.
+ scoped_refptr<RefCountedBytes> default_favicon_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(FavIconSource);
+};
+
+// The handler for Javascript messages related to the "most visited" view.
+class MostVisitedHandler : public DOMMessageHandler,
+ public NotificationObserver {
+ public:
+ explicit MostVisitedHandler(DOMUIHost* dom_ui_host);
+ virtual ~MostVisitedHandler();
+
+ // Callback for the "getMostVisited" message.
+ void HandleGetMostVisited(const Value* value);
+
+ // 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_;
+ }
+
+ private:
+ // Callback from the history system when the most visited list is available.
+ void OnSegmentUsageAvailable(CancelableRequestProvider::Handle handle,
+ std::vector<PageUsageData*>* data);
+
+ DOMUIHost* dom_ui_host_;
+
+ // Our consumer for the history service.
+ CancelableRequestConsumerT<PageUsageData*, NULL> cancelable_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_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(MostVisitedHandler);
+};
+
+// The handler for Javascript messages related to the "common searches" view.
+class TemplateURLHandler : public DOMMessageHandler,
+ public TemplateURLModelObserver {
+ public:
+ explicit TemplateURLHandler(DOMUIHost* dom_ui_host);
+ virtual ~TemplateURLHandler();
+
+ // Callback for the "getMostSearched" message, sent when the page requests
+ // the list of available searches.
+ void HandleGetMostSearched(const Value* content);
+ // Callback for the "doSearch" message, sent when the user wants to
+ // run a search. Content of the message is an array containing
+ // [<the search keyword>, <the search term>].
+ void HandleDoSearch(const Value* content);
+
+ // TemplateURLModelObserver implementation.
+ virtual void OnTemplateURLModelChanged();
+
+ private:
+ DOMUIHost* dom_ui_host_;
+ TemplateURLModel* template_url_model_; // Owned by profile.
+
+ DISALLOW_EVIL_CONSTRUCTORS(TemplateURLHandler);
+};
+
+class RecentlyBookmarkedHandler : public DOMMessageHandler {
+ public:
+ explicit RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host);
+
+ // Callback which navigates to the bookmarks page.
+ void HandleShowBookmarkPage(const Value*);
+
+ // Callback for the "getRecentlyBookmarked" message.
+ // It takes no arguments.
+ void HandleGetRecentlyBookmarked(const Value*);
+
+ void OnMostRecentStarredEntries(
+ HistoryService::Handle request_handle,
+ std::vector<history::StarredEntry>* entries);
+
+ private:
+ DOMUIHost* dom_ui_host_;
+ CancelableRequestConsumerT<int, 0> cancelable_consumer_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(RecentlyBookmarkedHandler);
+};
+
+class RecentlyClosedTabsHandler : public DOMMessageHandler,
+ public TabRestoreService::Observer {
+ public:
+ explicit RecentlyClosedTabsHandler(DOMUIHost* dom_ui_host);
+ virtual ~RecentlyClosedTabsHandler();
+
+ // Callback for the "reopenTab" message. Rewrites the history of the
+ // currently displayed tab to be the one in TabRestoreService with a
+ // history of a session passed in through the content pointer.
+ void HandleReopenTab(const Value* content);
+
+ // Callback for the "getRecentlyClosedTabs" message.
+ void HandleGetRecentlyClosedTabs(const Value* content);
+
+ // Observer callback for TabRestoreService::Observer. Sends data on
+ // recently closed tabs to the javascript side of this page to
+ // display to the user.
+ virtual void TabRestoreServiceChanged(TabRestoreService* service);
+
+ // Observer callback to notice when our associated TabRestoreService
+ // is destroyed.
+ virtual void TabRestoreServiceDestroyed(TabRestoreService* service);
+
+ private:
+ DOMUIHost* dom_ui_host_;
+
+ /// TabRestoreService that we are observing.
+ TabRestoreService* tab_restore_service_;
+
+ /// Controls the periodic calling of HandleRecentlyClosedTabs.
+ ScopedRunnableMethodFactory<RecentlyClosedTabsHandler> handle_recently_closed_tab_factory_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(RecentlyClosedTabsHandler);
+};
+
+class HistoryHandler : public DOMMessageHandler {
+ public:
+ explicit HistoryHandler(DOMUIHost* dom_ui_host);
+
+ // Callback which navigates to the history page.
+ void HandleShowHistoryPage(const Value*);
+
+ // Callback which navigates to the history page and performs a search.
+ void HandleSearchHistoryPage(const Value* content);
+
+ private:
+ DOMUIHost* dom_ui_host_;
+ DISALLOW_EVIL_CONSTRUCTORS(HistoryHandler);
+};
+
+// The TabContents used for the New Tab page.
+class NewTabUIContents : public DOMUIHost {
+ public:
+ NewTabUIContents(Profile* profile,
+ SiteInstance* instance,
+ RenderViewHostFactory* render_view_factory);
+
+ // Set the title that overrides any other title provided for the tab.
+ // This lets you set the title that's displayed before the content loads,
+ // as well as override any "Loading..." text.
+ void set_forced_title(const std::wstring& title) {
+ forced_title_ = title;
+ }
+
+ // DOMUIHost implementation.
+ virtual void AttachMessageHandlers();
+
+ // WebContents overrides.
+ // Overriden to force the title of the page to forced_title_.
+ virtual bool Navigate(const NavigationEntry& entry, bool reload);
+ // We don't want a favicon on the new tab page.
+ virtual bool ShouldDisplayFavIcon() { return false; }
+ // The bookmark bar is always visible on the new tab.
+ virtual bool IsBookmarkBarAlwaysVisible() { return true; }
+ // Return forced_title_ if it's available.
+ virtual const std::wstring& GetTitle() const;
+ // When we get the initial focus, focus the URL bar.
+ virtual void SetInitialFocus();
+ // The URL bar should not display the current page's URL.
+ virtual bool ShouldDisplayURL() { return false; }
+ virtual bool SupportsURL(GURL* url);
+ // Clicking a URL on the page should count as an autobookmark click.
+ virtual void RequestOpenURL(const GURL& url,
+ WindowOpenDisposition disposition);
+
+ private:
+ // The message id that should be displayed in this NewTabUIContents
+ // instance's motd area.
+ int motd_message_id_;
+
+ // Whether the user is in incognito mode or not, used to determine
+ // what HTML to load.
+ bool incognito_;
+
+ // A title for the page we force display of.
+ // This prevents intermediate titles (like "Loading...") from displaying.
+ std::wstring forced_title_;
+
+ // A pointer to the handler for most visited.
+ // Owned by the DOMUIHost.
+ MostVisitedHandler* most_visited_handler_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(NewTabUIContents);
+};
+
+#endif CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__