summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 00:14:24 +0000
committershuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 00:14:24 +0000
commita26aed75cc53cb7726ac9f0eff12eb6bb183f58c (patch)
tree6ad79688c8affc9971baa7559797ec232b33b3d3
parent5748302aabd8ab73edafd689c0c712bd5d85f2f4 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/chromeos/input_method/input_method_manager_impl.cc2
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util.cc30
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util.h3
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util_unittest.cc60
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());