| Index: chrome/browser/chromeos/base/locale_util.cc | 
| diff --git a/chrome/browser/chromeos/base/locale_util.cc b/chrome/browser/chromeos/base/locale_util.cc | 
| index 4a931fe80fb001d39364d293ea9375debfa57290..176a1050fc756d22b3a2d6ac0e2936e023eab79e 100644 | 
| --- a/chrome/browser/chromeos/base/locale_util.cc | 
| +++ b/chrome/browser/chromeos/base/locale_util.cc | 
| @@ -4,6 +4,8 @@ | 
|  | 
| #include "chrome/browser/chromeos/base/locale_util.h" | 
|  | 
| +#include <vector> | 
| + | 
| #include "chrome/browser/browser_process.h" | 
| #include "chrome/browser/chromeos/input_method/input_method_util.h" | 
| #include "chromeos/ime/input_method_manager.h" | 
| @@ -18,16 +20,19 @@ namespace { | 
| struct SwitchLanguageData { | 
| SwitchLanguageData(const std::string& locale, | 
| const bool enableLocaleKeyboardLayouts, | 
| +                     const bool login_layouts_only, | 
| scoped_ptr<locale_util::SwitchLanguageCallback> callback) | 
| : callback(callback.Pass()), | 
| locale(locale), | 
| enableLocaleKeyboardLayouts(enableLocaleKeyboardLayouts), | 
| +        login_layouts_only(login_layouts_only), | 
| success(false) {} | 
|  | 
| scoped_ptr<locale_util::SwitchLanguageCallback> callback; | 
|  | 
| const std::string locale; | 
| const bool enableLocaleKeyboardLayouts; | 
| +  const bool login_layouts_only; | 
| std::string loaded_locale; | 
| bool success; | 
| }; | 
| @@ -58,9 +63,21 @@ void FinishSwitchLanguage(scoped_ptr<SwitchLanguageData> data) { | 
| // use may not be supported by the new locale (3rd parameter). | 
| input_method::InputMethodManager* manager = | 
| input_method::InputMethodManager::Get(); | 
| -      manager->EnableLayouts( | 
| +      manager->EnableLoginLayouts( | 
| data->locale, | 
| -          manager->GetInputMethodUtil()->GetHardwareInputMethodId()); | 
| +          manager->GetInputMethodUtil()->GetHardwareLoginInputMethodId()); | 
| +      if (!data->login_layouts_only) { | 
| +        // Enable all the other layouts | 
| +        std::vector<std::string> candidates; | 
| +        input_method::InputMethodUtil* util = manager->GetInputMethodUtil(); | 
| +        // Add input methods associated with the language. | 
| +        util->GetInputMethodIdsFromLanguageCode( | 
| +            data->locale, input_method::kKeyboardLayoutsOnly, &candidates); | 
| +        for (std::vector<std::string>::const_iterator i = candidates.begin(); | 
| +             i != candidates.end(); | 
| +             ++i) | 
| +          manager->EnableInputMethod(*i); | 
| +      } | 
| } | 
| } | 
| gfx::PlatformFontPango::ReloadDefaultFont(); | 
| @@ -73,11 +90,15 @@ void FinishSwitchLanguage(scoped_ptr<SwitchLanguageData> data) { | 
| namespace locale_util { | 
|  | 
| void SwitchLanguage(const std::string& locale, | 
| -                    bool enableLocaleKeyboardLayouts, | 
| +                    const bool enableLocaleKeyboardLayouts, | 
| +                    const bool login_layouts_only, | 
| scoped_ptr<SwitchLanguageCallback> callback) { | 
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 
| -  scoped_ptr<SwitchLanguageData> data(new SwitchLanguageData( | 
| -      locale, enableLocaleKeyboardLayouts, callback.Pass())); | 
| +  scoped_ptr<SwitchLanguageData> data( | 
| +      new SwitchLanguageData(locale, | 
| +                             enableLocaleKeyboardLayouts, | 
| +                             login_layouts_only, | 
| +                             callback.Pass())); | 
| base::Closure reloader( | 
| base::Bind(&SwitchLanguageDoReloadLocale, base::Unretained(data.get()))); | 
| content::BrowserThread::PostBlockingPoolTaskAndReply( | 
|  |