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 0aab684ef53c7f1d90e98c8f8b29ab7a740011fc..90cabc1eead3dc8b8f9354454390fea030b6db9b 100644 |
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
@@ -348,11 +348,23 @@ void InputMethodManagerImpl::OnComponentExtensionInitialized( |
void InputMethodManagerImpl::LoadNecessaryComponentExtensions() { |
if (!component_extension_ime_manager_->IsInitialized()) |
return; |
- for (size_t i = 0; i < active_input_method_ids_.size(); ++i) { |
- if (component_extension_ime_manager_->IsWhitelisted( |
- active_input_method_ids_[i])) { |
+ // Load component extensions but also update |active_input_method_ids_| as |
+ // some component extension IMEs may have been removed from the Chrome OS |
+ // image. If specified component extension IME no longer exists, falling back |
+ // to an existing IME. |
+ std::vector<std::string> unfiltered_input_method_ids = |
+ active_input_method_ids_; |
+ active_input_method_ids_.clear(); |
+ for (size_t i = 0; i < unfiltered_input_method_ids.size(); ++i) { |
+ if (!component_extension_ime_manager_->IsComponentExtensionIMEId( |
+ unfiltered_input_method_ids[i])) { |
+ // Legacy IMEs or xkb layouts are alwayes active. |
+ active_input_method_ids_.push_back(unfiltered_input_method_ids[i]); |
+ } else if (component_extension_ime_manager_->IsWhitelisted( |
+ unfiltered_input_method_ids[i])) { |
component_extension_ime_manager_->LoadComponentExtensionIME( |
- active_input_method_ids_[i]); |
+ unfiltered_input_method_ids[i]); |
+ active_input_method_ids_.push_back(unfiltered_input_method_ids[i]); |
} |
} |
} |