Index: chromeos/ime/component_extension_ime_manager.cc |
diff --git a/chromeos/ime/component_extension_ime_manager.cc b/chromeos/ime/component_extension_ime_manager.cc |
index b31470b52089e1fb9d39477b89327f2b5ff435d2..3037326346bc5fd82b4e6b8e86efcae556505206 100644 |
--- a/chromeos/ime/component_extension_ime_manager.cc |
+++ b/chromeos/ime/component_extension_ime_manager.cc |
@@ -10,6 +10,53 @@ |
namespace chromeos { |
+namespace { |
+ |
+// The whitelist for enabling extension based xkb keyboards at login session. |
+const char* kLoginLayoutWhitelist[] = { |
+ "be", |
+ "br", |
+ "ca", |
+ "ca(eng)", |
+ "ca(multix)", |
+ "ch", |
+ "ch(fr)", |
+ "cz", |
+ "cz(qwerty)", |
+ "de", |
+ "de(neo)", |
+ "dk", |
+ "ee", |
+ "es", |
+ "es(cat)", |
+ "fi", |
+ "fr", |
+ "gb(dvorak)", |
+ "gb(extd)", |
+ "hr", |
+ "hu", |
+ "is", |
+ "it", |
+ "jp", |
+ "latam", |
+ "lt", |
+ "lv(apostrophe)", |
+ "no", |
+ "pl", |
+ "pt", |
+ "ro", |
+ "se", |
+ "si", |
+ "tr", |
+ "us", |
+ "us(altgr-intl)", |
+ "us(colemak)", |
+ "us(dvorak)", |
+ "us(intl)" |
+}; |
+ |
+} // namespace |
+ |
ComponentExtensionEngine::ComponentExtensionEngine() { |
} |
@@ -30,6 +77,9 @@ ComponentExtensionIMEManagerDelegate::~ComponentExtensionIMEManagerDelegate() { |
ComponentExtensionIMEManager::ComponentExtensionIMEManager() |
: is_initialized_(false) { |
+ for (size_t i = 0; i < arraysize(kLoginLayoutWhitelist); ++i) { |
+ login_layout_set_.insert(kLoginLayoutWhitelist[i]); |
+ } |
} |
ComponentExtensionIMEManager::~ComponentExtensionIMEManager() { |
@@ -134,15 +184,18 @@ input_method::InputMethodDescriptors |
extension_ime_util::GetComponentInputMethodID( |
component_extension_imes_[i].id, |
component_extension_imes_[i].engines[j].engine_id); |
+ const std::vector<std::string>& layouts = |
+ component_extension_imes_[i].engines[j].layouts; |
result.push_back( |
input_method::InputMethodDescriptor( |
input_method_id, |
component_extension_imes_[i].engines[j].display_name, |
std::string(), // TODO(uekawa): Set short name. |
- component_extension_imes_[i].engines[j].layouts, |
+ layouts, |
component_extension_imes_[i].engines[j].language_codes, |
// Enables extension based xkb keyboards on login screen. |
- extension_ime_util::IsKeyboardLayoutExtension(input_method_id), |
+ extension_ime_util::IsKeyboardLayoutExtension( |
+ input_method_id) && IsInLoginLayoutWhitelist(layouts), |
component_extension_imes_[i].options_page_url, |
component_extension_imes_[i].input_view_url)); |
} |
@@ -186,4 +239,13 @@ bool ComponentExtensionIMEManager::FindEngineEntry( |
return false; |
} |
+bool ComponentExtensionIMEManager::IsInLoginLayoutWhitelist( |
+ const std::vector<std::string>& layouts) { |
+ for (size_t i = 0; i < layouts.size(); ++i) { |
+ if (login_layout_set_.find(layouts[i]) != login_layout_set_.end()) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
} // namespace chromeos |