Index: chrome/browser/dom_ui/new_tab_ui.cc |
=================================================================== |
--- chrome/browser/dom_ui/new_tab_ui.cc (revision 10343) |
+++ chrome/browser/dom_ui/new_tab_ui.cc (working copy) |
@@ -14,7 +14,7 @@ |
#include "chrome/browser/dom_ui/dom_ui_contents.h" |
#if defined(OS_WIN) |
// TODO(port): include this once history is converted to HTML |
-#include "chrome/browser/history_tab_ui.h" |
+#include "chrome/browser/dom_ui/history_ui.h" |
#endif |
#include "chrome/browser/history/page_usage_data.h" |
#include "chrome/browser/metrics/user_metrics.h" |
@@ -38,8 +38,8 @@ |
#include "grit/generated_resources.h" |
#include "grit/locale_settings.h" |
-// The URL scheme used for the new tab. |
-static const char kNewTabUIScheme[] = "chrome-internal"; |
+// NewTabUI is accessible from chrome-ui://newtab. |
+static const char kNewTabHost[] = "newtab"; |
// The number of most visited pages we show. |
const int kMostVisitedPages = 9; |
@@ -177,7 +177,7 @@ |
// NewTabHTMLSource |
NewTabHTMLSource::NewTabHTMLSource() |
- : DataSource("new-tab", MessageLoop::current()) { |
+ : DataSource(kNewTabHost, MessageLoop::current()) { |
} |
void NewTabHTMLSource::StartDataRequest(const std::string& path, |
@@ -289,11 +289,12 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// MostVisitedHandler |
-MostVisitedHandler::MostVisitedHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host) { |
+MostVisitedHandler::MostVisitedHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui) { |
// Register ourselves as the handler for the "mostvisited" message from |
// Javascript. |
- dom_ui_host_->RegisterMessageCallback("getMostVisited", |
+ dom_ui_->RegisterMessageCallback("getMostVisited", |
NewCallback(this, &MostVisitedHandler::HandleGetMostVisited)); |
// Set up our sources for thumbnail and favicon data. |
@@ -301,27 +302,27 @@ |
g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, |
NewRunnableMethod(&chrome_url_data_manager, |
&ChromeURLDataManager::AddDataSource, |
- new ThumbnailSource(dom_ui_host->profile()))); |
+ new ThumbnailSource(dom_ui->get_profile()))); |
g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, |
NewRunnableMethod(&chrome_url_data_manager, |
&ChromeURLDataManager::AddDataSource, |
- new FavIconSource(dom_ui_host->profile()))); |
+ new FavIconSource(dom_ui->get_profile()))); |
// Get notifications when history is cleared. |
NotificationService* service = NotificationService::current(); |
service->AddObserver(this, NotificationType::HISTORY_URLS_DELETED, |
- Source<Profile>(dom_ui_host_->profile())); |
+ Source<Profile>(dom_ui_->get_profile())); |
} |
MostVisitedHandler::~MostVisitedHandler() { |
NotificationService* service = NotificationService::current(); |
service->RemoveObserver(this, NotificationType::HISTORY_URLS_DELETED, |
- Source<Profile>(dom_ui_host_->profile())); |
+ Source<Profile>(dom_ui_->get_profile())); |
} |
void MostVisitedHandler::HandleGetMostVisited(const Value* value) { |
HistoryService* hs = |
- dom_ui_host_->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); |
+ dom_ui_->get_profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); |
hs->QuerySegmentUsageSince( |
&cancelable_consumer_, |
base::Time::Now() - base::TimeDelta::FromDays(kMostVisitedScope), |
@@ -342,7 +343,7 @@ |
pages_value.Append(page_value); |
most_visited_urls_.push_back(page.GetURL()); |
} |
- dom_ui_host_->CallJavascriptFunction(L"mostVisitedPages", pages_value); |
+ dom_ui_->CallJavascriptFunction(L"mostVisitedPages", pages_value); |
} |
void MostVisitedHandler::Observe(NotificationType type, |
@@ -360,11 +361,13 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// TemplateURLHandler |
-TemplateURLHandler::TemplateURLHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host), template_url_model_(NULL) { |
- dom_ui_host->RegisterMessageCallback("getMostSearched", |
+TemplateURLHandler::TemplateURLHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui), |
+ template_url_model_(NULL) { |
+ dom_ui->RegisterMessageCallback("getMostSearched", |
NewCallback(this, &TemplateURLHandler::HandleGetMostSearched)); |
- dom_ui_host->RegisterMessageCallback("doSearch", |
+ dom_ui->RegisterMessageCallback("doSearch", |
NewCallback(this, &TemplateURLHandler::HandleDoSearch)); |
} |
@@ -377,7 +380,7 @@ |
// The page Javascript has requested the list of keyword searches. |
// Start loading them from the template URL backend. |
if (!template_url_model_) { |
- template_url_model_ = dom_ui_host_->profile()->GetTemplateURLModel(); |
+ template_url_model_ = dom_ui_->get_profile()->GetTemplateURLModel(); |
template_url_model_->AddObserver(this); |
} |
if (template_url_model_->loaded()) { |
@@ -434,7 +437,8 @@ |
if (url.is_valid()) { |
// Load the URL. |
- dom_ui_host_->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::LINK); |
+ dom_ui_->get_contents()->OpenURL(url, GURL(), CURRENT_TAB, |
+ PageTransition::LINK); |
// Record the user action |
std::vector<const TemplateURL*> urls = |
@@ -454,7 +458,7 @@ |
if (urls[i] == template_url) { |
UserMetrics::RecordComputedAction( |
StringPrintf(L"NTP_SearchURL%d", item_number), |
- dom_ui_host_->profile()); |
+ dom_ui_->get_profile()); |
break; |
} |
@@ -486,16 +490,17 @@ |
urls_value.Append(entry_value); |
} |
UMA_HISTOGRAM_COUNTS("NewTabPage.SearchURLs.Total", urls_value.GetSize()); |
- dom_ui_host_->CallJavascriptFunction(L"searchURLs", urls_value); |
+ dom_ui_->CallJavascriptFunction(L"searchURLs", urls_value); |
} |
/////////////////////////////////////////////////////////////////////////////// |
// RecentlyBookmarkedHandler |
-RecentlyBookmarkedHandler::RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host), |
+RecentlyBookmarkedHandler::RecentlyBookmarkedHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui), |
model_(NULL) { |
- dom_ui_host->RegisterMessageCallback("getRecentlyBookmarked", |
+ dom_ui->RegisterMessageCallback("getRecentlyBookmarked", |
NewCallback(this, |
&RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked)); |
} |
@@ -507,7 +512,7 @@ |
void RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked(const Value*) { |
if (!model_) { |
- model_ = dom_ui_host_->profile()->GetBookmarkModel(); |
+ model_ = dom_ui_->get_profile()->GetBookmarkModel(); |
model_->AddObserver(this); |
} |
// If the model is loaded, synchronously send the bookmarks down. Otherwise |
@@ -527,7 +532,7 @@ |
SetURLTitleAndDirection(entry_value, node->GetTitle(), node->GetURL()); |
list_value.Append(entry_value); |
} |
- dom_ui_host_->CallJavascriptFunction(L"recentlyBookmarked", list_value); |
+ dom_ui_->CallJavascriptFunction(L"recentlyBookmarked", list_value); |
} |
void RecentlyBookmarkedHandler::Loaded(BookmarkModel* model) { |
@@ -554,13 +559,14 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// RecentlyClosedTabsHandler |
-RecentlyClosedTabsHandler::RecentlyClosedTabsHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host), |
+RecentlyClosedTabsHandler::RecentlyClosedTabsHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui), |
tab_restore_service_(NULL) { |
- dom_ui_host->RegisterMessageCallback("getRecentlyClosedTabs", |
+ dom_ui->RegisterMessageCallback("getRecentlyClosedTabs", |
NewCallback(this, |
&RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs)); |
- dom_ui_host->RegisterMessageCallback("reopenTab", |
+ dom_ui->RegisterMessageCallback("reopenTab", |
NewCallback(this, &RecentlyClosedTabsHandler::HandleReopenTab)); |
} |
@@ -570,7 +576,7 @@ |
} |
void RecentlyClosedTabsHandler::HandleReopenTab(const Value* content) { |
- NavigationController* controller = dom_ui_host_->controller(); |
+ NavigationController* controller = dom_ui_->get_contents()->controller(); |
Browser* browser = Browser::GetBrowserForController( |
controller, NULL); |
if (!browser) |
@@ -603,7 +609,7 @@ |
void RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs( |
const Value* content) { |
if (!tab_restore_service_) { |
- tab_restore_service_ = dom_ui_host_->profile()->GetTabRestoreService(); |
+ tab_restore_service_ = dom_ui_->get_profile()->GetTabRestoreService(); |
// GetTabRestoreService() can return NULL (i.e., when in Off the |
// Record mode) |
@@ -645,7 +651,7 @@ |
delete value; |
} |
} |
- dom_ui_host_->CallJavascriptFunction(L"recentlyClosedTabs", list_value); |
+ dom_ui_->CallJavascriptFunction(L"recentlyClosedTabs", list_value); |
} |
void RecentlyClosedTabsHandler::TabRestoreServiceDestroyed( |
@@ -661,7 +667,7 @@ |
const TabNavigation& current_navigation = |
tab.navigations.at(tab.current_navigation_index); |
- if (current_navigation.url() == NewTabUIURL()) |
+ if (current_navigation.url() == NewTabUI::GetBaseURL()) |
return false; |
SetURLTitleAndDirection(dictionary, current_navigation.title(), |
@@ -699,22 +705,23 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// HistoryHandler |
-HistoryHandler::HistoryHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host) { |
- dom_ui_host->RegisterMessageCallback("showHistoryPage", |
+HistoryHandler::HistoryHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui) { |
+ dom_ui->RegisterMessageCallback("showHistoryPage", |
NewCallback(this, &HistoryHandler::HandleShowHistoryPage)); |
- dom_ui_host->RegisterMessageCallback("searchHistoryPage", |
+ dom_ui->RegisterMessageCallback("searchHistoryPage", |
NewCallback(this, &HistoryHandler::HandleSearchHistoryPage)); |
} |
void HistoryHandler::HandleShowHistoryPage(const Value*) { |
- NavigationController* controller = dom_ui_host_->controller(); |
+ NavigationController* controller = dom_ui_->get_contents()->controller(); |
if (controller) { |
#if defined(OS_WIN) |
// TODO(port): include this once history is converted to HTML |
- controller->LoadURL(HistoryTabUI::GetURL(), GURL(), PageTransition::LINK); |
+ controller->LoadURL(HistoryUI::GetBaseURL(), GURL(), PageTransition::LINK); |
UserMetrics::RecordAction(L"NTP_ShowHistory", |
- dom_ui_host_->profile()); |
+ dom_ui_->get_profile()); |
#else |
NOTIMPLEMENTED(); |
#endif |
@@ -732,13 +739,14 @@ |
std::wstring wstring_value; |
if (string_value->GetAsString(&wstring_value)) { |
UserMetrics::RecordAction(L"NTP_SearchHistory", |
- dom_ui_host_->profile()); |
+ dom_ui_->get_profile()); |
#if defined(OS_WIN) |
// TODO(port): include this once history is converted to HTML |
- NavigationController* controller = dom_ui_host_->controller(); |
+ NavigationController* controller = |
+ dom_ui_->get_contents()->controller(); |
controller->LoadURL( |
- HistoryTabUI::GetHistoryURLWithSearchText(wstring_value), |
+ HistoryUI::GetHistoryURLWithSearchText(wstring_value), |
GURL(), |
PageTransition::LINK); |
#else |
@@ -752,9 +760,10 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// MetricsHandler |
-MetricsHandler::MetricsHandler(DOMUIHost* dom_ui_host) |
- : dom_ui_host_(dom_ui_host) { |
- dom_ui_host->RegisterMessageCallback("metrics", |
+MetricsHandler::MetricsHandler(DOMUI* dom_ui) |
+ : DOMMessageHandler(dom_ui), |
+ dom_ui_(dom_ui) { |
+ dom_ui->RegisterMessageCallback("metrics", |
NewCallback(this, &MetricsHandler::HandleMetrics)); |
} |
@@ -769,7 +778,7 @@ |
std::wstring wstring_value; |
if (string_value->GetAsString(&wstring_value)) { |
UserMetrics::RecordComputedAction(wstring_value, |
- dom_ui_host_->profile()); |
+ dom_ui_->get_profile()); |
} |
} |
} |
@@ -778,33 +787,11 @@ |
/////////////////////////////////////////////////////////////////////////////// |
// NewTabUIContents |
-// This is the top-level URL handler for chrome-internal: URLs, and exposed in |
-// our header file. |
-bool NewTabUIHandleURL(GURL* url, |
- TabContentsType* result_type) { |
- if (!url->SchemeIs(kNewTabUIScheme)) |
- return false; |
- |
- *result_type = TAB_CONTENTS_NEW_TAB_UI; |
- *url = GURL(DOMUIContents::GetScheme() + "://new-tab/"); |
- |
- return true; |
-} |
- |
-GURL NewTabUIURL() { |
- std::string url(kNewTabUIScheme); |
- url += ":"; |
- return GURL(url); |
-} |
- |
-NewTabUIContents::NewTabUIContents(Profile* profile, |
- SiteInstance* instance, RenderViewHostFactory* render_view_factory) : |
- DOMUIHost(profile, instance, render_view_factory), |
+NewTabUI::NewTabUI(DOMUIContents* contents) : |
+ DOMUI(contents), |
motd_message_id_(0), |
incognito_(false), |
most_visited_handler_(NULL) { |
- set_type(TAB_CONTENTS_NEW_TAB_UI); |
- |
// Show profile name in the title if the current profile is not the default. |
std::wstring title; |
if (UserDataManager::Get()->is_current_profile_default()) { |
@@ -816,20 +803,20 @@ |
} |
set_forced_title(title); |
- if (profile->IsOffTheRecord()) |
+ if (get_profile()->IsOffTheRecord()) |
incognito_ = true; |
if (NewTabHTMLSource::first_view() && |
- (profile->GetPrefs()->GetInteger(prefs::kRestoreOnStartup) != 0 || |
- !profile->GetPrefs()->GetBoolean(prefs::kHomePageIsNewTabPage)) |
+ (get_profile()->GetPrefs()->GetInteger(prefs::kRestoreOnStartup) != 0 || |
+ !get_profile()->GetPrefs()->GetBoolean(prefs::kHomePageIsNewTabPage)) |
) { |
NewTabHTMLSource::set_first_view(false); |
} |
- render_view_host()->set_paint_observer(new PaintTimer); |
+ contents->render_view_host()->set_paint_observer(new PaintTimer); |
} |
-void NewTabUIContents::AttachMessageHandlers() { |
+void NewTabUI::Init() { |
// Regretfully, DataSources are global, instead of |
// per-TabContents. Because of the motd_message_id_ member, each |
// NewTabUIContents instance could theoretically have a different |
@@ -871,36 +858,27 @@ |
} |
} |
-bool NewTabUIContents::NavigateToPendingEntry(bool reload) { |
- const bool result = WebContents::NavigateToPendingEntry(reload); |
- controller()->GetPendingEntry()->set_title(forced_title_); |
- return result; |
+// static |
+GURL NewTabUI::GetBaseURL() { |
+ std::string url = DOMUIContents::GetScheme(); |
+ url += "://"; |
+ url += kNewTabHost; |
+ return GURL(url); |
} |
-const std::wstring& NewTabUIContents::GetTitle() const { |
- if (!forced_title_.empty()) |
- return forced_title_; |
- return WebContents::GetTitle(); |
+void NewTabUI::SetInitialFocus() { |
+ if (get_contents()->delegate()) |
+ get_contents()->delegate()->SetFocusToLocationBar(); |
} |
-void NewTabUIContents::SetInitialFocus() { |
- if (delegate()) |
- delegate()->SetFocusToLocationBar(); |
-} |
- |
-bool NewTabUIContents::SupportsURL(GURL* url) { |
- if (url->SchemeIs("javascript")) |
- return true; |
- return DOMUIHost::SupportsURL(url); |
-} |
- |
-void NewTabUIContents::RequestOpenURL(const GURL& url, |
- const GURL& /*referrer*/, |
- WindowOpenDisposition disposition) { |
+void NewTabUI::RequestOpenURL(const GURL& url, |
+ const GURL&, |
+ WindowOpenDisposition disposition) { |
// The user opened a URL on the page (including "open in new window"). |
// We count all such clicks as AUTO_BOOKMARK, which increments the site's |
// visit count (which is used for ranking the most visited entries). |
- // Note this means we're including clicks on not only most visited thumbnails, |
- // but also clicks on recently bookmarked. |
- OpenURL(url, GURL(), disposition, PageTransition::AUTO_BOOKMARK); |
+ // Note this means we're including clicks on not only most visited |
+ // thumbnails, but also clicks on recently bookmarked. |
+ get_contents()->OpenURL(url, GURL(), disposition, |
+ PageTransition::AUTO_BOOKMARK); |
} |