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

Side by Side Diff: ui/events/keycodes/keyboard_code_conversion_unittest.cc

Issue 841263005: Use DOM- rather than Windows-based key code for non-layout cases. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address review comments (sadrul) Created 5 years, 8 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/events/keycodes/keyboard_code_conversion.h"
6
7 #include "base/basictypes.h"
8 #include "base/strings/stringprintf.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/events/event_constants.h"
11 #include "ui/events/keycodes/dom3/dom_code.h"
12 #include "ui/events/keycodes/dom3/dom_key.h"
13 #include "ui/events/keycodes/dom4/keycode_converter.h"
14 #include "ui/events/keycodes/keyboard_codes.h"
15
16 namespace {
17
18 struct Meaning {
19 bool defined;
20 ui::DomKey dom_key;
21 base::char16 character;
22 ui::KeyboardCode legacy_key_code;
23 };
24
25 const Meaning kUndefined = {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN};
26
27 void CheckDomCodeToMeaning(const char* label,
28 bool f(ui::DomCode dom_code,
29 int flags,
30 ui::DomKey* out_dom_key,
31 base::char16* out_character,
32 ui::KeyboardCode* out_key_code),
33 ui::DomCode dom_code,
34 int event_flags,
35 const Meaning& result) {
36 ui::DomKey result_dom_key = ui::DomKey::NONE;
37 base::char16 result_character = 0;
38 ui::KeyboardCode result_legacy_key_code = ui::VKEY_UNKNOWN;
39 bool success = f(dom_code, event_flags, &result_dom_key, &result_character,
40 &result_legacy_key_code);
41 SCOPED_TRACE(
42 base::StringPrintf("%s %s %06X:%04X", label,
43 ui::KeycodeConverter::DomCodeToCodeString(dom_code),
44 static_cast<int>(dom_code), event_flags));
45 EXPECT_EQ(result.defined, success);
46 if (success) {
47 EXPECT_EQ(result.dom_key, result_dom_key);
48 EXPECT_EQ(result.character, result_character);
49 EXPECT_EQ(result.legacy_key_code, result_legacy_key_code);
50 } else {
51 // Should not have touched output parameters.
52 EXPECT_EQ(ui::DomKey::NONE, result_dom_key);
53 EXPECT_EQ(0, result_character);
54 EXPECT_EQ(ui::VKEY_UNKNOWN, result_legacy_key_code);
55 }
56 }
57
58 TEST(KeyboardCodeConversion, ControlCharacters) {
59 // The codes in this table are handled by |DomCodeToControlCharacter()|.
60 static const struct {
61 ui::DomCode dom_code;
62 Meaning control;
63 Meaning control_shift;
64 } kControlCharacters[] = {
65 {ui::DomCode::KEY_A,
66 {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A},
67 {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A}},
68 {ui::DomCode::KEY_B,
69 {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B},
70 {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B}},
71 {ui::DomCode::KEY_C,
72 {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C},
73 {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C}},
74 {ui::DomCode::KEY_D,
75 {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D},
76 {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D}},
77 {ui::DomCode::KEY_E,
78 {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E},
79 {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E}},
80 {ui::DomCode::KEY_F,
81 {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F},
82 {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F}},
83 {ui::DomCode::KEY_G,
84 {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G},
85 {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G}},
86 {ui::DomCode::KEY_H,
87 {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK},
88 {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK}},
89 {ui::DomCode::KEY_I,
90 {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB},
91 {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB}},
92 {ui::DomCode::KEY_J,
93 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J},
94 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J}},
95 {ui::DomCode::KEY_K,
96 {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K},
97 {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K}},
98 {ui::DomCode::KEY_L,
99 {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L},
100 {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L}},
101 {ui::DomCode::KEY_M,
102 {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN},
103 {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN}},
104 {ui::DomCode::KEY_N,
105 {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N},
106 {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N}},
107 {ui::DomCode::KEY_O,
108 {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O},
109 {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O}},
110 {ui::DomCode::KEY_P,
111 {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P},
112 {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P}},
113 {ui::DomCode::KEY_Q,
114 {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q},
115 {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q}},
116 {ui::DomCode::KEY_R,
117 {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R},
118 {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R}},
119 {ui::DomCode::KEY_S,
120 {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S},
121 {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S}},
122 {ui::DomCode::KEY_T,
123 {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T},
124 {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T}},
125 {ui::DomCode::KEY_U,
126 {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U},
127 {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U}},
128 {ui::DomCode::KEY_V,
129 {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V},
130 {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V}},
131 {ui::DomCode::KEY_W,
132 {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W},
133 {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W}},
134 {ui::DomCode::KEY_X,
135 {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X},
136 {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X}},
137 {ui::DomCode::KEY_Y,
138 {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y},
139 {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y}},
140 {ui::DomCode::KEY_Z,
141 {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z},
142 {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z}},
143 };
144 for (const auto& it : kControlCharacters) {
145 // Verify |DomCodeToControlCharacter()|.
146 CheckDomCodeToMeaning("c_cc_n", ui::DomCodeToControlCharacter, it.dom_code,
147 ui::EF_NONE, kUndefined);
148 CheckDomCodeToMeaning("c_cc_c", ui::DomCodeToControlCharacter, it.dom_code,
149 ui::EF_CONTROL_DOWN, it.control);
150 CheckDomCodeToMeaning("c_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
151 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
152 it.control_shift);
153 // Verify |DomCodeToUsLayoutMeaning()|.
154 CheckDomCodeToMeaning("c_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
155 ui::EF_CONTROL_DOWN, it.control);
156 CheckDomCodeToMeaning("c_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
157 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
158 it.control_shift);
159 }
160
161 // The codes in this table are sensitive to the Shift state, so they are
162 // handled differently by |DomCodeToControlCharacter()|, which returns false
163 // for unknown combinations, vs |DomCodeToUsLayoutMeaning()|, which returns
164 // true with DomKey::UNIDENTIFIED.
165 static const struct {
166 ui::DomCode dom_code;
167 Meaning cc_control;
168 Meaning cc_control_shift;
169 Meaning us_control;
170 Meaning us_control_shift;
171 } kShiftControlCharacters[] = {
172 {ui::DomCode::DIGIT2,
173 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
174 {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2},
175 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_2},
176 {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2}},
177 {ui::DomCode::DIGIT6,
178 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
179 {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6},
180 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_6},
181 {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6}},
182 {ui::DomCode::MINUS,
183 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
184 {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS},
185 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_MINUS},
186 {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS}},
187 {ui::DomCode::ENTER,
188 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN},
189 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
190 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN},
191 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_RETURN}},
192 {ui::DomCode::BRACKET_LEFT,
193 {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4},
194 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
195 {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4},
196 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_4}},
197 {ui::DomCode::BACKSLASH,
198 {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5},
199 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
200 {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5},
201 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_5}},
202 {ui::DomCode::BRACKET_RIGHT,
203 {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6},
204 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
205 {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6},
206 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_6}},
207 };
208 for (const auto& it : kShiftControlCharacters) {
209 // Verify |DomCodeToControlCharacter()|.
210 CheckDomCodeToMeaning("s_cc_n", ui::DomCodeToControlCharacter, it.dom_code,
211 ui::EF_NONE, kUndefined);
212 CheckDomCodeToMeaning("s_cc_c", ui::DomCodeToControlCharacter, it.dom_code,
213 ui::EF_CONTROL_DOWN, it.cc_control);
214 CheckDomCodeToMeaning("s_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
215 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
216 it.cc_control_shift);
217 // Verify |DomCodeToUsLayoutMeaning()|.
218 CheckDomCodeToMeaning("s_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
219 ui::EF_CONTROL_DOWN, it.us_control);
220 CheckDomCodeToMeaning("s_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
221 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
222 it.us_control_shift);
223 }
224
225 // These codes are not handled by |DomCodeToControlCharacter()| directly.
226 static const struct {
227 ui::DomCode dom_code;
228 Meaning normal;
229 Meaning control;
230 } kNonControlCharacters[] = {
231 // Modifiers are handled by |DomCodeToUsLayoutMeaning()| without regard
232 // to whether Control is down.
233 {ui::DomCode::CONTROL_LEFT,
234 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL},
235 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}},
236 {ui::DomCode::CONTROL_RIGHT,
237 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL},
238 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}},
239 {ui::DomCode::SHIFT_LEFT,
240 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT},
241 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}},
242 {ui::DomCode::SHIFT_RIGHT,
243 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT},
244 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}},
245 {ui::DomCode::ALT_LEFT,
246 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU},
247 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}},
248 {ui::DomCode::ALT_RIGHT,
249 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU},
250 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}},
251 {ui::DomCode::OS_LEFT,
252 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN},
253 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}},
254 {ui::DomCode::OS_RIGHT,
255 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN},
256 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}},
257 // Non-modifiers (a representative sample here) succeed with
258 // DomKey::UNIDENTIFIED when Control is down.
259 {ui::DomCode::DIGIT1,
260 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
261 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_1}},
262 {ui::DomCode::EQUAL,
263 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS},
264 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_PLUS}},
265 {ui::DomCode::TAB,
266 {true, ui::DomKey::TAB, 9, ui::VKEY_TAB},
267 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_TAB}},
268 {ui::DomCode::F1,
269 {true, ui::DomKey::F1, 0, ui::VKEY_F1},
270 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_F1}},
271 {ui::DomCode::VOLUME_UP,
272 {true, ui::DomKey::VOLUME_UP, 0, ui::VKEY_VOLUME_UP},
273 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_VOLUME_UP}},
274 };
275 for (const auto& it : kNonControlCharacters) {
276 // Verify |DomCodeToControlCharacter()|.
277 CheckDomCodeToMeaning("n_cc_n", ui::DomCodeToControlCharacter, it.dom_code,
278 ui::EF_NONE, kUndefined);
279 CheckDomCodeToMeaning("n_cc_c", ui::DomCodeToControlCharacter, it.dom_code,
280 ui::EF_CONTROL_DOWN, kUndefined);
281 CheckDomCodeToMeaning("n_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
282 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, kUndefined);
283 // Verify |DomCodeToUsLayoutMeaning()|.
284 CheckDomCodeToMeaning("n_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code,
285 ui::EF_NONE, it.normal);
286 CheckDomCodeToMeaning("n_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
287 ui::EF_CONTROL_DOWN, it.control);
288 CheckDomCodeToMeaning("n_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
289 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, it.control);
290 }
291 }
292
293 TEST(KeyboardCodeConversion, UsLayout) {
294 static const struct {
295 ui::DomCode dom_code;
296 Meaning normal;
297 Meaning shift;
298 } kPrintableUsLayout[] = {
299 {ui::DomCode::KEY_A,
300 {true, ui::DomKey::CHARACTER, 'a', ui::VKEY_A},
301 {true, ui::DomKey::CHARACTER, 'A', ui::VKEY_A}},
302 {ui::DomCode::KEY_B,
303 {true, ui::DomKey::CHARACTER, 'b', ui::VKEY_B},
304 {true, ui::DomKey::CHARACTER, 'B', ui::VKEY_B}},
305 {ui::DomCode::KEY_C,
306 {true, ui::DomKey::CHARACTER, 'c', ui::VKEY_C},
307 {true, ui::DomKey::CHARACTER, 'C', ui::VKEY_C}},
308 {ui::DomCode::KEY_D,
309 {true, ui::DomKey::CHARACTER, 'd', ui::VKEY_D},
310 {true, ui::DomKey::CHARACTER, 'D', ui::VKEY_D}},
311 {ui::DomCode::KEY_E,
312 {true, ui::DomKey::CHARACTER, 'e', ui::VKEY_E},
313 {true, ui::DomKey::CHARACTER, 'E', ui::VKEY_E}},
314 {ui::DomCode::KEY_F,
315 {true, ui::DomKey::CHARACTER, 'f', ui::VKEY_F},
316 {true, ui::DomKey::CHARACTER, 'F', ui::VKEY_F}},
317 {ui::DomCode::KEY_G,
318 {true, ui::DomKey::CHARACTER, 'g', ui::VKEY_G},
319 {true, ui::DomKey::CHARACTER, 'G', ui::VKEY_G}},
320 {ui::DomCode::KEY_H,
321 {true, ui::DomKey::CHARACTER, 'h', ui::VKEY_H},
322 {true, ui::DomKey::CHARACTER, 'H', ui::VKEY_H}},
323 {ui::DomCode::KEY_I,
324 {true, ui::DomKey::CHARACTER, 'i', ui::VKEY_I},
325 {true, ui::DomKey::CHARACTER, 'I', ui::VKEY_I}},
326 {ui::DomCode::KEY_J,
327 {true, ui::DomKey::CHARACTER, 'j', ui::VKEY_J},
328 {true, ui::DomKey::CHARACTER, 'J', ui::VKEY_J}},
329 {ui::DomCode::KEY_K,
330 {true, ui::DomKey::CHARACTER, 'k', ui::VKEY_K},
331 {true, ui::DomKey::CHARACTER, 'K', ui::VKEY_K}},
332 {ui::DomCode::KEY_L,
333 {true, ui::DomKey::CHARACTER, 'l', ui::VKEY_L},
334 {true, ui::DomKey::CHARACTER, 'L', ui::VKEY_L}},
335 {ui::DomCode::KEY_M,
336 {true, ui::DomKey::CHARACTER, 'm', ui::VKEY_M},
337 {true, ui::DomKey::CHARACTER, 'M', ui::VKEY_M}},
338 {ui::DomCode::KEY_N,
339 {true, ui::DomKey::CHARACTER, 'n', ui::VKEY_N},
340 {true, ui::DomKey::CHARACTER, 'N', ui::VKEY_N}},
341 {ui::DomCode::KEY_O,
342 {true, ui::DomKey::CHARACTER, 'o', ui::VKEY_O},
343 {true, ui::DomKey::CHARACTER, 'O', ui::VKEY_O}},
344 {ui::DomCode::KEY_P,
345 {true, ui::DomKey::CHARACTER, 'p', ui::VKEY_P},
346 {true, ui::DomKey::CHARACTER, 'P', ui::VKEY_P}},
347 {ui::DomCode::KEY_Q,
348 {true, ui::DomKey::CHARACTER, 'q', ui::VKEY_Q},
349 {true, ui::DomKey::CHARACTER, 'Q', ui::VKEY_Q}},
350 {ui::DomCode::KEY_R,
351 {true, ui::DomKey::CHARACTER, 'r', ui::VKEY_R},
352 {true, ui::DomKey::CHARACTER, 'R', ui::VKEY_R}},
353 {ui::DomCode::KEY_S,
354 {true, ui::DomKey::CHARACTER, 's', ui::VKEY_S},
355 {true, ui::DomKey::CHARACTER, 'S', ui::VKEY_S}},
356 {ui::DomCode::KEY_T,
357 {true, ui::DomKey::CHARACTER, 't', ui::VKEY_T},
358 {true, ui::DomKey::CHARACTER, 'T', ui::VKEY_T}},
359 {ui::DomCode::KEY_U,
360 {true, ui::DomKey::CHARACTER, 'u', ui::VKEY_U},
361 {true, ui::DomKey::CHARACTER, 'U', ui::VKEY_U}},
362 {ui::DomCode::KEY_V,
363 {true, ui::DomKey::CHARACTER, 'v', ui::VKEY_V},
364 {true, ui::DomKey::CHARACTER, 'V', ui::VKEY_V}},
365 {ui::DomCode::KEY_W,
366 {true, ui::DomKey::CHARACTER, 'w', ui::VKEY_W},
367 {true, ui::DomKey::CHARACTER, 'W', ui::VKEY_W}},
368 {ui::DomCode::KEY_X,
369 {true, ui::DomKey::CHARACTER, 'x', ui::VKEY_X},
370 {true, ui::DomKey::CHARACTER, 'X', ui::VKEY_X}},
371 {ui::DomCode::KEY_Y,
372 {true, ui::DomKey::CHARACTER, 'y', ui::VKEY_Y},
373 {true, ui::DomKey::CHARACTER, 'Y', ui::VKEY_Y}},
374 {ui::DomCode::KEY_Z,
375 {true, ui::DomKey::CHARACTER, 'z', ui::VKEY_Z},
376 {true, ui::DomKey::CHARACTER, 'Z', ui::VKEY_Z}},
377 {ui::DomCode::DIGIT1,
378 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
379 {true, ui::DomKey::CHARACTER, '!', ui::VKEY_1}},
380 {ui::DomCode::DIGIT2,
381 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2},
382 {true, ui::DomKey::CHARACTER, '@', ui::VKEY_2}},
383 {ui::DomCode::DIGIT3,
384 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3},
385 {true, ui::DomKey::CHARACTER, '#', ui::VKEY_3}},
386 {ui::DomCode::DIGIT4,
387 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4},
388 {true, ui::DomKey::CHARACTER, '$', ui::VKEY_4}},
389 {ui::DomCode::DIGIT5,
390 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5},
391 {true, ui::DomKey::CHARACTER, '%', ui::VKEY_5}},
392 {ui::DomCode::DIGIT6,
393 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6},
394 {true, ui::DomKey::CHARACTER, '^', ui::VKEY_6}},
395 {ui::DomCode::DIGIT7,
396 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7},
397 {true, ui::DomKey::CHARACTER, '&', ui::VKEY_7}},
398 {ui::DomCode::DIGIT8,
399 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8},
400 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_8}},
401 {ui::DomCode::DIGIT9,
402 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9},
403 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_9}},
404 {ui::DomCode::DIGIT0,
405 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0},
406 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_0}},
407 {ui::DomCode::SPACE,
408 {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE},
409 {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE}},
410 {ui::DomCode::MINUS,
411 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_OEM_MINUS},
412 {true, ui::DomKey::CHARACTER, '_', ui::VKEY_OEM_MINUS}},
413 {ui::DomCode::EQUAL,
414 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS},
415 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_OEM_PLUS}},
416 {ui::DomCode::BRACKET_LEFT,
417 {true, ui::DomKey::CHARACTER, '[', ui::VKEY_OEM_4},
418 {true, ui::DomKey::CHARACTER, '{', ui::VKEY_OEM_4}},
419 {ui::DomCode::BRACKET_RIGHT,
420 {true, ui::DomKey::CHARACTER, ']', ui::VKEY_OEM_6},
421 {true, ui::DomKey::CHARACTER, '}', ui::VKEY_OEM_6}},
422 {ui::DomCode::BACKSLASH,
423 {true, ui::DomKey::CHARACTER, '\\', ui::VKEY_OEM_5},
424 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}},
425 {ui::DomCode::SEMICOLON,
426 {true, ui::DomKey::CHARACTER, ';', ui::VKEY_OEM_1},
427 {true, ui::DomKey::CHARACTER, ':', ui::VKEY_OEM_1}},
428 {ui::DomCode::QUOTE,
429 {true, ui::DomKey::CHARACTER, '\'', ui::VKEY_OEM_7},
430 {true, ui::DomKey::CHARACTER, '"', ui::VKEY_OEM_7}},
431 {ui::DomCode::BACKQUOTE,
432 {true, ui::DomKey::CHARACTER, '`', ui::VKEY_OEM_3},
433 {true, ui::DomKey::CHARACTER, '~', ui::VKEY_OEM_3}},
434 {ui::DomCode::COMMA,
435 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA},
436 {true, ui::DomKey::CHARACTER, '<', ui::VKEY_OEM_COMMA}},
437 {ui::DomCode::PERIOD,
438 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_OEM_PERIOD},
439 {true, ui::DomKey::CHARACTER, '>', ui::VKEY_OEM_PERIOD}},
440 {ui::DomCode::SLASH,
441 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_OEM_2},
442 {true, ui::DomKey::CHARACTER, '?', ui::VKEY_OEM_2}},
443 {ui::DomCode::INTL_BACKSLASH,
444 {true, ui::DomKey::CHARACTER, '\\', ui::VKEY_OEM_102},
445 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_102}},
446 {ui::DomCode::INTL_YEN,
447 {true, ui::DomKey::CHARACTER, 0x00A5, ui::VKEY_OEM_5},
448 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}},
449 {ui::DomCode::NUMPAD_DIVIDE,
450 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE},
451 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE}},
452 {ui::DomCode::NUMPAD_MULTIPLY,
453 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY},
454 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY}},
455 {ui::DomCode::NUMPAD_SUBTRACT,
456 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT},
457 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT}},
458 {ui::DomCode::NUMPAD_ADD,
459 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD},
460 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD}},
461 {ui::DomCode::NUMPAD1,
462 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
463 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}},
464 {ui::DomCode::NUMPAD2,
465 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2},
466 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2}},
467 {ui::DomCode::NUMPAD3,
468 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3},
469 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3}},
470 {ui::DomCode::NUMPAD4,
471 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4},
472 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4}},
473 {ui::DomCode::NUMPAD5,
474 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5},
475 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5}},
476 {ui::DomCode::NUMPAD6,
477 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6},
478 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6}},
479 {ui::DomCode::NUMPAD7,
480 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7},
481 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7}},
482 {ui::DomCode::NUMPAD8,
483 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8},
484 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8}},
485 {ui::DomCode::NUMPAD9,
486 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9},
487 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9}},
488 {ui::DomCode::NUMPAD0,
489 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0},
490 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0}},
491 {ui::DomCode::NUMPAD_DECIMAL,
492 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL},
493 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL}},
494 {ui::DomCode::NUMPAD_EQUAL,
495 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN},
496 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN}},
497 {ui::DomCode::NUMPAD_COMMA,
498 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA},
499 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA}},
500 {ui::DomCode::NUMPAD_PAREN_LEFT,
501 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN},
502 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN}},
503 {ui::DomCode::NUMPAD_PAREN_RIGHT,
504 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN},
505 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN}},
506 {ui::DomCode::NUMPAD_SIGN_CHANGE,
507 {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN},
508 {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN}},
509 };
510
511 for (const auto& it : kPrintableUsLayout) {
512 CheckDomCodeToMeaning("p_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code,
513 ui::EF_NONE, it.normal);
514 CheckDomCodeToMeaning("p_us_s", ui::DomCodeToUsLayoutMeaning, it.dom_code,
515 ui::EF_SHIFT_DOWN, it.shift);
516 CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code,
517 ui::EF_ALTGR_DOWN, it.normal);
518 CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code,
519 ui::EF_ALTGR_DOWN|ui::EF_SHIFT_DOWN, it.shift);
520 }
521 }
522
523 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698