diff options
15 files changed, 80 insertions, 46 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc index f991506a..a7b5056 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc @@ -110,7 +110,10 @@ void InputMethodEngineIBus::Initialize( engine_desc.author = ibus_id_; component_->mutable_engine_description()->push_back(engine_desc); - manager->AddInputMethodExtension(ibus_id_, engine_name, layouts, language, + + std::vector<std::string> languages; + languages.push_back(language); + manager->AddInputMethodExtension(ibus_id_, engine_name, layouts, languages, options_page, this); // If connection is avaiable, register component. If there are no connection // to ibus-daemon, OnConnected callback will register component instead. 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 1b1f297..f2c5d8d 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc @@ -441,7 +441,7 @@ void InputMethodManagerImpl::AddInputMethodExtension( const std::string& id, const std::string& name, const std::vector<std::string>& layouts, - const std::string& language, + const std::vector<std::string>& languages, const GURL& options_url, InputMethodEngine* engine) { if (state_ == STATE_TERMINATING) @@ -454,7 +454,7 @@ void InputMethodManagerImpl::AddInputMethodExtension( } extra_input_methods_[id] = - InputMethodDescriptor(id, name, layouts, language, options_url); + InputMethodDescriptor(id, name, layouts, languages, options_url); if (Contains(enabled_extension_imes_, id) && !ComponentExtensionIMEManager::IsComponentExtensionIMEId(id)) { if (!Contains(active_input_method_ids_, id)) { diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.h b/chrome/browser/chromeos/input_method/input_method_manager_impl.h index 3b2e2bc..c585b46 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.h +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.h @@ -75,7 +75,7 @@ class InputMethodManagerImpl : public InputMethodManager, const std::string& id, const std::string& name, const std::vector<std::string>& layouts, - const std::string& language, + const std::vector<std::string>& languages, const GURL& options_page, InputMethodEngine* instance) OVERRIDE; virtual void RemoveInputMethodExtension(const std::string& id) OVERRIDE; diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc index 66f2bb7..f08cbf9 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc @@ -1003,11 +1003,13 @@ TEST_F(InputMethodManagerImplTest, TestAddRemoveExtensionInputMethods) { // Add two Extension IMEs. std::vector<std::string> layouts; layouts.push_back("us"); + std::vector<std::string> languages; + languages.push_back("en-US"); manager_->AddInputMethodExtension( extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), "deadbeef input method", layouts, - "en-US", + languages, GURL(), NULL); @@ -1034,7 +1036,7 @@ TEST_F(InputMethodManagerImplTest, TestAddRemoveExtensionInputMethods) { extension_ime_util::GetInputMethodID("cafebabe", "engine_id"), "cafebabe input method", layouts, - "en-US", + languages, GURL(), NULL); EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); @@ -1083,11 +1085,13 @@ TEST_F(InputMethodManagerImplTest, TestAddExtensionInputThenLockScreen) { // Add an Extension IME. std::vector<std::string> layouts; layouts.push_back("us(dvorak)"); + std::vector<std::string> languages; + languages.push_back("en-US"); manager_->AddInputMethodExtension( extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), "deadbeef input method", layouts, - "en-US", + languages, GURL(), NULL); // Extension IME is not enabled by default. diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc index cc1c4b0..f70f0eb 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.cc +++ b/chrome/browser/chromeos/input_method/input_method_util.cc @@ -402,7 +402,8 @@ string16 InputMethodUtil::GetInputMethodShortName( if (text.empty()) { const size_t kMaxLanguageNameLen = 2; - const std::string language_code = input_method.language_code(); + DCHECK(!input_method.language_codes().empty()); + const std::string language_code = input_method.language_codes().at(0); text = StringToUpperASCII(UTF8ToUTF16(language_code)).substr( 0, kMaxLanguageNameLen); } @@ -441,7 +442,8 @@ string16 InputMethodUtil::GetInputMethodLongName( // Indic languages: they share "Standard Input Method". const string16 standard_input_method_text = delegate_->GetLocalizedString( IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD); - const std::string language_code = input_method.language_code(); + DCHECK(!input_method.language_codes().empty()); + const std::string language_code = input_method.language_codes().at(0); string16 text = TranslateString(input_method.id()); if (text == standard_input_method_text || @@ -591,7 +593,8 @@ void InputMethodUtil::GetLanguageCodesFromInputMethodIds( DVLOG(1) << "Unknown input method ID: " << input_method_ids[i]; continue; } - const std::string language_code = input_method->language_code(); + DCHECK(!input_method->language_codes().empty()); + const std::string language_code = input_method->language_codes().at(0); // Add it if it's not already present. if (std::count(out_language_codes->begin(), out_language_codes->end(), language_code) == 0) { @@ -617,7 +620,8 @@ void InputMethodUtil::SetComponentExtensions( component_extension_ime_id_to_descriptor_.clear(); for (size_t i = 0; i < imes.size(); ++i) { const InputMethodDescriptor& input_method = imes.at(i); - const std::string language_code = input_method.language_code(); + DCHECK(!input_method.language_codes().empty()); + const std::string language_code = input_method.language_codes().at(0); id_to_language_code_.insert( std::make_pair(input_method.id(), language_code)); id_to_descriptor_.insert( @@ -628,10 +632,12 @@ void InputMethodUtil::SetComponentExtensions( InputMethodDescriptor InputMethodUtil::GetFallbackInputMethodDescriptor() { std::vector<std::string> layouts; layouts.push_back("us"); + std::vector<std::string> languages; + languages.push_back("en-US"); return InputMethodDescriptor("xkb:us::eng", "", layouts, - "en-US", + languages, GURL()); // options page, not available. } @@ -650,12 +656,15 @@ void InputMethodUtil::ReloadInternalMaps() { for (size_t i = 0; i < supported_input_methods_->size(); ++i) { const InputMethodDescriptor& input_method = supported_input_methods_->at(i); - const std::string language_code = input_method.language_code(); - language_code_to_ids_.insert( - std::make_pair(language_code, input_method.id())); - // Remember the pairs. - id_to_language_code_.insert( - std::make_pair(input_method.id(), language_code)); + const std::vector<std::string>& language_codes = + input_method.language_codes(); + for (size_t i = 0; i < language_codes.size(); ++i) { + language_code_to_ids_.insert( + std::make_pair(language_codes[i], input_method.id())); + // Remember the pairs. + id_to_language_code_.insert( + std::make_pair(input_method.id(), language_codes[i])); + } id_to_descriptor_.insert( std::make_pair(input_method.id(), input_method)); if (IsKeyboardLayout(input_method.id())) { diff --git a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc index a6b7140..7a4a33f 100644 --- a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc @@ -54,10 +54,12 @@ class InputMethodUtilTest : public testing::Test { const std::string& language_code) { std::vector<std::string> layouts; layouts.push_back(raw_layout); + std::vector<std::string> languages; + languages.push_back(language_code); return InputMethodDescriptor(id, "", layouts, - language_code, + languages, GURL()); // options page url } @@ -329,7 +331,8 @@ TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { EXPECT_EQ("us", descriptor->GetPreferredKeyboardLayout()); // This used to be "zh" but now we have "zh-CN" in input_methods.h, // hence this should be zh-CN now. - EXPECT_EQ("zh-CN", descriptor->language_code()); + ASSERT_TRUE(!descriptor->language_codes().empty()); + EXPECT_EQ("zh-CN", descriptor->language_codes().at(0)); } TEST_F(InputMethodUtilTest, TestGetInputMethodIdsForLanguageCode) { @@ -465,7 +468,7 @@ TEST_F(InputMethodUtilTest, TestGetLanguageCodesFromInputMethodIds) { TEST_F(InputMethodUtilTest, TestIBusInputMethodText) { for (size_t i = 0; i < util_.supported_input_methods_->size(); ++i) { const std::string language_code = - util_.supported_input_methods_->at(i).language_code(); + util_.supported_input_methods_->at(i).language_codes().at(0); const string16 display_name = l10n_util::GetDisplayNameForLocale(language_code, "en", false); // Only two formats, like "fr" (lower case) and "en-US" (lower-upper), are diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc index bf83f20..9efe97f 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc +++ b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc @@ -87,7 +87,7 @@ void MockInputMethodManager::AddInputMethodExtension( const std::string& id, const std::string& name, const std::vector<std::string>& layouts, - const std::string& language, + const std::vector<std::string>& languages, const GURL& options_url, InputMethodEngine* instance) { } @@ -123,7 +123,7 @@ InputMethodDescriptor MockInputMethodManager::GetCurrentInputMethod() const { return InputMethodDescriptor(current_input_method_id_, descriptor.name(), descriptor.keyboard_layouts(), - descriptor.language_code(), + descriptor.language_codes(), GURL()); // options page url. } return descriptor; diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.h b/chrome/browser/chromeos/input_method/mock_input_method_manager.h index cbefc92..77d760d 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_manager.h +++ b/chrome/browser/chromeos/input_method/mock_input_method_manager.h @@ -48,7 +48,7 @@ class MockInputMethodManager : public InputMethodManager { const std::string& id, const std::string& name, const std::vector<std::string>& layouts, - const std::string& language, + const std::vector<std::string>& languages, const GURL& options_url, InputMethodEngine* instance) OVERRIDE; virtual void RemoveInputMethodExtension(const std::string& id) OVERRIDE; diff --git a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc index 0629f69..315738b 100644 --- a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.cc @@ -161,7 +161,6 @@ ListValue* CrosLanguageOptionsHandler::GetInputMethodList( for (size_t i = 0; i < descriptors.size(); ++i) { const input_method::InputMethodDescriptor& descriptor = descriptors[i]; - const std::string language_code = descriptor.language_code(); const std::string display_name = manager->GetInputMethodUtil()->GetInputMethodDisplayNameFromId( descriptor.id()); @@ -171,16 +170,18 @@ ListValue* CrosLanguageOptionsHandler::GetInputMethodList( // One input method can be associated with multiple languages, hence // we use a dictionary here. - DictionaryValue* language_codes = new DictionaryValue(); - language_codes->SetBoolean(language_code, true); + DictionaryValue* languages = new DictionaryValue(); + for (size_t i = 0; i < descriptor.language_codes().size(); ++i) { + languages->SetBoolean(descriptor.language_codes().at(i), true); + } // Check extra languages to see if there are languages associated with // this input method. If these are present, add these. const std::vector<std::string> extra_language_codes = manager->GetInputMethodUtil()->GetExtraLanguageCodesFromId( descriptor.id()); for (size_t j = 0; j < extra_language_codes.size(); ++j) - language_codes->SetBoolean(extra_language_codes[j], true); - dictionary->Set("languageCodeSet", language_codes); + languages->SetBoolean(extra_language_codes[j], true); + dictionary->Set("languageCodeSet", languages); input_method_list->Append(dictionary); } @@ -198,8 +199,10 @@ ListValue* CrosLanguageOptionsHandler::GetLanguageListInternal( // Collect the language codes from the supported input methods. for (size_t i = 0; i < descriptors.size(); ++i) { const input_method::InputMethodDescriptor& descriptor = descriptors[i]; - const std::string language_code = descriptor.language_code(); - language_codes.insert(language_code); + const std::vector<std::string>& languages = + descriptor.language_codes(); + for (size_t i = 0; i < languages.size(); ++i) + language_codes.insert(languages[i]); } // Collect the language codes from extra languages. const std::vector<std::string> extra_language_codes = @@ -316,7 +319,8 @@ base::ListValue* dictionary->SetString("displayName", descriptor.name()); dictionary->SetString("optionsPage", descriptor.options_page_url().spec()); scoped_ptr<DictionaryValue> language_codes(new DictionaryValue()); - language_codes->SetBoolean(descriptor.language_code(), true); + for (size_t i = 0; i < descriptor.language_codes().size(); ++i) + language_codes->SetBoolean(descriptor.language_codes().at(i), true); dictionary->Set("languageCodeSet", language_codes.release()); ime_ids_list->Append(dictionary.release()); } diff --git a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc index fab2730..b51e0f0 100644 --- a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc +++ b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc @@ -45,10 +45,12 @@ class CrosLanguageOptionsHandlerTest : public testing::Test { const std::string& language_code) { std::vector<std::string> layouts; layouts.push_back(raw_layout); + std::vector<std::string> languages; + languages.push_back(language_code); return InputMethodDescriptor(id, "", // name layouts, - language_code, + languages, GURL()); // options page url } }; diff --git a/chromeos/ime/component_extension_ime_manager.cc b/chromeos/ime/component_extension_ime_manager.cc index 40aeb76..c557d09 100644 --- a/chromeos/ime/component_extension_ime_manager.cc +++ b/chromeos/ime/component_extension_ime_manager.cc @@ -143,6 +143,9 @@ input_method::InputMethodDescriptors input_method::InputMethodDescriptors result; for (size_t i = 0; i < component_extension_imes_.size(); ++i) { for (size_t j = 0; j < component_extension_imes_[i].engines.size(); ++j) { + std::vector<std::string> languages; + languages.push_back( + component_extension_imes_[i].engines[j].language_code); result.push_back( input_method::InputMethodDescriptor( GetComponentExtensionIMEId( @@ -150,7 +153,7 @@ input_method::InputMethodDescriptors component_extension_imes_[i].engines[j].engine_id), component_extension_imes_[i].engines[j].display_name, component_extension_imes_[i].engines[j].layouts, - component_extension_imes_[i].engines[j].language_code, + languages, component_extension_imes_[i].options_page_url)); } } diff --git a/chromeos/ime/input_method_descriptor.cc b/chromeos/ime/input_method_descriptor.cc index c19ae8b..785884e 100644 --- a/chromeos/ime/input_method_descriptor.cc +++ b/chromeos/ime/input_method_descriptor.cc @@ -17,12 +17,12 @@ InputMethodDescriptor::InputMethodDescriptor( const std::string& id, const std::string& name, const std::vector<std::string>& keyboard_layouts, - const std::string& language_code, + const std::vector<std::string>& language_codes, const GURL& options_page_url) : id_(id), name_(name), keyboard_layouts_(keyboard_layouts), - language_code_(language_code), + language_codes_(language_codes), options_page_url_(options_page_url) { } diff --git a/chromeos/ime/input_method_descriptor.h b/chromeos/ime/input_method_descriptor.h index fbe687a..fc2cf27 100644 --- a/chromeos/ime/input_method_descriptor.h +++ b/chromeos/ime/input_method_descriptor.h @@ -22,14 +22,16 @@ class CHROMEOS_EXPORT InputMethodDescriptor { InputMethodDescriptor(const std::string& id, const std::string& name, const std::vector<std::string>& keyboard_layouts, - const std::string& language_code, + const std::vector<std::string>& language_codes, const GURL& options_page_url); ~InputMethodDescriptor(); // Accessors const std::string& id() const { return id_; } const std::string& name() const { return name_; } - const std::string& language_code() const { return language_code_; } + const std::vector<std::string>& language_codes() const { + return language_codes_; + } const GURL& options_page_url() const { return options_page_url_; } const std::vector<std::string>& keyboard_layouts() const { return keyboard_layouts_; @@ -52,7 +54,7 @@ class CHROMEOS_EXPORT InputMethodDescriptor { std::vector<std::string> keyboard_layouts_; // Language code like "ko", "ja", "en-US", and "zh-CN". - std::string language_code_; + std::vector<std::string> language_codes_; // Options page URL e.g. // "chrome-extension://ceaajjmckiakobniehbjpdcidfpohlin/options.html". diff --git a/chromeos/ime/input_method_manager.h b/chromeos/ime/input_method_manager.h index 56dcee5..075804e 100644 --- a/chromeos/ime/input_method_manager.h +++ b/chromeos/ime/input_method_manager.h @@ -140,12 +140,13 @@ class CHROMEOS_EXPORT InputMethodManager { // Adds an input method extension. This function does not takes ownership of // |instance|. - virtual void AddInputMethodExtension(const std::string& id, - const std::string& name, - const std::vector<std::string>& layouts, - const std::string& language, - const GURL& options_url, - InputMethodEngine* instance) = 0; + virtual void AddInputMethodExtension( + const std::string& id, + const std::string& name, + const std::vector<std::string>& layouts, + const std::vector<std::string>& languages, + const GURL& options_url, + InputMethodEngine* instance) = 0; // Removes an input method extension. virtual void RemoveInputMethodExtension(const std::string& id) = 0; diff --git a/chromeos/ime/input_method_whitelist.cc b/chromeos/ime/input_method_whitelist.cc index 0f90787..cea052c 100644 --- a/chromeos/ime/input_method_whitelist.cc +++ b/chromeos/ime/input_method_whitelist.cc @@ -34,11 +34,14 @@ InputMethodWhitelist::GetSupportedInputMethods() const { std::vector<std::string> layouts; layouts.push_back(kInputMethods[i].xkb_layout_id); + std::vector<std::string> languages; + languages.push_back(kInputMethods[i].language_code); + input_methods->push_back(InputMethodDescriptor( kInputMethods[i].input_method_id, "", layouts, - kInputMethods[i].language_code, + languages, GURL())); // options page url, not available for non-extension input // method. } |