| Index: chrome/browser/chromeos/input_method/input_method_manager_impl.cc | 
| diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc | 
| index f779aeb9f2276e98bdf7cc0c5eaacea0fb663302..64a4322bd78b4027d6fbe47d3d69782c1073bdce 100644 | 
| --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc | 
| +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc | 
| @@ -43,9 +43,7 @@ bool Contains(const std::vector<std::string>& container, | 
|  | 
| bool InputMethodManagerImpl::IsLoginKeyboard( | 
| const std::string& layout) const { | 
| -  const InputMethodDescriptor* ime = | 
| -      util_.GetInputMethodDescriptorFromId(layout); | 
| -  return ime ? ime->is_login_keyboard() : false; | 
| +  return util_.IsLoginKeyboard(layout); | 
| } | 
|  | 
| InputMethodManagerImpl::InputMethodManagerImpl( | 
| @@ -159,8 +157,9 @@ const InputMethodDescriptor* InputMethodManagerImpl::GetInputMethodFromId( | 
| return ime; | 
| } | 
|  | 
| -void InputMethodManagerImpl::EnableLayouts(const std::string& language_code, | 
| -                                           const std::string& initial_layout) { | 
| +void InputMethodManagerImpl::EnableLoginLayouts( | 
| +    const std::string& language_code, | 
| +    const std::string& initial_layout) { | 
| if (state_ == STATE_TERMINATING) | 
| return; | 
|  | 
| @@ -171,17 +170,22 @@ void InputMethodManagerImpl::EnableLayouts(const std::string& language_code, | 
| &candidates); | 
| // Add the hardware keyboard as well. We should always add this so users | 
| // can use the hardware keyboard on the login screen and the screen locker. | 
| -  candidates.push_back(util_.GetHardwareInputMethodId()); | 
| +  candidates.push_back(util_.GetHardwareLoginInputMethodId()); | 
|  | 
| std::vector<std::string> layouts; | 
| // First, add the initial input method ID, if it's requested, to | 
| // layouts, so it appears first on the list of active input | 
| // methods at the input language status menu. | 
| -  if (util_.IsValidInputMethodId(initial_layout) && | 
| -      IsLoginKeyboard(initial_layout)) { | 
| -    layouts.push_back(initial_layout); | 
| +  if (util_.IsValidInputMethodId(initial_layout)) { | 
| +    if (!IsLoginKeyboard(initial_layout)) { | 
| +      DVLOG(1) | 
| +          << "EnableLoginLayouts: ignoring non-login initial keyboard layout:" | 
| +          << initial_layout; | 
| +    } else { | 
| +      layouts.push_back(initial_layout); | 
| +    } | 
| } else if (!initial_layout.empty()) { | 
| -    DVLOG(1) << "EnableLayouts: ignoring non-keyboard or invalid ID: " | 
| +    DVLOG(1) << "EnableLoginLayouts: ignoring non-keyboard or invalid ID: " | 
| << initial_layout; | 
| } | 
|  | 
| @@ -550,7 +554,7 @@ void InputMethodManagerImpl::SetInputMethodDefault() { | 
| initial_input_method_id = | 
| GetInputMethodUtil()->GetHardwareInputMethodId(); | 
| } | 
| -    EnableLayouts(locale, initial_input_method_id); | 
| +    EnableLoginLayouts(locale, initial_input_method_id); | 
| } | 
| } | 
|  | 
|  |