Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_util.cc

Issue 306053005: Adds whitelisted non-extension-based input methods if no component extensions are at present (e.g. … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed test failures. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/input_method/input_method_util.h" 5 #include "chrome/browser/chromeos/input_method/input_method_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 23 matching lines...) Expand all
34 const char* input_method_id; 34 const char* input_method_id;
35 const char* indicator_text; 35 const char* indicator_text;
36 } kMappingFromIdToIndicatorText[] = { 36 } kMappingFromIdToIndicatorText[] = {
37 // To distinguish from "xkb:jp::jpn" 37 // To distinguish from "xkb:jp::jpn"
38 // TODO(nona): Make following variables configurable. http://crbug.com/232260. 38 // TODO(nona): Make following variables configurable. http://crbug.com/232260.
39 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_us", "\xe3\x81\x82" }, 39 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_us", "\xe3\x81\x82" },
40 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_jp", "\xe3\x81\x82" }, 40 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_jp", "\xe3\x81\x82" },
41 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_us", "\xe3\x81\x82" }, 41 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_us", "\xe3\x81\x82" },
42 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_jp", "\xe3\x81\x82" }, 42 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_jp", "\xe3\x81\x82" },
43 // For simplified Chinese input methods 43 // For simplified Chinese input methods
44 { "pinyin", "\xe6\x8b\xbc" }, // U+62FC
45 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin", 44 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin",
46 "\xe6\x8b\xbc" }, 45 "\xe6\x8b\xbc" },
47 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-pinyin", 46 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-pinyin",
48 "\xe6\x8b\xbc" }, 47 "\xe6\x8b\xbc" },
49 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-wubi-1986", 48 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-wubi-1986",
50 "\xe4\xba\x94" }, // U+4E94 49 "\xe4\xba\x94" }, // U+4E94
51 { "pinyin-dv", "\xe6\x8b\xbc" },
52 // For traditional Chinese input methods 50 // For traditional Chinese input methods
53 { "mozc-chewing", "\xe9\x85\xb7" }, // U+9177 51 { "mozc-chewing", "\xe9\x85\xb7" }, // U+9177
54 { "_comp_ime_ekbifjdfhkmdeeajnolmgdlmkllopefizh-hant-t-i0-und", 52 { "_comp_ime_ekbifjdfhkmdeeajnolmgdlmkllopefizh-hant-t-i0-und",
55 "\xE6\xB3\xA8" }, // U+6CE8 53 "\xE6\xB3\xA8" }, // U+6CE8
56 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-und", 54 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-und",
57 "\xE6\xB3\xA8" }, // U+6CE8 55 "\xE6\xB3\xA8" }, // U+6CE8
58 { "m17n:zh:cangjie", "\xe5\x80\x89" }, // U+5009
59 { "_comp_ime_aeebooiibjahgpgmhkeocbeekccfknbjzh-hant-t-i0-cangjie-1987", 56 { "_comp_ime_aeebooiibjahgpgmhkeocbeekccfknbjzh-hant-t-i0-cangjie-1987",
60 "\xe5\x80\x89" }, // U+5009 57 "\xe5\x80\x89" }, // U+5009
61 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-cangjie-1987", 58 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-cangjie-1987",
62 "\xe5\x80\x89" }, // U+5009 59 "\xe5\x80\x89" }, // U+5009
63 { "m17n:zh:quick", "\xe9\x80\x9f" }, // U+901F
64 // For Hangul input method. 60 // For Hangul input method.
65 { "mozc-hangul", "\xed\x95\x9c" }, // U+D55C
66 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_2set", "\xed\x95\x9c" }, 61 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_2set", "\xed\x95\x9c" },
67 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3set390", 62 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3set390",
68 "\xed\x95\x9c" }, 63 "\xed\x95\x9c" },
69 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3setfinal", 64 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3setfinal",
70 "\xed\x95\x9c" }, 65 "\xed\x95\x9c" },
71 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3setnoshift", 66 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_3setnoshift",
72 "\xed\x95\x9c" }, 67 "\xed\x95\x9c" },
73 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_romaja", "\xed\x95\x9c" }, 68 { "_comp_ime_bdgdidmhaijohebebipajioienkglgfohangul_romaja", "\xed\x95\x9c" },
74 { extension_misc::kBrailleImeEngineId, 69 { extension_misc::kBrailleImeEngineId,
75 // U+2803 U+2817 U+2807 (Unicode braille patterns for the letters 'brl' in 70 // U+2803 U+2817 U+2807 (Unicode braille patterns for the letters 'brl' in
76 // English (and many other) braille codes. 71 // English (and many other) braille codes.
77 "\xe2\xa0\x83\xe2\xa0\x97\xe2\xa0\x87" }, 72 "\xe2\xa0\x83\xe2\xa0\x97\xe2\xa0\x87" },
78 }; 73 };
79 74
80 const size_t kMappingFromIdToIndicatorTextLen = 75 const size_t kMappingFromIdToIndicatorTextLen =
81 ARRAYSIZE_UNSAFE(kMappingFromIdToIndicatorText); 76 ARRAYSIZE_UNSAFE(kMappingFromIdToIndicatorText);
82 77
83 // A mapping from an input method id to a resource id for a 78 // A mapping from an input method id to a resource id for a
84 // medium length language indicator. 79 // medium length language indicator.
85 // For those languages that want to display a slightly longer text in the 80 // For those languages that want to display a slightly longer text in the
86 // "Your input method has changed to..." bubble than in the status tray. 81 // "Your input method has changed to..." bubble than in the status tray.
87 // If an entry is not found in this table the short name is used. 82 // If an entry is not found in this table the short name is used.
88 const struct { 83 const struct {
89 const char* input_method_id; 84 const char* input_method_id;
90 const int resource_id; 85 const int resource_id;
91 } kMappingImeIdToMediumLenNameResourceId[] = { 86 } kMappingImeIdToMediumLenNameResourceId[] = {
92 { "m17n:zh:cangjie", IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL },
93 { "m17n:zh:quick", IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL },
94 { "mozc-chewing", IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL },
95 { "mozc-hangul", IDS_LANGUAGES_MEDIUM_LEN_NAME_KOREAN },
96 { "pinyin", IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED },
97 { "pinyin-dv", IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED },
98 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin", 87 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin",
99 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED}, 88 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED},
100 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-pinyin", 89 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-pinyin",
101 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED }, 90 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED },
102 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-wubi-1986", 91 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-wubi-1986",
103 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED }, 92 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_SIMPLIFIED },
104 { "_comp_ime_ekbifjdfhkmdeeajnolmgdlmkllopefizh-hant-t-i0-und", 93 { "_comp_ime_ekbifjdfhkmdeeajnolmgdlmkllopefizh-hant-t-i0-und",
105 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL }, 94 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL },
106 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-und", 95 { "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-und",
107 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL }, 96 IDS_LANGUAGES_MEDIUM_LEN_NAME_CHINESE_TRADITIONAL },
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 "nmblnjkfdkabgdofidlkienfnnbjhnab", 191 "nmblnjkfdkabgdofidlkienfnnbjhnab",
203 "gjhclobljhjhgoebiipblnmdodbmpdgd" 192 "gjhclobljhjhgoebiipblnmdodbmpdgd"
204 }; 193 };
205 194
206 // The new chinese input method id for migration. 195 // The new chinese input method id for migration.
207 // See crbug.com/357384. 196 // See crbug.com/357384.
208 const char* kNewChineseExtensionId = "gjaehgfemfahhmlgpdfknkhdnemmolop"; 197 const char* kNewChineseExtensionId = "gjaehgfemfahhmlgpdfknkhdnemmolop";
209 198
210 const size_t kExtensionIdLen = 32; 199 const size_t kExtensionIdLen = 32;
211 200
212 } // namespace
213
214 namespace chromeos {
215
216 extern const char* kExtensionImePrefix;
217
218 namespace input_method {
219
220 namespace {
221
222 const struct EnglishToResouceId { 201 const struct EnglishToResouceId {
223 const char* english_string_from_ibus; 202 const char* english_string_from_ibus;
224 int resource_id; 203 int resource_id;
225 } kEnglishToResourceIdArray[] = { 204 } kEnglishToResourceIdArray[] = {
226 // For ibus-mozc-hangul 205 // For xkb-layouts.
227 { "Hanja mode", IDS_STATUSBAR_IME_KOREAN_HANJA_INPUT_MODE }, 206 { "xkb:am:phonetic:arm", IDS_STATUSBAR_LAYOUT_ARMENIAN_PHONETIC },
228 { "Hangul mode", IDS_STATUSBAR_IME_KOREAN_HANGUL_INPUT_MODE },
229
230 // For ibus-mozc-pinyin.
231 { "Full/Half width",
232 IDS_STATUSBAR_IME_CHINESE_PINYIN_TOGGLE_FULL_HALF },
233 { "Full/Half width punctuation",
234 IDS_STATUSBAR_IME_CHINESE_PINYIN_TOGGLE_FULL_HALF_PUNCTUATION },
235 // TODO(hsumita): Fixes a typo
236 { "Simplfied/Traditional Chinese",
237 IDS_STATUSBAR_IME_CHINESE_PINYIN_TOGGLE_S_T_CHINESE },
238 { "Chinese",
239 IDS_STATUSBAR_IME_CHINESE_PINYIN_TOGGLE_CHINESE_ENGLISH },
240
241 // For ibus-mozc-chewing.
242 { "English",
243 IDS_STATUSBAR_IME_CHINESE_MOZC_CHEWING_ENGLISH_MODE },
244 { "_Chinese",
245 IDS_STATUSBAR_IME_CHINESE_MOZC_CHEWING_CHINESE_MODE },
246 { "Full-width English",
247 IDS_STATUSBAR_IME_CHINESE_MOZC_CHEWING_FULL_WIDTH_ENGLISH_MODE },
248
249 // For the "Languages and Input" dialog.
250 { "m17n:ar:kbd", IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
251 { "m17n:hi:itrans", // also uses the "STANDARD_INPUT_METHOD" id.
252 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
253 { "m17n:zh:cangjie",
254 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_CHINESE_CANGJIE_INPUT_METHOD },
255 { "m17n:zh:quick",
256 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_CHINESE_QUICK_INPUT_METHOD },
257 { "m17n:fa:isiri",
258 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_PERSIAN_ISIRI_2901_INPUT_METHOD },
259 { "m17n:th:kesmanee",
260 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_THAI_KESMANEE_INPUT_METHOD },
261 { "m17n:th:tis820",
262 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_THAI_TIS820_INPUT_METHOD },
263 { "m17n:th:pattachote",
264 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_THAI_PATTACHOTE_INPUT_METHOD },
265 { "m17n:vi:tcvn",
266 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_TCVN_INPUT_METHOD },
267 { "m17n:vi:telex",
268 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_TELEX_INPUT_METHOD },
269 { "m17n:vi:viqr",
270 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_VIQR_INPUT_METHOD },
271 { "m17n:vi:vni",
272 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_VNI_INPUT_METHOD },
273 { "m17n:bn:itrans",
274 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
275 { "m17n:gu:itrans",
276 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
277 { "m17n:ml:itrans",
278 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
279 { "m17n:mr:itrans",
280 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
281 { "m17n:ta:phonetic",
282 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_TAMIL_PHONETIC },
283 { "m17n:ta:inscript",
284 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_TAMIL_INSCRIPT },
285 { "m17n:ta:tamil99",
286 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_TAMIL_TAMIL99 },
287 { "m17n:ta:itrans",
288 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_TAMIL_ITRANS },
289 { "m17n:ta:typewriter",
290 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_TAMIL_TYPEWRITER },
291 { "m17n:am:sera",
292 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
293 { "m17n:te:itrans",
294 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
295 { "m17n:kn:itrans",
296 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD },
297
298 { "mozc-chewing",
299 IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_INPUT_METHOD },
300 { "pinyin", IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_INPUT_METHOD },
301 { "pinyin-dv",
302 IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_DV_INPUT_METHOD },
303 { "zinnia-japanese",
304 IDS_OPTIONS_SETTINGS_LANGUAGES_JAPANESE_HANDWRITING_INPUT_METHOD },
305 { "mozc-hangul", IDS_OPTIONS_SETTINGS_LANGUAGES_KOREAN_INPUT_METHOD },
306
307 // For ibus-xkb-layouts engine: third_party/ibus-xkb-layouts/files
308 { "xkb:jp::jpn", IDS_STATUSBAR_LAYOUT_JAPAN },
309 { "xkb:si::slv", IDS_STATUSBAR_LAYOUT_SLOVENIA },
310 { "xkb:de::ger", IDS_STATUSBAR_LAYOUT_GERMANY },
311 { "xkb:de:neo:ger", IDS_STATUSBAR_LAYOUT_GERMANY_NEO2 },
312 { "xkb:it::ita", IDS_STATUSBAR_LAYOUT_ITALY },
313 { "xkb:ee::est", IDS_STATUSBAR_LAYOUT_ESTONIA },
314 { "xkb:hu::hun", IDS_STATUSBAR_LAYOUT_HUNGARY },
315 { "xkb:pl::pol", IDS_STATUSBAR_LAYOUT_POLAND },
316 { "xkb:dk::dan", IDS_STATUSBAR_LAYOUT_DENMARK },
317 { "xkb:hr::scr", IDS_STATUSBAR_LAYOUT_CROATIA },
318 { "xkb:br::por", IDS_STATUSBAR_LAYOUT_BRAZIL },
319 { "xkb:rs::srp", IDS_STATUSBAR_LAYOUT_SERBIA },
320 { "xkb:cz::cze", IDS_STATUSBAR_LAYOUT_CZECHIA },
321 { "xkb:cz:qwerty:cze", IDS_STATUSBAR_LAYOUT_CZECHIA_QWERTY },
322 { "xkb:us:dvorak:eng", IDS_STATUSBAR_LAYOUT_USA_DVORAK },
323 { "xkb:us:colemak:eng", IDS_STATUSBAR_LAYOUT_USA_COLEMAK },
324 { "xkb:ro::rum", IDS_STATUSBAR_LAYOUT_ROMANIA },
325 { "xkb:us::eng", IDS_STATUSBAR_LAYOUT_USA },
326 { "xkb:us:altgr-intl:eng", IDS_STATUSBAR_LAYOUT_USA_EXTENDED },
327 { "xkb:us:intl:eng", IDS_STATUSBAR_LAYOUT_USA_INTERNATIONAL },
328 { "xkb:lt::lit", IDS_STATUSBAR_LAYOUT_LITHUANIA },
329 { "xkb:gb:extd:eng", IDS_STATUSBAR_LAYOUT_UNITED_KINGDOM },
330 { "xkb:gb:dvorak:eng", IDS_STATUSBAR_LAYOUT_UNITED_KINGDOM_DVORAK },
331 { "xkb:sk::slo", IDS_STATUSBAR_LAYOUT_SLOVAKIA },
332 { "xkb:ru::rus", IDS_STATUSBAR_LAYOUT_RUSSIA },
333 { "xkb:ru:phonetic:rus", IDS_STATUSBAR_LAYOUT_RUSSIA_PHONETIC },
334 { "xkb:gr::gre", IDS_STATUSBAR_LAYOUT_GREECE },
335 { "xkb:be::fra", IDS_STATUSBAR_LAYOUT_BELGIUM }, 207 { "xkb:be::fra", IDS_STATUSBAR_LAYOUT_BELGIUM },
336 { "xkb:be::ger", IDS_STATUSBAR_LAYOUT_BELGIUM }, 208 { "xkb:be::ger", IDS_STATUSBAR_LAYOUT_BELGIUM },
337 { "xkb:be::nld", IDS_STATUSBAR_LAYOUT_BELGIUM }, 209 { "xkb:be::nld", IDS_STATUSBAR_LAYOUT_BELGIUM },
338 { "xkb:bg::bul", IDS_STATUSBAR_LAYOUT_BULGARIA }, 210 { "xkb:bg::bul", IDS_STATUSBAR_LAYOUT_BULGARIA },
339 { "xkb:bg:phonetic:bul", IDS_STATUSBAR_LAYOUT_BULGARIA_PHONETIC }, 211 { "xkb:bg:phonetic:bul", IDS_STATUSBAR_LAYOUT_BULGARIA_PHONETIC },
212 { "xkb:br::por", IDS_STATUSBAR_LAYOUT_BRAZIL },
213 { "xkb:by::bel", IDS_STATUSBAR_LAYOUT_BELARUSIAN },
214 { "xkb:ca::fra", IDS_STATUSBAR_LAYOUT_CANADA },
215 { "xkb:ca:eng:eng", IDS_STATUSBAR_LAYOUT_CANADA_ENGLISH },
216 { "xkb:ca:multix:fra", IDS_STATUSBAR_LAYOUT_CANADIAN_MULTILINGUAL },
340 { "xkb:ch::ger", IDS_STATUSBAR_LAYOUT_SWITZERLAND }, 217 { "xkb:ch::ger", IDS_STATUSBAR_LAYOUT_SWITZERLAND },
341 { "xkb:ch:fr:fra", IDS_STATUSBAR_LAYOUT_SWITZERLAND_FRENCH }, 218 { "xkb:ch:fr:fra", IDS_STATUSBAR_LAYOUT_SWITZERLAND_FRENCH },
219 { "xkb:cz::cze", IDS_STATUSBAR_LAYOUT_CZECHIA },
220 { "xkb:cz:qwerty:cze", IDS_STATUSBAR_LAYOUT_CZECHIA_QWERTY },
221 { "xkb:de::ger", IDS_STATUSBAR_LAYOUT_GERMANY },
222 { "xkb:de:neo:ger", IDS_STATUSBAR_LAYOUT_GERMANY_NEO2 },
223 { "xkb:dk::dan", IDS_STATUSBAR_LAYOUT_DENMARK },
224 { "xkb:ee::est", IDS_STATUSBAR_LAYOUT_ESTONIA },
225 { "xkb:es::spa", IDS_STATUSBAR_LAYOUT_SPAIN },
226 { "xkb:es:cat:cat", IDS_STATUSBAR_LAYOUT_SPAIN_CATALAN },
227 { "xkb:fi::fin", IDS_STATUSBAR_LAYOUT_FINLAND },
228 { "xkb:fr::fra", IDS_STATUSBAR_LAYOUT_FRANCE },
229 { "xkb:gb:dvorak:eng", IDS_STATUSBAR_LAYOUT_UNITED_KINGDOM_DVORAK },
230 { "xkb:gb:extd:eng", IDS_STATUSBAR_LAYOUT_UNITED_KINGDOM },
231 { "xkb:ge::geo", IDS_STATUSBAR_LAYOUT_GEORGIAN },
232 { "xkb:gr::gre", IDS_STATUSBAR_LAYOUT_GREECE },
233 { "xkb:hr::scr", IDS_STATUSBAR_LAYOUT_CROATIA },
234 { "xkb:hu::hun", IDS_STATUSBAR_LAYOUT_HUNGARY },
235 { "xkb:il::heb", IDS_STATUSBAR_LAYOUT_ISRAEL },
236 { "xkb:is::ice", IDS_STATUSBAR_LAYOUT_ICELANDIC },
237 { "xkb:it::ita", IDS_STATUSBAR_LAYOUT_ITALY },
238 { "xkb:jp::jpn", IDS_STATUSBAR_LAYOUT_JAPAN },
239 { "xkb:latam::spa", IDS_STATUSBAR_LAYOUT_LATIN_AMERICAN },
240 { "xkb:lt::lit", IDS_STATUSBAR_LAYOUT_LITHUANIA },
241 { "xkb:lv:apostrophe:lav", IDS_STATUSBAR_LAYOUT_LATVIA },
242 { "xkb:mn::mon", IDS_STATUSBAR_LAYOUT_MONGOLIAN },
243 { "xkb:nl::nld", IDS_STATUSBAR_LAYOUT_NETHERLANDS },
244 { "xkb:no::nob", IDS_STATUSBAR_LAYOUT_NORWAY },
245 { "xkb:pl::pol", IDS_STATUSBAR_LAYOUT_POLAND },
246 { "xkb:pt::por", IDS_STATUSBAR_LAYOUT_PORTUGAL },
247 { "xkb:ro::rum", IDS_STATUSBAR_LAYOUT_ROMANIA },
248 { "xkb:rs::srp", IDS_STATUSBAR_LAYOUT_SERBIA },
249 { "xkb:ru::rus", IDS_STATUSBAR_LAYOUT_RUSSIA },
250 { "xkb:ru:phonetic:rus", IDS_STATUSBAR_LAYOUT_RUSSIA_PHONETIC },
251 { "xkb:se::swe", IDS_STATUSBAR_LAYOUT_SWEDEN },
252 { "xkb:si::slv", IDS_STATUSBAR_LAYOUT_SLOVENIA },
253 { "xkb:sk::slo", IDS_STATUSBAR_LAYOUT_SLOVAKIA },
342 { "xkb:tr::tur", IDS_STATUSBAR_LAYOUT_TURKEY }, 254 { "xkb:tr::tur", IDS_STATUSBAR_LAYOUT_TURKEY },
343 { "xkb:pt::por", IDS_STATUSBAR_LAYOUT_PORTUGAL },
344 { "xkb:es::spa", IDS_STATUSBAR_LAYOUT_SPAIN },
345 { "xkb:fi::fin", IDS_STATUSBAR_LAYOUT_FINLAND },
346 { "xkb:ua::ukr", IDS_STATUSBAR_LAYOUT_UKRAINE }, 255 { "xkb:ua::ukr", IDS_STATUSBAR_LAYOUT_UKRAINE },
347 { "xkb:es:cat:cat", IDS_STATUSBAR_LAYOUT_SPAIN_CATALAN }, 256 { "xkb:us::eng", IDS_STATUSBAR_LAYOUT_USA },
348 { "xkb:fr::fra", IDS_STATUSBAR_LAYOUT_FRANCE }, 257 { "xkb:us:altgr-intl:eng", IDS_STATUSBAR_LAYOUT_USA_EXTENDED },
349 { "xkb:no::nob", IDS_STATUSBAR_LAYOUT_NORWAY }, 258 { "xkb:us:colemak:eng", IDS_STATUSBAR_LAYOUT_USA_COLEMAK },
350 { "xkb:se::swe", IDS_STATUSBAR_LAYOUT_SWEDEN }, 259 { "xkb:us:dvorak:eng", IDS_STATUSBAR_LAYOUT_USA_DVORAK },
351 { "xkb:nl::nld", IDS_STATUSBAR_LAYOUT_NETHERLANDS }, 260 { "xkb:us:intl:eng", IDS_STATUSBAR_LAYOUT_USA_INTERNATIONAL },
352 { "xkb:latam::spa", IDS_STATUSBAR_LAYOUT_LATIN_AMERICAN },
353 { "xkb:lv:apostrophe:lav", IDS_STATUSBAR_LAYOUT_LATVIA },
354 { "xkb:ca::fra", IDS_STATUSBAR_LAYOUT_CANADA },
355 { "xkb:ca:eng:eng", IDS_STATUSBAR_LAYOUT_CANADA_ENGLISH },
356 { "xkb:il::heb", IDS_STATUSBAR_LAYOUT_ISRAEL },
357 { "xkb:kr:kr104:kor", IDS_STATUSBAR_LAYOUT_KOREA_104 },
358 { "xkb:is::ice", IDS_STATUSBAR_LAYOUT_ICELANDIC },
359 { "xkb:ca:multix:fra", IDS_STATUSBAR_LAYOUT_CANADIAN_MULTILINGUAL },
360 { "xkb:by::bel", IDS_STATUSBAR_LAYOUT_BELARUSIAN },
361 { "xkb:am:phonetic:arm", IDS_STATUSBAR_LAYOUT_ARMENIAN_PHONETIC },
362 { "xkb:ge::geo", IDS_STATUSBAR_LAYOUT_GEORGIAN },
363 { "xkb:mn::mon", IDS_STATUSBAR_LAYOUT_MONGOLIAN },
364
365 { "english-m", IDS_STATUSBAR_LAYOUT_USA_MYSTERY },
366 }; 261 };
367 const size_t kEnglishToResourceIdArraySize = 262 const size_t kEnglishToResourceIdArraySize =
368 arraysize(kEnglishToResourceIdArray); 263 arraysize(kEnglishToResourceIdArray);
369 264
370 } // namespace 265 } // namespace
371 266
267 namespace chromeos {
268
269 namespace input_method {
270
372 InputMethodUtil::InputMethodUtil( 271 InputMethodUtil::InputMethodUtil(
373 InputMethodDelegate* delegate, 272 InputMethodDelegate* delegate,
374 scoped_ptr<InputMethodDescriptors> supported_input_methods) 273 scoped_ptr<InputMethodDescriptors> supported_input_methods)
375 : supported_input_methods_(supported_input_methods.Pass()), 274 : supported_input_methods_(supported_input_methods.Pass()),
376 delegate_(delegate) { 275 delegate_(delegate) {
377 // Makes sure the supported input methods at least have the fallback ime. 276 // Makes sure the supported input methods at least have the fallback ime.
378 // So that it won't cause massive test failures. 277 // So that it won't cause massive test failures.
379 if (supported_input_methods_->empty()) 278 if (supported_input_methods_->empty())
380 supported_input_methods_->push_back(GetFallbackInputMethodDescriptor()); 279 supported_input_methods_->push_back(GetFallbackInputMethodDescriptor());
381 280
(...skipping 13 matching lines...) Expand all
395 xkb_layout_to_indicator_[kXkbIndicators[i][0]] = kXkbIndicators[i][1]; 294 xkb_layout_to_indicator_[kXkbIndicators[i][0]] = kXkbIndicators[i][1];
396 } 295 }
397 } 296 }
398 297
399 InputMethodUtil::~InputMethodUtil() { 298 InputMethodUtil::~InputMethodUtil() {
400 } 299 }
401 300
402 bool InputMethodUtil::TranslateStringInternal( 301 bool InputMethodUtil::TranslateStringInternal(
403 const std::string& english_string, base::string16 *out_string) const { 302 const std::string& english_string, base::string16 *out_string) const {
404 DCHECK(out_string); 303 DCHECK(out_string);
405 HashType::const_iterator iter = english_to_resource_id_.find(english_string); 304 // |english_string| could be an input method id. So legacy xkb id is required
305 // to get the translated string.
306 std::string key_string = extension_ime_util::MaybeGetLegacyXkbId(
307 english_string);
308 HashType::const_iterator iter = english_to_resource_id_.find(key_string);
309
406 if (iter == english_to_resource_id_.end()) { 310 if (iter == english_to_resource_id_.end()) {
407 // TODO(yusukes): Write Autotest which checks if all display names and all 311 // TODO(yusukes): Write Autotest which checks if all display names and all
408 // property names for supported input methods are listed in the resource 312 // property names for supported input methods are listed in the resource
409 // ID array (crosbug.com/4572). 313 // ID array (crosbug.com/4572).
410 LOG(ERROR) << "Resource ID is not found for: " << english_string; 314 LOG(ERROR) << "Resource ID is not found for: " << key_string;
Yuki 2014/06/02 06:28:52 We'd better log both of |key_string| and |english_
Shu Chen 2014/06/02 09:45:02 Done.
411 return false; 315 return false;
412 } 316 }
413 317
414 *out_string = delegate_->GetLocalizedString(iter->second); 318 *out_string = delegate_->GetLocalizedString(iter->second);
415 return true; 319 return true;
416 } 320 }
417 321
418 base::string16 InputMethodUtil::TranslateString( 322 base::string16 InputMethodUtil::TranslateString(
419 const std::string& english_string) const { 323 const std::string& english_string) const {
420 base::string16 localized_string; 324 base::string16 localized_string;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 // Special case for German, French and Dutch: these languages have multiple 447 // Special case for German, French and Dutch: these languages have multiple
544 // keyboard layouts and share the same layout of keyboard (Belgian). We need 448 // keyboard layouts and share the same layout of keyboard (Belgian). We need
545 // to show explicitly the language for the layout. For Arabic, Amharic, and 449 // to show explicitly the language for the layout. For Arabic, Amharic, and
546 // Indic languages: they share "Standard Input Method". 450 // Indic languages: they share "Standard Input Method".
547 const base::string16 standard_input_method_text = 451 const base::string16 standard_input_method_text =
548 delegate_->GetLocalizedString( 452 delegate_->GetLocalizedString(
549 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD); 453 IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_STANDARD_INPUT_METHOD);
550 DCHECK(!input_method.language_codes().empty()); 454 DCHECK(!input_method.language_codes().empty());
551 const std::string language_code = input_method.language_codes().at(0); 455 const std::string language_code = input_method.language_codes().at(0);
552 456
553 // Before translate the string, convert the input method id to legacy xkb id 457 base::string16 text = TranslateString(input_method.id());
554 // if possible.
555 // TODO(shuchen): the GetInputMethodLongName() method should be removed when
556 // finish the wrapping of xkb to extension.
557 base::string16 text = TranslateString(
558 extension_ime_util::MaybeGetLegacyXkbId(input_method.id()));
559 if (text == standard_input_method_text || 458 if (text == standard_input_method_text ||
560 language_code == "de" || 459 language_code == "de" ||
561 language_code == "fr" || 460 language_code == "fr" ||
562 language_code == "nl") { 461 language_code == "nl") {
563 const base::string16 language_name = delegate_->GetDisplayLanguageName( 462 const base::string16 language_name = delegate_->GetDisplayLanguageName(
564 language_code); 463 language_code);
565 464
566 text = language_name + base::UTF8ToUTF16(" - ") + text; 465 text = language_name + base::UTF8ToUTF16(" - ") + text;
567 } 466 }
568 467
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 if (descriptor && 560 if (descriptor &&
662 descriptor->id() != current_input_method.id() && 561 descriptor->id() != current_input_method.id() &&
663 descriptor->GetPreferredKeyboardLayout() == 562 descriptor->GetPreferredKeyboardLayout() ==
664 current_input_method.GetPreferredKeyboardLayout()) { 563 current_input_method.GetPreferredKeyboardLayout()) {
665 most_popular_id = input_method_id; 564 most_popular_id = input_method_id;
666 break; 565 break;
667 } 566 }
668 } 567 }
669 // Add the most popular input method ID, if it's different from the 568 // Add the most popular input method ID, if it's different from the
670 // current input method. 569 // current input method.
671 if (most_popular_id != current_input_method.id() && 570 if (most_popular_id != current_input_method.id()) {
672 // TODO(yusukes): Remove this hack when we remove the "english-m" IME.
673 most_popular_id != "english-m") {
674 out_input_method_ids->push_back(most_popular_id); 571 out_input_method_ids->push_back(most_popular_id);
675 } 572 }
676 } 573 }
677 574
678 void InputMethodUtil::GetLanguageCodesFromInputMethodIds( 575 void InputMethodUtil::GetLanguageCodesFromInputMethodIds(
679 const std::vector<std::string>& input_method_ids, 576 const std::vector<std::string>& input_method_ids,
680 std::vector<std::string>* out_language_codes) const { 577 std::vector<std::string>* out_language_codes) const {
681 out_language_codes->clear(); 578 out_language_codes->clear();
682 579
683 for (size_t i = 0; i < input_method_ids.size(); ++i) { 580 for (size_t i = 0; i < input_method_ids.size(); ++i) {
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 "", 755 "",
859 "US", 756 "US",
860 layouts, 757 layouts,
861 languages, 758 languages,
862 true, // login keyboard. 759 true, // login keyboard.
863 GURL(), // options page, not available. 760 GURL(), // options page, not available.
864 GURL()); // input view page, not available. 761 GURL()); // input view page, not available.
865 } 762 }
866 763
867 void InputMethodUtil::ReloadInternalMaps() { 764 void InputMethodUtil::ReloadInternalMaps() {
868 if (supported_input_methods_->size() <= 1) {
869 DVLOG(1) << "GetSupportedInputMethods returned a fallback ID";
870 // TODO(yusukes): Handle this error in nicer way.
871 }
872
873 // Clear the existing maps. 765 // Clear the existing maps.
874 language_code_to_ids_.clear(); 766 language_code_to_ids_.clear();
875 id_to_language_code_.clear(); 767 id_to_language_code_.clear();
876 id_to_descriptor_.clear(); 768 id_to_descriptor_.clear();
877 769
878 for (size_t i = 0; i < supported_input_methods_->size(); ++i) { 770 for (size_t i = 0; i < supported_input_methods_->size(); ++i) {
879 const InputMethodDescriptor& input_method = supported_input_methods_->at(i); 771 const InputMethodDescriptor& input_method = supported_input_methods_->at(i);
Yuki 2014/06/02 06:28:52 s/at(i)/[i]/
Shu Chen 2014/06/02 09:45:02 Done.
880 const std::string input_method_id =
881 extension_ime_util::GetInputMethodIDByKeyboardLayout(input_method.id());
882 const std::vector<std::string>& language_codes = 772 const std::vector<std::string>& language_codes =
883 input_method.language_codes(); 773 input_method.language_codes();
884 774
885 // |input_method_id| may be different than input_method.id(). 775 id_to_descriptor_.insert(std::make_pair(input_method.id(), input_method));
886 id_to_descriptor_.insert(
887 std::make_pair(input_method_id,
888 InputMethodDescriptor(input_method_id,
889 input_method.name(),
890 input_method.indicator(),
891 input_method.keyboard_layouts(),
892 input_method.language_codes(),
893 input_method.is_login_keyboard(),
894 input_method.options_page_url(),
895 input_method.input_view_url())));
896
897 for (size_t i = 0; i < language_codes.size(); ++i) { 776 for (size_t i = 0; i < language_codes.size(); ++i) {
898 language_code_to_ids_.insert( 777 language_code_to_ids_.insert(
899 std::make_pair(language_codes[i], input_method_id)); 778 std::make_pair(language_codes[i], input_method.id()));
900 // Remember the pairs. 779 // Remember the pairs.
901 id_to_language_code_.insert( 780 id_to_language_code_.insert(
902 std::make_pair(input_method_id, language_codes[i])); 781 std::make_pair(input_method.id(), language_codes[i]));
903 } 782 }
904 } 783 }
905 } 784 }
906 785
907 } // namespace input_method 786 } // namespace input_method
908 } // namespace chromeos 787 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698