Index: chrome/browser/ui/chrome_pages.cc |
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc |
index acdb1f1153396cb10c525bc2c441118f0c82330a..9b481eabf8e67bdf11638556119d6e053811263c 100644 |
--- a/chrome/browser/ui/chrome_pages.cc |
+++ b/chrome/browser/ui/chrome_pages.cc |
@@ -15,18 +15,22 @@ |
#include "chrome/browser/signin/signin_manager.h" |
#include "chrome/browser/signin/signin_manager_factory.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_finder.h" |
#include "chrome/browser/ui/browser_navigator.h" |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/extensions/application_launch.h" |
#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" |
+#include "chrome/browser/ui/settings_window_manager.h" |
#include "chrome/browser/ui/singleton_tabs.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/browser/ui/webui/options/content_settings_handler.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chrome/common/url_constants.h" |
#include "content/public/browser/user_metrics.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/common/url_constants.h" |
#include "google_apis/gaia/gaia_urls.h" |
#include "net/base/url_util.h" |
-#include "url/gurl.h" |
#if defined(OS_WIN) |
#include "chrome/browser/enumerate_modules_model_win.h" |
@@ -51,9 +55,8 @@ void OpenBookmarkManagerWithHash(Browser* browser, |
content::RecordAction(UserMetricsAction("ShowBookmarks")); |
NavigateParams params(GetSingletonTabNavigateParams( |
browser, |
- GURL(kChromeUIBookmarksURL).Resolve( |
- base::StringPrintf("/#%s%s", action.c_str(), |
- base::Int64ToString(node_id).c_str())))); |
+ GURL(kChromeUIBookmarksURL).Resolve(base::StringPrintf( |
+ "/#%s%s", action.c_str(), base::Int64ToString(node_id).c_str())))); |
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
ShowSingletonTabOverwritingNTP(browser, params); |
} |
@@ -76,10 +79,10 @@ void ShowHelpImpl(Browser* browser, |
#if defined(OS_CHROMEOS) && defined(OFFICIAL_BUILD) |
const CommandLine* command_line = CommandLine::ForCurrentProcess(); |
if (!command_line->HasSwitch(chromeos::switches::kDisableGeniusApp)) { |
- const extensions::Extension* extension = profile->GetExtensionService()-> |
- GetInstalledExtension(genius_app::kGeniusAppId); |
- OpenApplication( |
- AppLaunchParams(profile, extension, 0, host_desktop_type)); |
+ const extensions::Extension* extension = |
+ profile->GetExtensionService()->GetInstalledExtension( |
+ genius_app::kGeniusAppId); |
+ OpenApplication(AppLaunchParams(profile, extension, 0, host_desktop_type)); |
return; |
} |
#endif |
@@ -176,8 +179,8 @@ void ShowConflicts(Browser* browser) { |
} |
void ShowHelp(Browser* browser, HelpSource source) { |
- ShowHelpImpl(browser, browser->profile(), browser->host_desktop_type(), |
- source); |
+ ShowHelpImpl( |
+ browser, browser->profile(), browser->host_desktop_type(), source); |
} |
void ShowHelpForProfile(Profile* profile, |
@@ -196,22 +199,69 @@ void ShowSlow(Browser* browser) { |
#endif |
} |
-void ShowSettings(Browser* browser) { |
- content::RecordAction(UserMetricsAction("ShowOptions")); |
- ShowSettingsSubPage(browser, std::string()); |
-} |
- |
-void ShowSettingsSubPage(Browser* browser, const std::string& sub_page) { |
+GURL GetSettingsUrl(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(); |
+ 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))); |
+ return GURL(url); |
+} |
+ |
+bool IsSettingsWindow(const Browser* browser) { |
+ if (!CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableSettingsWindow)) |
+ return false; |
+ if (browser->is_type_tabbed()) |
+ return false; |
+ const content::WebContents* web_contents = |
+ browser->tab_strip_model()->GetWebContentsAt(0); |
+ if (!web_contents) |
+ return false; |
+ GURL url(web_contents->GetURL()); |
+ return (url.SchemeIs(content::kChromeUIScheme) && |
+ url.spec().find(chrome::kChromeUISettingsURL) == 0); |
+} |
+ |
+void ShowSettings(Browser* browser) { |
+ ShowSettingsSubPage(browser, std::string()); |
+} |
+ |
+void ShowSettingsSubPage(Browser* browser, const std::string& sub_page) { |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ ::switches::kEnableSettingsWindow)) { |
+ SettingsWindowManager::GetInstance()->ShowForProfile(browser->profile(), |
+ sub_page); |
+ return; |
+ } |
+ ShowSettingsSubPageInTabbedBrowser(browser, sub_page); |
+} |
+ |
+void ShowSettingsSubPageForProfile(Profile* profile, |
+ const std::string& sub_page) { |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ ::switches::kEnableSettingsWindow)) { |
+ SettingsWindowManager::GetInstance()->ShowForProfile(profile, sub_page); |
+ return; |
+ } |
+ Browser* browser = |
+ chrome::FindTabbedBrowser(profile, false, HOST_DESKTOP_TYPE_NATIVE); |
+ if (!browser) { |
+ browser = new Browser( |
+ Browser::CreateParams(profile, chrome::HOST_DESKTOP_TYPE_NATIVE)); |
+ } |
+ ShowSettingsSubPageInTabbedBrowser(browser, sub_page); |
+} |
+ |
+void ShowSettingsSubPageInTabbedBrowser(Browser* browser, |
+ const std::string& sub_page) { |
+ content::RecordAction(UserMetricsAction("ShowOptions")); |
+ GURL gurl = GetSettingsUrl(sub_page); |
+ NavigateParams params(GetSingletonTabNavigateParams(browser, gurl)); |
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
ShowSingletonTabOverwritingNTP(browser, params); |
} |
@@ -221,8 +271,8 @@ void ShowContentSettings(Browser* browser, |
ShowSettingsSubPage( |
browser, |
kContentSettingsExceptionsSubPage + std::string(kHashMark) + |
- options::ContentSettingsHandler::ContentSettingsTypeToGroupName( |
- content_settings_type)); |
+ options::ContentSettingsHandler::ContentSettingsTypeToGroupName( |
+ content_settings_type)); |
} |
void ShowClearBrowsingDataDialog(Browser* browser) { |
@@ -272,8 +322,7 @@ void ShowBrowserSignin(Browser* browser, signin::Source source) { |
browser = displayer->browser(); |
} |
- NavigateToSingletonTab(browser, |
- GURL(signin::GetPromoURL(source, false))); |
+ NavigateToSingletonTab(browser, GURL(signin::GetPromoURL(source, false))); |
DCHECK_GT(browser->tab_strip_model()->count(), 0); |
} |
} |