Chromium Code Reviews| 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..2319f9adeeddf07fed524604a5e90dbbf8fbf651 100644 |
| --- a/chromeos/ime/component_extension_ime_manager.cc |
| +++ b/chromeos/ime/component_extension_ime_manager.cc |
| @@ -10,6 +10,77 @@ |
| namespace chromeos { |
| +namespace { |
| + |
| +const char* kLoginLayoutWhitelist[] = { |
|
Seigo Nonaka
2014/02/28 08:00:00
nit: Could you add comments what this whitelist is
Shu Chen
2014/02/28 08:24:19
Done.
|
| + "be", |
| + "be", |
| + "be", |
|
Seigo Nonaka
2014/02/28 08:00:00
making unique?
Shu Chen
2014/02/28 08:24:19
Done.
|
| + "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)" |
| +}; |
| + |
| +bool WhitelistContains(const char* s) { |
| + int from = 0, to = arraysize(kLoginLayoutWhitelist); |
| + while (from < to) { |
| + int mid = from + (to - from) / 2; |
| + int cmp = strcmp(s, kLoginLayoutWhitelist[mid]); |
| + if (cmp > 0) |
| + from = mid + 1; |
| + else if (cmp < 0) |
| + to = mid - 1; |
| + else |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +bool IsInLoginLayoutWhitelist(std::vector<std::string>& layouts) { |
| + for (size_t i = 0; i < layouts.size(); ++i) { |
| + if (WhitelistContains(layouts[i].c_str())) |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +} // namespace |
| + |
| ComponentExtensionEngine::ComponentExtensionEngine() { |
| } |
| @@ -134,15 +205,18 @@ input_method::InputMethodDescriptors |
| extension_ime_util::GetComponentInputMethodID( |
| component_extension_imes_[i].id, |
| component_extension_imes_[i].engines[j].engine_id); |
| + 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)); |
| } |