diff options
author | shuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 00:14:24 +0000 |
---|---|---|
committer | shuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 00:14:24 +0000 |
commit | a26aed75cc53cb7726ac9f0eff12eb6bb183f58c (patch) | |
tree | 6ad79688c8affc9971baa7559797ec232b33b3d3 | |
parent | 5748302aabd8ab73edafd689c0c712bd5d85f2f4 (diff) | |
download | chromium_src-a26aed75cc53cb7726ac9f0eff12eb6bb183f58c.zip chromium_src-a26aed75cc53cb7726ac9f0eff12eb6bb183f58c.tar.gz chromium_src-a26aed75cc53cb7726ac9f0eff12eb6bb183f58c.tar.bz2 |
Merge 273753 "Initialize IMF with a whitelist of input methods s..."
> Initialize IMF with a whitelist of input methods so that login screen doesn't need to wait for component extension loading.
>
> BUG=377987
> TEST=Verified on Pixel device.
>
> Review URL: https://codereview.chromium.org/308623002
TBR=shuchen@chromium.org
Review URL: https://codereview.chromium.org/317583002
git-svn-id: svn://svn.chromium.org/chrome/branches/1916/src@274678 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 52 insertions, 43 deletions
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 45588b6..042dff0 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc @@ -59,7 +59,7 @@ InputMethodManagerImpl::InputMethodManagerImpl( scoped_ptr<InputMethodDelegate> delegate) : delegate_(delegate.Pass()), state_(STATE_LOGIN_SCREEN), - util_(delegate_.get(), GetSupportedInputMethods()), + util_(delegate_.get(), whitelist_.GetSupportedInputMethods()), component_extension_ime_manager_(new ComponentExtensionIMEManager()), weak_ptr_factory_(this) { } diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc index 21b9d64..56a9bb6 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.cc +++ b/chrome/browser/chromeos/input_method/input_method_util.cc @@ -867,26 +867,32 @@ void InputMethodUtil::ReloadInternalMaps() { language_code_to_ids_.clear(); id_to_language_code_.clear(); id_to_descriptor_.clear(); - xkb_id_to_descriptor_.clear(); for (size_t i = 0; i < supported_input_methods_->size(); ++i) { - const InputMethodDescriptor& input_method = - supported_input_methods_->at(i); + const InputMethodDescriptor& input_method = supported_input_methods_->at(i); + const std::string input_method_id = + extension_ime_util::GetInputMethodIDByKeyboardLayout(input_method.id()); const std::vector<std::string>& language_codes = input_method.language_codes(); + + // |input_method_id| may be different than input_method.id(). + id_to_descriptor_.insert( + std::make_pair(input_method_id, + InputMethodDescriptor(input_method_id, + input_method.name(), + input_method.indicator(), + input_method.keyboard_layouts(), + input_method.language_codes(), + input_method.is_login_keyboard(), + input_method.options_page_url(), + input_method.input_view_url()))); + for (size_t i = 0; i < language_codes.size(); ++i) { language_code_to_ids_.insert( - std::make_pair(language_codes[i], input_method.id())); + 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())) { - xkb_id_to_descriptor_.insert( - std::make_pair(input_method.GetPreferredKeyboardLayout(), - input_method)); + std::make_pair(input_method_id, language_codes[i])); } } } diff --git a/chrome/browser/chromeos/input_method/input_method_util.h b/chrome/browser/chromeos/input_method/input_method_util.h index b59865b..0fb6df7 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.h +++ b/chrome/browser/chromeos/input_method/input_method_util.h @@ -184,15 +184,12 @@ class InputMethodUtil { // Map from input method ID to associated input method descriptor. typedef std::map< std::string, InputMethodDescriptor> InputMethodIdToDescriptorMap; - // Map from XKB layout ID to associated input method descriptor. - typedef std::map<std::string, InputMethodDescriptor> XkbIdToDescriptorMap; // Map from component extention IME id to associated input method descriptor. typedef std::map<std::string, InputMethodDescriptor> ComponentExtIMEMap; LanguageCodeToIdsMap language_code_to_ids_; std::map<std::string, std::string> id_to_language_code_; InputMethodIdToDescriptorMap id_to_descriptor_; - XkbIdToDescriptorMap xkb_id_to_descriptor_; std::map<std::string, std::string> xkb_layout_to_indicator_; typedef base::hash_map<std::string, int> HashType; 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 f156cc6..b314c09 100644 --- a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/memory/scoped_ptr.h" #include "base/strings/utf_string_conversions.h" +#include "chromeos/ime/extension_ime_util.h" #include "chromeos/ime/fake_input_method_delegate.h" #include "chromeos/ime/input_method_manager.h" #include "chromeos/ime/input_method_whitelist.h" @@ -95,6 +96,10 @@ class InputMethodUtilTest : public testing::Test { util_.SetComponentExtensions(input_methods); } + std::string Id(const std::string& id) { + return extension_ime_util::GetInputMethodIDByKeyboardLayout(id); + } + InputMethodDescriptor GetDesc(const std::string& id, const std::string& raw_layout, const std::string& language_code, @@ -103,13 +108,13 @@ class InputMethodUtilTest : public testing::Test { layouts.push_back(raw_layout); std::vector<std::string> languages; languages.push_back(language_code); - return InputMethodDescriptor(id, - "", // Description. + return InputMethodDescriptor(Id(id), + "", // Description. indicator, // Short name used for indicator. layouts, languages, true, - GURL(), // options page url + GURL(), // options page url GURL()); // input view page url } @@ -312,7 +317,7 @@ TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) { } TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) { - EXPECT_TRUE(util_.IsValidInputMethodId("xkb:us:colemak:eng")); + EXPECT_TRUE(util_.IsValidInputMethodId(Id("xkb:us:colemak:eng"))); EXPECT_TRUE(util_.IsValidInputMethodId(pinyin_ime_id)); EXPECT_FALSE(util_.IsValidInputMethodId("unsupported-input-method")); } @@ -328,13 +333,14 @@ TEST_F(InputMethodUtilTest, TestGetKeyboardLayoutName) { // Supported cases (samples). EXPECT_EQ("us", util_.GetKeyboardLayoutName(pinyin_ime_id)); - EXPECT_EQ("es", util_.GetKeyboardLayoutName("xkb:es::spa")); - EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName("xkb:es:cat:cat")); - EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName("xkb:gb:extd:eng")); - EXPECT_EQ("us", util_.GetKeyboardLayoutName("xkb:us::eng")); - EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName("xkb:us:dvorak:eng")); - EXPECT_EQ("us(colemak)", util_.GetKeyboardLayoutName("xkb:us:colemak:eng")); - EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName("xkb:de:neo:ger")); + EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa"))); + EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat"))); + EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng"))); + EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng"))); + EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng"))); + EXPECT_EQ("us(colemak)", + util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng"))); + EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger"))); } TEST_F(InputMethodUtilTest, TestGetLanguageCodeFromInputMethodId) { @@ -396,59 +402,59 @@ TEST_F(InputMethodUtilTest, TestGetInputMethodIdsForLanguageCode) { // US keyboard + English US UI = US keyboard only. TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_EnUs) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("en-US", *descriptor, &input_method_ids); ASSERT_EQ(1U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); } // US keyboard + Chinese UI = US keyboard + Pinyin IME. TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Zh) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("zh-CN", *descriptor, &input_method_ids); ASSERT_EQ(2U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); EXPECT_EQ(pinyin_ime_id, input_method_ids[1]); // Pinyin for US keybaord. } // US keyboard + Russian UI = US keyboard + Russsian keyboard TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Ru) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("ru", *descriptor, &input_method_ids); ASSERT_EQ(2U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); - EXPECT_EQ("xkb:ru::rus", input_method_ids[1]); // Russian keyboard. + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); + EXPECT_EQ(Id("xkb:ru::rus"), input_method_ids[1]); // Russian keyboard. } // US keyboard + Traditional Chinese = US keyboard + chewing. TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_ZhTw) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("zh-TW", *descriptor, &input_method_ids); ASSERT_EQ(2U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); EXPECT_EQ(zhuyin_ime_id, input_method_ids[1]); // Chewing. } // US keyboard + Thai = US keyboard + kesmanee. TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Th) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("th", *descriptor, &input_method_ids); ASSERT_EQ(2U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); EXPECT_EQ(std::string("_comp_ime_") + kKeyboardExtId + "vkd_th", input_method_ids[1]); // Kesmanee. } @@ -456,22 +462,22 @@ TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Th) { // US keyboard + Vietnamese = US keyboard + TCVN6064. TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Vi) { const InputMethodDescriptor* descriptor = - util_.GetInputMethodDescriptorFromId("xkb:us::eng"); // US keyboard. + util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. std::vector<std::string> input_method_ids; util_.GetFirstLoginInputMethodIds("vi", *descriptor, &input_method_ids); ASSERT_EQ(2U, input_method_ids.size()); - EXPECT_EQ("xkb:us::eng", input_method_ids[0]); + EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); EXPECT_EQ(std::string("_comp_ime_") + kKeyboardExtId + "vkd_vi_tcvn", input_method_ids[1]); // TCVN6064. } TEST_F(InputMethodUtilTest, TestGetLanguageCodesFromInputMethodIds) { std::vector<std::string> input_method_ids; - input_method_ids.push_back("xkb:us::eng"); // English US. - input_method_ids.push_back("xkb:us:dvorak:eng"); // English US Dvorak. + input_method_ids.push_back(Id("xkb:us::eng")); // English US. + input_method_ids.push_back(Id("xkb:us:dvorak:eng")); // English US Dvorak. input_method_ids.push_back(pinyin_ime_id); // Pinyin - input_method_ids.push_back("xkb:fr::fra"); // French France. + input_method_ids.push_back(Id("xkb:fr::fra")); // French France. std::vector<std::string> language_codes; util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes); ASSERT_EQ(3U, language_codes.size()); |