| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/ime/component_extension_ime_manager.h" | 5 #include "chromeos/ime/component_extension_ime_manager.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "chromeos/ime/extension_ime_util.h" | 9 #include "chromeos/ime/extension_ime_util.h" |
| 10 | 10 |
| 11 namespace chromeos { | 11 namespace chromeos { |
| 12 | 12 |
| 13 namespace { |
| 14 |
| 15 // The whitelist for enabling extension based xkb keyboards at login session. |
| 16 const char* kLoginLayoutWhitelist[] = { |
| 17 "be", |
| 18 "br", |
| 19 "ca", |
| 20 "ca(eng)", |
| 21 "ca(multix)", |
| 22 "ch", |
| 23 "ch(fr)", |
| 24 "cz", |
| 25 "cz(qwerty)", |
| 26 "de", |
| 27 "de(neo)", |
| 28 "dk", |
| 29 "ee", |
| 30 "es", |
| 31 "es(cat)", |
| 32 "fi", |
| 33 "fr", |
| 34 "gb(dvorak)", |
| 35 "gb(extd)", |
| 36 "hr", |
| 37 "hu", |
| 38 "is", |
| 39 "it", |
| 40 "jp", |
| 41 "latam", |
| 42 "lt", |
| 43 "lv(apostrophe)", |
| 44 "no", |
| 45 "pl", |
| 46 "pt", |
| 47 "ro", |
| 48 "se", |
| 49 "si", |
| 50 "tr", |
| 51 "us", |
| 52 "us(altgr-intl)", |
| 53 "us(colemak)", |
| 54 "us(dvorak)", |
| 55 "us(intl)" |
| 56 }; |
| 57 |
| 58 } // namespace |
| 59 |
| 13 ComponentExtensionEngine::ComponentExtensionEngine() { | 60 ComponentExtensionEngine::ComponentExtensionEngine() { |
| 14 } | 61 } |
| 15 | 62 |
| 16 ComponentExtensionEngine::~ComponentExtensionEngine() { | 63 ComponentExtensionEngine::~ComponentExtensionEngine() { |
| 17 } | 64 } |
| 18 | 65 |
| 19 ComponentExtensionIME::ComponentExtensionIME() { | 66 ComponentExtensionIME::ComponentExtensionIME() { |
| 20 } | 67 } |
| 21 | 68 |
| 22 ComponentExtensionIME::~ComponentExtensionIME() { | 69 ComponentExtensionIME::~ComponentExtensionIME() { |
| 23 } | 70 } |
| 24 | 71 |
| 25 ComponentExtensionIMEManagerDelegate::ComponentExtensionIMEManagerDelegate() { | 72 ComponentExtensionIMEManagerDelegate::ComponentExtensionIMEManagerDelegate() { |
| 26 } | 73 } |
| 27 | 74 |
| 28 ComponentExtensionIMEManagerDelegate::~ComponentExtensionIMEManagerDelegate() { | 75 ComponentExtensionIMEManagerDelegate::~ComponentExtensionIMEManagerDelegate() { |
| 29 } | 76 } |
| 30 | 77 |
| 31 ComponentExtensionIMEManager::ComponentExtensionIMEManager() | 78 ComponentExtensionIMEManager::ComponentExtensionIMEManager() |
| 32 : is_initialized_(false) { | 79 : is_initialized_(false) { |
| 80 for (size_t i = 0; i < arraysize(kLoginLayoutWhitelist); ++i) { |
| 81 login_layout_set_.insert(kLoginLayoutWhitelist[i]); |
| 82 } |
| 33 } | 83 } |
| 34 | 84 |
| 35 ComponentExtensionIMEManager::~ComponentExtensionIMEManager() { | 85 ComponentExtensionIMEManager::~ComponentExtensionIMEManager() { |
| 36 } | 86 } |
| 37 | 87 |
| 38 void ComponentExtensionIMEManager::Initialize( | 88 void ComponentExtensionIMEManager::Initialize( |
| 39 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate) { | 89 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate) { |
| 40 delegate_ = delegate.Pass(); | 90 delegate_ = delegate.Pass(); |
| 41 component_extension_imes_ = delegate_->ListIME(); | 91 component_extension_imes_ = delegate_->ListIME(); |
| 42 is_initialized_ = true; | 92 is_initialized_ = true; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 | 177 |
| 128 input_method::InputMethodDescriptors | 178 input_method::InputMethodDescriptors |
| 129 ComponentExtensionIMEManager::GetAllIMEAsInputMethodDescriptor() { | 179 ComponentExtensionIMEManager::GetAllIMEAsInputMethodDescriptor() { |
| 130 input_method::InputMethodDescriptors result; | 180 input_method::InputMethodDescriptors result; |
| 131 for (size_t i = 0; i < component_extension_imes_.size(); ++i) { | 181 for (size_t i = 0; i < component_extension_imes_.size(); ++i) { |
| 132 for (size_t j = 0; j < component_extension_imes_[i].engines.size(); ++j) { | 182 for (size_t j = 0; j < component_extension_imes_[i].engines.size(); ++j) { |
| 133 const std::string input_method_id = | 183 const std::string input_method_id = |
| 134 extension_ime_util::GetComponentInputMethodID( | 184 extension_ime_util::GetComponentInputMethodID( |
| 135 component_extension_imes_[i].id, | 185 component_extension_imes_[i].id, |
| 136 component_extension_imes_[i].engines[j].engine_id); | 186 component_extension_imes_[i].engines[j].engine_id); |
| 187 const std::vector<std::string>& layouts = |
| 188 component_extension_imes_[i].engines[j].layouts; |
| 137 result.push_back( | 189 result.push_back( |
| 138 input_method::InputMethodDescriptor( | 190 input_method::InputMethodDescriptor( |
| 139 input_method_id, | 191 input_method_id, |
| 140 component_extension_imes_[i].engines[j].display_name, | 192 component_extension_imes_[i].engines[j].display_name, |
| 141 std::string(), // TODO(uekawa): Set short name. | 193 std::string(), // TODO(uekawa): Set short name. |
| 142 component_extension_imes_[i].engines[j].layouts, | 194 layouts, |
| 143 component_extension_imes_[i].engines[j].language_codes, | 195 component_extension_imes_[i].engines[j].language_codes, |
| 144 // Enables extension based xkb keyboards on login screen. | 196 // Enables extension based xkb keyboards on login screen. |
| 145 extension_ime_util::IsKeyboardLayoutExtension(input_method_id), | 197 extension_ime_util::IsKeyboardLayoutExtension( |
| 198 input_method_id) && IsInLoginLayoutWhitelist(layouts), |
| 146 component_extension_imes_[i].options_page_url, | 199 component_extension_imes_[i].options_page_url, |
| 147 component_extension_imes_[i].input_view_url)); | 200 component_extension_imes_[i].input_view_url)); |
| 148 } | 201 } |
| 149 } | 202 } |
| 150 return result; | 203 return result; |
| 151 } | 204 } |
| 152 | 205 |
| 153 void ComponentExtensionIMEManager::AddObserver(Observer* observer) { | 206 void ComponentExtensionIMEManager::AddObserver(Observer* observer) { |
| 154 observers_.AddObserver(observer); | 207 observers_.AddObserver(observer); |
| 155 } | 208 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 179 if (out_extension) | 232 if (out_extension) |
| 180 *out_extension = component_extension_imes_[i]; | 233 *out_extension = component_extension_imes_[i]; |
| 181 if (out_engine) | 234 if (out_engine) |
| 182 *out_engine = component_extension_imes_[i].engines[j]; | 235 *out_engine = component_extension_imes_[i].engines[j]; |
| 183 return true; | 236 return true; |
| 184 } | 237 } |
| 185 } | 238 } |
| 186 return false; | 239 return false; |
| 187 } | 240 } |
| 188 | 241 |
| 242 bool ComponentExtensionIMEManager::IsInLoginLayoutWhitelist( |
| 243 const std::vector<std::string>& layouts) { |
| 244 for (size_t i = 0; i < layouts.size(); ++i) { |
| 245 if (login_layout_set_.find(layouts[i]) != login_layout_set_.end()) |
| 246 return true; |
| 247 } |
| 248 return false; |
| 249 } |
| 250 |
| 189 } // namespace chromeos | 251 } // namespace chromeos |
| OLD | NEW |