blob: 693c41c5bc3ffcb173f1c2ce499841773d169ea1 [file] [log] [blame]
// Copyright (c) 2012 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.
#include "chrome/browser/ui/chrome_pages.h"
#include "base/logging.h"
#include "base/string_number_conversions.h"
#include "base/stringprintf.h"
#include "chrome/browser/download/download_shelf.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/singleton_tabs.h"
#include "chrome/browser/ui/webui/options/content_settings_handler.h"
#include "chrome/browser/ui/webui/signin/login_ui_service.h"
#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/user_metrics.h"
using content::UserMetricsAction;
namespace chrome {
namespace {
const char kHashMark[] = "#";
void OpenBookmarkManagerWithHash(Browser* browser,
const std::string& action,
int64 node_id) {
content::RecordAction(UserMetricsAction("ShowBookmarkManager"));
content::RecordAction(UserMetricsAction("ShowBookmarks"));
NavigateParams params(GetSingletonTabNavigateParams(
browser,
GURL(kChromeUIBookmarksURL).Resolve(
StringPrintf("/#%s%s", action.c_str(),
base::Int64ToString(node_id).c_str()))));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
}
} // namespace
void ShowBookmarkManager(Browser* browser) {
content::RecordAction(UserMetricsAction("ShowBookmarkManager"));
content::RecordAction(UserMetricsAction("ShowBookmarks"));
ShowSingletonTabOverwritingNTP(
browser,
GetSingletonTabNavigateParams(browser, GURL(kChromeUIBookmarksURL)));
}
void ShowBookmarkManagerForNode(Browser* browser, int64 node_id) {
OpenBookmarkManagerWithHash(browser, "", node_id);
}
void ShowHistory(Browser* browser) {
content::RecordAction(UserMetricsAction("ShowHistory"));
NavigateParams params(
GetSingletonTabNavigateParams(browser, GURL(kChromeUIHistoryURL)));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
}
void ShowDownloads(Browser* browser) {
content::RecordAction(UserMetricsAction("ShowDownloads"));
if (browser->window()) {
DownloadShelf* shelf = browser->window()->GetDownloadShelf();
if (shelf->IsShowing())
shelf->Close();
}
ShowSingletonTabOverwritingNTP(
browser,
GetSingletonTabNavigateParams(browser, GURL(kChromeUIDownloadsURL)));
}
void ShowExtensions(Browser* browser) {
content::RecordAction(UserMetricsAction("ShowExtensions"));
NavigateParams params(
GetSingletonTabNavigateParams(browser, GURL(kChromeUIExtensionsURL)));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
}
void ShowConflicts(Browser* browser) {
content::RecordAction(UserMetricsAction("AboutConflicts"));
ShowSingletonTab(browser, GURL(kChromeUIConflictsURL));
}
void ShowHelp(Browser* browser, HelpSource source) {
content::RecordAction(UserMetricsAction("ShowHelpTab"));
GURL url;
switch (source) {
case HELP_SOURCE_KEYBOARD:
url = GURL(kChromeHelpViaKeyboardURL);
break;
case HELP_SOURCE_MENU:
url = GURL(kChromeHelpViaMenuURL);
break;
case HELP_SOURCE_WEBUI:
url = GURL(kChromeHelpViaWebUIURL);
break;
default:
NOTREACHED() << "Unhandled help source " << source;
}
ShowSingletonTab(browser, url);
}
void ShowSettings(Browser* browser) {
content::RecordAction(UserMetricsAction("ShowOptions"));
ShowSettingsSubPage(browser, std::string());
}
void ShowSettingsSubPage(Browser* browser, const std::string& sub_page) {
std::string url = std::string(kChromeUISettingsURL) + sub_page;
#if defined(OS_CHROMEOS)
if (sub_page.find(kInternetOptionsSubPage, 0) != std::string::npos) {
std::string::size_type loc = sub_page.find("?", 0);
std::string network_page = loc != std::string::npos ?
sub_page.substr(loc) : std::string();
url = std::string(kChromeUISettingsURL) + network_page;
}
#endif
NavigateParams params(GetSingletonTabNavigateParams(browser, GURL(url)));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
}
void ShowContentSettings(Browser* browser,
ContentSettingsType content_settings_type) {
ShowSettingsSubPage(
browser,
kContentSettingsExceptionsSubPage + std::string(kHashMark) +
options::ContentSettingsHandler::ContentSettingsTypeToGroupName(
content_settings_type));
}
void ShowClearBrowsingDataDialog(Browser* browser) {
content::RecordAction(UserMetricsAction("ClearBrowsingData_ShowDlg"));
ShowSettingsSubPage(browser, kClearBrowserDataSubPage);
}
void ShowPasswordManager(Browser* browser) {
content::RecordAction(UserMetricsAction("Options_ShowPasswordManager"));
ShowSettingsSubPage(browser, kPasswordManagerSubPage);
}
void ShowImportDialog(Browser* browser) {
content::RecordAction(UserMetricsAction("Import_ShowDlg"));
ShowSettingsSubPage(browser, kImportDataSubPage);
}
void ShowInstantConfirmDialog(Browser* browser) {
ShowSettingsSubPage(browser, kInstantConfirmPage);
}
void ShowAboutChrome(Browser* browser) {
content::RecordAction(UserMetricsAction("AboutChrome"));
NavigateParams params(
GetSingletonTabNavigateParams(browser, GURL(kChromeUIUberURL)));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
}
void ShowSearchEngineSettings(Browser* browser) {
content::RecordAction(UserMetricsAction("EditSearchEngines"));
ShowSettingsSubPage(browser, kSearchEnginesSubPage);
}
void ShowSyncSetup(Browser* browser, SyncPromoUI::Source source) {
ProfileSyncService* service =
ProfileSyncServiceFactory::GetInstance()->GetForProfile(
browser->profile()->GetOriginalProfile());
LoginUIService* login_service = LoginUIServiceFactory::GetForProfile(
browser->profile()->GetOriginalProfile());
if (service->HasSyncSetupCompleted()) {
ShowSettings(browser);
} else if (SyncPromoUI::ShouldShowSyncPromo(browser->profile()) &&
login_service->current_login_ui() == NULL) {
// There is no currently active login UI, so display a new promo page.
GURL url(SyncPromoUI::GetSyncPromoURL(GURL(), source, false));
NavigateParams params(GetSingletonTabNavigateParams(browser, GURL(url)));
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
ShowSingletonTabOverwritingNTP(browser, params);
} else {
LoginUIServiceFactory::GetForProfile(
browser->profile()->GetOriginalProfile())->ShowLoginUI(browser);
}
}
} // namespace chrome