| 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[] = {
|
| + "be",
|
| + "be",
|
| + "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)"
|
| +};
|
| +
|
| +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));
|
| }
|
|
|