| 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..8732192da80210cd5fb355dc26944a0302162fc8 100644 | 
| --- a/chrome/browser/ui/chrome_pages.cc | 
| +++ b/chrome/browser/ui/chrome_pages.cc | 
| @@ -15,18 +15,20 @@ | 
| #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 "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 +53,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 +77,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 +177,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 +197,54 @@ 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); | 
| +} | 
| + | 
| +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 +254,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 +305,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); | 
| } | 
| } | 
|  |