OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/events/event_rewriter.h" | 5 #include "chrome/browser/chromeos/events/event_rewriter.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/sticky_keys/sticky_keys_controller.h" | 10 #include "ash/sticky_keys/sticky_keys_controller.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 // The device id of the test touchpad device. | 50 // The device id of the test touchpad device. |
51 #if defined(USE_X11) | 51 #if defined(USE_X11) |
52 const int kTouchPadDeviceId = 1; | 52 const int kTouchPadDeviceId = 1; |
53 #endif | 53 #endif |
54 const int kKeyboardDeviceId = 2; | 54 const int kKeyboardDeviceId = 2; |
55 | 55 |
56 std::string GetExpectedResultAsString(ui::EventType ui_type, | 56 std::string GetExpectedResultAsString(ui::EventType ui_type, |
57 ui::KeyboardCode ui_keycode, | 57 ui::KeyboardCode ui_keycode, |
58 ui::DomCode code, | 58 ui::DomCode code, |
59 int ui_flags, // ui::EventFlags | 59 int ui_flags, // ui::EventFlags |
60 ui::DomKey key, | 60 ui::DomKey key) { |
61 base::char16 character) { | |
62 return base::StringPrintf( | 61 return base::StringPrintf( |
63 "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%03X c=0x%02X", ui_type, | 62 "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%08X", ui_type, |
64 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, | 63 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, |
65 static_cast<unsigned int>(key), character); | 64 static_cast<unsigned int>(key)); |
66 } | 65 } |
67 | 66 |
68 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | 67 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
69 return GetExpectedResultAsString( | 68 return GetExpectedResultAsString(keyevent.type(), keyevent.key_code(), |
70 keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(), | 69 keyevent.code(), keyevent.flags(), |
71 keyevent.GetDomKey(), keyevent.GetCharacter()); | 70 keyevent.GetDomKey()); |
72 } | 71 } |
73 | 72 |
74 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 73 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
75 ui::EventType ui_type, | 74 ui::EventType ui_type, |
76 ui::KeyboardCode ui_keycode, | 75 ui::KeyboardCode ui_keycode, |
77 ui::DomCode code, | 76 ui::DomCode code, |
78 int ui_flags, // ui::EventFlags | 77 int ui_flags, // ui::EventFlags |
79 ui::DomKey key, | 78 ui::DomKey key) { |
80 base::char16 character) { | 79 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, |
81 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character, | |
82 ui::EventTimeForNow()); | 80 ui::EventTimeForNow()); |
83 scoped_ptr<ui::Event> new_event; | 81 scoped_ptr<ui::Event> new_event; |
84 rewriter->RewriteEvent(event, &new_event); | 82 rewriter->RewriteEvent(event, &new_event); |
85 if (new_event) | 83 if (new_event) |
86 return GetKeyEventAsString( | 84 return GetKeyEventAsString( |
87 static_cast<const ui::KeyEvent&>(*new_event.get())); | 85 static_cast<const ui::KeyEvent&>(*new_event.get())); |
88 return GetKeyEventAsString(event); | 86 return GetKeyEventAsString(event); |
89 } | 87 } |
90 | 88 |
91 // Table entry for simple single key event rewriting tests. | 89 // Table entry for simple single key event rewriting tests. |
92 struct KeyTestCase { | 90 struct KeyTestCase { |
93 ui::EventType type; | 91 ui::EventType type; |
94 struct Event { | 92 struct Event { |
95 ui::KeyboardCode key_code; | 93 ui::KeyboardCode key_code; |
96 ui::DomCode code; | 94 ui::DomCode code; |
97 int flags; // ui::EventFlags | 95 int flags; // ui::EventFlags |
98 ui::DomKey key; | 96 ui::DomKey::Base key; |
99 base::char16 character; | |
100 } input, expected; | 97 } input, expected; |
101 }; | 98 }; |
102 | 99 |
103 std::string GetTestCaseAsString(ui::EventType ui_type, | 100 std::string GetTestCaseAsString(ui::EventType ui_type, |
104 const KeyTestCase::Event& test) { | 101 const KeyTestCase::Event& test) { |
105 return GetExpectedResultAsString(ui_type, test.key_code, test.code, | 102 return GetExpectedResultAsString(ui_type, test.key_code, test.code, |
106 test.flags, test.key, test.character); | 103 test.flags, test.key); |
107 } | 104 } |
108 | 105 |
109 // Tests a single stateless key rewrite operation. | 106 // Tests a single stateless key rewrite operation. |
110 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, | 107 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, |
111 const KeyTestCase& test) { | 108 const KeyTestCase& test) { |
112 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); | 109 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); |
113 std::string expected = GetTestCaseAsString(test.type, test.expected); | 110 std::string expected = GetTestCaseAsString(test.type, test.expected); |
114 EXPECT_EQ(expected, | 111 EXPECT_EQ(expected, GetRewrittenEventAsString( |
115 GetRewrittenEventAsString(rewriter, test.type, test.input.key_code, | 112 rewriter, test.type, test.input.key_code, |
116 test.input.code, test.input.flags, | 113 test.input.code, test.input.flags, test.input.key)); |
117 test.input.key, test.input.character)); | |
118 } | 114 } |
119 | 115 |
120 } // namespace | 116 } // namespace |
121 | 117 |
122 namespace chromeos { | 118 namespace chromeos { |
123 | 119 |
124 class EventRewriterTest : public ash::test::AshTestBase { | 120 class EventRewriterTest : public ash::test::AshTestBase { |
125 public: | 121 public: |
126 EventRewriterTest() | 122 EventRewriterTest() |
127 : fake_user_manager_(new user_manager::FakeUserManager), | 123 : fake_user_manager_(new user_manager::FakeUserManager), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 // First, test with a PC keyboard. | 162 // First, test with a PC keyboard. |
167 TestingPrefServiceSyncable prefs; | 163 TestingPrefServiceSyncable prefs; |
168 EventRewriter rewriter(NULL); | 164 EventRewriter rewriter(NULL); |
169 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 165 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
170 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 166 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
171 rewriter.set_pref_service_for_testing(&prefs); | 167 rewriter.set_pref_service_for_testing(&prefs); |
172 | 168 |
173 KeyTestCase pc_keyboard_tests[] = { | 169 KeyTestCase pc_keyboard_tests[] = { |
174 // VKEY_A, Alt modifier. | 170 // VKEY_A, Alt modifier. |
175 {ui::ET_KEY_PRESSED, | 171 {ui::ET_KEY_PRESSED, |
176 {ui::VKEY_A, | 172 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
177 ui::DomCode::KEY_A, | 173 ui::DomKey::UNIDENTIFIED}, |
178 ui::EF_ALT_DOWN, | 174 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
179 ui::DomKey::UNIDENTIFIED, | 175 ui::DomKey::UNIDENTIFIED}}, |
180 0}, | |
181 {ui::VKEY_A, | |
182 ui::DomCode::KEY_A, | |
183 ui::EF_ALT_DOWN, | |
184 ui::DomKey::UNIDENTIFIED, | |
185 0}}, | |
186 | 176 |
187 // VKEY_A, Win modifier. | 177 // VKEY_A, Win modifier. |
188 {ui::ET_KEY_PRESSED, | 178 {ui::ET_KEY_PRESSED, |
189 {ui::VKEY_A, | 179 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
190 ui::DomCode::KEY_A, | 180 ui::DomKey::UNIDENTIFIED}, |
191 ui::EF_COMMAND_DOWN, | 181 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
192 ui::DomKey::UNIDENTIFIED, | 182 ui::DomKey::UNIDENTIFIED}}, |
193 0}, | |
194 {ui::VKEY_A, | |
195 ui::DomCode::KEY_A, | |
196 ui::EF_COMMAND_DOWN, | |
197 ui::DomKey::UNIDENTIFIED, | |
198 0}}, | |
199 | 183 |
200 // VKEY_A, Alt+Win modifier. | 184 // VKEY_A, Alt+Win modifier. |
201 {ui::ET_KEY_PRESSED, | 185 {ui::ET_KEY_PRESSED, |
202 {ui::VKEY_A, | 186 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
203 ui::DomCode::KEY_A, | 187 ui::DomKey::UNIDENTIFIED}, |
204 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 188 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
205 ui::DomKey::UNIDENTIFIED, | 189 ui::DomKey::UNIDENTIFIED}}, |
206 0}, | |
207 {ui::VKEY_A, | |
208 ui::DomCode::KEY_A, | |
209 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
210 ui::DomKey::UNIDENTIFIED, | |
211 0}}, | |
212 | 190 |
213 // VKEY_LWIN (left Windows key), Alt modifier. | 191 // VKEY_LWIN (left Windows key), Alt modifier. |
214 {ui::ET_KEY_PRESSED, | 192 {ui::ET_KEY_PRESSED, |
215 {ui::VKEY_LWIN, | 193 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
216 ui::DomCode::OS_LEFT, | 194 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
217 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 195 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
218 ui::DomKey::OS, | 196 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
219 0}, | |
220 {ui::VKEY_LWIN, | |
221 ui::DomCode::OS_LEFT, | |
222 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
223 ui::DomKey::OS, | |
224 0}}, | |
225 | 197 |
226 // VKEY_RWIN (right Windows key), Alt modifier. | 198 // VKEY_RWIN (right Windows key), Alt modifier. |
227 {ui::ET_KEY_PRESSED, | 199 {ui::ET_KEY_PRESSED, |
228 {ui::VKEY_RWIN, | 200 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
229 ui::DomCode::OS_RIGHT, | 201 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
230 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 202 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
231 ui::DomKey::OS, | 203 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
232 0}, | |
233 {ui::VKEY_RWIN, | |
234 ui::DomCode::OS_RIGHT, | |
235 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
236 ui::DomKey::OS, | |
237 0}}, | |
238 }; | 204 }; |
239 | 205 |
240 for (const auto& test : pc_keyboard_tests) { | 206 for (const auto& test : pc_keyboard_tests) { |
241 CheckKeyTestCase(&rewriter, test); | 207 CheckKeyTestCase(&rewriter, test); |
242 } | 208 } |
243 | 209 |
244 // An Apple keyboard reusing the ID, zero. | 210 // An Apple keyboard reusing the ID, zero. |
245 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 211 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
246 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 212 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
247 | 213 |
248 KeyTestCase apple_keyboard_tests[] = { | 214 KeyTestCase apple_keyboard_tests[] = { |
249 // VKEY_A, Alt modifier. | 215 // VKEY_A, Alt modifier. |
250 {ui::ET_KEY_PRESSED, | 216 {ui::ET_KEY_PRESSED, |
251 {ui::VKEY_A, | 217 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
252 ui::DomCode::KEY_A, | 218 ui::DomKey::UNIDENTIFIED}, |
253 ui::EF_ALT_DOWN, | 219 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
254 ui::DomKey::UNIDENTIFIED, | 220 ui::DomKey::UNIDENTIFIED}}, |
255 0}, | |
256 {ui::VKEY_A, | |
257 ui::DomCode::KEY_A, | |
258 ui::EF_ALT_DOWN, | |
259 ui::DomKey::UNIDENTIFIED, | |
260 0}}, | |
261 | 221 |
262 // VKEY_A, Win modifier. | 222 // VKEY_A, Win modifier. |
263 {ui::ET_KEY_PRESSED, | 223 {ui::ET_KEY_PRESSED, |
264 {ui::VKEY_A, | 224 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
265 ui::DomCode::KEY_A, | 225 ui::DomKey::UNIDENTIFIED}, |
266 ui::EF_COMMAND_DOWN, | 226 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
267 ui::DomKey::UNIDENTIFIED, | 227 ui::DomKey::Constant<0x01>::Character}}, |
268 0}, | |
269 {ui::VKEY_A, | |
270 ui::DomCode::KEY_A, | |
271 ui::EF_CONTROL_DOWN, | |
272 ui::DomKey::CHARACTER, | |
273 0x01}}, | |
274 | 228 |
275 // VKEY_A, Alt+Win modifier. | 229 // VKEY_A, Alt+Win modifier. |
276 {ui::ET_KEY_PRESSED, | 230 {ui::ET_KEY_PRESSED, |
277 {ui::VKEY_A, | 231 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
278 ui::DomCode::KEY_A, | 232 ui::DomKey::UNIDENTIFIED}, |
279 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 233 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
280 ui::DomKey::UNIDENTIFIED, | 234 ui::DomKey::Constant<0x01>::Character}}, |
281 0}, | |
282 {ui::VKEY_A, | |
283 ui::DomCode::KEY_A, | |
284 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
285 ui::DomKey::CHARACTER, | |
286 0x01}}, | |
287 | 235 |
288 // VKEY_LWIN (left Windows key), Alt modifier. | 236 // VKEY_LWIN (left Windows key), Alt modifier. |
289 {ui::ET_KEY_PRESSED, | 237 {ui::ET_KEY_PRESSED, |
290 {ui::VKEY_LWIN, | 238 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
291 ui::DomCode::OS_LEFT, | 239 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
292 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 240 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
293 ui::DomKey::OS, | 241 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
294 0}, | |
295 {ui::VKEY_CONTROL, | |
296 ui::DomCode::CONTROL_LEFT, | |
297 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
298 ui::DomKey::CONTROL, | |
299 0}}, | |
300 | 242 |
301 // VKEY_RWIN (right Windows key), Alt modifier. | 243 // VKEY_RWIN (right Windows key), Alt modifier. |
302 {ui::ET_KEY_PRESSED, | 244 {ui::ET_KEY_PRESSED, |
303 {ui::VKEY_RWIN, | 245 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
304 ui::DomCode::OS_RIGHT, | 246 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
305 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 247 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
306 ui::DomKey::OS, | 248 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
307 0}, | |
308 {ui::VKEY_CONTROL, | |
309 ui::DomCode::CONTROL_RIGHT, | |
310 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
311 ui::DomKey::CONTROL, | |
312 0}}, | |
313 }; | 249 }; |
314 | 250 |
315 for (const auto& test : apple_keyboard_tests) { | 251 for (const auto& test : apple_keyboard_tests) { |
316 CheckKeyTestCase(&rewriter, test); | 252 CheckKeyTestCase(&rewriter, test); |
317 } | 253 } |
318 } | 254 } |
319 | 255 |
320 // For crbug.com/133896. | 256 // For crbug.com/133896. |
321 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 257 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
322 // Remap Control to Alt. | 258 // Remap Control to Alt. |
323 TestingPrefServiceSyncable prefs; | 259 TestingPrefServiceSyncable prefs; |
324 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 260 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
325 IntegerPrefMember control; | 261 IntegerPrefMember control; |
326 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 262 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
327 control.SetValue(chromeos::input_method::kAltKey); | 263 control.SetValue(chromeos::input_method::kAltKey); |
328 | 264 |
329 EventRewriter rewriter(NULL); | 265 EventRewriter rewriter(NULL); |
330 rewriter.set_pref_service_for_testing(&prefs); | 266 rewriter.set_pref_service_for_testing(&prefs); |
331 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 267 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
332 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 268 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
333 | 269 |
334 KeyTestCase pc_keyboard_tests[] = { | 270 KeyTestCase pc_keyboard_tests[] = { |
335 // Control should be remapped to Alt. | 271 // Control should be remapped to Alt. |
336 {ui::ET_KEY_PRESSED, | 272 {ui::ET_KEY_PRESSED, |
337 {ui::VKEY_CONTROL, | 273 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
338 ui::DomCode::CONTROL_LEFT, | 274 ui::DomKey::CONTROL}, |
339 ui::EF_CONTROL_DOWN, | 275 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
340 ui::DomKey::CONTROL, | 276 ui::DomKey::ALT}}, |
341 0}, | |
342 {ui::VKEY_MENU, | |
343 ui::DomCode::ALT_LEFT, | |
344 ui::EF_ALT_DOWN, | |
345 ui::DomKey::ALT, | |
346 0}}, | |
347 }; | 277 }; |
348 | 278 |
349 for (const auto& test : pc_keyboard_tests) { | 279 for (const auto& test : pc_keyboard_tests) { |
350 CheckKeyTestCase(&rewriter, test); | 280 CheckKeyTestCase(&rewriter, test); |
351 } | 281 } |
352 | 282 |
353 // An Apple keyboard reusing the ID, zero. | 283 // An Apple keyboard reusing the ID, zero. |
354 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 284 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
355 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 285 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
356 | 286 |
357 KeyTestCase apple_keyboard_tests[] = { | 287 KeyTestCase apple_keyboard_tests[] = { |
358 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 288 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command |
359 // key should never be re-remapped to Alt. | 289 // key should never be re-remapped to Alt. |
360 {ui::ET_KEY_PRESSED, | 290 {ui::ET_KEY_PRESSED, |
361 {ui::VKEY_LWIN, | 291 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
362 ui::DomCode::OS_LEFT, | 292 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
363 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 293 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
364 ui::DomKey::OS, | 294 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
365 0}, | |
366 {ui::VKEY_CONTROL, | |
367 ui::DomCode::CONTROL_LEFT, | |
368 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
369 ui::DomKey::CONTROL, | |
370 0}}, | |
371 | 295 |
372 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 296 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command |
373 // key should never be re-remapped to Alt. | 297 // key should never be re-remapped to Alt. |
374 {ui::ET_KEY_PRESSED, | 298 {ui::ET_KEY_PRESSED, |
375 {ui::VKEY_RWIN, | 299 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
376 ui::DomCode::OS_RIGHT, | 300 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
377 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 301 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
378 ui::DomKey::OS, | 302 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
379 0}, | |
380 {ui::VKEY_CONTROL, | |
381 ui::DomCode::CONTROL_RIGHT, | |
382 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
383 ui::DomKey::CONTROL, | |
384 0}}, | |
385 }; | 303 }; |
386 | 304 |
387 for (const auto& test : apple_keyboard_tests) { | 305 for (const auto& test : apple_keyboard_tests) { |
388 CheckKeyTestCase(&rewriter, test); | 306 CheckKeyTestCase(&rewriter, test); |
389 } | 307 } |
390 } | 308 } |
391 | 309 |
392 void EventRewriterTest::TestRewriteNumPadKeys() { | 310 void EventRewriterTest::TestRewriteNumPadKeys() { |
393 TestingPrefServiceSyncable prefs; | 311 TestingPrefServiceSyncable prefs; |
394 EventRewriter rewriter(NULL); | 312 EventRewriter rewriter(NULL); |
395 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 313 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
396 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 314 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
397 rewriter.set_pref_service_for_testing(&prefs); | 315 rewriter.set_pref_service_for_testing(&prefs); |
398 | 316 |
399 KeyTestCase tests[] = { | 317 KeyTestCase tests[] = { |
400 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 318 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
401 {ui::ET_KEY_PRESSED, | 319 {ui::ET_KEY_PRESSED, |
402 {ui::VKEY_INSERT, | 320 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, |
403 ui::DomCode::NUMPAD0, | 321 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, |
404 ui::EF_NONE, | 322 ui::DomKey::Constant<'0'>::Character}}, |
405 ui::DomKey::INSERT, | |
406 0}, | |
407 {ui::VKEY_NUMPAD0, | |
408 ui::DomCode::NUMPAD0, | |
409 ui::EF_NONE, | |
410 ui::DomKey::CHARACTER, | |
411 '0'}}, | |
412 | 323 |
413 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 324 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
414 {ui::ET_KEY_PRESSED, | 325 {ui::ET_KEY_PRESSED, |
415 {ui::VKEY_INSERT, | 326 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN, |
416 ui::DomCode::NUMPAD0, | 327 ui::DomKey::INSERT}, |
417 ui::EF_ALT_DOWN, | 328 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN, |
418 ui::DomKey::INSERT, | 329 ui::DomKey::Constant<'0'>::Character}}, |
419 0}, | |
420 {ui::VKEY_NUMPAD0, | |
421 ui::DomCode::NUMPAD0, | |
422 ui::EF_ALT_DOWN, | |
423 ui::DomKey::CHARACTER, | |
424 '0'}}, | |
425 | 330 |
426 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 331 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
427 {ui::ET_KEY_PRESSED, | 332 {ui::ET_KEY_PRESSED, |
428 {ui::VKEY_DELETE, | 333 {ui::VKEY_DELETE, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN, |
429 ui::DomCode::NUMPAD_DECIMAL, | 334 ui::DomKey::DEL}, |
430 ui::EF_ALT_DOWN, | 335 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN, |
431 ui::DomKey::DEL, | 336 ui::DomKey::Constant<'.'>::Character}}, |
432 0x7F}, | |
433 {ui::VKEY_DECIMAL, | |
434 ui::DomCode::NUMPAD_DECIMAL, | |
435 ui::EF_ALT_DOWN, | |
436 ui::DomKey::CHARACTER, | |
437 '.'}}, | |
438 | 337 |
439 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 338 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
440 {ui::ET_KEY_PRESSED, | 339 {ui::ET_KEY_PRESSED, |
441 {ui::VKEY_END, | 340 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN, ui::DomKey::END}, |
442 ui::DomCode::NUMPAD1, | 341 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN, |
443 ui::EF_ALT_DOWN, | 342 ui::DomKey::Constant<'1'>::Character}}, |
444 ui::DomKey::END, | |
445 0}, | |
446 {ui::VKEY_NUMPAD1, | |
447 ui::DomCode::NUMPAD1, | |
448 ui::EF_ALT_DOWN, | |
449 ui::DomKey::CHARACTER, | |
450 '1'}}, | |
451 | 343 |
452 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 344 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
453 {ui::ET_KEY_PRESSED, | 345 {ui::ET_KEY_PRESSED, |
454 {ui::VKEY_DOWN, | 346 {ui::VKEY_DOWN, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN, |
455 ui::DomCode::NUMPAD2, | 347 ui::DomKey::ARROW_DOWN}, |
456 ui::EF_ALT_DOWN, | 348 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN, |
457 ui::DomKey::ARROW_DOWN, | 349 ui::DomKey::Constant<'2'>::Character}}, |
458 0}, | |
459 {ui::VKEY_NUMPAD2, | |
460 ui::DomCode::NUMPAD2, | |
461 ui::EF_ALT_DOWN, | |
462 ui::DomKey::CHARACTER, | |
463 '2'}}, | |
464 | 350 |
465 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 351 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
466 {ui::ET_KEY_PRESSED, | 352 {ui::ET_KEY_PRESSED, |
467 {ui::VKEY_NEXT, | 353 {ui::VKEY_NEXT, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN, |
468 ui::DomCode::NUMPAD3, | 354 ui::DomKey::PAGE_DOWN}, |
469 ui::EF_ALT_DOWN, | 355 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN, |
470 ui::DomKey::PAGE_DOWN, | 356 ui::DomKey::Constant<'3'>::Character}}, |
471 0}, | |
472 {ui::VKEY_NUMPAD3, | |
473 ui::DomCode::NUMPAD3, | |
474 ui::EF_ALT_DOWN, | |
475 ui::DomKey::CHARACTER, | |
476 '3'}}, | |
477 | 357 |
478 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 358 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
479 {ui::ET_KEY_PRESSED, | 359 {ui::ET_KEY_PRESSED, |
480 {ui::VKEY_LEFT, | 360 {ui::VKEY_LEFT, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN, |
481 ui::DomCode::NUMPAD4, | 361 ui::DomKey::ARROW_LEFT}, |
482 ui::EF_ALT_DOWN, | 362 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN, |
483 ui::DomKey::ARROW_LEFT, | 363 ui::DomKey::Constant<'4'>::Character}}, |
484 0}, | |
485 {ui::VKEY_NUMPAD4, | |
486 ui::DomCode::NUMPAD4, | |
487 ui::EF_ALT_DOWN, | |
488 ui::DomKey::CHARACTER, | |
489 '4'}}, | |
490 | 364 |
491 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 365 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
492 {ui::ET_KEY_PRESSED, | 366 {ui::ET_KEY_PRESSED, |
493 {ui::VKEY_CLEAR, | 367 {ui::VKEY_CLEAR, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN, |
494 ui::DomCode::NUMPAD5, | 368 ui::DomKey::CLEAR}, |
495 ui::EF_ALT_DOWN, | 369 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN, |
496 ui::DomKey::CLEAR, | 370 ui::DomKey::Constant<'5'>::Character}}, |
497 0}, | |
498 {ui::VKEY_NUMPAD5, | |
499 ui::DomCode::NUMPAD5, | |
500 ui::EF_ALT_DOWN, | |
501 ui::DomKey::CHARACTER, | |
502 '5'}}, | |
503 | 371 |
504 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 372 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
505 {ui::ET_KEY_PRESSED, | 373 {ui::ET_KEY_PRESSED, |
506 {ui::VKEY_RIGHT, | 374 {ui::VKEY_RIGHT, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN, |
507 ui::DomCode::NUMPAD6, | 375 ui::DomKey::ARROW_RIGHT}, |
508 ui::EF_ALT_DOWN, | 376 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN, |
509 ui::DomKey::ARROW_RIGHT, | 377 ui::DomKey::Constant<'6'>::Character}}, |
510 0}, | |
511 {ui::VKEY_NUMPAD6, | |
512 ui::DomCode::NUMPAD6, | |
513 ui::EF_ALT_DOWN, | |
514 ui::DomKey::CHARACTER, | |
515 '6'}}, | |
516 | 378 |
517 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 379 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
518 {ui::ET_KEY_PRESSED, | 380 {ui::ET_KEY_PRESSED, |
519 {ui::VKEY_HOME, | 381 {ui::VKEY_HOME, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN, ui::DomKey::HOME}, |
520 ui::DomCode::NUMPAD7, | 382 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN, |
521 ui::EF_ALT_DOWN, | 383 ui::DomKey::Constant<'7'>::Character}}, |
522 ui::DomKey::HOME, | |
523 0}, | |
524 {ui::VKEY_NUMPAD7, | |
525 ui::DomCode::NUMPAD7, | |
526 ui::EF_ALT_DOWN, | |
527 ui::DomKey::CHARACTER, | |
528 '7'}}, | |
529 | 384 |
530 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 385 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
531 {ui::ET_KEY_PRESSED, | 386 {ui::ET_KEY_PRESSED, |
532 {ui::VKEY_UP, | 387 {ui::VKEY_UP, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN, |
533 ui::DomCode::NUMPAD8, | 388 ui::DomKey::ARROW_UP}, |
534 ui::EF_ALT_DOWN, | 389 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN, |
535 ui::DomKey::ARROW_UP, | 390 ui::DomKey::Constant<'8'>::Character}}, |
536 0}, | |
537 {ui::VKEY_NUMPAD8, | |
538 ui::DomCode::NUMPAD8, | |
539 ui::EF_ALT_DOWN, | |
540 ui::DomKey::CHARACTER, | |
541 '8'}}, | |
542 | 391 |
543 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 392 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
544 {ui::ET_KEY_PRESSED, | 393 {ui::ET_KEY_PRESSED, |
545 {ui::VKEY_PRIOR, | 394 {ui::VKEY_PRIOR, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN, |
546 ui::DomCode::NUMPAD9, | 395 ui::DomKey::PAGE_UP}, |
547 ui::EF_ALT_DOWN, | 396 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN, |
548 ui::DomKey::PAGE_UP, | 397 ui::DomKey::Constant<'9'>::Character}}, |
549 0}, | |
550 {ui::VKEY_NUMPAD9, | |
551 ui::DomCode::NUMPAD9, | |
552 ui::EF_ALT_DOWN, | |
553 ui::DomKey::CHARACTER, | |
554 '9'}}, | |
555 | 398 |
556 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 399 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
557 {ui::ET_KEY_PRESSED, | 400 {ui::ET_KEY_PRESSED, |
558 {ui::VKEY_NUMPAD0, | 401 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, |
559 ui::DomCode::NUMPAD0, | 402 ui::DomKey::Constant<'0'>::Character}, |
560 ui::EF_NONE, | 403 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, |
561 ui::DomKey::CHARACTER, | 404 ui::DomKey::Constant<'0'>::Character}}, |
562 '0'}, | |
563 {ui::VKEY_NUMPAD0, | |
564 ui::DomCode::NUMPAD0, | |
565 ui::EF_NONE, | |
566 ui::DomKey::CHARACTER, | |
567 '0'}}, | |
568 | 405 |
569 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 406 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
570 {ui::ET_KEY_PRESSED, | 407 {ui::ET_KEY_PRESSED, |
571 {ui::VKEY_DECIMAL, | 408 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE, |
572 ui::DomCode::NUMPAD_DECIMAL, | 409 ui::DomKey::Constant<'.'>::Character}, |
573 ui::EF_NONE, | 410 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE, |
574 ui::DomKey::CHARACTER, | 411 ui::DomKey::Constant<'.'>::Character}}, |
575 '.'}, | |
576 {ui::VKEY_DECIMAL, | |
577 ui::DomCode::NUMPAD_DECIMAL, | |
578 ui::EF_NONE, | |
579 ui::DomKey::CHARACTER, | |
580 '.'}}, | |
581 | 412 |
582 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 413 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
583 {ui::ET_KEY_PRESSED, | 414 {ui::ET_KEY_PRESSED, |
584 {ui::VKEY_NUMPAD1, | 415 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE, |
585 ui::DomCode::NUMPAD1, | 416 ui::DomKey::Constant<'1'>::Character}, |
586 ui::EF_NONE, | 417 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE, |
587 ui::DomKey::CHARACTER, | 418 ui::DomKey::Constant<'1'>::Character}}, |
588 '1'}, | |
589 {ui::VKEY_NUMPAD1, | |
590 ui::DomCode::NUMPAD1, | |
591 ui::EF_NONE, | |
592 ui::DomKey::CHARACTER, | |
593 '1'}}, | |
594 | 419 |
595 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 420 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
596 {ui::ET_KEY_PRESSED, | 421 {ui::ET_KEY_PRESSED, |
597 {ui::VKEY_NUMPAD2, | 422 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE, |
598 ui::DomCode::NUMPAD2, | 423 ui::DomKey::Constant<'2'>::Character}, |
599 ui::EF_NONE, | 424 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE, |
600 ui::DomKey::CHARACTER, | 425 ui::DomKey::Constant<'2'>::Character}}, |
601 '2'}, | |
602 {ui::VKEY_NUMPAD2, | |
603 ui::DomCode::NUMPAD2, | |
604 ui::EF_NONE, | |
605 ui::DomKey::CHARACTER, | |
606 '2'}}, | |
607 | 426 |
608 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 427 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
609 {ui::ET_KEY_PRESSED, | 428 {ui::ET_KEY_PRESSED, |
610 {ui::VKEY_NUMPAD3, | 429 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE, |
611 ui::DomCode::NUMPAD3, | 430 ui::DomKey::Constant<'3'>::Character}, |
612 ui::EF_NONE, | 431 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE, |
613 ui::DomKey::CHARACTER, | 432 ui::DomKey::Constant<'3'>::Character}}, |
614 '3'}, | |
615 {ui::VKEY_NUMPAD3, | |
616 ui::DomCode::NUMPAD3, | |
617 ui::EF_NONE, | |
618 ui::DomKey::CHARACTER, | |
619 '3'}}, | |
620 | 433 |
621 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 434 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
622 {ui::ET_KEY_PRESSED, | 435 {ui::ET_KEY_PRESSED, |
623 {ui::VKEY_NUMPAD4, | 436 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE, |
624 ui::DomCode::NUMPAD4, | 437 ui::DomKey::Constant<'4'>::Character}, |
625 ui::EF_NONE, | 438 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE, |
626 ui::DomKey::CHARACTER, | 439 ui::DomKey::Constant<'4'>::Character}}, |
627 '4'}, | |
628 {ui::VKEY_NUMPAD4, | |
629 ui::DomCode::NUMPAD4, | |
630 ui::EF_NONE, | |
631 ui::DomKey::CHARACTER, | |
632 '4'}}, | |
633 | 440 |
634 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock | 441 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock |
635 // modifier. | 442 // modifier. |
636 {ui::ET_KEY_PRESSED, | 443 {ui::ET_KEY_PRESSED, |
637 {ui::VKEY_NUMPAD5, | 444 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE, |
638 ui::DomCode::NUMPAD5, | 445 ui::DomKey::Constant<'5'>::Character}, |
639 ui::EF_NONE, | 446 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE, |
640 ui::DomKey::CHARACTER, | 447 ui::DomKey::Constant<'5'>::Character}}, |
641 '5'}, | |
642 {ui::VKEY_NUMPAD5, | |
643 ui::DomCode::NUMPAD5, | |
644 ui::EF_NONE, | |
645 ui::DomKey::CHARACTER, | |
646 '5'}}, | |
647 | 448 |
648 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock | 449 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock |
649 // modifier. | 450 // modifier. |
650 {ui::ET_KEY_PRESSED, | 451 {ui::ET_KEY_PRESSED, |
651 {ui::VKEY_NUMPAD6, | 452 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE, |
652 ui::DomCode::NUMPAD6, | 453 ui::DomKey::Constant<'6'>::Character}, |
653 ui::EF_NONE, | 454 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE, |
654 ui::DomKey::CHARACTER, | 455 ui::DomKey::Constant<'6'>::Character}}, |
655 '6'}, | |
656 {ui::VKEY_NUMPAD6, | |
657 ui::DomCode::NUMPAD6, | |
658 ui::EF_NONE, | |
659 ui::DomKey::CHARACTER, | |
660 '6'}}, | |
661 | 456 |
662 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock | 457 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock |
663 // modifier. | 458 // modifier. |
664 {ui::ET_KEY_PRESSED, | 459 {ui::ET_KEY_PRESSED, |
665 {ui::VKEY_NUMPAD7, | 460 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE, |
666 ui::DomCode::NUMPAD7, | 461 ui::DomKey::Constant<'7'>::Character}, |
667 ui::EF_NONE, | 462 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE, |
668 ui::DomKey::CHARACTER, | 463 ui::DomKey::Constant<'7'>::Character}}, |
669 '7'}, | |
670 {ui::VKEY_NUMPAD7, | |
671 ui::DomCode::NUMPAD7, | |
672 ui::EF_NONE, | |
673 ui::DomKey::CHARACTER, | |
674 '7'}}, | |
675 | 464 |
676 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock | 465 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock |
677 // modifier. | 466 // modifier. |
678 {ui::ET_KEY_PRESSED, | 467 {ui::ET_KEY_PRESSED, |
679 {ui::VKEY_NUMPAD8, | 468 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE, |
680 ui::DomCode::NUMPAD8, | 469 ui::DomKey::Constant<'8'>::Character}, |
681 ui::EF_NONE, | 470 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE, |
682 ui::DomKey::CHARACTER, | 471 ui::DomKey::Constant<'8'>::Character}}, |
683 '8'}, | |
684 {ui::VKEY_NUMPAD8, | |
685 ui::DomCode::NUMPAD8, | |
686 ui::EF_NONE, | |
687 ui::DomKey::CHARACTER, | |
688 '8'}}, | |
689 | 472 |
690 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock | 473 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock |
691 // modifier. | 474 // modifier. |
692 {ui::ET_KEY_PRESSED, | 475 {ui::ET_KEY_PRESSED, |
693 {ui::VKEY_NUMPAD9, | 476 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, |
694 ui::DomCode::NUMPAD9, | 477 ui::DomKey::Constant<'9'>::Character}, |
695 ui::EF_NONE, | 478 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, |
696 ui::DomKey::CHARACTER, | 479 ui::DomKey::Constant<'9'>::Character}}, |
697 '9'}, | |
698 {ui::VKEY_NUMPAD9, | |
699 ui::DomCode::NUMPAD9, | |
700 ui::EF_NONE, | |
701 ui::DomKey::CHARACTER, | |
702 '9'}}, | |
703 }; | 480 }; |
704 | 481 |
705 for (const auto& test : tests) { | 482 for (const auto& test : tests) { |
706 CheckKeyTestCase(&rewriter, test); | 483 CheckKeyTestCase(&rewriter, test); |
707 } | 484 } |
708 } | 485 } |
709 | 486 |
710 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 487 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
711 TestRewriteNumPadKeys(); | 488 TestRewriteNumPadKeys(); |
712 } | 489 } |
(...skipping 13 matching lines...) Expand all Loading... |
726 TestingPrefServiceSyncable prefs; | 503 TestingPrefServiceSyncable prefs; |
727 EventRewriter rewriter(NULL); | 504 EventRewriter rewriter(NULL); |
728 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 505 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
729 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 506 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
730 rewriter.set_pref_service_for_testing(&prefs); | 507 rewriter.set_pref_service_for_testing(&prefs); |
731 | 508 |
732 KeyTestCase tests[] = { | 509 KeyTestCase tests[] = { |
733 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 510 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
734 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 511 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
735 {ui::ET_KEY_PRESSED, | 512 {ui::ET_KEY_PRESSED, |
736 {ui::VKEY_END, | 513 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
737 ui::DomCode::NUMPAD1, | 514 ui::DomKey::END}, |
738 ui::EF_COMMAND_DOWN, | 515 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
739 ui::DomKey::END, | 516 ui::DomKey::UNIDENTIFIED}}, |
740 0}, | |
741 {ui::VKEY_NUMPAD1, | |
742 ui::DomCode::NUMPAD1, | |
743 ui::EF_CONTROL_DOWN, | |
744 ui::DomKey::UNIDENTIFIED, | |
745 0}}, | |
746 | 517 |
747 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 518 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
748 // The result should also be "Num Pad 1 with Control + Num Lock | 519 // The result should also be "Num Pad 1 with Control + Num Lock |
749 // modifiers". | 520 // modifiers". |
750 {ui::ET_KEY_PRESSED, | 521 {ui::ET_KEY_PRESSED, |
751 {ui::VKEY_NUMPAD1, | 522 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
752 ui::DomCode::NUMPAD1, | 523 ui::DomKey::Constant<'1'>::Character}, |
753 ui::EF_COMMAND_DOWN, | 524 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
754 ui::DomKey::CHARACTER, | 525 ui::DomKey::UNIDENTIFIED}}}; |
755 '1'}, | |
756 {ui::VKEY_NUMPAD1, | |
757 ui::DomCode::NUMPAD1, | |
758 ui::EF_CONTROL_DOWN, | |
759 ui::DomKey::UNIDENTIFIED, | |
760 0}}}; | |
761 | 526 |
762 for (const auto& test : tests) { | 527 for (const auto& test : tests) { |
763 CheckKeyTestCase(&rewriter, test); | 528 CheckKeyTestCase(&rewriter, test); |
764 } | 529 } |
765 } | 530 } |
766 | 531 |
767 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 532 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
768 TestRewriteNumPadKeysOnAppleKeyboard(); | 533 TestRewriteNumPadKeysOnAppleKeyboard(); |
769 } | 534 } |
770 | 535 |
(...skipping 10 matching lines...) Expand all Loading... |
781 | 546 |
782 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 547 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
783 TestingPrefServiceSyncable prefs; | 548 TestingPrefServiceSyncable prefs; |
784 EventRewriter rewriter(NULL); | 549 EventRewriter rewriter(NULL); |
785 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 550 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
786 rewriter.set_pref_service_for_testing(&prefs); | 551 rewriter.set_pref_service_for_testing(&prefs); |
787 | 552 |
788 KeyTestCase tests[] = { | 553 KeyTestCase tests[] = { |
789 // Press Search. Confirm the event is not rewritten. | 554 // Press Search. Confirm the event is not rewritten. |
790 {ui::ET_KEY_PRESSED, | 555 {ui::ET_KEY_PRESSED, |
791 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 556 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
792 {ui::VKEY_LWIN, | 557 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
793 ui::DomCode::OS_LEFT, | 558 ui::DomKey::OS}}, |
794 ui::EF_COMMAND_DOWN, | |
795 ui::DomKey::OS, | |
796 0}}, | |
797 | 559 |
798 // Press left Control. Confirm the event is not rewritten. | 560 // Press left Control. Confirm the event is not rewritten. |
799 {ui::ET_KEY_PRESSED, | 561 {ui::ET_KEY_PRESSED, |
800 {ui::VKEY_CONTROL, | 562 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
801 ui::DomCode::CONTROL_LEFT, | 563 ui::DomKey::CONTROL}, |
802 ui::EF_CONTROL_DOWN, | 564 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
803 ui::DomKey::CONTROL, | 565 ui::DomKey::CONTROL}}, |
804 0}, | |
805 {ui::VKEY_CONTROL, | |
806 ui::DomCode::CONTROL_LEFT, | |
807 ui::EF_CONTROL_DOWN, | |
808 ui::DomKey::CONTROL, | |
809 0}}, | |
810 | 566 |
811 // Press right Control. Confirm the event is not rewritten. | 567 // Press right Control. Confirm the event is not rewritten. |
812 {ui::ET_KEY_PRESSED, | 568 {ui::ET_KEY_PRESSED, |
813 {ui::VKEY_CONTROL, | 569 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
814 ui::DomCode::CONTROL_LEFT, | 570 ui::DomKey::CONTROL}, |
815 ui::EF_CONTROL_DOWN, | 571 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
816 ui::DomKey::CONTROL, | 572 ui::DomKey::CONTROL}}, |
817 0}, | |
818 {ui::VKEY_CONTROL, | |
819 ui::DomCode::CONTROL_LEFT, | |
820 ui::EF_CONTROL_DOWN, | |
821 ui::DomKey::CONTROL, | |
822 0}}, | |
823 | 573 |
824 // Press left Alt. Confirm the event is not rewritten. | 574 // Press left Alt. Confirm the event is not rewritten. |
825 {ui::ET_KEY_PRESSED, | 575 {ui::ET_KEY_PRESSED, |
826 {ui::VKEY_MENU, | 576 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
827 ui::DomCode::ALT_LEFT, | 577 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
828 ui::EF_ALT_DOWN, | 578 ui::DomKey::ALT}}, |
829 ui::DomKey::ALT, | |
830 0}, | |
831 {ui::VKEY_MENU, | |
832 ui::DomCode::ALT_LEFT, | |
833 ui::EF_ALT_DOWN, | |
834 ui::DomKey::ALT, | |
835 0}}, | |
836 | 579 |
837 // Press right Alt. Confirm the event is not rewritten. | 580 // Press right Alt. Confirm the event is not rewritten. |
838 {ui::ET_KEY_PRESSED, | 581 {ui::ET_KEY_PRESSED, |
839 {ui::VKEY_MENU, | 582 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
840 ui::DomCode::ALT_LEFT, | 583 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
841 ui::EF_ALT_DOWN, | 584 ui::DomKey::ALT}}, |
842 ui::DomKey::ALT, | |
843 0}, | |
844 {ui::VKEY_MENU, | |
845 ui::DomCode::ALT_LEFT, | |
846 ui::EF_ALT_DOWN, | |
847 ui::DomKey::ALT, | |
848 0}}, | |
849 | 585 |
850 // Test KeyRelease event, just in case. | 586 // Test KeyRelease event, just in case. |
851 // Release Search. Confirm the release event is not rewritten. | 587 // Release Search. Confirm the release event is not rewritten. |
852 {ui::ET_KEY_RELEASED, | 588 {ui::ET_KEY_RELEASED, |
853 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 589 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
854 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}}, | 590 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}}, |
855 }; | 591 }; |
856 | 592 |
857 for (const auto& test : tests) { | 593 for (const auto& test : tests) { |
858 CheckKeyTestCase(&rewriter, test); | 594 CheckKeyTestCase(&rewriter, test); |
859 } | 595 } |
860 } | 596 } |
861 | 597 |
862 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 598 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
863 TestingPrefServiceSyncable prefs; | 599 TestingPrefServiceSyncable prefs; |
864 EventRewriter rewriter(NULL); | 600 EventRewriter rewriter(NULL); |
865 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 601 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
866 rewriter.set_pref_service_for_testing(&prefs); | 602 rewriter.set_pref_service_for_testing(&prefs); |
867 | 603 |
868 KeyTestCase tests[] = { | 604 KeyTestCase tests[] = { |
869 // Press Alt with Shift. Confirm the event is not rewritten. | 605 // Press Alt with Shift. Confirm the event is not rewritten. |
870 {ui::ET_KEY_PRESSED, | 606 {ui::ET_KEY_PRESSED, |
871 {ui::VKEY_MENU, | 607 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
872 ui::DomCode::ALT_LEFT, | 608 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
873 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 609 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
874 ui::DomKey::ALT, | 610 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
875 0}, | |
876 {ui::VKEY_MENU, | |
877 ui::DomCode::ALT_LEFT, | |
878 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
879 ui::DomKey::ALT, | |
880 0}}, | |
881 | 611 |
882 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 612 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
883 {ui::ET_KEY_PRESSED, | 613 {ui::ET_KEY_PRESSED, |
884 {ui::VKEY_LWIN, | 614 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
885 ui::DomCode::OS_LEFT, | 615 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
886 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | 616 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
887 ui::DomKey::OS, | 617 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
888 0}, | |
889 {ui::VKEY_LWIN, | |
890 ui::DomCode::OS_LEFT, | |
891 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | |
892 ui::DomKey::OS, | |
893 0}}, | |
894 | 618 |
895 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 619 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
896 {ui::ET_KEY_RELEASED, | 620 {ui::ET_KEY_RELEASED, |
897 {ui::VKEY_LWIN, | 621 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, |
898 ui::DomCode::OS_LEFT, | 622 ui::DomKey::OS}, |
899 ui::EF_CAPS_LOCK_DOWN, | 623 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, |
900 ui::DomKey::OS, | 624 ui::DomKey::OS}}, |
901 0}, | |
902 {ui::VKEY_LWIN, | |
903 ui::DomCode::OS_LEFT, | |
904 ui::EF_CAPS_LOCK_DOWN, | |
905 ui::DomKey::OS, | |
906 0}}, | |
907 | 625 |
908 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 626 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
909 {ui::ET_KEY_PRESSED, | 627 {ui::ET_KEY_PRESSED, |
910 {ui::VKEY_B, | 628 {ui::VKEY_B, ui::DomCode::KEY_B, |
911 ui::DomCode::KEY_B, | |
912 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 629 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
913 ui::EF_COMMAND_DOWN, | 630 ui::EF_COMMAND_DOWN, |
914 ui::DomKey::CHARACTER, | 631 ui::DomKey::Constant<'B'>::Character}, |
915 'B'}, | 632 {ui::VKEY_B, ui::DomCode::KEY_B, |
916 {ui::VKEY_B, | |
917 ui::DomCode::KEY_B, | |
918 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 633 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
919 ui::EF_COMMAND_DOWN, | 634 ui::EF_COMMAND_DOWN, |
920 ui::DomKey::CHARACTER, | 635 ui::DomKey::Constant<'B'>::Character}}, |
921 'B'}}, | |
922 }; | 636 }; |
923 | 637 |
924 for (const auto& test : tests) { | 638 for (const auto& test : tests) { |
925 CheckKeyTestCase(&rewriter, test); | 639 CheckKeyTestCase(&rewriter, test); |
926 } | 640 } |
927 } | 641 } |
928 | 642 |
929 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 643 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
930 // Disable Search and Control keys. | 644 // Disable Search and Control keys. |
931 TestingPrefServiceSyncable prefs; | 645 TestingPrefServiceSyncable prefs; |
932 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 646 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
933 IntegerPrefMember search; | 647 IntegerPrefMember search; |
934 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 648 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
935 search.SetValue(chromeos::input_method::kVoidKey); | 649 search.SetValue(chromeos::input_method::kVoidKey); |
936 IntegerPrefMember control; | 650 IntegerPrefMember control; |
937 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 651 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
938 control.SetValue(chromeos::input_method::kVoidKey); | 652 control.SetValue(chromeos::input_method::kVoidKey); |
939 | 653 |
940 EventRewriter rewriter(NULL); | 654 EventRewriter rewriter(NULL); |
941 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 655 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
942 rewriter.set_pref_service_for_testing(&prefs); | 656 rewriter.set_pref_service_for_testing(&prefs); |
943 | 657 |
944 KeyTestCase disabled_modifier_tests[] = { | 658 KeyTestCase disabled_modifier_tests[] = { |
945 // Press Alt with Shift. This key press shouldn't be affected by the | 659 // Press Alt with Shift. This key press shouldn't be affected by the |
946 // pref. Confirm the event is not rewritten. | 660 // pref. Confirm the event is not rewritten. |
947 {ui::ET_KEY_PRESSED, | 661 {ui::ET_KEY_PRESSED, |
948 {ui::VKEY_MENU, | 662 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
949 ui::DomCode::ALT_LEFT, | 663 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
950 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 664 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
951 ui::DomKey::ALT, | 665 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
952 0}, | |
953 {ui::VKEY_MENU, | |
954 ui::DomCode::ALT_LEFT, | |
955 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
956 ui::DomKey::ALT, | |
957 0}}, | |
958 | 666 |
959 // Press Search. Confirm the event is now VKEY_UNKNOWN. | 667 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
960 {ui::ET_KEY_PRESSED, | 668 {ui::ET_KEY_PRESSED, |
961 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 669 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
962 {ui::VKEY_UNKNOWN, | 670 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
963 ui::DomCode::NONE, | 671 ui::DomKey::UNIDENTIFIED}}, |
964 ui::EF_NONE, | |
965 ui::DomKey::UNIDENTIFIED, | |
966 0}}, | |
967 | 672 |
968 // Press Control. Confirm the event is now VKEY_UNKNOWN. | 673 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
969 {ui::ET_KEY_PRESSED, | 674 {ui::ET_KEY_PRESSED, |
970 {ui::VKEY_CONTROL, | 675 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
971 ui::DomCode::CONTROL_LEFT, | 676 ui::DomKey::CONTROL}, |
972 ui::EF_CONTROL_DOWN, | 677 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
973 ui::DomKey::CONTROL, | 678 ui::DomKey::UNIDENTIFIED}}, |
974 0}, | |
975 {ui::VKEY_UNKNOWN, | |
976 ui::DomCode::NONE, | |
977 ui::EF_NONE, | |
978 ui::DomKey::UNIDENTIFIED, | |
979 0}}, | |
980 | 679 |
981 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN | 680 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
982 // without any modifiers. | 681 // without any modifiers. |
983 {ui::ET_KEY_PRESSED, | 682 {ui::ET_KEY_PRESSED, |
984 {ui::VKEY_LWIN, | 683 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CONTROL_DOWN, |
985 ui::DomCode::OS_LEFT, | 684 ui::DomKey::OS}, |
986 ui::EF_CONTROL_DOWN, | 685 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
987 ui::DomKey::OS, | 686 ui::DomKey::UNIDENTIFIED}}, |
988 0}, | |
989 {ui::VKEY_UNKNOWN, | |
990 ui::DomCode::NONE, | |
991 ui::EF_NONE, | |
992 ui::DomKey::UNIDENTIFIED, | |
993 0}}, | |
994 | 687 |
995 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 688 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
996 // modifiers. | 689 // modifiers. |
997 {ui::ET_KEY_PRESSED, | 690 {ui::ET_KEY_PRESSED, |
998 {ui::VKEY_A, | 691 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
999 ui::DomCode::KEY_A, | 692 ui::DomKey::Constant<'a'>::Character}, |
1000 ui::EF_CONTROL_DOWN, | 693 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, |
1001 ui::DomKey::CHARACTER, | 694 ui::DomKey::Constant<'a'>::Character}}, |
1002 'a'}, | |
1003 {ui::VKEY_A, | |
1004 ui::DomCode::KEY_A, | |
1005 ui::EF_NONE, | |
1006 ui::DomKey::CHARACTER, | |
1007 'a'}}, | |
1008 | 695 |
1009 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 696 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
1010 // the Alt modifier. | 697 // the Alt modifier. |
1011 {ui::ET_KEY_PRESSED, | 698 {ui::ET_KEY_PRESSED, |
1012 {ui::VKEY_A, | 699 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
1013 ui::DomCode::KEY_A, | 700 ui::DomKey::Constant<'a'>::Character}, |
1014 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 701 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
1015 ui::DomKey::CHARACTER, | 702 ui::DomKey::Constant<'a'>::Character}}, |
1016 'a'}, | |
1017 {ui::VKEY_A, | |
1018 ui::DomCode::KEY_A, | |
1019 ui::EF_ALT_DOWN, | |
1020 ui::DomKey::CHARACTER, | |
1021 'a'}}, | |
1022 }; | 703 }; |
1023 | 704 |
1024 for (const auto& test : disabled_modifier_tests) { | 705 for (const auto& test : disabled_modifier_tests) { |
1025 CheckKeyTestCase(&rewriter, test); | 706 CheckKeyTestCase(&rewriter, test); |
1026 } | 707 } |
1027 | 708 |
1028 // Remap Alt to Control. | 709 // Remap Alt to Control. |
1029 IntegerPrefMember alt; | 710 IntegerPrefMember alt; |
1030 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 711 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1031 alt.SetValue(chromeos::input_method::kControlKey); | 712 alt.SetValue(chromeos::input_method::kControlKey); |
1032 | 713 |
1033 KeyTestCase tests[] = { | 714 KeyTestCase tests[] = { |
1034 // Press left Alt. Confirm the event is now VKEY_CONTROL | 715 // Press left Alt. Confirm the event is now VKEY_CONTROL |
1035 // even though the Control key itself is disabled. | 716 // even though the Control key itself is disabled. |
1036 {ui::ET_KEY_PRESSED, | 717 {ui::ET_KEY_PRESSED, |
1037 {ui::VKEY_MENU, | 718 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
1038 ui::DomCode::ALT_LEFT, | 719 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1039 ui::EF_ALT_DOWN, | 720 ui::DomKey::CONTROL}}, |
1040 ui::DomKey::ALT, | |
1041 0}, | |
1042 {ui::VKEY_CONTROL, | |
1043 ui::DomCode::CONTROL_LEFT, | |
1044 ui::EF_CONTROL_DOWN, | |
1045 ui::DomKey::CONTROL, | |
1046 0}}, | |
1047 | 721 |
1048 // Press Alt+a. Confirm the event is now Control+a even though the Control | 722 // Press Alt+a. Confirm the event is now Control+a even though the Control |
1049 // key itself is disabled. | 723 // key itself is disabled. |
1050 {ui::ET_KEY_PRESSED, | 724 {ui::ET_KEY_PRESSED, |
1051 {ui::VKEY_A, | 725 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
1052 ui::DomCode::KEY_A, | 726 ui::DomKey::Constant<'a'>::Character}, |
1053 ui::EF_ALT_DOWN, | 727 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
1054 ui::DomKey::CHARACTER, | 728 ui::DomKey::Constant<0x01>::Character}}, |
1055 'a'}, | |
1056 {ui::VKEY_A, | |
1057 ui::DomCode::KEY_A, | |
1058 ui::EF_CONTROL_DOWN, | |
1059 ui::DomKey::CHARACTER, | |
1060 0x01}}, | |
1061 }; | 729 }; |
1062 | 730 |
1063 for (const auto& test : tests) { | 731 for (const auto& test : tests) { |
1064 CheckKeyTestCase(&rewriter, test); | 732 CheckKeyTestCase(&rewriter, test); |
1065 } | 733 } |
1066 } | 734 } |
1067 | 735 |
1068 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 736 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
1069 // Remap Search to Control. | 737 // Remap Search to Control. |
1070 TestingPrefServiceSyncable prefs; | 738 TestingPrefServiceSyncable prefs; |
1071 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 739 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1072 IntegerPrefMember search; | 740 IntegerPrefMember search; |
1073 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 741 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1074 search.SetValue(chromeos::input_method::kControlKey); | 742 search.SetValue(chromeos::input_method::kControlKey); |
1075 | 743 |
1076 EventRewriter rewriter(NULL); | 744 EventRewriter rewriter(NULL); |
1077 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 745 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1078 rewriter.set_pref_service_for_testing(&prefs); | 746 rewriter.set_pref_service_for_testing(&prefs); |
1079 | 747 |
1080 KeyTestCase s_tests[] = { | 748 KeyTestCase s_tests[] = { |
1081 // Press Search. Confirm the event is now VKEY_CONTROL. | 749 // Press Search. Confirm the event is now VKEY_CONTROL. |
1082 {ui::ET_KEY_PRESSED, | 750 {ui::ET_KEY_PRESSED, |
1083 {ui::VKEY_LWIN, | 751 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
1084 ui::DomCode::OS_LEFT, | 752 ui::DomKey::OS}, |
1085 ui::EF_COMMAND_DOWN, | 753 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1086 ui::DomKey::OS, | 754 ui::DomKey::CONTROL}}, |
1087 0}, | |
1088 {ui::VKEY_CONTROL, | |
1089 ui::DomCode::CONTROL_LEFT, | |
1090 ui::EF_CONTROL_DOWN, | |
1091 ui::DomKey::CONTROL, | |
1092 0}}, | |
1093 }; | 755 }; |
1094 | 756 |
1095 for (const auto& test : s_tests) { | 757 for (const auto& test : s_tests) { |
1096 CheckKeyTestCase(&rewriter, test); | 758 CheckKeyTestCase(&rewriter, test); |
1097 } | 759 } |
1098 | 760 |
1099 // Remap Alt to Control too. | 761 // Remap Alt to Control too. |
1100 IntegerPrefMember alt; | 762 IntegerPrefMember alt; |
1101 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 763 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1102 alt.SetValue(chromeos::input_method::kControlKey); | 764 alt.SetValue(chromeos::input_method::kControlKey); |
1103 | 765 |
1104 KeyTestCase sa_tests[] = { | 766 KeyTestCase sa_tests[] = { |
1105 // Press Alt. Confirm the event is now VKEY_CONTROL. | 767 // Press Alt. Confirm the event is now VKEY_CONTROL. |
1106 {ui::ET_KEY_PRESSED, | 768 {ui::ET_KEY_PRESSED, |
1107 {ui::VKEY_MENU, | 769 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
1108 ui::DomCode::ALT_LEFT, | 770 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1109 ui::EF_ALT_DOWN, | 771 ui::DomKey::CONTROL}}, |
1110 ui::DomKey::ALT, | |
1111 0}, | |
1112 {ui::VKEY_CONTROL, | |
1113 ui::DomCode::CONTROL_LEFT, | |
1114 ui::EF_CONTROL_DOWN, | |
1115 ui::DomKey::CONTROL, | |
1116 0}}, | |
1117 | 772 |
1118 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 773 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
1119 {ui::ET_KEY_PRESSED, | 774 {ui::ET_KEY_PRESSED, |
1120 {ui::VKEY_LWIN, | 775 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1121 ui::DomCode::OS_LEFT, | 776 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
1122 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 777 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1123 ui::DomKey::OS, | 778 ui::DomKey::CONTROL}}, |
1124 0}, | |
1125 {ui::VKEY_CONTROL, | |
1126 ui::DomCode::CONTROL_LEFT, | |
1127 ui::EF_CONTROL_DOWN, | |
1128 ui::DomKey::CONTROL, | |
1129 0}}, | |
1130 | 779 |
1131 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. | 780 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
1132 {ui::ET_KEY_PRESSED, | 781 {ui::ET_KEY_PRESSED, |
1133 {ui::VKEY_LWIN, | 782 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1134 ui::DomCode::OS_LEFT, | |
1135 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 783 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1136 ui::DomKey::OS, | 784 ui::DomKey::OS}, |
1137 0}, | 785 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1138 {ui::VKEY_CONTROL, | 786 ui::DomKey::CONTROL}}, |
1139 ui::DomCode::CONTROL_LEFT, | |
1140 ui::EF_CONTROL_DOWN, | |
1141 ui::DomKey::CONTROL, | |
1142 0}}, | |
1143 | 787 |
1144 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 788 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
1145 // Shift and Control modifiers. | 789 // Shift and Control modifiers. |
1146 {ui::ET_KEY_PRESSED, | 790 {ui::ET_KEY_PRESSED, |
1147 {ui::VKEY_LWIN, | 791 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1148 ui::DomCode::OS_LEFT, | |
1149 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 792 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1150 ui::EF_COMMAND_DOWN, | 793 ui::EF_COMMAND_DOWN, |
1151 ui::DomKey::OS, | 794 ui::DomKey::OS}, |
1152 0}, | 795 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
1153 {ui::VKEY_CONTROL, | 796 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL}}, |
1154 ui::DomCode::CONTROL_LEFT, | |
1155 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1156 ui::DomKey::CONTROL, | |
1157 0}}, | |
1158 | 797 |
1159 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 798 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
1160 // and Control modifiers. | 799 // and Control modifiers. |
1161 {ui::ET_KEY_PRESSED, | 800 {ui::ET_KEY_PRESSED, |
1162 {ui::VKEY_B, | 801 {ui::VKEY_B, ui::DomCode::KEY_B, |
1163 ui::DomCode::KEY_B, | |
1164 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 802 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1165 ui::EF_COMMAND_DOWN, | 803 ui::EF_COMMAND_DOWN, |
1166 ui::DomKey::CHARACTER, | 804 ui::DomKey::Constant<'B'>::Character}, |
1167 'B'}, | 805 {ui::VKEY_B, ui::DomCode::KEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
1168 {ui::VKEY_B, | 806 ui::DomKey::Constant<0x02>::Character}}, |
1169 ui::DomCode::KEY_B, | |
1170 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1171 ui::DomKey::CHARACTER, | |
1172 0x02}}, | |
1173 }; | 807 }; |
1174 | 808 |
1175 for (const auto& test : sa_tests) { | 809 for (const auto& test : sa_tests) { |
1176 CheckKeyTestCase(&rewriter, test); | 810 CheckKeyTestCase(&rewriter, test); |
1177 } | 811 } |
1178 } | 812 } |
1179 | 813 |
1180 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 814 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
1181 // Remap Search to ESC. | 815 // Remap Search to ESC. |
1182 TestingPrefServiceSyncable prefs; | 816 TestingPrefServiceSyncable prefs; |
1183 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 817 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1184 IntegerPrefMember search; | 818 IntegerPrefMember search; |
1185 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 819 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1186 search.SetValue(chromeos::input_method::kEscapeKey); | 820 search.SetValue(chromeos::input_method::kEscapeKey); |
1187 | 821 |
1188 EventRewriter rewriter(NULL); | 822 EventRewriter rewriter(NULL); |
1189 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 823 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1190 rewriter.set_pref_service_for_testing(&prefs); | 824 rewriter.set_pref_service_for_testing(&prefs); |
1191 | 825 |
1192 KeyTestCase tests[] = { | 826 KeyTestCase tests[] = { |
1193 // Press Search. Confirm the event is now VKEY_ESCAPE. | 827 // Press Search. Confirm the event is now VKEY_ESCAPE. |
1194 {ui::ET_KEY_PRESSED, | 828 {ui::ET_KEY_PRESSED, |
1195 {ui::VKEY_LWIN, | 829 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
1196 ui::DomCode::OS_LEFT, | 830 ui::DomKey::OS}, |
1197 ui::EF_COMMAND_DOWN, | 831 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
1198 ui::DomKey::OS, | |
1199 0}, | |
1200 {ui::VKEY_ESCAPE, | |
1201 ui::DomCode::ESCAPE, | |
1202 ui::EF_NONE, | |
1203 ui::DomKey::ESCAPE, | |
1204 0x1B}}, | |
1205 }; | 832 }; |
1206 | 833 |
1207 for (const auto& test : tests) { | 834 for (const auto& test : tests) { |
1208 CheckKeyTestCase(&rewriter, test); | 835 CheckKeyTestCase(&rewriter, test); |
1209 } | 836 } |
1210 } | 837 } |
1211 | 838 |
1212 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 839 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
1213 // Remap Search to Alt. | 840 // Remap Search to Alt. |
1214 TestingPrefServiceSyncable prefs; | 841 TestingPrefServiceSyncable prefs; |
1215 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 842 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1216 IntegerPrefMember search; | 843 IntegerPrefMember search; |
1217 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 844 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1218 search.SetValue(chromeos::input_method::kAltKey); | 845 search.SetValue(chromeos::input_method::kAltKey); |
1219 | 846 |
1220 EventRewriter rewriter(NULL); | 847 EventRewriter rewriter(NULL); |
1221 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 848 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1222 rewriter.set_pref_service_for_testing(&prefs); | 849 rewriter.set_pref_service_for_testing(&prefs); |
1223 | 850 |
1224 KeyTestCase s2a_tests[] = { | 851 KeyTestCase s2a_tests[] = { |
1225 // Press Search. Confirm the event is now VKEY_MENU. | 852 // Press Search. Confirm the event is now VKEY_MENU. |
1226 {ui::ET_KEY_PRESSED, | 853 {ui::ET_KEY_PRESSED, |
1227 {ui::VKEY_LWIN, | 854 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
1228 ui::DomCode::OS_LEFT, | 855 ui::DomKey::OS}, |
1229 ui::EF_COMMAND_DOWN, | 856 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
1230 ui::DomKey::OS, | 857 ui::DomKey::ALT}}, |
1231 0}, | |
1232 {ui::VKEY_MENU, | |
1233 ui::DomCode::ALT_LEFT, | |
1234 ui::EF_ALT_DOWN, | |
1235 ui::DomKey::ALT, | |
1236 0}}, | |
1237 }; | 858 }; |
1238 | 859 |
1239 for (const auto& test : s2a_tests) { | 860 for (const auto& test : s2a_tests) { |
1240 CheckKeyTestCase(&rewriter, test); | 861 CheckKeyTestCase(&rewriter, test); |
1241 } | 862 } |
1242 | 863 |
1243 // Remap Alt to Control. | 864 // Remap Alt to Control. |
1244 IntegerPrefMember alt; | 865 IntegerPrefMember alt; |
1245 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 866 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1246 alt.SetValue(chromeos::input_method::kControlKey); | 867 alt.SetValue(chromeos::input_method::kControlKey); |
1247 | 868 |
1248 KeyTestCase a2c_tests[] = { | 869 KeyTestCase a2c_tests[] = { |
1249 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 870 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
1250 {ui::ET_KEY_PRESSED, | 871 {ui::ET_KEY_PRESSED, |
1251 {ui::VKEY_MENU, | 872 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
1252 ui::DomCode::ALT_LEFT, | 873 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1253 ui::EF_ALT_DOWN, | 874 ui::DomKey::CONTROL}}, |
1254 ui::DomKey::ALT, | |
1255 0}, | |
1256 {ui::VKEY_CONTROL, | |
1257 ui::DomCode::CONTROL_LEFT, | |
1258 ui::EF_CONTROL_DOWN, | |
1259 ui::DomKey::CONTROL, | |
1260 0}}, | |
1261 // Press Shift+comma. Verify that only the flags are changed. | 875 // Press Shift+comma. Verify that only the flags are changed. |
1262 // The X11 portion of the test addresses crbug.com/390263 by verifying | 876 // The X11 portion of the test addresses crbug.com/390263 by verifying |
1263 // that the X keycode remains that for ',<' and not for 105-key '<>'. | 877 // that the X keycode remains that for ',<' and not for 105-key '<>'. |
1264 {ui::ET_KEY_PRESSED, | 878 {ui::ET_KEY_PRESSED, |
1265 {ui::VKEY_OEM_COMMA, | 879 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
1266 ui::DomCode::COMMA, | 880 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::UNIDENTIFIED}, |
1267 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 881 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
1268 ui::DomKey::UNIDENTIFIED, | 882 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}}, |
1269 0}, | |
1270 {ui::VKEY_OEM_COMMA, | |
1271 ui::DomCode::COMMA, | |
1272 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1273 ui::DomKey::UNIDENTIFIED, | |
1274 0}}, | |
1275 // Press Shift+9. Verify that only the flags are changed. | 883 // Press Shift+9. Verify that only the flags are changed. |
1276 {ui::ET_KEY_PRESSED, | 884 {ui::ET_KEY_PRESSED, |
1277 {ui::VKEY_9, | 885 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
1278 ui::DomCode::DIGIT9, | 886 ui::DomKey::UNIDENTIFIED}, |
1279 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 887 {ui::VKEY_9, ui::DomCode::DIGIT9, |
1280 ui::DomKey::UNIDENTIFIED, | 888 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}}, |
1281 0}, | |
1282 {ui::VKEY_9, | |
1283 ui::DomCode::DIGIT9, | |
1284 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1285 ui::DomKey::UNIDENTIFIED, | |
1286 0}}, | |
1287 }; | 889 }; |
1288 | 890 |
1289 for (const auto& test : a2c_tests) { | 891 for (const auto& test : a2c_tests) { |
1290 CheckKeyTestCase(&rewriter, test); | 892 CheckKeyTestCase(&rewriter, test); |
1291 } | 893 } |
1292 | 894 |
1293 // Remap Control to Search. | 895 // Remap Control to Search. |
1294 IntegerPrefMember control; | 896 IntegerPrefMember control; |
1295 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 897 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1296 control.SetValue(chromeos::input_method::kSearchKey); | 898 control.SetValue(chromeos::input_method::kSearchKey); |
1297 | 899 |
1298 KeyTestCase c2s_tests[] = { | 900 KeyTestCase c2s_tests[] = { |
1299 // Press left Control. Confirm the event is now VKEY_LWIN. | 901 // Press left Control. Confirm the event is now VKEY_LWIN. |
1300 {ui::ET_KEY_PRESSED, | 902 {ui::ET_KEY_PRESSED, |
1301 {ui::VKEY_CONTROL, | 903 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1302 ui::DomCode::CONTROL_LEFT, | 904 ui::DomKey::CONTROL}, |
1303 ui::EF_CONTROL_DOWN, | 905 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
1304 ui::DomKey::CONTROL, | 906 ui::DomKey::OS}}, |
1305 0}, | |
1306 {ui::VKEY_LWIN, | |
1307 ui::DomCode::OS_LEFT, | |
1308 ui::EF_COMMAND_DOWN, | |
1309 ui::DomKey::OS, | |
1310 0}}, | |
1311 | 907 |
1312 // Then, press all of the three, Control+Alt+Search. | 908 // Then, press all of the three, Control+Alt+Search. |
1313 {ui::ET_KEY_PRESSED, | 909 {ui::ET_KEY_PRESSED, |
1314 {ui::VKEY_LWIN, | 910 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1315 ui::DomCode::OS_LEFT, | |
1316 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 911 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1317 ui::DomKey::OS, | 912 ui::DomKey::OS}, |
1318 0}, | 913 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
1319 {ui::VKEY_MENU, | |
1320 ui::DomCode::ALT_LEFT, | |
1321 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 914 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1322 ui::DomKey::ALT, | 915 ui::DomKey::ALT}}, |
1323 0}}, | |
1324 | 916 |
1325 // Press Shift+Control+Alt+Search. | 917 // Press Shift+Control+Alt+Search. |
1326 {ui::ET_KEY_PRESSED, | 918 {ui::ET_KEY_PRESSED, |
1327 {ui::VKEY_LWIN, | 919 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1328 ui::DomCode::OS_LEFT, | |
1329 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 920 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1330 ui::EF_COMMAND_DOWN, | 921 ui::EF_COMMAND_DOWN, |
1331 ui::DomKey::OS, | 922 ui::DomKey::OS}, |
1332 0}, | 923 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
1333 {ui::VKEY_MENU, | |
1334 ui::DomCode::ALT_LEFT, | |
1335 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 924 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1336 ui::EF_COMMAND_DOWN, | 925 ui::EF_COMMAND_DOWN, |
1337 ui::DomKey::ALT, | 926 ui::DomKey::ALT}}, |
1338 0}}, | |
1339 | 927 |
1340 // Press Shift+Control+Alt+Search+B | 928 // Press Shift+Control+Alt+Search+B |
1341 {ui::ET_KEY_PRESSED, | 929 {ui::ET_KEY_PRESSED, |
1342 {ui::VKEY_B, | 930 {ui::VKEY_B, ui::DomCode::KEY_B, |
1343 ui::DomCode::KEY_B, | |
1344 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 931 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1345 ui::EF_COMMAND_DOWN, | 932 ui::EF_COMMAND_DOWN, |
1346 ui::DomKey::CHARACTER, | 933 ui::DomKey::Constant<'B'>::Character}, |
1347 'B'}, | 934 {ui::VKEY_B, ui::DomCode::KEY_B, |
1348 {ui::VKEY_B, | |
1349 ui::DomCode::KEY_B, | |
1350 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 935 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1351 ui::EF_COMMAND_DOWN, | 936 ui::EF_COMMAND_DOWN, |
1352 ui::DomKey::CHARACTER, | 937 ui::DomKey::Constant<'B'>::Character}}, |
1353 'B'}}, | |
1354 }; | 938 }; |
1355 | 939 |
1356 for (const auto& test : c2s_tests) { | 940 for (const auto& test : c2s_tests) { |
1357 CheckKeyTestCase(&rewriter, test); | 941 CheckKeyTestCase(&rewriter, test); |
1358 } | 942 } |
1359 } | 943 } |
1360 | 944 |
1361 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 945 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
1362 // Remap Search to Caps Lock. | 946 // Remap Search to Caps Lock. |
1363 TestingPrefServiceSyncable prefs; | 947 TestingPrefServiceSyncable prefs; |
1364 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 948 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1365 IntegerPrefMember search; | 949 IntegerPrefMember search; |
1366 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 950 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1367 search.SetValue(chromeos::input_method::kCapsLockKey); | 951 search.SetValue(chromeos::input_method::kCapsLockKey); |
1368 | 952 |
1369 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 953 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1370 EventRewriter rewriter(NULL); | 954 EventRewriter rewriter(NULL); |
1371 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 955 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1372 rewriter.set_pref_service_for_testing(&prefs); | 956 rewriter.set_pref_service_for_testing(&prefs); |
1373 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 957 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1374 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 958 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1375 | 959 |
1376 // Press Search. | 960 // Press Search. |
1377 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 961 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
1378 ui::DomCode::CAPS_LOCK, ui::EF_MOD3_DOWN, | 962 ui::DomCode::CAPS_LOCK, ui::EF_MOD3_DOWN, |
1379 ui::DomKey::CAPS_LOCK, 0), | 963 ui::DomKey::CAPS_LOCK), |
1380 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 964 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1381 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 965 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1382 ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0)); | 966 ui::EF_COMMAND_DOWN, ui::DomKey::OS)); |
1383 // Confirm that the Caps Lock status is changed. | 967 // Confirm that the Caps Lock status is changed. |
1384 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 968 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1385 | 969 |
1386 // Release Search. | 970 // Release Search. |
1387 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 971 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
1388 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 972 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
1389 ui::DomKey::CAPS_LOCK, 0), | 973 ui::DomKey::CAPS_LOCK), |
1390 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 974 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1391 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 975 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1392 ui::EF_NONE, ui::DomKey::OS, 0)); | 976 ui::EF_NONE, ui::DomKey::OS)); |
1393 // Confirm that the Caps Lock status is not changed. | 977 // Confirm that the Caps Lock status is not changed. |
1394 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 978 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1395 | 979 |
1396 // Press Search. | 980 // Press Search. |
1397 EXPECT_EQ( | 981 EXPECT_EQ( |
1398 GetExpectedResultAsString( | 982 GetExpectedResultAsString( |
1399 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 983 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1400 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0), | 984 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
1401 GetRewrittenEventAsString( | 985 GetRewrittenEventAsString( |
1402 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 986 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1403 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0)); | 987 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS)); |
1404 // Confirm that the Caps Lock status is changed. | 988 // Confirm that the Caps Lock status is changed. |
1405 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 989 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1406 | 990 |
1407 // Release Search. | 991 // Release Search. |
1408 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 992 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
1409 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 993 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
1410 ui::DomKey::CAPS_LOCK, 0), | 994 ui::DomKey::CAPS_LOCK), |
1411 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 995 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1412 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 996 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
1413 ui::EF_NONE, ui::DomKey::OS, 0)); | 997 ui::EF_NONE, ui::DomKey::OS)); |
1414 // Confirm that the Caps Lock status is not changed. | 998 // Confirm that the Caps Lock status is not changed. |
1415 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 999 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1416 | 1000 |
1417 // Press Caps Lock (on an external keyboard). | 1001 // Press Caps Lock (on an external keyboard). |
1418 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1002 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
1419 ui::DomCode::CAPS_LOCK, | 1003 ui::DomCode::CAPS_LOCK, |
1420 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1004 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1421 ui::DomKey::CAPS_LOCK, 0), | 1005 ui::DomKey::CAPS_LOCK), |
1422 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1006 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1423 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1007 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1424 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1008 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1425 ui::DomKey::CAPS_LOCK, 0)); | 1009 ui::DomKey::CAPS_LOCK)); |
1426 | 1010 |
1427 #if defined(USE_X11) | 1011 #if defined(USE_X11) |
1428 // Confirm that calling RewriteForTesting() does not change the state of | 1012 // Confirm that calling RewriteForTesting() does not change the state of |
1429 // |ime_keyboard|. In this case, X Window system itself should change the | 1013 // |ime_keyboard|. In this case, X Window system itself should change the |
1430 // Caps Lock state, not ash::EventRewriter. | 1014 // Caps Lock state, not ash::EventRewriter. |
1431 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1015 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1432 #elif defined(USE_OZONE) | 1016 #elif defined(USE_OZONE) |
1433 // Under Ozone the rewriter is responsible for changing the caps lock | 1017 // Under Ozone the rewriter is responsible for changing the caps lock |
1434 // state when the final key is Caps Lock, regardless of whether the | 1018 // state when the final key is Caps Lock, regardless of whether the |
1435 // initial key is Caps Lock. | 1019 // initial key is Caps Lock. |
1436 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1020 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1437 #endif | 1021 #endif |
1438 | 1022 |
1439 // Release Caps Lock (on an external keyboard). | 1023 // Release Caps Lock (on an external keyboard). |
1440 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1024 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
1441 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1025 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
1442 ui::DomKey::CAPS_LOCK, 0), | 1026 ui::DomKey::CAPS_LOCK), |
1443 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1027 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1444 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1028 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1445 ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0)); | 1029 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); |
1446 #if defined(USE_X11) | 1030 #if defined(USE_X11) |
1447 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1031 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1448 #elif defined(USE_OZONE) | 1032 #elif defined(USE_OZONE) |
1449 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1033 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1450 #endif | 1034 #endif |
1451 } | 1035 } |
1452 | 1036 |
1453 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 1037 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
1454 TestingPrefServiceSyncable prefs; | 1038 TestingPrefServiceSyncable prefs; |
1455 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1039 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1456 | 1040 |
1457 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1041 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1458 EventRewriter rewriter(NULL); | 1042 EventRewriter rewriter(NULL); |
1459 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1043 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1460 rewriter.set_pref_service_for_testing(&prefs); | 1044 rewriter.set_pref_service_for_testing(&prefs); |
1461 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1045 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1462 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1046 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1463 | 1047 |
1464 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1048 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1465 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1049 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
1466 ui::DomCode::CAPS_LOCK, | 1050 ui::DomCode::CAPS_LOCK, |
1467 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1051 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1468 ui::DomKey::CAPS_LOCK, 0), | 1052 ui::DomKey::CAPS_LOCK), |
1469 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1053 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1470 ui::VKEY_F16, ui::DomCode::F16, | 1054 ui::VKEY_F16, ui::DomCode::F16, |
1471 ui::EF_MOD3_DOWN, ui::DomKey::F16, 0)); | 1055 ui::EF_MOD3_DOWN, ui::DomKey::F16)); |
1472 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1056 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1473 } | 1057 } |
1474 | 1058 |
1475 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1059 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
1476 TestingPrefServiceSyncable prefs; | 1060 TestingPrefServiceSyncable prefs; |
1477 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1061 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1478 | 1062 |
1479 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1063 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1480 EventRewriter rewriter(NULL); | 1064 EventRewriter rewriter(NULL); |
1481 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1065 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1482 rewriter.set_pref_service_for_testing(&prefs); | 1066 rewriter.set_pref_service_for_testing(&prefs); |
1483 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1067 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1484 | 1068 |
1485 KeyTestCase tests[] = { | 1069 KeyTestCase tests[] = { |
1486 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1070 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
1487 // specified. | 1071 // specified. |
1488 {ui::ET_KEY_PRESSED, | 1072 {ui::ET_KEY_PRESSED, |
1489 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1073 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
1490 {ui::VKEY_CONTROL, | 1074 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
1491 ui::DomCode::CONTROL_LEFT, | 1075 ui::DomKey::CONTROL}}, |
1492 ui::EF_CONTROL_DOWN, | |
1493 ui::DomKey::CONTROL, | |
1494 0}}, | |
1495 | 1076 |
1496 {ui::ET_KEY_RELEASED, | 1077 {ui::ET_KEY_RELEASED, |
1497 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1078 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
1498 {ui::VKEY_CONTROL, | 1079 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
1499 ui::DomCode::CONTROL_LEFT, | 1080 ui::DomKey::CONTROL}}, |
1500 ui::EF_NONE, | |
1501 ui::DomKey::CONTROL, | |
1502 0}}, | |
1503 | 1081 |
1504 // However, Mod2Mask should not be rewritten to CtrlMask when | 1082 // However, Mod2Mask should not be rewritten to CtrlMask when |
1505 // --has-chromeos-diamond-key is not specified. | 1083 // --has-chromeos-diamond-key is not specified. |
1506 {ui::ET_KEY_PRESSED, | 1084 {ui::ET_KEY_PRESSED, |
1507 {ui::VKEY_A, | 1085 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, |
1508 ui::DomCode::KEY_A, | 1086 ui::DomKey::Constant<'a'>::Character}, |
1509 ui::EF_NONE, | 1087 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, |
1510 ui::DomKey::CHARACTER, | 1088 ui::DomKey::Constant<'a'>::Character}}, |
1511 'a'}, | |
1512 {ui::VKEY_A, | |
1513 ui::DomCode::KEY_A, | |
1514 ui::EF_NONE, | |
1515 ui::DomKey::CHARACTER, | |
1516 'a'}}, | |
1517 }; | 1089 }; |
1518 | 1090 |
1519 for (const auto& test : tests) { | 1091 for (const auto& test : tests) { |
1520 CheckKeyTestCase(&rewriter, test); | 1092 CheckKeyTestCase(&rewriter, test); |
1521 } | 1093 } |
1522 } | 1094 } |
1523 | 1095 |
1524 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1096 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
1525 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1097 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
1526 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1098 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1527 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1099 chromeos::switches::kHasChromeOSDiamondKey, ""); |
1528 | 1100 |
1529 TestingPrefServiceSyncable prefs; | 1101 TestingPrefServiceSyncable prefs; |
1530 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1102 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1531 | 1103 |
1532 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1104 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1533 EventRewriter rewriter(NULL); | 1105 EventRewriter rewriter(NULL); |
1534 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1106 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1535 rewriter.set_pref_service_for_testing(&prefs); | 1107 rewriter.set_pref_service_for_testing(&prefs); |
1536 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1108 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1537 | 1109 |
1538 // By default, F15 should work as Control. | 1110 // By default, F15 should work as Control. |
1539 EXPECT_EQ(GetExpectedResultAsString( | 1111 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
1540 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1112 ui::DomCode::CONTROL_LEFT, |
1541 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1113 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
1542 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1114 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1543 ui::VKEY_F15, ui::DomCode::F15, | 1115 ui::VKEY_F15, ui::DomCode::F15, |
1544 ui::EF_NONE, ui::DomKey::F15, 0)); | 1116 ui::EF_NONE, ui::DomKey::F15)); |
1545 // Check that Control is applied to a subsequent key press. | 1117 // Check that Control is applied to a subsequent key press. |
1546 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1118 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1547 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1119 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
1548 ui::DomKey::CHARACTER, 0x01), | 1120 ui::DomKey::Constant<0x01>::Character), |
1549 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1121 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1550 ui::DomCode::KEY_A, ui::EF_NONE, | 1122 ui::DomCode::KEY_A, ui::EF_NONE, |
1551 ui::DomKey::CHARACTER, 'a')); | 1123 ui::DomKey::Constant<'a'>::Character)); |
1552 // Release F15 | 1124 // Release F15 |
1553 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1125 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
1554 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1126 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
1555 ui::DomKey::CONTROL, 0), | 1127 ui::DomKey::CONTROL), |
1556 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1128 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1557 ui::VKEY_F15, ui::DomCode::F15, | 1129 ui::VKEY_F15, ui::DomCode::F15, |
1558 ui::EF_NONE, ui::DomKey::F15, 0)); | 1130 ui::EF_NONE, ui::DomKey::F15)); |
1559 // Check that Control is no longer applied to a subsequent key press. | 1131 // Check that Control is no longer applied to a subsequent key press. |
1560 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1132 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1561 ui::DomCode::KEY_A, ui::EF_NONE, | 1133 ui::DomCode::KEY_A, ui::EF_NONE, |
1562 ui::DomKey::CHARACTER, 'a'), | 1134 ui::DomKey::Constant<'a'>::Character), |
1563 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1135 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1564 ui::DomCode::KEY_A, ui::EF_NONE, | 1136 ui::DomCode::KEY_A, ui::EF_NONE, |
1565 ui::DomKey::CHARACTER, 'a')); | 1137 ui::DomKey::Constant<'a'>::Character)); |
1566 | 1138 |
1567 IntegerPrefMember diamond; | 1139 IntegerPrefMember diamond; |
1568 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1140 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
1569 diamond.SetValue(chromeos::input_method::kVoidKey); | 1141 diamond.SetValue(chromeos::input_method::kVoidKey); |
1570 | 1142 |
1571 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, | 1143 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, |
1572 ui::DomCode::NONE, ui::EF_NONE, | 1144 ui::DomCode::NONE, ui::EF_NONE, |
1573 ui::DomKey::UNIDENTIFIED, 0), | 1145 ui::DomKey::UNIDENTIFIED), |
1574 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1146 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1575 ui::VKEY_F15, ui::DomCode::F15, | 1147 ui::VKEY_F15, ui::DomCode::F15, |
1576 ui::EF_NONE, ui::DomKey::F15, 0)); | 1148 ui::EF_NONE, ui::DomKey::F15)); |
1577 // Check that no modifier is applied to another key. | 1149 // Check that no modifier is applied to another key. |
1578 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1150 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1579 ui::DomCode::KEY_A, ui::EF_NONE, | 1151 ui::DomCode::KEY_A, ui::EF_NONE, |
1580 ui::DomKey::CHARACTER, 'a'), | 1152 ui::DomKey::Constant<'a'>::Character), |
1581 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1153 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1582 ui::DomCode::KEY_A, ui::EF_NONE, | 1154 ui::DomCode::KEY_A, ui::EF_NONE, |
1583 ui::DomKey::CHARACTER, 'a')); | 1155 ui::DomKey::Constant<'a'>::Character)); |
1584 | 1156 |
1585 diamond.SetValue(chromeos::input_method::kControlKey); | 1157 diamond.SetValue(chromeos::input_method::kControlKey); |
1586 | 1158 |
1587 EXPECT_EQ(GetExpectedResultAsString( | 1159 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
1588 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1160 ui::DomCode::CONTROL_LEFT, |
1589 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1161 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
1590 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1162 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1591 ui::VKEY_F15, ui::DomCode::F15, | 1163 ui::VKEY_F15, ui::DomCode::F15, |
1592 ui::EF_NONE, ui::DomKey::F15, 0)); | 1164 ui::EF_NONE, ui::DomKey::F15)); |
1593 // Check that Control is applied to a subsequent key press. | 1165 // Check that Control is applied to a subsequent key press. |
1594 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1166 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1595 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1167 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
1596 ui::DomKey::CHARACTER, 0x01), | 1168 ui::DomKey::Constant<0x01>::Character), |
1597 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1169 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1598 ui::DomCode::KEY_A, ui::EF_NONE, | 1170 ui::DomCode::KEY_A, ui::EF_NONE, |
1599 ui::DomKey::CHARACTER, 'a')); | 1171 ui::DomKey::Constant<'a'>::Character)); |
1600 // Release F15 | 1172 // Release F15 |
1601 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1173 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
1602 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1174 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
1603 ui::DomKey::CONTROL, 0), | 1175 ui::DomKey::CONTROL), |
1604 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1176 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1605 ui::VKEY_F15, ui::DomCode::F15, | 1177 ui::VKEY_F15, ui::DomCode::F15, |
1606 ui::EF_NONE, ui::DomKey::F15, 0)); | 1178 ui::EF_NONE, ui::DomKey::F15)); |
1607 // Check that Control is no longer applied to a subsequent key press. | 1179 // Check that Control is no longer applied to a subsequent key press. |
1608 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1180 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1609 ui::DomCode::KEY_A, ui::EF_NONE, | 1181 ui::DomCode::KEY_A, ui::EF_NONE, |
1610 ui::DomKey::CHARACTER, 'a'), | 1182 ui::DomKey::Constant<'a'>::Character), |
1611 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1183 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1612 ui::DomCode::KEY_A, ui::EF_NONE, | 1184 ui::DomCode::KEY_A, ui::EF_NONE, |
1613 ui::DomKey::CHARACTER, 'a')); | 1185 ui::DomKey::Constant<'a'>::Character)); |
1614 | 1186 |
1615 diamond.SetValue(chromeos::input_method::kAltKey); | 1187 diamond.SetValue(chromeos::input_method::kAltKey); |
1616 | 1188 |
1617 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, | 1189 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, |
1618 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 1190 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
1619 ui::DomKey::ALT, 0), | 1191 ui::DomKey::ALT), |
1620 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1192 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1621 ui::VKEY_F15, ui::DomCode::F15, | 1193 ui::VKEY_F15, ui::DomCode::F15, |
1622 ui::EF_NONE, ui::DomKey::F15, 0)); | 1194 ui::EF_NONE, ui::DomKey::F15)); |
1623 // Check that Alt is applied to a subsequent key press. | 1195 // Check that Alt is applied to a subsequent key press. |
1624 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1196 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1625 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 1197 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
1626 ui::DomKey::CHARACTER, 'a'), | 1198 ui::DomKey::Constant<'a'>::Character), |
1627 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1199 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1628 ui::DomCode::KEY_A, ui::EF_NONE, | 1200 ui::DomCode::KEY_A, ui::EF_NONE, |
1629 ui::DomKey::CHARACTER, 'a')); | 1201 ui::DomKey::Constant<'a'>::Character)); |
1630 // Release F15 | 1202 // Release F15 |
1631 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, | 1203 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, |
1632 ui::DomCode::ALT_LEFT, ui::EF_NONE, | 1204 ui::DomCode::ALT_LEFT, ui::EF_NONE, |
1633 ui::DomKey::ALT, 0), | 1205 ui::DomKey::ALT), |
1634 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1206 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1635 ui::VKEY_F15, ui::DomCode::F15, | 1207 ui::VKEY_F15, ui::DomCode::F15, |
1636 ui::EF_NONE, ui::DomKey::F15, 0)); | 1208 ui::EF_NONE, ui::DomKey::F15)); |
1637 // Check that Alt is no longer applied to a subsequent key press. | 1209 // Check that Alt is no longer applied to a subsequent key press. |
1638 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1210 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1639 ui::DomCode::KEY_A, ui::EF_NONE, | 1211 ui::DomCode::KEY_A, ui::EF_NONE, |
1640 ui::DomKey::CHARACTER, 'a'), | 1212 ui::DomKey::Constant<'a'>::Character), |
1641 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1213 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1642 ui::DomCode::KEY_A, ui::EF_NONE, | 1214 ui::DomCode::KEY_A, ui::EF_NONE, |
1643 ui::DomKey::CHARACTER, 'a')); | 1215 ui::DomKey::Constant<'a'>::Character)); |
1644 | 1216 |
1645 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1217 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1646 | 1218 |
1647 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1219 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
1648 ui::DomCode::CAPS_LOCK, | 1220 ui::DomCode::CAPS_LOCK, |
1649 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1221 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1650 ui::DomKey::CAPS_LOCK, 0), | 1222 ui::DomKey::CAPS_LOCK), |
1651 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1223 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1652 ui::VKEY_F15, ui::DomCode::F15, | 1224 ui::VKEY_F15, ui::DomCode::F15, |
1653 ui::EF_NONE, ui::DomKey::F15, 0)); | 1225 ui::EF_NONE, ui::DomKey::F15)); |
1654 // Check that Caps is applied to a subsequent key press. | 1226 // Check that Caps is applied to a subsequent key press. |
1655 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1227 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1656 ui::DomCode::KEY_A, | 1228 ui::DomCode::KEY_A, |
1657 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1229 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1658 ui::DomKey::CHARACTER, 'A'), | 1230 ui::DomKey::Constant<'A'>::Character), |
1659 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1231 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1660 ui::DomCode::KEY_A, ui::EF_NONE, | 1232 ui::DomCode::KEY_A, ui::EF_NONE, |
1661 ui::DomKey::CHARACTER, 'a')); | 1233 ui::DomKey::Constant<'a'>::Character)); |
1662 // Release F15 | 1234 // Release F15 |
1663 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1235 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
1664 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1236 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
1665 ui::DomKey::CAPS_LOCK, 0), | 1237 ui::DomKey::CAPS_LOCK), |
1666 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1238 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1667 ui::VKEY_F15, ui::DomCode::F15, | 1239 ui::VKEY_F15, ui::DomCode::F15, |
1668 ui::EF_NONE, ui::DomKey::F15, 0)); | 1240 ui::EF_NONE, ui::DomKey::F15)); |
1669 // Check that Control is no longer applied to a subsequent key press. | 1241 // Check that Control is no longer applied to a subsequent key press. |
1670 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1242 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1671 ui::DomCode::KEY_A, ui::EF_NONE, | 1243 ui::DomCode::KEY_A, ui::EF_NONE, |
1672 ui::DomKey::CHARACTER, 'a'), | 1244 ui::DomKey::Constant<'a'>::Character), |
1673 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1245 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1674 ui::DomCode::KEY_A, ui::EF_NONE, | 1246 ui::DomCode::KEY_A, ui::EF_NONE, |
1675 ui::DomKey::CHARACTER, 'a')); | 1247 ui::DomKey::Constant<'a'>::Character)); |
1676 | 1248 |
1677 *base::CommandLine::ForCurrentProcess() = original_cl; | 1249 *base::CommandLine::ForCurrentProcess() = original_cl; |
1678 } | 1250 } |
1679 | 1251 |
1680 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1252 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
1681 // Remap CapsLock to Control. | 1253 // Remap CapsLock to Control. |
1682 TestingPrefServiceSyncable prefs; | 1254 TestingPrefServiceSyncable prefs; |
1683 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1255 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1684 IntegerPrefMember control; | 1256 IntegerPrefMember control; |
1685 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1257 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1686 control.SetValue(chromeos::input_method::kControlKey); | 1258 control.SetValue(chromeos::input_method::kControlKey); |
1687 | 1259 |
1688 EventRewriter rewriter(NULL); | 1260 EventRewriter rewriter(NULL); |
1689 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1261 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1690 rewriter.set_pref_service_for_testing(&prefs); | 1262 rewriter.set_pref_service_for_testing(&prefs); |
1691 | 1263 |
1692 KeyTestCase tests[] = { | 1264 KeyTestCase tests[] = { |
1693 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1265 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1694 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1266 // On Chrome OS, CapsLock works as a Mod3 modifier. |
1695 {ui::ET_KEY_PRESSED, | 1267 {ui::ET_KEY_PRESSED, |
1696 {ui::VKEY_A, | 1268 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_MOD3_DOWN, |
1697 ui::DomCode::KEY_A, | 1269 ui::DomKey::Constant<'a'>::Character}, |
1698 ui::EF_MOD3_DOWN, | 1270 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
1699 ui::DomKey::CHARACTER, | 1271 ui::DomKey::Constant<0x01>::Character}}, |
1700 'a'}, | |
1701 {ui::VKEY_A, | |
1702 ui::DomCode::KEY_A, | |
1703 ui::EF_CONTROL_DOWN, | |
1704 ui::DomKey::CHARACTER, | |
1705 0x01}}, | |
1706 | 1272 |
1707 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1273 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
1708 // ControlMask | 1274 // ControlMask |
1709 {ui::ET_KEY_PRESSED, | 1275 {ui::ET_KEY_PRESSED, |
1710 {ui::VKEY_A, | 1276 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, |
1711 ui::DomCode::KEY_A, | 1277 ui::DomKey::Constant<'a'>::Character}, |
1712 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, | 1278 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
1713 ui::DomKey::CHARACTER, | 1279 ui::DomKey::Constant<0x01>::Character}}, |
1714 'a'}, | |
1715 {ui::VKEY_A, | |
1716 ui::DomCode::KEY_A, | |
1717 ui::EF_CONTROL_DOWN, | |
1718 ui::DomKey::CHARACTER, | |
1719 0x01}}, | |
1720 | 1280 |
1721 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1281 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
1722 // ControlMask. | 1282 // ControlMask. |
1723 {ui::ET_KEY_PRESSED, | 1283 {ui::ET_KEY_PRESSED, |
1724 {ui::VKEY_A, | 1284 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
1725 ui::DomCode::KEY_A, | 1285 ui::DomKey::Constant<'a'>::Character}, |
1726 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, | 1286 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1727 ui::DomKey::CHARACTER, | 1287 ui::DomKey::Constant<0x01>::Character}}, |
1728 'a'}, | |
1729 {ui::VKEY_A, | |
1730 ui::DomCode::KEY_A, | |
1731 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1732 ui::DomKey::CHARACTER, | |
1733 0x01}}, | |
1734 }; | 1288 }; |
1735 | 1289 |
1736 for (const auto& test : tests) { | 1290 for (const auto& test : tests) { |
1737 CheckKeyTestCase(&rewriter, test); | 1291 CheckKeyTestCase(&rewriter, test); |
1738 } | 1292 } |
1739 } | 1293 } |
1740 | 1294 |
1741 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1295 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1742 // Remap CapsLock to Control. | 1296 // Remap CapsLock to Control. |
1743 TestingPrefServiceSyncable prefs; | 1297 TestingPrefServiceSyncable prefs; |
1744 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1298 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1745 IntegerPrefMember control; | 1299 IntegerPrefMember control; |
1746 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1300 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1747 control.SetValue(chromeos::input_method::kControlKey); | 1301 control.SetValue(chromeos::input_method::kControlKey); |
1748 | 1302 |
1749 EventRewriter rewriter(NULL); | 1303 EventRewriter rewriter(NULL); |
1750 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1304 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1751 rewriter.set_pref_service_for_testing(&prefs); | 1305 rewriter.set_pref_service_for_testing(&prefs); |
1752 input_method_manager_mock_->set_mod3_used(true); | 1306 input_method_manager_mock_->set_mod3_used(true); |
1753 | 1307 |
1754 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1308 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
1755 // when Mod3Mask is already in use by the current XKB layout. | 1309 // when Mod3Mask is already in use by the current XKB layout. |
1756 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1310 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1757 ui::DomCode::KEY_A, ui::EF_NONE, | 1311 ui::DomCode::KEY_A, ui::EF_NONE, |
1758 ui::DomKey::CHARACTER, 'a'), | 1312 ui::DomKey::Constant<'a'>::Character), |
1759 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1313 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1760 ui::DomCode::KEY_A, ui::EF_NONE, | 1314 ui::DomCode::KEY_A, ui::EF_NONE, |
1761 ui::DomKey::CHARACTER, 'a')); | 1315 ui::DomKey::Constant<'a'>::Character)); |
1762 | 1316 |
1763 input_method_manager_mock_->set_mod3_used(false); | 1317 input_method_manager_mock_->set_mod3_used(false); |
1764 } | 1318 } |
1765 | 1319 |
1766 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1320 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
1767 TestingPrefServiceSyncable prefs; | 1321 TestingPrefServiceSyncable prefs; |
1768 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1322 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1769 EventRewriter rewriter(NULL); | 1323 EventRewriter rewriter(NULL); |
1770 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1324 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1771 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 1325 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
1772 rewriter.set_pref_service_for_testing(&prefs); | 1326 rewriter.set_pref_service_for_testing(&prefs); |
1773 | 1327 |
1774 KeyTestCase tests[] = { | 1328 KeyTestCase tests[] = { |
1775 // Alt+Backspace -> Delete | 1329 // Alt+Backspace -> Delete |
1776 {ui::ET_KEY_PRESSED, | 1330 {ui::ET_KEY_PRESSED, |
1777 {ui::VKEY_BACK, | 1331 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
1778 ui::DomCode::BACKSPACE, | 1332 ui::DomKey::BACKSPACE}, |
1779 ui::EF_ALT_DOWN, | 1333 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, |
1780 ui::DomKey::BACKSPACE, | |
1781 '\b'}, | |
1782 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}}, | |
1783 // Control+Alt+Backspace -> Control+Delete | 1334 // Control+Alt+Backspace -> Control+Delete |
1784 {ui::ET_KEY_PRESSED, | 1335 {ui::ET_KEY_PRESSED, |
1785 {ui::VKEY_BACK, | 1336 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
1786 ui::DomCode::BACKSPACE, | 1337 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE}, |
1787 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1338 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_CONTROL_DOWN, |
1788 ui::DomKey::BACKSPACE, | 1339 ui::DomKey::DEL}}, |
1789 '\b'}, | |
1790 {ui::VKEY_DELETE, | |
1791 ui::DomCode::DEL, | |
1792 ui::EF_CONTROL_DOWN, | |
1793 ui::DomKey::DEL, | |
1794 0x7F}}, | |
1795 // Search+Alt+Backspace -> Alt+Backspace | 1340 // Search+Alt+Backspace -> Alt+Backspace |
1796 {ui::ET_KEY_PRESSED, | 1341 {ui::ET_KEY_PRESSED, |
1797 {ui::VKEY_BACK, | 1342 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
1798 ui::DomCode::BACKSPACE, | 1343 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::BACKSPACE}, |
1799 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1344 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
1800 ui::DomKey::BACKSPACE, | 1345 ui::DomKey::BACKSPACE}}, |
1801 '\b'}, | |
1802 {ui::VKEY_BACK, | |
1803 ui::DomCode::BACKSPACE, | |
1804 ui::EF_ALT_DOWN, | |
1805 ui::DomKey::BACKSPACE, | |
1806 '\b'}}, | |
1807 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | 1346 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
1808 {ui::ET_KEY_PRESSED, | 1347 {ui::ET_KEY_PRESSED, |
1809 {ui::VKEY_BACK, | 1348 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
1810 ui::DomCode::BACKSPACE, | |
1811 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1349 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1812 ui::DomKey::BACKSPACE, | 1350 ui::DomKey::BACKSPACE}, |
1813 '\b'}, | 1351 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
1814 {ui::VKEY_BACK, | 1352 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE}}, |
1815 ui::DomCode::BACKSPACE, | |
1816 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1817 ui::DomKey::BACKSPACE, | |
1818 '\b'}}, | |
1819 // Alt+Up -> Prior | 1353 // Alt+Up -> Prior |
1820 {ui::ET_KEY_PRESSED, | 1354 {ui::ET_KEY_PRESSED, |
1821 {ui::VKEY_UP, | 1355 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN, |
1822 ui::DomCode::ARROW_UP, | 1356 ui::DomKey::ARROW_UP}, |
1823 ui::EF_ALT_DOWN, | 1357 {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE, |
1824 ui::DomKey::ARROW_UP, | 1358 ui::DomKey::PAGE_UP}}, |
1825 0}, | |
1826 {ui::VKEY_PRIOR, | |
1827 ui::DomCode::PAGE_UP, | |
1828 ui::EF_NONE, | |
1829 ui::DomKey::PAGE_UP, | |
1830 0}}, | |
1831 // Alt+Down -> Next | 1359 // Alt+Down -> Next |
1832 {ui::ET_KEY_PRESSED, | 1360 {ui::ET_KEY_PRESSED, |
1833 {ui::VKEY_DOWN, | 1361 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN, |
1834 ui::DomCode::ARROW_DOWN, | 1362 ui::DomKey::ARROW_DOWN}, |
1835 ui::EF_ALT_DOWN, | 1363 {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE, |
1836 ui::DomKey::ARROW_DOWN, | 1364 ui::DomKey::PAGE_DOWN}}, |
1837 0}, | |
1838 {ui::VKEY_NEXT, | |
1839 ui::DomCode::PAGE_DOWN, | |
1840 ui::EF_NONE, | |
1841 ui::DomKey::PAGE_DOWN, | |
1842 0}}, | |
1843 // Ctrl+Alt+Up -> Home | 1365 // Ctrl+Alt+Up -> Home |
1844 {ui::ET_KEY_PRESSED, | 1366 {ui::ET_KEY_PRESSED, |
1845 {ui::VKEY_UP, | 1367 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
1846 ui::DomCode::ARROW_UP, | 1368 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP}, |
1847 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1369 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}}, |
1848 ui::DomKey::ARROW_UP, | |
1849 0}, | |
1850 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
1851 // Ctrl+Alt+Down -> End | 1370 // Ctrl+Alt+Down -> End |
1852 {ui::ET_KEY_PRESSED, | 1371 {ui::ET_KEY_PRESSED, |
1853 {ui::VKEY_DOWN, | 1372 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
1854 ui::DomCode::ARROW_DOWN, | 1373 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN}, |
1855 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1374 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
1856 ui::DomKey::ARROW_DOWN, | |
1857 0}, | |
1858 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
1859 | 1375 |
1860 // Search+Alt+Up -> Alt+Up | 1376 // Search+Alt+Up -> Alt+Up |
1861 {ui::ET_KEY_PRESSED, | 1377 {ui::ET_KEY_PRESSED, |
1862 {ui::VKEY_UP, | 1378 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
1863 ui::DomCode::ARROW_UP, | 1379 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_UP}, |
1864 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1380 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN, |
1865 ui::DomKey::ARROW_UP, | 1381 ui::DomKey::ARROW_UP}}, |
1866 0}, | |
1867 {ui::VKEY_UP, | |
1868 ui::DomCode::ARROW_UP, | |
1869 ui::EF_ALT_DOWN, | |
1870 ui::DomKey::ARROW_UP, | |
1871 0}}, | |
1872 // Search+Alt+Down -> Alt+Down | 1382 // Search+Alt+Down -> Alt+Down |
1873 {ui::ET_KEY_PRESSED, | 1383 {ui::ET_KEY_PRESSED, |
1874 {ui::VKEY_DOWN, | 1384 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
1875 ui::DomCode::ARROW_DOWN, | 1385 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_DOWN}, |
1876 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1386 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN, |
1877 ui::DomKey::ARROW_DOWN, | 1387 ui::DomKey::ARROW_DOWN}}, |
1878 0}, | |
1879 {ui::VKEY_DOWN, | |
1880 ui::DomCode::ARROW_DOWN, | |
1881 ui::EF_ALT_DOWN, | |
1882 ui::DomKey::ARROW_DOWN, | |
1883 0}}, | |
1884 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | 1388 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
1885 {ui::ET_KEY_PRESSED, | 1389 {ui::ET_KEY_PRESSED, |
1886 {ui::VKEY_UP, | 1390 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
1887 ui::DomCode::ARROW_UP, | |
1888 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1391 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1889 ui::DomKey::ARROW_UP, | 1392 ui::DomKey::ARROW_UP}, |
1890 0}, | 1393 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
1891 {ui::VKEY_UP, | 1394 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP}}, |
1892 ui::DomCode::ARROW_UP, | |
1893 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1894 ui::DomKey::ARROW_UP, | |
1895 0}}, | |
1896 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | 1395 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
1897 {ui::ET_KEY_PRESSED, | 1396 {ui::ET_KEY_PRESSED, |
1898 {ui::VKEY_DOWN, | 1397 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
1899 ui::DomCode::ARROW_DOWN, | |
1900 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1398 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1901 ui::DomKey::ARROW_DOWN, | 1399 ui::DomKey::ARROW_DOWN}, |
1902 0}, | 1400 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
1903 {ui::VKEY_DOWN, | 1401 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN}}, |
1904 ui::DomCode::ARROW_DOWN, | |
1905 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1906 ui::DomKey::ARROW_DOWN, | |
1907 0}}, | |
1908 | 1402 |
1909 // Period -> Period | 1403 // Period -> Period |
1910 {ui::ET_KEY_PRESSED, | 1404 {ui::ET_KEY_PRESSED, |
1911 {ui::VKEY_OEM_PERIOD, | 1405 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE, |
1912 ui::DomCode::PERIOD, | 1406 ui::DomKey::Constant<'.'>::Character}, |
1913 ui::EF_NONE, | 1407 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE, |
1914 ui::DomKey::CHARACTER, | 1408 ui::DomKey::Constant<'.'>::Character}}, |
1915 '.'}, | |
1916 {ui::VKEY_OEM_PERIOD, | |
1917 ui::DomCode::PERIOD, | |
1918 ui::EF_NONE, | |
1919 ui::DomKey::CHARACTER, | |
1920 '.'}}, | |
1921 | 1409 |
1922 // Search+Backspace -> Delete | 1410 // Search+Backspace -> Delete |
1923 {ui::ET_KEY_PRESSED, | 1411 {ui::ET_KEY_PRESSED, |
1924 {ui::VKEY_BACK, | 1412 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_COMMAND_DOWN, |
1925 ui::DomCode::BACKSPACE, | 1413 ui::DomKey::BACKSPACE}, |
1926 ui::EF_COMMAND_DOWN, | 1414 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, |
1927 ui::DomKey::BACKSPACE, | |
1928 '\b'}, | |
1929 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}}, | |
1930 // Search+Up -> Prior | 1415 // Search+Up -> Prior |
1931 {ui::ET_KEY_PRESSED, | 1416 {ui::ET_KEY_PRESSED, |
1932 {ui::VKEY_UP, | 1417 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_COMMAND_DOWN, |
1933 ui::DomCode::ARROW_UP, | 1418 ui::DomKey::ARROW_UP}, |
1934 ui::EF_COMMAND_DOWN, | 1419 {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE, |
1935 ui::DomKey::ARROW_UP, | 1420 ui::DomKey::PAGE_UP}}, |
1936 0}, | |
1937 {ui::VKEY_PRIOR, | |
1938 ui::DomCode::PAGE_UP, | |
1939 ui::EF_NONE, | |
1940 ui::DomKey::PAGE_UP, | |
1941 0}}, | |
1942 // Search+Down -> Next | 1421 // Search+Down -> Next |
1943 {ui::ET_KEY_PRESSED, | 1422 {ui::ET_KEY_PRESSED, |
1944 {ui::VKEY_DOWN, | 1423 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_COMMAND_DOWN, |
1945 ui::DomCode::ARROW_DOWN, | 1424 ui::DomKey::ARROW_DOWN}, |
1946 ui::EF_COMMAND_DOWN, | 1425 {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE, |
1947 ui::DomKey::ARROW_DOWN, | 1426 ui::DomKey::PAGE_DOWN}}, |
1948 0}, | |
1949 {ui::VKEY_NEXT, | |
1950 ui::DomCode::PAGE_DOWN, | |
1951 ui::EF_NONE, | |
1952 ui::DomKey::PAGE_DOWN, | |
1953 0}}, | |
1954 // Search+Left -> Home | 1427 // Search+Left -> Home |
1955 {ui::ET_KEY_PRESSED, | 1428 {ui::ET_KEY_PRESSED, |
1956 {ui::VKEY_LEFT, | 1429 {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT, ui::EF_COMMAND_DOWN, |
1957 ui::DomCode::ARROW_LEFT, | 1430 ui::DomKey::ARROW_LEFT}, |
1958 ui::EF_COMMAND_DOWN, | 1431 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}}, |
1959 ui::DomKey::ARROW_LEFT, | |
1960 0}, | |
1961 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
1962 // Control+Search+Left -> Home | 1432 // Control+Search+Left -> Home |
1963 {ui::ET_KEY_PRESSED, | 1433 {ui::ET_KEY_PRESSED, |
1964 {ui::VKEY_LEFT, | 1434 {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT, |
1965 ui::DomCode::ARROW_LEFT, | 1435 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_LEFT}, |
1966 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1436 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_CONTROL_DOWN, |
1967 ui::DomKey::ARROW_LEFT, | 1437 ui::DomKey::HOME}}, |
1968 0}, | |
1969 {ui::VKEY_HOME, | |
1970 ui::DomCode::HOME, | |
1971 ui::EF_CONTROL_DOWN, | |
1972 ui::DomKey::HOME, | |
1973 0}}, | |
1974 // Search+Right -> End | 1438 // Search+Right -> End |
1975 {ui::ET_KEY_PRESSED, | 1439 {ui::ET_KEY_PRESSED, |
1976 {ui::VKEY_RIGHT, | 1440 {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT, ui::EF_COMMAND_DOWN, |
1977 ui::DomCode::ARROW_RIGHT, | 1441 ui::DomKey::ARROW_RIGHT}, |
1978 ui::EF_COMMAND_DOWN, | 1442 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
1979 ui::DomKey::ARROW_RIGHT, | |
1980 0}, | |
1981 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
1982 // Control+Search+Right -> End | 1443 // Control+Search+Right -> End |
1983 {ui::ET_KEY_PRESSED, | 1444 {ui::ET_KEY_PRESSED, |
1984 {ui::VKEY_RIGHT, | 1445 {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT, |
1985 ui::DomCode::ARROW_RIGHT, | 1446 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_RIGHT}, |
1986 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1447 {ui::VKEY_END, ui::DomCode::END, ui::EF_CONTROL_DOWN, ui::DomKey::END}}, |
1987 ui::DomKey::ARROW_RIGHT, | |
1988 0}, | |
1989 {ui::VKEY_END, | |
1990 ui::DomCode::END, | |
1991 ui::EF_CONTROL_DOWN, | |
1992 ui::DomKey::END, | |
1993 0}}, | |
1994 // Search+Period -> Insert | 1448 // Search+Period -> Insert |
1995 {ui::ET_KEY_PRESSED, | 1449 {ui::ET_KEY_PRESSED, |
1996 {ui::VKEY_OEM_PERIOD, | 1450 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_COMMAND_DOWN, |
1997 ui::DomCode::PERIOD, | 1451 ui::DomKey::Constant<'.'>::Character}, |
1998 ui::EF_COMMAND_DOWN, | 1452 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_NONE, ui::DomKey::INSERT}}, |
1999 ui::DomKey::CHARACTER, | |
2000 '.'}, | |
2001 {ui::VKEY_INSERT, | |
2002 ui::DomCode::INSERT, | |
2003 ui::EF_NONE, | |
2004 ui::DomKey::INSERT, | |
2005 0}}, | |
2006 // Control+Search+Period -> Control+Insert | 1453 // Control+Search+Period -> Control+Insert |
2007 {ui::ET_KEY_PRESSED, | 1454 {ui::ET_KEY_PRESSED, |
2008 {ui::VKEY_OEM_PERIOD, | 1455 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, |
2009 ui::DomCode::PERIOD, | |
2010 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1456 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
2011 ui::DomKey::CHARACTER, | 1457 ui::DomKey::Constant<'.'>::Character}, |
2012 '.'}, | 1458 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, |
2013 {ui::VKEY_INSERT, | 1459 ui::DomKey::INSERT}}}; |
2014 ui::DomCode::INSERT, | |
2015 ui::EF_CONTROL_DOWN, | |
2016 ui::DomKey::INSERT, | |
2017 0}}}; | |
2018 | 1460 |
2019 for (const auto& test : tests) { | 1461 for (const auto& test : tests) { |
2020 CheckKeyTestCase(&rewriter, test); | 1462 CheckKeyTestCase(&rewriter, test); |
2021 } | 1463 } |
2022 } | 1464 } |
2023 | 1465 |
2024 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1466 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
2025 TestingPrefServiceSyncable prefs; | 1467 TestingPrefServiceSyncable prefs; |
2026 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1468 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2027 EventRewriter rewriter(NULL); | 1469 EventRewriter rewriter(NULL); |
2028 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1470 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2029 rewriter.set_pref_service_for_testing(&prefs); | 1471 rewriter.set_pref_service_for_testing(&prefs); |
2030 | 1472 |
2031 KeyTestCase tests[] = { | 1473 KeyTestCase tests[] = { |
2032 // F1 -> Back | 1474 // F1 -> Back |
2033 {ui::ET_KEY_PRESSED, | 1475 {ui::ET_KEY_PRESSED, |
2034 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}, | 1476 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, |
2035 {ui::VKEY_BROWSER_BACK, | 1477 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
2036 ui::DomCode::BROWSER_BACK, | 1478 ui::DomKey::BROWSER_BACK}}, |
2037 ui::EF_NONE, | 1479 {ui::ET_KEY_PRESSED, |
2038 ui::DomKey::BROWSER_BACK, | 1480 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1}, |
2039 0}}, | 1481 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN, |
2040 {ui::ET_KEY_PRESSED, | 1482 ui::DomKey::BROWSER_BACK}}, |
2041 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0}, | 1483 {ui::ET_KEY_PRESSED, |
2042 {ui::VKEY_BROWSER_BACK, | 1484 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1}, |
2043 ui::DomCode::BROWSER_BACK, | 1485 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_ALT_DOWN, |
2044 ui::EF_CONTROL_DOWN, | 1486 ui::DomKey::BROWSER_BACK}}, |
2045 ui::DomKey::BROWSER_BACK, | |
2046 0}}, | |
2047 {ui::ET_KEY_PRESSED, | |
2048 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0}, | |
2049 {ui::VKEY_BROWSER_BACK, | |
2050 ui::DomCode::BROWSER_BACK, | |
2051 ui::EF_ALT_DOWN, | |
2052 ui::DomKey::BROWSER_BACK, | |
2053 0}}, | |
2054 // F2 -> Forward | 1487 // F2 -> Forward |
2055 {ui::ET_KEY_PRESSED, | 1488 {ui::ET_KEY_PRESSED, |
2056 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}, | 1489 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}, |
2057 {ui::VKEY_BROWSER_FORWARD, | 1490 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_NONE, |
2058 ui::DomCode::BROWSER_FORWARD, | 1491 ui::DomKey::BROWSER_FORWARD}}, |
2059 ui::EF_NONE, | 1492 {ui::ET_KEY_PRESSED, |
2060 ui::DomKey::BROWSER_FORWARD, | 1493 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2}, |
2061 0}}, | 1494 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, |
2062 {ui::ET_KEY_PRESSED, | 1495 ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_FORWARD}}, |
2063 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0}, | 1496 {ui::ET_KEY_PRESSED, |
2064 {ui::VKEY_BROWSER_FORWARD, | 1497 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2}, |
2065 ui::DomCode::BROWSER_FORWARD, | 1498 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_ALT_DOWN, |
2066 ui::EF_CONTROL_DOWN, | 1499 ui::DomKey::BROWSER_FORWARD}}, |
2067 ui::DomKey::BROWSER_FORWARD, | |
2068 0}}, | |
2069 {ui::ET_KEY_PRESSED, | |
2070 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0}, | |
2071 {ui::VKEY_BROWSER_FORWARD, | |
2072 ui::DomCode::BROWSER_FORWARD, | |
2073 ui::EF_ALT_DOWN, | |
2074 ui::DomKey::BROWSER_FORWARD, | |
2075 0}}, | |
2076 // F3 -> Refresh | 1500 // F3 -> Refresh |
2077 {ui::ET_KEY_PRESSED, | 1501 {ui::ET_KEY_PRESSED, |
2078 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}, | 1502 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}, |
2079 {ui::VKEY_BROWSER_REFRESH, | 1503 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_NONE, |
2080 ui::DomCode::BROWSER_REFRESH, | 1504 ui::DomKey::BROWSER_REFRESH}}, |
2081 ui::EF_NONE, | 1505 {ui::ET_KEY_PRESSED, |
2082 ui::DomKey::BROWSER_REFRESH, | 1506 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3}, |
2083 0}}, | 1507 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, |
2084 {ui::ET_KEY_PRESSED, | 1508 ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_REFRESH}}, |
2085 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0}, | 1509 {ui::ET_KEY_PRESSED, |
2086 {ui::VKEY_BROWSER_REFRESH, | 1510 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3}, |
2087 ui::DomCode::BROWSER_REFRESH, | 1511 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_ALT_DOWN, |
2088 ui::EF_CONTROL_DOWN, | 1512 ui::DomKey::BROWSER_REFRESH}}, |
2089 ui::DomKey::BROWSER_REFRESH, | |
2090 0}}, | |
2091 {ui::ET_KEY_PRESSED, | |
2092 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0}, | |
2093 {ui::VKEY_BROWSER_REFRESH, | |
2094 ui::DomCode::BROWSER_REFRESH, | |
2095 ui::EF_ALT_DOWN, | |
2096 ui::DomKey::BROWSER_REFRESH, | |
2097 0}}, | |
2098 // F4 -> Launch App 2 | 1513 // F4 -> Launch App 2 |
2099 {ui::ET_KEY_PRESSED, | 1514 {ui::ET_KEY_PRESSED, |
2100 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}, | 1515 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}, |
2101 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1516 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_NONE, |
2102 ui::DomCode::ZOOM_TOGGLE, | 1517 ui::DomKey::ZOOM_TOGGLE}}, |
2103 ui::EF_NONE, | 1518 {ui::ET_KEY_PRESSED, |
2104 ui::DomKey::ZOOM_TOGGLE, | 1519 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4}, |
2105 0}}, | 1520 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, |
2106 {ui::ET_KEY_PRESSED, | 1521 ui::EF_CONTROL_DOWN, ui::DomKey::ZOOM_TOGGLE}}, |
2107 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0}, | 1522 {ui::ET_KEY_PRESSED, |
2108 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1523 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4}, |
2109 ui::DomCode::ZOOM_TOGGLE, | 1524 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_ALT_DOWN, |
2110 ui::EF_CONTROL_DOWN, | 1525 ui::DomKey::ZOOM_TOGGLE}}, |
2111 ui::DomKey::ZOOM_TOGGLE, | |
2112 0}}, | |
2113 {ui::ET_KEY_PRESSED, | |
2114 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0}, | |
2115 {ui::VKEY_MEDIA_LAUNCH_APP2, | |
2116 ui::DomCode::ZOOM_TOGGLE, | |
2117 ui::EF_ALT_DOWN, | |
2118 ui::DomKey::ZOOM_TOGGLE, | |
2119 0}}, | |
2120 // F5 -> Launch App 1 | 1526 // F5 -> Launch App 1 |
2121 {ui::ET_KEY_PRESSED, | 1527 {ui::ET_KEY_PRESSED, |
2122 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}, | 1528 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}, |
2123 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1529 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_NONE, |
2124 ui::DomCode::SELECT_TASK, | 1530 ui::DomKey::LAUNCH_MY_COMPUTER}}, |
2125 ui::EF_NONE, | 1531 {ui::ET_KEY_PRESSED, |
2126 ui::DomKey::LAUNCH_MY_COMPUTER, | 1532 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5}, |
2127 0}}, | 1533 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, |
2128 {ui::ET_KEY_PRESSED, | 1534 ui::EF_CONTROL_DOWN, ui::DomKey::LAUNCH_MY_COMPUTER}}, |
2129 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0}, | 1535 {ui::ET_KEY_PRESSED, |
2130 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1536 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5}, |
2131 ui::DomCode::SELECT_TASK, | 1537 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_ALT_DOWN, |
2132 ui::EF_CONTROL_DOWN, | 1538 ui::DomKey::LAUNCH_MY_COMPUTER}}, |
2133 ui::DomKey::LAUNCH_MY_COMPUTER, | |
2134 0}}, | |
2135 {ui::ET_KEY_PRESSED, | |
2136 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0}, | |
2137 {ui::VKEY_MEDIA_LAUNCH_APP1, | |
2138 ui::DomCode::SELECT_TASK, | |
2139 ui::EF_ALT_DOWN, | |
2140 ui::DomKey::LAUNCH_MY_COMPUTER, | |
2141 0}}, | |
2142 // F6 -> Brightness down | 1539 // F6 -> Brightness down |
2143 {ui::ET_KEY_PRESSED, | 1540 {ui::ET_KEY_PRESSED, |
2144 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}, | 1541 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}, |
2145 {ui::VKEY_BRIGHTNESS_DOWN, | 1542 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_NONE, |
2146 ui::DomCode::BRIGHTNESS_DOWN, | 1543 ui::DomKey::BRIGHTNESS_DOWN}}, |
2147 ui::EF_NONE, | 1544 {ui::ET_KEY_PRESSED, |
2148 ui::DomKey::BRIGHTNESS_DOWN, | 1545 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6}, |
2149 0}}, | 1546 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, |
2150 {ui::ET_KEY_PRESSED, | 1547 ui::EF_CONTROL_DOWN, ui::DomKey::BRIGHTNESS_DOWN}}, |
2151 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0}, | 1548 {ui::ET_KEY_PRESSED, |
2152 {ui::VKEY_BRIGHTNESS_DOWN, | 1549 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6}, |
2153 ui::DomCode::BRIGHTNESS_DOWN, | 1550 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, |
2154 ui::EF_CONTROL_DOWN, | 1551 ui::DomKey::BRIGHTNESS_DOWN}}, |
2155 ui::DomKey::BRIGHTNESS_DOWN, | |
2156 0}}, | |
2157 {ui::ET_KEY_PRESSED, | |
2158 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0}, | |
2159 {ui::VKEY_BRIGHTNESS_DOWN, | |
2160 ui::DomCode::BRIGHTNESS_DOWN, | |
2161 ui::EF_ALT_DOWN, | |
2162 ui::DomKey::BRIGHTNESS_DOWN, | |
2163 0}}, | |
2164 // F7 -> Brightness up | 1552 // F7 -> Brightness up |
2165 {ui::ET_KEY_PRESSED, | 1553 {ui::ET_KEY_PRESSED, |
2166 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}, | 1554 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}, |
2167 {ui::VKEY_BRIGHTNESS_UP, | 1555 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_NONE, |
2168 ui::DomCode::BRIGHTNESS_UP, | 1556 ui::DomKey::BRIGHTNESS_UP}}, |
2169 ui::EF_NONE, | 1557 {ui::ET_KEY_PRESSED, |
2170 ui::DomKey::BRIGHTNESS_UP, | 1558 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7}, |
2171 0}}, | 1559 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_CONTROL_DOWN, |
2172 {ui::ET_KEY_PRESSED, | 1560 ui::DomKey::BRIGHTNESS_UP}}, |
2173 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0}, | 1561 {ui::ET_KEY_PRESSED, |
2174 {ui::VKEY_BRIGHTNESS_UP, | 1562 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7}, |
2175 ui::DomCode::BRIGHTNESS_UP, | 1563 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_ALT_DOWN, |
2176 ui::EF_CONTROL_DOWN, | 1564 ui::DomKey::BRIGHTNESS_UP}}, |
2177 ui::DomKey::BRIGHTNESS_UP, | |
2178 0}}, | |
2179 {ui::ET_KEY_PRESSED, | |
2180 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0}, | |
2181 {ui::VKEY_BRIGHTNESS_UP, | |
2182 ui::DomCode::BRIGHTNESS_UP, | |
2183 ui::EF_ALT_DOWN, | |
2184 ui::DomKey::BRIGHTNESS_UP, | |
2185 0}}, | |
2186 // F8 -> Volume Mute | 1565 // F8 -> Volume Mute |
2187 {ui::ET_KEY_PRESSED, | 1566 {ui::ET_KEY_PRESSED, |
2188 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}, | 1567 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}, |
2189 {ui::VKEY_VOLUME_MUTE, | 1568 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_NONE, |
2190 ui::DomCode::VOLUME_MUTE, | 1569 ui::DomKey::VOLUME_MUTE}}, |
2191 ui::EF_NONE, | 1570 {ui::ET_KEY_PRESSED, |
2192 ui::DomKey::VOLUME_MUTE, | 1571 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8}, |
2193 0}}, | 1572 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_CONTROL_DOWN, |
2194 {ui::ET_KEY_PRESSED, | 1573 ui::DomKey::VOLUME_MUTE}}, |
2195 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0}, | 1574 {ui::ET_KEY_PRESSED, |
2196 {ui::VKEY_VOLUME_MUTE, | 1575 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8}, |
2197 ui::DomCode::VOLUME_MUTE, | 1576 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_ALT_DOWN, |
2198 ui::EF_CONTROL_DOWN, | 1577 ui::DomKey::VOLUME_MUTE}}, |
2199 ui::DomKey::VOLUME_MUTE, | |
2200 0}}, | |
2201 {ui::ET_KEY_PRESSED, | |
2202 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0}, | |
2203 {ui::VKEY_VOLUME_MUTE, | |
2204 ui::DomCode::VOLUME_MUTE, | |
2205 ui::EF_ALT_DOWN, | |
2206 ui::DomKey::VOLUME_MUTE, | |
2207 0}}, | |
2208 // F9 -> Volume Down | 1578 // F9 -> Volume Down |
2209 {ui::ET_KEY_PRESSED, | 1579 {ui::ET_KEY_PRESSED, |
2210 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}, | 1580 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}, |
2211 {ui::VKEY_VOLUME_DOWN, | 1581 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_NONE, |
2212 ui::DomCode::VOLUME_DOWN, | 1582 ui::DomKey::VOLUME_DOWN}}, |
2213 ui::EF_NONE, | 1583 {ui::ET_KEY_PRESSED, |
2214 ui::DomKey::VOLUME_DOWN, | 1584 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9}, |
2215 0}}, | 1585 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_CONTROL_DOWN, |
2216 {ui::ET_KEY_PRESSED, | 1586 ui::DomKey::VOLUME_DOWN}}, |
2217 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0}, | 1587 {ui::ET_KEY_PRESSED, |
2218 {ui::VKEY_VOLUME_DOWN, | 1588 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9}, |
2219 ui::DomCode::VOLUME_DOWN, | 1589 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_ALT_DOWN, |
2220 ui::EF_CONTROL_DOWN, | 1590 ui::DomKey::VOLUME_DOWN}}, |
2221 ui::DomKey::VOLUME_DOWN, | |
2222 0}}, | |
2223 {ui::ET_KEY_PRESSED, | |
2224 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0}, | |
2225 {ui::VKEY_VOLUME_DOWN, | |
2226 ui::DomCode::VOLUME_DOWN, | |
2227 ui::EF_ALT_DOWN, | |
2228 ui::DomKey::VOLUME_DOWN, | |
2229 0}}, | |
2230 // F10 -> Volume Up | 1591 // F10 -> Volume Up |
2231 {ui::ET_KEY_PRESSED, | 1592 {ui::ET_KEY_PRESSED, |
2232 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}, | 1593 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}, |
2233 {ui::VKEY_VOLUME_UP, | 1594 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_NONE, |
2234 ui::DomCode::VOLUME_UP, | 1595 ui::DomKey::VOLUME_UP}}, |
2235 ui::EF_NONE, | 1596 {ui::ET_KEY_PRESSED, |
2236 ui::DomKey::VOLUME_UP, | 1597 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_CONTROL_DOWN, ui::DomKey::F10}, |
2237 0}}, | 1598 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_CONTROL_DOWN, |
2238 {ui::ET_KEY_PRESSED, | 1599 ui::DomKey::VOLUME_UP}}, |
2239 {ui::VKEY_F10, | 1600 {ui::ET_KEY_PRESSED, |
2240 ui::DomCode::F10, | 1601 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10}, |
2241 ui::EF_CONTROL_DOWN, | 1602 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_ALT_DOWN, |
2242 ui::DomKey::F10, | 1603 ui::DomKey::VOLUME_UP}}, |
2243 0}, | |
2244 {ui::VKEY_VOLUME_UP, | |
2245 ui::DomCode::VOLUME_UP, | |
2246 ui::EF_CONTROL_DOWN, | |
2247 ui::DomKey::VOLUME_UP, | |
2248 0}}, | |
2249 {ui::ET_KEY_PRESSED, | |
2250 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0}, | |
2251 {ui::VKEY_VOLUME_UP, | |
2252 ui::DomCode::VOLUME_UP, | |
2253 ui::EF_ALT_DOWN, | |
2254 ui::DomKey::VOLUME_UP, | |
2255 0}}, | |
2256 // F11 -> F11 | 1604 // F11 -> F11 |
2257 {ui::ET_KEY_PRESSED, | 1605 {ui::ET_KEY_PRESSED, |
2258 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}, | 1606 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}, |
2259 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | 1607 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
2260 {ui::ET_KEY_PRESSED, | 1608 {ui::ET_KEY_PRESSED, |
2261 {ui::VKEY_F11, | 1609 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}, |
2262 ui::DomCode::F11, | 1610 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}}, |
2263 ui::EF_CONTROL_DOWN, | 1611 {ui::ET_KEY_PRESSED, |
2264 ui::DomKey::F11, | 1612 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}, |
2265 0}, | 1613 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}}, |
2266 {ui::VKEY_F11, | |
2267 ui::DomCode::F11, | |
2268 ui::EF_CONTROL_DOWN, | |
2269 ui::DomKey::F11, | |
2270 0}}, | |
2271 {ui::ET_KEY_PRESSED, | |
2272 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}, | |
2273 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}}, | |
2274 // F12 -> F12 | 1614 // F12 -> F12 |
2275 {ui::ET_KEY_PRESSED, | 1615 {ui::ET_KEY_PRESSED, |
2276 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}, | 1616 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}, |
2277 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | 1617 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}, |
2278 {ui::ET_KEY_PRESSED, | 1618 {ui::ET_KEY_PRESSED, |
2279 {ui::VKEY_F12, | 1619 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}, |
2280 ui::DomCode::F12, | 1620 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}}, |
2281 ui::EF_CONTROL_DOWN, | 1621 {ui::ET_KEY_PRESSED, |
2282 ui::DomKey::F12, | 1622 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}, |
2283 0}, | 1623 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}}, |
2284 {ui::VKEY_F12, | |
2285 ui::DomCode::F12, | |
2286 ui::EF_CONTROL_DOWN, | |
2287 ui::DomKey::F12, | |
2288 0}}, | |
2289 {ui::ET_KEY_PRESSED, | |
2290 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}, | |
2291 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}}, | |
2292 | 1624 |
2293 // The number row should not be rewritten without Search key. | 1625 // The number row should not be rewritten without Search key. |
2294 {ui::ET_KEY_PRESSED, | 1626 {ui::ET_KEY_PRESSED, |
2295 {ui::VKEY_1, | 1627 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE, |
2296 ui::DomCode::DIGIT1, | 1628 ui::DomKey::Constant<'1'>::Character}, |
2297 ui::EF_NONE, | 1629 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE, |
2298 ui::DomKey::CHARACTER, | 1630 ui::DomKey::Constant<'1'>::Character}}, |
2299 '1'}, | 1631 {ui::ET_KEY_PRESSED, |
2300 {ui::VKEY_1, | 1632 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE, |
2301 ui::DomCode::DIGIT1, | 1633 ui::DomKey::Constant<'2'>::Character}, |
2302 ui::EF_NONE, | 1634 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE, |
2303 ui::DomKey::CHARACTER, | 1635 ui::DomKey::Constant<'2'>::Character}}, |
2304 '1'}}, | 1636 {ui::ET_KEY_PRESSED, |
2305 {ui::ET_KEY_PRESSED, | 1637 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE, |
2306 {ui::VKEY_2, | 1638 ui::DomKey::Constant<'3'>::Character}, |
2307 ui::DomCode::DIGIT2, | 1639 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE, |
2308 ui::EF_NONE, | 1640 ui::DomKey::Constant<'3'>::Character}}, |
2309 ui::DomKey::CHARACTER, | 1641 {ui::ET_KEY_PRESSED, |
2310 '2'}, | 1642 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE, |
2311 {ui::VKEY_2, | 1643 ui::DomKey::Constant<'4'>::Character}, |
2312 ui::DomCode::DIGIT2, | 1644 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE, |
2313 ui::EF_NONE, | 1645 ui::DomKey::Constant<'4'>::Character}}, |
2314 ui::DomKey::CHARACTER, | 1646 {ui::ET_KEY_PRESSED, |
2315 '2'}}, | 1647 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE, |
2316 {ui::ET_KEY_PRESSED, | 1648 ui::DomKey::Constant<'5'>::Character}, |
2317 {ui::VKEY_3, | 1649 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE, |
2318 ui::DomCode::DIGIT3, | 1650 ui::DomKey::Constant<'5'>::Character}}, |
2319 ui::EF_NONE, | 1651 {ui::ET_KEY_PRESSED, |
2320 ui::DomKey::CHARACTER, | 1652 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE, |
2321 '3'}, | 1653 ui::DomKey::Constant<'6'>::Character}, |
2322 {ui::VKEY_3, | 1654 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE, |
2323 ui::DomCode::DIGIT3, | 1655 ui::DomKey::Constant<'6'>::Character}}, |
2324 ui::EF_NONE, | 1656 {ui::ET_KEY_PRESSED, |
2325 ui::DomKey::CHARACTER, | 1657 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE, |
2326 '3'}}, | 1658 ui::DomKey::Constant<'7'>::Character}, |
2327 {ui::ET_KEY_PRESSED, | 1659 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE, |
2328 {ui::VKEY_4, | 1660 ui::DomKey::Constant<'7'>::Character}}, |
2329 ui::DomCode::DIGIT4, | 1661 {ui::ET_KEY_PRESSED, |
2330 ui::EF_NONE, | 1662 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE, |
2331 ui::DomKey::CHARACTER, | 1663 ui::DomKey::Constant<'8'>::Character}, |
2332 '4'}, | 1664 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE, |
2333 {ui::VKEY_4, | 1665 ui::DomKey::Constant<'8'>::Character}}, |
2334 ui::DomCode::DIGIT4, | 1666 {ui::ET_KEY_PRESSED, |
2335 ui::EF_NONE, | 1667 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE, |
2336 ui::DomKey::CHARACTER, | 1668 ui::DomKey::Constant<'9'>::Character}, |
2337 '4'}}, | 1669 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE, |
2338 {ui::ET_KEY_PRESSED, | 1670 ui::DomKey::Constant<'9'>::Character}}, |
2339 {ui::VKEY_5, | 1671 {ui::ET_KEY_PRESSED, |
2340 ui::DomCode::DIGIT5, | 1672 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE, |
2341 ui::EF_NONE, | 1673 ui::DomKey::Constant<'0'>::Character}, |
2342 ui::DomKey::CHARACTER, | 1674 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE, |
2343 '5'}, | 1675 ui::DomKey::Constant<'0'>::Character}}, |
2344 {ui::VKEY_5, | 1676 {ui::ET_KEY_PRESSED, |
2345 ui::DomCode::DIGIT5, | 1677 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE, |
2346 ui::EF_NONE, | 1678 ui::DomKey::Constant<'-'>::Character}, |
2347 ui::DomKey::CHARACTER, | 1679 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE, |
2348 '5'}}, | 1680 ui::DomKey::Constant<'-'>::Character}}, |
2349 {ui::ET_KEY_PRESSED, | 1681 {ui::ET_KEY_PRESSED, |
2350 {ui::VKEY_6, | 1682 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE, |
2351 ui::DomCode::DIGIT6, | 1683 ui::DomKey::Constant<'='>::Character}, |
2352 ui::EF_NONE, | 1684 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE, |
2353 ui::DomKey::CHARACTER, | 1685 ui::DomKey::Constant<'='>::Character}}, |
2354 '6'}, | |
2355 {ui::VKEY_6, | |
2356 ui::DomCode::DIGIT6, | |
2357 ui::EF_NONE, | |
2358 ui::DomKey::CHARACTER, | |
2359 '6'}}, | |
2360 {ui::ET_KEY_PRESSED, | |
2361 {ui::VKEY_7, | |
2362 ui::DomCode::DIGIT7, | |
2363 ui::EF_NONE, | |
2364 ui::DomKey::CHARACTER, | |
2365 '7'}, | |
2366 {ui::VKEY_7, | |
2367 ui::DomCode::DIGIT7, | |
2368 ui::EF_NONE, | |
2369 ui::DomKey::CHARACTER, | |
2370 '7'}}, | |
2371 {ui::ET_KEY_PRESSED, | |
2372 {ui::VKEY_8, | |
2373 ui::DomCode::DIGIT8, | |
2374 ui::EF_NONE, | |
2375 ui::DomKey::CHARACTER, | |
2376 '8'}, | |
2377 {ui::VKEY_8, | |
2378 ui::DomCode::DIGIT8, | |
2379 ui::EF_NONE, | |
2380 ui::DomKey::CHARACTER, | |
2381 '8'}}, | |
2382 {ui::ET_KEY_PRESSED, | |
2383 {ui::VKEY_9, | |
2384 ui::DomCode::DIGIT9, | |
2385 ui::EF_NONE, | |
2386 ui::DomKey::CHARACTER, | |
2387 '9'}, | |
2388 {ui::VKEY_9, | |
2389 ui::DomCode::DIGIT9, | |
2390 ui::EF_NONE, | |
2391 ui::DomKey::CHARACTER, | |
2392 '9'}}, | |
2393 {ui::ET_KEY_PRESSED, | |
2394 {ui::VKEY_0, | |
2395 ui::DomCode::DIGIT0, | |
2396 ui::EF_NONE, | |
2397 ui::DomKey::CHARACTER, | |
2398 '0'}, | |
2399 {ui::VKEY_0, | |
2400 ui::DomCode::DIGIT0, | |
2401 ui::EF_NONE, | |
2402 ui::DomKey::CHARACTER, | |
2403 '0'}}, | |
2404 {ui::ET_KEY_PRESSED, | |
2405 {ui::VKEY_OEM_MINUS, | |
2406 ui::DomCode::MINUS, | |
2407 ui::EF_NONE, | |
2408 ui::DomKey::CHARACTER, | |
2409 '-'}, | |
2410 {ui::VKEY_OEM_MINUS, | |
2411 ui::DomCode::MINUS, | |
2412 ui::EF_NONE, | |
2413 ui::DomKey::CHARACTER, | |
2414 '-'}}, | |
2415 {ui::ET_KEY_PRESSED, | |
2416 {ui::VKEY_OEM_PLUS, | |
2417 ui::DomCode::EQUAL, | |
2418 ui::EF_NONE, | |
2419 ui::DomKey::CHARACTER, | |
2420 '='}, | |
2421 {ui::VKEY_OEM_PLUS, | |
2422 ui::DomCode::EQUAL, | |
2423 ui::EF_NONE, | |
2424 ui::DomKey::CHARACTER, | |
2425 '='}}, | |
2426 | 1686 |
2427 // The number row should be rewritten as the F<number> row with Search | 1687 // The number row should be rewritten as the F<number> row with Search |
2428 // key. | 1688 // key. |
2429 {ui::ET_KEY_PRESSED, | 1689 {ui::ET_KEY_PRESSED, |
2430 {ui::VKEY_1, | 1690 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_COMMAND_DOWN, |
2431 ui::DomCode::DIGIT1, | 1691 ui::DomKey::Constant<'1'>::Character}, |
2432 ui::EF_COMMAND_DOWN, | 1692 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}}, |
2433 ui::DomKey::CHARACTER, | 1693 {ui::ET_KEY_PRESSED, |
2434 '1'}, | 1694 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_COMMAND_DOWN, |
2435 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1695 ui::DomKey::Constant<'2'>::Character}, |
2436 {ui::ET_KEY_PRESSED, | 1696 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}}, |
2437 {ui::VKEY_2, | 1697 {ui::ET_KEY_PRESSED, |
2438 ui::DomCode::DIGIT2, | 1698 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_COMMAND_DOWN, |
2439 ui::EF_COMMAND_DOWN, | 1699 ui::DomKey::Constant<'3'>::Character}, |
2440 ui::DomKey::CHARACTER, | 1700 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}}, |
2441 '2'}, | 1701 {ui::ET_KEY_PRESSED, |
2442 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1702 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_COMMAND_DOWN, |
2443 {ui::ET_KEY_PRESSED, | 1703 ui::DomKey::Constant<'4'>::Character}, |
2444 {ui::VKEY_3, | 1704 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}}, |
2445 ui::DomCode::DIGIT3, | 1705 {ui::ET_KEY_PRESSED, |
2446 ui::EF_COMMAND_DOWN, | 1706 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_COMMAND_DOWN, |
2447 ui::DomKey::CHARACTER, | 1707 ui::DomKey::Constant<'5'>::Character}, |
2448 '3'}, | 1708 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}}, |
2449 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1709 {ui::ET_KEY_PRESSED, |
2450 {ui::ET_KEY_PRESSED, | 1710 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_COMMAND_DOWN, |
2451 {ui::VKEY_4, | 1711 ui::DomKey::Constant<'6'>::Character}, |
2452 ui::DomCode::DIGIT4, | 1712 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}}, |
2453 ui::EF_COMMAND_DOWN, | 1713 {ui::ET_KEY_PRESSED, |
2454 ui::DomKey::CHARACTER, | 1714 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_COMMAND_DOWN, |
2455 '4'}, | 1715 ui::DomKey::Constant<'7'>::Character}, |
2456 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1716 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}}, |
2457 {ui::ET_KEY_PRESSED, | 1717 {ui::ET_KEY_PRESSED, |
2458 {ui::VKEY_5, | 1718 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_COMMAND_DOWN, |
2459 ui::DomCode::DIGIT5, | 1719 ui::DomKey::Constant<'8'>::Character}, |
2460 ui::EF_COMMAND_DOWN, | 1720 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}}, |
2461 ui::DomKey::CHARACTER, | 1721 {ui::ET_KEY_PRESSED, |
2462 '5'}, | 1722 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_COMMAND_DOWN, |
2463 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1723 ui::DomKey::Constant<'9'>::Character}, |
2464 {ui::ET_KEY_PRESSED, | 1724 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}}, |
2465 {ui::VKEY_6, | 1725 {ui::ET_KEY_PRESSED, |
2466 ui::DomCode::DIGIT6, | 1726 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_COMMAND_DOWN, |
2467 ui::EF_COMMAND_DOWN, | 1727 ui::DomKey::Constant<'0'>::Character}, |
2468 ui::DomKey::CHARACTER, | 1728 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, |
2469 '6'}, | 1729 {ui::ET_KEY_PRESSED, |
2470 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | 1730 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_COMMAND_DOWN, |
2471 {ui::ET_KEY_PRESSED, | 1731 ui::DomKey::Constant<'-'>::Character}, |
2472 {ui::VKEY_7, | 1732 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
2473 ui::DomCode::DIGIT7, | 1733 {ui::ET_KEY_PRESSED, |
2474 ui::EF_COMMAND_DOWN, | 1734 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_COMMAND_DOWN, |
2475 ui::DomKey::CHARACTER, | 1735 ui::DomKey::Constant<'='>::Character}, |
2476 '7'}, | 1736 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}, |
2477 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | |
2478 {ui::ET_KEY_PRESSED, | |
2479 {ui::VKEY_8, | |
2480 ui::DomCode::DIGIT8, | |
2481 ui::EF_COMMAND_DOWN, | |
2482 ui::DomKey::CHARACTER, | |
2483 '8'}, | |
2484 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | |
2485 {ui::ET_KEY_PRESSED, | |
2486 {ui::VKEY_9, | |
2487 ui::DomCode::DIGIT9, | |
2488 ui::EF_COMMAND_DOWN, | |
2489 ui::DomKey::CHARACTER, | |
2490 '9'}, | |
2491 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | |
2492 {ui::ET_KEY_PRESSED, | |
2493 {ui::VKEY_0, | |
2494 ui::DomCode::DIGIT0, | |
2495 ui::EF_COMMAND_DOWN, | |
2496 ui::DomKey::CHARACTER, | |
2497 '0'}, | |
2498 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | |
2499 {ui::ET_KEY_PRESSED, | |
2500 {ui::VKEY_OEM_MINUS, | |
2501 ui::DomCode::MINUS, | |
2502 ui::EF_COMMAND_DOWN, | |
2503 ui::DomKey::CHARACTER, | |
2504 '-'}, | |
2505 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
2506 {ui::ET_KEY_PRESSED, | |
2507 {ui::VKEY_OEM_PLUS, | |
2508 ui::DomCode::EQUAL, | |
2509 ui::EF_COMMAND_DOWN, | |
2510 ui::DomKey::CHARACTER, | |
2511 '='}, | |
2512 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | |
2513 | 1737 |
2514 // The function keys should not be rewritten with Search key pressed. | 1738 // The function keys should not be rewritten with Search key pressed. |
2515 {ui::ET_KEY_PRESSED, | 1739 {ui::ET_KEY_PRESSED, |
2516 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0}, | 1740 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1}, |
2517 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1741 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}}, |
2518 {ui::ET_KEY_PRESSED, | 1742 {ui::ET_KEY_PRESSED, |
2519 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0}, | 1743 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2}, |
2520 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1744 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}}, |
2521 {ui::ET_KEY_PRESSED, | 1745 {ui::ET_KEY_PRESSED, |
2522 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0}, | 1746 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3}, |
2523 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1747 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}}, |
2524 {ui::ET_KEY_PRESSED, | 1748 {ui::ET_KEY_PRESSED, |
2525 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0}, | 1749 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4}, |
2526 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1750 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}}, |
2527 {ui::ET_KEY_PRESSED, | 1751 {ui::ET_KEY_PRESSED, |
2528 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0}, | 1752 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5}, |
2529 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1753 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}}, |
2530 {ui::ET_KEY_PRESSED, | 1754 {ui::ET_KEY_PRESSED, |
2531 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0}, | 1755 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6}, |
2532 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | 1756 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}}, |
2533 {ui::ET_KEY_PRESSED, | 1757 {ui::ET_KEY_PRESSED, |
2534 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0}, | 1758 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7}, |
2535 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | 1759 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}}, |
2536 {ui::ET_KEY_PRESSED, | 1760 {ui::ET_KEY_PRESSED, |
2537 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0}, | 1761 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8}, |
2538 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | 1762 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}}, |
2539 {ui::ET_KEY_PRESSED, | 1763 {ui::ET_KEY_PRESSED, |
2540 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0}, | 1764 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9}, |
2541 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | 1765 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}}, |
2542 {ui::ET_KEY_PRESSED, | 1766 {ui::ET_KEY_PRESSED, |
2543 {ui::VKEY_F10, | 1767 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_COMMAND_DOWN, ui::DomKey::F10}, |
2544 ui::DomCode::F10, | 1768 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, |
2545 ui::EF_COMMAND_DOWN, | 1769 {ui::ET_KEY_PRESSED, |
2546 ui::DomKey::F10, | 1770 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_COMMAND_DOWN, ui::DomKey::F11}, |
2547 0}, | 1771 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
2548 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | 1772 {ui::ET_KEY_PRESSED, |
2549 {ui::ET_KEY_PRESSED, | 1773 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, |
2550 {ui::VKEY_F11, | 1774 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; |
2551 ui::DomCode::F11, | |
2552 ui::EF_COMMAND_DOWN, | |
2553 ui::DomKey::F11, | |
2554 0}, | |
2555 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
2556 {ui::ET_KEY_PRESSED, | |
2557 {ui::VKEY_F12, | |
2558 ui::DomCode::F12, | |
2559 ui::EF_COMMAND_DOWN, | |
2560 ui::DomKey::F12, | |
2561 0}, | |
2562 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}}; | |
2563 | 1775 |
2564 for (const auto& test : tests) { | 1776 for (const auto& test : tests) { |
2565 CheckKeyTestCase(&rewriter, test); | 1777 CheckKeyTestCase(&rewriter, test); |
2566 } | 1778 } |
2567 } | 1779 } |
2568 | 1780 |
2569 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1781 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
2570 // Remap Search to Control. | 1782 // Remap Search to Control. |
2571 TestingPrefServiceSyncable prefs; | 1783 TestingPrefServiceSyncable prefs; |
2572 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1784 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2573 IntegerPrefMember search; | 1785 IntegerPrefMember search; |
2574 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1786 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
2575 search.SetValue(chromeos::input_method::kControlKey); | 1787 search.SetValue(chromeos::input_method::kControlKey); |
2576 | 1788 |
2577 EventRewriter rewriter(NULL); | 1789 EventRewriter rewriter(NULL); |
2578 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1790 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2579 rewriter.set_pref_service_for_testing(&prefs); | 1791 rewriter.set_pref_service_for_testing(&prefs); |
2580 | 1792 |
2581 KeyTestCase tests[] = { | 1793 KeyTestCase tests[] = { |
2582 // Alt+Search+Down -> End | 1794 // Alt+Search+Down -> End |
2583 {ui::ET_KEY_PRESSED, | 1795 {ui::ET_KEY_PRESSED, |
2584 {ui::VKEY_DOWN, | 1796 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
2585 ui::DomCode::ARROW_DOWN, | 1797 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::ARROW_DOWN}, |
2586 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1798 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
2587 ui::DomKey::ARROW_DOWN, | |
2588 0}, | |
2589 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
2590 | 1799 |
2591 // Shift+Alt+Search+Down -> Shift+End | 1800 // Shift+Alt+Search+Down -> Shift+End |
2592 {ui::ET_KEY_PRESSED, | 1801 {ui::ET_KEY_PRESSED, |
2593 {ui::VKEY_DOWN, | 1802 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
2594 ui::DomCode::ARROW_DOWN, | |
2595 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1803 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
2596 ui::DomKey::ARROW_DOWN, | 1804 ui::DomKey::ARROW_DOWN}, |
2597 0}, | 1805 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, |
2598 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}}, | |
2599 }; | 1806 }; |
2600 | 1807 |
2601 for (const auto& test : tests) { | 1808 for (const auto& test : tests) { |
2602 CheckKeyTestCase(&rewriter, test); | 1809 CheckKeyTestCase(&rewriter, test); |
2603 } | 1810 } |
2604 } | 1811 } |
2605 | 1812 |
2606 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1813 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
2607 // Remap Control to Alt. | 1814 // Remap Control to Alt. |
2608 TestingPrefServiceSyncable prefs; | 1815 TestingPrefServiceSyncable prefs; |
2609 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1816 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2610 IntegerPrefMember control; | 1817 IntegerPrefMember control; |
2611 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1818 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2612 control.SetValue(chromeos::input_method::kAltKey); | 1819 control.SetValue(chromeos::input_method::kAltKey); |
2613 | 1820 |
2614 EventRewriter rewriter(NULL); | 1821 EventRewriter rewriter(NULL); |
2615 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1822 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2616 rewriter.set_pref_service_for_testing(&prefs); | 1823 rewriter.set_pref_service_for_testing(&prefs); |
2617 | 1824 |
2618 // Send left control press. | 1825 // Send left control press. |
2619 { | 1826 { |
2620 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1827 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
2621 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, | 1828 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, |
2622 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); | 1829 ui::DomKey::CONTROL, ui::EventTimeForNow()); |
2623 scoped_ptr<ui::Event> new_event; | 1830 scoped_ptr<ui::Event> new_event; |
2624 // Control should NOT be remapped to Alt if EF_FINAL is set. | 1831 // Control should NOT be remapped to Alt if EF_FINAL is set. |
2625 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1832 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
2626 rewriter.RewriteEvent(keyevent, &new_event)); | 1833 rewriter.RewriteEvent(keyevent, &new_event)); |
2627 EXPECT_FALSE(new_event); | 1834 EXPECT_FALSE(new_event); |
2628 } | 1835 } |
2629 #if defined(USE_X11) | 1836 #if defined(USE_X11) |
2630 // Send left control press, using XI2 native events. | 1837 // Send left control press, using XI2 native events. |
2631 { | 1838 { |
2632 ui::ScopedXI2Event xev; | 1839 ui::ScopedXI2Event xev; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2733 return rewriter_->RewriteEvent(event, rewritten_event); | 1940 return rewriter_->RewriteEvent(event, rewritten_event); |
2734 } | 1941 } |
2735 | 1942 |
2736 ui::EventDispatchDetails Send(ui::Event* event) { | 1943 ui::EventDispatchDetails Send(ui::Event* event) { |
2737 return source_.Send(event); | 1944 return source_.Send(event); |
2738 } | 1945 } |
2739 | 1946 |
2740 void SendKeyEvent(ui::EventType type, | 1947 void SendKeyEvent(ui::EventType type, |
2741 ui::KeyboardCode key_code, | 1948 ui::KeyboardCode key_code, |
2742 ui::DomCode code, | 1949 ui::DomCode code, |
2743 ui::DomKey key, | 1950 ui::DomKey key) { |
2744 base::char16 character) { | 1951 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, |
2745 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character, | |
2746 ui::EventTimeForNow()); | 1952 ui::EventTimeForNow()); |
2747 ui::EventDispatchDetails details = Send(&press); | 1953 ui::EventDispatchDetails details = Send(&press); |
2748 CHECK(!details.dispatcher_destroyed); | 1954 CHECK(!details.dispatcher_destroyed); |
2749 } | 1955 } |
2750 | 1956 |
2751 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, | 1957 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, |
2752 ui::DomCode code, | 1958 ui::DomCode code, |
2753 ui::DomKey key, | 1959 ui::DomKey key) { |
2754 base::char16 character) { | 1960 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key); |
2755 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character); | 1961 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key); |
2756 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character); | |
2757 } | 1962 } |
2758 | 1963 |
2759 protected: | 1964 protected: |
2760 TestingPrefServiceSyncable* prefs() { return &prefs_; } | 1965 TestingPrefServiceSyncable* prefs() { return &prefs_; } |
2761 | 1966 |
2762 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } | 1967 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } |
2763 | 1968 |
2764 void SetUp() override { | 1969 void SetUp() override { |
2765 AshTestBase::SetUp(); | 1970 AshTestBase::SetUp(); |
2766 sticky_keys_controller_ = | 1971 sticky_keys_controller_ = |
(...skipping 30 matching lines...) Expand all Loading... |
2797 }; | 2002 }; |
2798 | 2003 |
2799 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 2004 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
2800 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 2005 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
2801 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 2006 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
2802 window_state->Activate(); | 2007 window_state->Activate(); |
2803 ScopedVector<ui::Event> events; | 2008 ScopedVector<ui::Event> events; |
2804 | 2009 |
2805 // Create a simulated keypress of F1 targetted at the window. | 2010 // Create a simulated keypress of F1 targetted at the window. |
2806 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, | 2011 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, |
2807 ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow()); | 2012 ui::EF_NONE, ui::DomKey::F1, ui::EventTimeForNow()); |
2808 | 2013 |
2809 // Simulate an apps v2 window that has requested top row keys as function | 2014 // Simulate an apps v2 window that has requested top row keys as function |
2810 // keys. The event should not be rewritten. | 2015 // keys. The event should not be rewritten. |
2811 window_state->set_top_row_keys_are_function_keys(true); | 2016 window_state->set_top_row_keys_are_function_keys(true); |
2812 ui::EventDispatchDetails details = Send(&press_f1); | 2017 ui::EventDispatchDetails details = Send(&press_f1); |
2813 ASSERT_FALSE(details.dispatcher_destroyed); | 2018 ASSERT_FALSE(details.dispatcher_destroyed); |
2814 PopEvents(&events); | 2019 PopEvents(&events); |
2815 EXPECT_EQ(1u, events.size()); | 2020 EXPECT_EQ(1u, events.size()); |
2816 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 2021 EXPECT_EQ( |
2817 ui::DomCode::F1, ui::EF_NONE, | 2022 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
2818 ui::DomKey::F1, 0), | 2023 ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1), |
2819 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 2024 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
2820 | 2025 |
2821 // The event should also not be rewritten if the send-function-keys pref is | 2026 // The event should also not be rewritten if the send-function-keys pref is |
2822 // additionally set, for both apps v2 and regular windows. | 2027 // additionally set, for both apps v2 and regular windows. |
2823 BooleanPrefMember send_function_keys_pref; | 2028 BooleanPrefMember send_function_keys_pref; |
2824 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); | 2029 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); |
2825 send_function_keys_pref.SetValue(true); | 2030 send_function_keys_pref.SetValue(true); |
2826 window_state->set_top_row_keys_are_function_keys(false); | 2031 window_state->set_top_row_keys_are_function_keys(false); |
2827 details = Send(&press_f1); | 2032 details = Send(&press_f1); |
2828 ASSERT_FALSE(details.dispatcher_destroyed); | 2033 ASSERT_FALSE(details.dispatcher_destroyed); |
2829 PopEvents(&events); | 2034 PopEvents(&events); |
2830 EXPECT_EQ(1u, events.size()); | 2035 EXPECT_EQ(1u, events.size()); |
2831 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 2036 EXPECT_EQ( |
2832 ui::DomCode::F1, ui::EF_NONE, | 2037 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
2833 ui::DomKey::F1, 0), | 2038 ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1), |
2834 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 2039 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
2835 | 2040 |
2836 // If the pref isn't set when an event is sent to a regular window, F1 is | 2041 // If the pref isn't set when an event is sent to a regular window, F1 is |
2837 // rewritten to the back key. | 2042 // rewritten to the back key. |
2838 send_function_keys_pref.SetValue(false); | 2043 send_function_keys_pref.SetValue(false); |
2839 details = Send(&press_f1); | 2044 details = Send(&press_f1); |
2840 ASSERT_FALSE(details.dispatcher_destroyed); | 2045 ASSERT_FALSE(details.dispatcher_destroyed); |
2841 PopEvents(&events); | 2046 PopEvents(&events); |
2842 EXPECT_EQ(1u, events.size()); | 2047 EXPECT_EQ(1u, events.size()); |
2843 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, | 2048 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, |
2844 ui::DomCode::BROWSER_BACK, ui::EF_NONE, | 2049 ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
2845 ui::DomKey::BROWSER_BACK, 0), | 2050 ui::DomKey::BROWSER_BACK), |
2846 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 2051 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
2847 } | 2052 } |
2848 | 2053 |
2849 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 2054 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
2850 #if defined(USE_X11) | 2055 #if defined(USE_X11) |
2851 std::vector<int> device_list; | 2056 std::vector<int> device_list; |
2852 device_list.push_back(10); | 2057 device_list.push_back(10); |
2853 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 2058 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
2854 | 2059 |
2855 // Remap Control to Alt. | 2060 // Remap Control to Alt. |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3086 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2291 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
3087 } | 2292 } |
3088 #endif | 2293 #endif |
3089 } | 2294 } |
3090 | 2295 |
3091 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 2296 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
3092 // Test the actual key event dispatch implementation. | 2297 // Test the actual key event dispatch implementation. |
3093 ScopedVector<ui::Event> events; | 2298 ScopedVector<ui::Event> events; |
3094 | 2299 |
3095 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2300 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3096 ui::DomKey::CONTROL, 0); | 2301 ui::DomKey::CONTROL); |
3097 PopEvents(&events); | 2302 PopEvents(&events); |
3098 EXPECT_EQ(1u, events.size()); | 2303 EXPECT_EQ(1u, events.size()); |
3099 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2304 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
3100 EXPECT_EQ(ui::VKEY_CONTROL, | 2305 EXPECT_EQ(ui::VKEY_CONTROL, |
3101 static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2306 static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3102 | 2307 |
3103 // Test key press event is correctly modified and modifier release | 2308 // Test key press event is correctly modified and modifier release |
3104 // event is sent. | 2309 // event is sent. |
3105 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, | 2310 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, |
3106 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | 2311 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, |
3107 ui::EventTimeForNow()); | 2312 ui::EventTimeForNow()); |
3108 ui::EventDispatchDetails details = Send(&press); | 2313 ui::EventDispatchDetails details = Send(&press); |
3109 PopEvents(&events); | 2314 PopEvents(&events); |
3110 EXPECT_EQ(2u, events.size()); | 2315 EXPECT_EQ(2u, events.size()); |
3111 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2316 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
3112 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2317 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3113 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2318 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3114 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2319 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3115 EXPECT_EQ(ui::VKEY_CONTROL, | 2320 EXPECT_EQ(ui::VKEY_CONTROL, |
3116 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2321 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3117 | 2322 |
3118 // Test key release event is not modified. | 2323 // Test key release event is not modified. |
3119 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, | 2324 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, |
3120 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | 2325 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, |
3121 ui::EventTimeForNow()); | 2326 ui::EventTimeForNow()); |
3122 details = Send(&release); | 2327 details = Send(&release); |
3123 ASSERT_FALSE(details.dispatcher_destroyed); | 2328 ASSERT_FALSE(details.dispatcher_destroyed); |
3124 PopEvents(&events); | 2329 PopEvents(&events); |
3125 EXPECT_EQ(1u, events.size()); | 2330 EXPECT_EQ(1u, events.size()); |
3126 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); | 2331 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); |
3127 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2332 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3128 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2333 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3129 } | 2334 } |
3130 | 2335 |
3131 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { | 2336 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { |
3132 ScopedVector<ui::Event> events; | 2337 ScopedVector<ui::Event> events; |
3133 | 2338 |
3134 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2339 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3135 ui::DomKey::CONTROL, 0); | 2340 ui::DomKey::CONTROL); |
3136 PopEvents(&events); | 2341 PopEvents(&events); |
3137 | 2342 |
3138 // Test mouse press event is correctly modified. | 2343 // Test mouse press event is correctly modified. |
3139 gfx::Point location(0, 0); | 2344 gfx::Point location(0, 0); |
3140 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, | 2345 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, |
3141 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2346 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
3142 ui::EF_LEFT_MOUSE_BUTTON); | 2347 ui::EF_LEFT_MOUSE_BUTTON); |
3143 ui::EventDispatchDetails details = Send(&press); | 2348 ui::EventDispatchDetails details = Send(&press); |
3144 ASSERT_FALSE(details.dispatcher_destroyed); | 2349 ASSERT_FALSE(details.dispatcher_destroyed); |
3145 PopEvents(&events); | 2350 PopEvents(&events); |
(...skipping 16 matching lines...) Expand all Loading... |
3162 EXPECT_EQ(ui::VKEY_CONTROL, | 2367 EXPECT_EQ(ui::VKEY_CONTROL, |
3163 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2368 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3164 } | 2369 } |
3165 | 2370 |
3166 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { | 2371 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { |
3167 ScopedVector<ui::Event> events; | 2372 ScopedVector<ui::Event> events; |
3168 | 2373 |
3169 // Test positive mouse wheel event is correctly modified and modifier release | 2374 // Test positive mouse wheel event is correctly modified and modifier release |
3170 // event is sent. | 2375 // event is sent. |
3171 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2376 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3172 ui::DomKey::CONTROL, 0); | 2377 ui::DomKey::CONTROL); |
3173 PopEvents(&events); | 2378 PopEvents(&events); |
3174 gfx::Point location(0, 0); | 2379 gfx::Point location(0, 0); |
3175 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, | 2380 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, |
3176 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2381 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
3177 ui::EF_LEFT_MOUSE_BUTTON); | 2382 ui::EF_LEFT_MOUSE_BUTTON); |
3178 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); | 2383 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); |
3179 ui::EventDispatchDetails details = Send(&positive); | 2384 ui::EventDispatchDetails details = Send(&positive); |
3180 ASSERT_FALSE(details.dispatcher_destroyed); | 2385 ASSERT_FALSE(details.dispatcher_destroyed); |
3181 PopEvents(&events); | 2386 PopEvents(&events); |
3182 EXPECT_EQ(2u, events.size()); | 2387 EXPECT_EQ(2u, events.size()); |
3183 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2388 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
3184 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2389 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3185 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2390 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3186 EXPECT_EQ(ui::VKEY_CONTROL, | 2391 EXPECT_EQ(ui::VKEY_CONTROL, |
3187 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2392 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3188 | 2393 |
3189 // Test negative mouse wheel event is correctly modified and modifier release | 2394 // Test negative mouse wheel event is correctly modified and modifier release |
3190 // event is sent. | 2395 // event is sent. |
3191 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2396 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3192 ui::DomKey::CONTROL, 0); | 2397 ui::DomKey::CONTROL); |
3193 PopEvents(&events); | 2398 PopEvents(&events); |
3194 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); | 2399 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); |
3195 details = Send(&negative); | 2400 details = Send(&negative); |
3196 ASSERT_FALSE(details.dispatcher_destroyed); | 2401 ASSERT_FALSE(details.dispatcher_destroyed); |
3197 PopEvents(&events); | 2402 PopEvents(&events); |
3198 EXPECT_EQ(2u, events.size()); | 2403 EXPECT_EQ(2u, events.size()); |
3199 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2404 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
3200 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2405 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3201 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2406 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3202 EXPECT_EQ(ui::VKEY_CONTROL, | 2407 EXPECT_EQ(ui::VKEY_CONTROL, |
(...skipping 15 matching lines...) Expand all Loading... |
3218 ash::StickyKeysOverlay* overlay_; | 2423 ash::StickyKeysOverlay* overlay_; |
3219 }; | 2424 }; |
3220 | 2425 |
3221 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { | 2426 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { |
3222 EXPECT_FALSE(overlay_->is_visible()); | 2427 EXPECT_FALSE(overlay_->is_visible()); |
3223 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2428 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3224 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2429 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3225 | 2430 |
3226 // Pressing modifier key should show overlay. | 2431 // Pressing modifier key should show overlay. |
3227 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2432 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3228 ui::DomKey::CONTROL, 0); | 2433 ui::DomKey::CONTROL); |
3229 EXPECT_TRUE(overlay_->is_visible()); | 2434 EXPECT_TRUE(overlay_->is_visible()); |
3230 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2435 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3231 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2436 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3232 | 2437 |
3233 // Pressing a normal key should hide overlay. | 2438 // Pressing a normal key should hide overlay. |
3234 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, | 2439 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, |
3235 ui::DomKey::CHARACTER, 't'); | 2440 ui::DomKey::Constant<'t'>::Character); |
3236 EXPECT_FALSE(overlay_->is_visible()); | 2441 EXPECT_FALSE(overlay_->is_visible()); |
3237 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2442 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3238 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2443 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3239 } | 2444 } |
3240 | 2445 |
3241 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { | 2446 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { |
3242 EXPECT_FALSE(overlay_->is_visible()); | 2447 EXPECT_FALSE(overlay_->is_visible()); |
3243 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2448 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3244 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2449 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3245 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2450 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3246 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2451 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3247 | 2452 |
3248 // Pressing two modifiers should show overlay. | 2453 // Pressing two modifiers should show overlay. |
3249 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2454 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
3250 ui::DomKey::SHIFT, 0); | 2455 ui::DomKey::SHIFT); |
3251 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2456 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3252 ui::DomKey::CONTROL, 0); | 2457 ui::DomKey::CONTROL); |
3253 EXPECT_TRUE(overlay_->is_visible()); | 2458 EXPECT_TRUE(overlay_->is_visible()); |
3254 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2459 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3255 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2460 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3256 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2461 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3257 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2462 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3258 | 2463 |
3259 // Pressing a normal key should hide overlay. | 2464 // Pressing a normal key should hide overlay. |
3260 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, | 2465 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, |
3261 ui::DomKey::CHARACTER, 'n'); | 2466 ui::DomKey::Constant<'n'>::Character); |
3262 EXPECT_FALSE(overlay_->is_visible()); | 2467 EXPECT_FALSE(overlay_->is_visible()); |
3263 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2468 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3264 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2469 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3265 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2470 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3266 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2471 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3267 } | 2472 } |
3268 | 2473 |
3269 TEST_F(StickyKeysOverlayTest, LockedModifier) { | 2474 TEST_F(StickyKeysOverlayTest, LockedModifier) { |
3270 EXPECT_FALSE(overlay_->is_visible()); | 2475 EXPECT_FALSE(overlay_->is_visible()); |
3271 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2476 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3272 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2477 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3273 | 2478 |
3274 // Pressing a modifier key twice should lock modifier and show overlay. | 2479 // Pressing a modifier key twice should lock modifier and show overlay. |
3275 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2480 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
3276 ui::DomKey::ALT, 0); | 2481 ui::DomKey::ALT); |
3277 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2482 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
3278 ui::DomKey::ALT, 0); | 2483 ui::DomKey::ALT); |
3279 EXPECT_TRUE(overlay_->is_visible()); | 2484 EXPECT_TRUE(overlay_->is_visible()); |
3280 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2485 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3281 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2486 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3282 | 2487 |
3283 // Pressing a normal key should not hide overlay. | 2488 // Pressing a normal key should not hide overlay. |
3284 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2489 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, |
3285 ui::DomKey::CHARACTER, 'd'); | 2490 ui::DomKey::Constant<'d'>::Character); |
3286 EXPECT_TRUE(overlay_->is_visible()); | 2491 EXPECT_TRUE(overlay_->is_visible()); |
3287 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2492 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3288 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2493 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3289 } | 2494 } |
3290 | 2495 |
3291 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { | 2496 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { |
3292 EXPECT_FALSE(overlay_->is_visible()); | 2497 EXPECT_FALSE(overlay_->is_visible()); |
3293 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2498 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3294 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2499 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3295 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2500 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3296 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2501 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3297 | 2502 |
3298 // Pressing a modifier key twice should lock modifier and show overlay. | 2503 // Pressing a modifier key twice should lock modifier and show overlay. |
3299 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2504 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3300 ui::DomKey::CONTROL, 0); | 2505 ui::DomKey::CONTROL); |
3301 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2506 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3302 ui::DomKey::CONTROL, 0); | 2507 ui::DomKey::CONTROL); |
3303 EXPECT_TRUE(overlay_->is_visible()); | 2508 EXPECT_TRUE(overlay_->is_visible()); |
3304 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2509 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3305 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2510 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3306 | 2511 |
3307 // Pressing another modifier key should still show overlay. | 2512 // Pressing another modifier key should still show overlay. |
3308 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2513 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
3309 ui::DomKey::SHIFT, 0); | 2514 ui::DomKey::SHIFT); |
3310 EXPECT_TRUE(overlay_->is_visible()); | 2515 EXPECT_TRUE(overlay_->is_visible()); |
3311 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2516 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3312 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2517 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3313 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2518 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3314 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2519 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3315 | 2520 |
3316 // Pressing a normal key should not hide overlay but disable normal modifier. | 2521 // Pressing a normal key should not hide overlay but disable normal modifier. |
3317 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2522 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, |
3318 ui::DomKey::CHARACTER, 'd'); | 2523 ui::DomKey::Constant<'d'>::Character); |
3319 EXPECT_TRUE(overlay_->is_visible()); | 2524 EXPECT_TRUE(overlay_->is_visible()); |
3320 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2525 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3321 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2526 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3322 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2527 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3323 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2528 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3324 } | 2529 } |
3325 | 2530 |
3326 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { | 2531 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { |
3327 EXPECT_FALSE(overlay_->is_visible()); | 2532 EXPECT_FALSE(overlay_->is_visible()); |
3328 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2533 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3329 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2534 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3330 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2535 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3331 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2536 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3332 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2537 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3333 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2538 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3334 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2539 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3335 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2540 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
3336 | 2541 |
3337 // Enable modifiers. | 2542 // Enable modifiers. |
3338 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2543 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3339 ui::DomKey::CONTROL, 0); | 2544 ui::DomKey::CONTROL); |
3340 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2545 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
3341 ui::DomKey::SHIFT, 0); | 2546 ui::DomKey::SHIFT); |
3342 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2547 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
3343 ui::DomKey::SHIFT, 0); | 2548 ui::DomKey::SHIFT); |
3344 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2549 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
3345 ui::DomKey::ALT, 0); | 2550 ui::DomKey::ALT); |
3346 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2551 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
3347 ui::DomKey::OS, 0); | 2552 ui::DomKey::OS); |
3348 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2553 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
3349 ui::DomKey::OS, 0); | 2554 ui::DomKey::OS); |
3350 | 2555 |
3351 EXPECT_TRUE(overlay_->is_visible()); | 2556 EXPECT_TRUE(overlay_->is_visible()); |
3352 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2557 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3353 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2558 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3354 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2559 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3355 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2560 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3356 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2561 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3357 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2562 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3358 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2563 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3359 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2564 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
3360 | 2565 |
3361 // Disable modifiers and overlay should be hidden. | 2566 // Disable modifiers and overlay should be hidden. |
3362 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2567 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3363 ui::DomKey::CONTROL, 0); | 2568 ui::DomKey::CONTROL); |
3364 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2569 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
3365 ui::DomKey::CONTROL, 0); | 2570 ui::DomKey::CONTROL); |
3366 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2571 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
3367 ui::DomKey::SHIFT, 0); | 2572 ui::DomKey::SHIFT); |
3368 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2573 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
3369 ui::DomKey::ALT, 0); | 2574 ui::DomKey::ALT); |
3370 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2575 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
3371 ui::DomKey::ALT, 0); | 2576 ui::DomKey::ALT); |
3372 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2577 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
3373 ui::DomKey::OS, 0); | 2578 ui::DomKey::OS); |
3374 | 2579 |
3375 EXPECT_FALSE(overlay_->is_visible()); | 2580 EXPECT_FALSE(overlay_->is_visible()); |
3376 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2581 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3377 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2582 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3378 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2583 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3379 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2584 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3380 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2585 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3381 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2586 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3382 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2587 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3383 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2588 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
(...skipping 27 matching lines...) Expand all Loading... |
3411 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2616 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
3412 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2617 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
3413 | 2618 |
3414 // Turn off AltGr and Mod3. | 2619 // Turn off AltGr and Mod3. |
3415 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2620 sticky_keys_controller_->SetModifiersEnabled(false, false); |
3416 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2621 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
3417 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2622 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
3418 } | 2623 } |
3419 | 2624 |
3420 } // namespace chromeos | 2625 } // namespace chromeos |
OLD | NEW |