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

Side by Side Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 1120813002: Remove EF_FUNCTION_KEY and EF_NUMPAD_KEY. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address review comments (wez@) Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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 12 matching lines...) Expand all
23 #include "chrome/test/base/testing_pref_service_syncable.h" 23 #include "chrome/test/base/testing_pref_service_syncable.h"
24 #include "chromeos/chromeos_switches.h" 24 #include "chromeos/chromeos_switches.h"
25 #include "components/user_manager/fake_user_manager.h" 25 #include "components/user_manager/fake_user_manager.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/aura/window.h" 27 #include "ui/aura/window.h"
28 #include "ui/aura/window_tree_host.h" 28 #include "ui/aura/window_tree_host.h"
29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" 29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h"
30 #include "ui/events/event.h" 30 #include "ui/events/event.h"
31 #include "ui/events/event_rewriter.h" 31 #include "ui/events/event_rewriter.h"
32 #include "ui/events/event_utils.h" 32 #include "ui/events/event_utils.h"
33 #include "ui/events/keycodes/dom3/dom_code.h"
34 #include "ui/events/keycodes/dom3/dom_key.h"
35 #include "ui/events/keycodes/dom4/keycode_converter.h"
33 #include "ui/events/test/events_test_utils.h" 36 #include "ui/events/test/events_test_utils.h"
34 #include "ui/events/test/test_event_processor.h" 37 #include "ui/events/test/test_event_processor.h"
35 38
36 #if defined(USE_X11) 39 #if defined(USE_X11)
37 #include <X11/keysym.h> 40 #include <X11/keysym.h>
38 41
39 #include "ui/events/devices/x11/touch_factory_x11.h" 42 #include "ui/events/devices/x11/touch_factory_x11.h"
40 #include "ui/events/event_utils.h" 43 #include "ui/events/event_utils.h"
41 #include "ui/events/test/events_test_utils_x11.h" 44 #include "ui/events/test/events_test_utils_x11.h"
42 #include "ui/gfx/x/x11_types.h" 45 #include "ui/gfx/x/x11_types.h"
43 #endif 46 #endif
44 47
45 namespace { 48 namespace {
46 49
47 // The device id of the test touchpad device. 50 // The device id of the test touchpad device.
51 #if defined(USE_X11)
48 const int kTouchPadDeviceId = 1; 52 const int kTouchPadDeviceId = 1;
53 const int kMasterKeyboardDeviceId = 3;
54 #endif
49 const int kKeyboardDeviceId = 2; 55 const int kKeyboardDeviceId = 2;
50 const int kMasterKeyboardDeviceId = 3;
51 56
52 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, 57 std::string GetExpectedResultAsString(ui::EventType ui_type,
53 int ui_flags, 58 ui::KeyboardCode ui_keycode,
54 ui::EventType ui_type) { 59 ui::DomCode code,
60 int ui_flags, // ui::EventFlags
61 ui::DomKey key,
62 base::char16 character) {
55 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", 63 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d",
56 ui_keycode, 64 ui_keycode,
57 ui_flags & ~ui::EF_IS_REPEAT, 65 ui_flags & ~ui::EF_IS_REPEAT,
58 ui_type); 66 ui_type);
59 } 67 }
60 68
61 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { 69 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) {
62 return GetExpectedResultAsString( 70 return GetExpectedResultAsString(
63 keyevent.key_code(), keyevent.flags(), keyevent.type()); 71 keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(),
72 keyevent.GetDomKey(), keyevent.GetCharacter());
64 } 73 }
65 74
66 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, 75 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
76 ui::EventType ui_type,
67 ui::KeyboardCode ui_keycode, 77 ui::KeyboardCode ui_keycode,
68 int ui_flags, 78 ui::DomCode code,
69 ui::EventType ui_type) { 79 int ui_flags, // ui::EventFlags
70 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags); 80 ui::DomKey key,
81 base::char16 character) {
82 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character,
83 ui::EventTimeForNow());
71 scoped_ptr<ui::Event> new_event; 84 scoped_ptr<ui::Event> new_event;
72 rewriter->RewriteEvent(event, &new_event); 85 rewriter->RewriteEvent(event, &new_event);
73 if (new_event) 86 if (new_event)
74 return GetKeyEventAsString( 87 return GetKeyEventAsString(
75 static_cast<const ui::KeyEvent&>(*new_event.get())); 88 static_cast<const ui::KeyEvent&>(*new_event.get()));
76 return GetKeyEventAsString(event); 89 return GetKeyEventAsString(event);
77 } 90 }
78 91
79 // Table entry for simple single key event rewriting tests. 92 // Table entry for simple single key event rewriting tests.
80 struct KeyTestCase { 93 struct KeyTestCase {
81 enum { 94 enum {
82 // Test types: 95 // Test types:
83 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event 96 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event
84 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent 97 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent
85 TEST_ALL = TEST_VKEY|TEST_X11, 98 TEST_ALL = TEST_VKEY | TEST_X11,
86 // Special test flags: 99 // Special test flags:
87 NUMPAD = 1 << 8, // Set EF_NUMPAD_KEY on native-based event, because 100 NUMPAD = 1 << 8, // Reset the XKB scan code on an X11 event based
88 // |XKeysymForWindowsKeyCode()| can not distinguish 101 // on the test DomCode, because
89 // between pairs like XK_Insert and XK_KP_Insert. 102 // |XKeysymForWindowsKeyCode()| can not distinguish
103 // between pairs like XK_Insert and XK_KP_Insert.
90 }; 104 };
91 int test; 105 int test;
92 ui::EventType type; 106 ui::EventType type;
93 struct { 107 struct Event {
94 ui::KeyboardCode key_code; 108 ui::KeyboardCode key_code;
95 int flags; 109 ui::DomCode code;
110 int flags; // ui::EventFlags
111 ui::DomKey key;
112 base::char16 character;
96 } input, expected; 113 } input, expected;
97 }; 114 };
98 115
116 std::string GetTestCaseAsString(ui::EventType ui_type,
117 const KeyTestCase::Event& test) {
118 return GetExpectedResultAsString(ui_type, test.key_code, test.code,
119 test.flags, test.key, test.character);
120 }
121
99 #if defined(USE_X11) 122 #if defined(USE_X11)
100 // Check rewriting of an X11-based key event. 123 // Check rewriting of an X11-based key event.
101 void CheckX11KeyTestCase(const std::string& expected, 124 void CheckX11KeyTestCase(const std::string& expected,
102 chromeos::EventRewriter* rewriter, 125 chromeos::EventRewriter* rewriter,
103 const KeyTestCase& test, 126 const KeyTestCase& test,
104 XEvent* xevent) { 127 XEvent* xevent) {
105 ui::KeyEvent xkey_event(xevent); 128 ui::KeyEvent xkey_event(xevent);
106 if (test.test & KeyTestCase::NUMPAD)
107 xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY);
108 // Verify that the X11-based key event is as expected.
109 EXPECT_EQ(GetExpectedResultAsString(
110 test.input.key_code, test.input.flags, test.type),
111 GetKeyEventAsString(xkey_event));
112 // Rewrite the event and check the result. 129 // Rewrite the event and check the result.
113 scoped_ptr<ui::Event> new_event; 130 scoped_ptr<ui::Event> new_event;
114 rewriter->RewriteEvent(xkey_event, &new_event); 131 rewriter->RewriteEvent(xkey_event, &new_event);
115 ui::KeyEvent& rewritten_key_event = 132 ui::KeyEvent& rewritten_key_event =
116 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; 133 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
117 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event)); 134 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event));
118 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) && 135 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) &&
119 (rewritten_key_event.native_event()->xkey.keycode != 0)) { 136 (rewritten_key_event.native_event()->xkey.keycode != 0)) {
120 // Build a new ui::KeyEvent from the rewritten native component, 137 // Build a new ui::KeyEvent from the rewritten native component,
121 // and check that it also matches the rewritten event. 138 // and check that it also matches the rewritten event.
122 EXPECT_TRUE(rewritten_key_event.native_event()); 139 EXPECT_TRUE(rewritten_key_event.native_event());
123 ui::KeyEvent from_native_event(rewritten_key_event.native_event()); 140 ui::KeyEvent from_native_event(rewritten_key_event.native_event());
124 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event)); 141 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event));
125 } 142 }
126 } 143 }
127 #endif 144 #endif
128 145
129 // Tests a single stateless key rewrite operation. 146 // Tests a single stateless key rewrite operation.
130 // |i| is a an identifying number to locate failing tests in the tables.
131 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, 147 void CheckKeyTestCase(chromeos::EventRewriter* rewriter,
132 const KeyTestCase& test) { 148 const KeyTestCase& test) {
133 std::string expected = 149 std::string expected = GetTestCaseAsString(test.type, test.expected);
134 GetExpectedResultAsString(
135 test.expected.key_code, test.expected.flags, test.type);
136 150
137 if (test.test & KeyTestCase::TEST_VKEY) { 151 if (test.test & KeyTestCase::TEST_VKEY) {
138 // Check rewriting of a non-native-based key event. 152 // Check rewriting of a non-native-based key event.
139 EXPECT_EQ( 153 EXPECT_EQ(expected,
140 expected, 154 GetRewrittenEventAsString(
141 GetRewrittenEventAsString( 155 rewriter, test.type, test.input.key_code, test.input.code,
142 rewriter, test.input.key_code, test.input.flags, test.type)); 156 test.input.flags, test.input.key, test.input.character));
143 } 157 }
144 158
145 #if defined(USE_X11) 159 #if defined(USE_X11)
146 if (test.test & KeyTestCase::TEST_X11) { 160 if (test.test & KeyTestCase::TEST_X11) {
147 ui::ScopedXI2Event xev; 161 ui::ScopedXI2Event xev;
148 // Test an XKeyEvent. 162 // Test an XKeyEvent.
149 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); 163 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags);
150 XEvent* xevent = xev; 164 XEvent* xevent = xev;
151 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease)); 165 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease));
152 if (xevent->xkey.keycode) 166 if (test.test & KeyTestCase::NUMPAD) {
167 xevent->xkey.keycode =
168 ui::KeycodeConverter::DomCodeToNativeKeycode(test.input.code);
169 }
170 int keycode = xevent->xkey.keycode;
171 if (keycode) {
153 CheckX11KeyTestCase(expected, rewriter, test, xevent); 172 CheckX11KeyTestCase(expected, rewriter, test, xevent);
154 // Test an XI2 GenericEvent. 173 // Test an XI2 GenericEvent.
155 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, 174 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, kKeyboardDeviceId,
156 kKeyboardDeviceId, 175 test.type, test.input.key_code, test.input.flags);
157 test.type, 176 xevent = xev;
158 test.input.key_code, 177 DCHECK(xevent->type == GenericEvent);
159 test.input.flags); 178 XIDeviceEvent* xievent =
160 xevent = xev; 179 static_cast<XIDeviceEvent*>(xevent->xcookie.data);
161 DCHECK(xevent->type == GenericEvent); 180 DCHECK((xievent->evtype == XI_KeyPress) ||
162 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data); 181 (xievent->evtype == XI_KeyRelease));
163 DCHECK((xievent->evtype == XI_KeyPress) || 182 xievent->detail = keycode;
164 (xievent->evtype == XI_KeyRelease));
165 if (xievent->detail)
166 CheckX11KeyTestCase(expected, rewriter, test, xevent); 183 CheckX11KeyTestCase(expected, rewriter, test, xevent);
184 }
167 } 185 }
168 #endif 186 #endif
169 } 187 }
170
171 // Table entry for simple single function key event rewriting tests.
172 struct FunctionKeyTestCase {
173 ui::EventType type;
174 struct {
175 ui::KeyboardCode key_code;
176 int flags;
177 } input, vkey_expected, native_expected;
178 };
179
180 // Tests a single stateless function key rewrite operation.
181 // |i| is a an identifying number to locate failing tests in the tables.
182 // Function key mapping differs from the other key mappings because the
183 // EF_FUNCTION_KEY flag is set during ui::KeyEvent construction when passing in
184 // a native X11 event and the flag is not set when using other constructors.
185 void CheckFunctionKeyTestCase(chromeos::EventRewriter* rewriter,
186 const FunctionKeyTestCase& test) {
187 std::string vkey_expected =
188 GetExpectedResultAsString(
189 test.vkey_expected.key_code,
190 test.vkey_expected.flags,
191 test.type);
192 // Check rewriting of a non-native-based key event.
193 EXPECT_EQ(
194 vkey_expected,
195 GetRewrittenEventAsString(
196 rewriter, test.input.key_code, test.input.flags, test.type));
197
198 #if defined(USE_X11)
199 ui::ScopedXI2Event xev;
200 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags);
201 XEvent* xevent = xev;
202 if (xevent->xkey.keycode) {
203 ui::KeyEvent xkey_event(xevent);
204 // Rewrite the event and check the result.
205 scoped_ptr<ui::Event> new_event;
206 rewriter->RewriteEvent(xkey_event, &new_event);
207 ui::KeyEvent& rewritten_key_event =
208 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
209 std::string native_expected =
210 GetExpectedResultAsString(
211 test.native_expected.key_code,
212 test.native_expected.flags,
213 test.type);
214 EXPECT_EQ(native_expected, GetKeyEventAsString(rewritten_key_event));
215 }
216 #endif
217 }
218 188
219 } // namespace 189 } // namespace
220 190
221 namespace chromeos { 191 namespace chromeos {
222 192
223 class EventRewriterTest : public ash::test::AshTestBase { 193 class EventRewriterTest : public ash::test::AshTestBase {
224 public: 194 public:
225 EventRewriterTest() 195 EventRewriterTest()
226 : fake_user_manager_(new user_manager::FakeUserManager), 196 : fake_user_manager_(new user_manager::FakeUserManager),
227 user_manager_enabler_(fake_user_manager_), 197 user_manager_enabler_(fake_user_manager_),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { 234 TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
265 // First, test with a PC keyboard. 235 // First, test with a PC keyboard.
266 TestingPrefServiceSyncable prefs; 236 TestingPrefServiceSyncable prefs;
267 EventRewriter rewriter(NULL); 237 EventRewriter rewriter(NULL);
268 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
269 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
270 rewriter.set_pref_service_for_testing(&prefs); 240 rewriter.set_pref_service_for_testing(&prefs);
271 241
272 KeyTestCase pc_keyboard_tests[] = { 242 KeyTestCase pc_keyboard_tests[] = {
273 // VKEY_A, Alt modifier. 243 // VKEY_A, Alt modifier.
274 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 244 {KeyTestCase::TEST_ALL,
275 {ui::VKEY_A, ui::EF_ALT_DOWN}, 245 ui::ET_KEY_PRESSED,
276 {ui::VKEY_A, ui::EF_ALT_DOWN}}, 246 {ui::VKEY_A,
247 ui::DomCode::KEY_A,
248 ui::EF_ALT_DOWN,
249 ui::DomKey::CHARACTER,
250 'a'},
251 {ui::VKEY_A,
252 ui::DomCode::KEY_A,
253 ui::EF_ALT_DOWN,
254 ui::DomKey::CHARACTER,
255 'a'}},
277 256
278 // VKEY_A, Win modifier. 257 // VKEY_A, Win modifier.
279 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 258 {KeyTestCase::TEST_ALL,
280 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, 259 ui::ET_KEY_PRESSED,
281 {ui::VKEY_A, ui::EF_COMMAND_DOWN}}, 260 {ui::VKEY_A,
261 ui::DomCode::KEY_A,
262 ui::EF_COMMAND_DOWN,
263 ui::DomKey::CHARACTER,
264 'a'},
265 {ui::VKEY_A,
266 ui::DomCode::KEY_A,
267 ui::EF_COMMAND_DOWN,
268 ui::DomKey::CHARACTER,
269 'a'}},
282 270
283 // VKEY_A, Alt+Win modifier. 271 // VKEY_A, Alt+Win modifier.
284 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 272 {KeyTestCase::TEST_ALL,
285 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 273 ui::ET_KEY_PRESSED,
286 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, 274 {ui::VKEY_A,
275 ui::DomCode::KEY_A,
276 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
277 ui::DomKey::CHARACTER,
278 'a'},
279 {ui::VKEY_A,
280 ui::DomCode::KEY_A,
281 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
282 ui::DomKey::CHARACTER,
283 'a'}},
287 284
288 // VKEY_LWIN (left Windows key), Alt modifier. 285 // VKEY_LWIN (left Windows key), Alt modifier.
289 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 286 {KeyTestCase::TEST_ALL,
290 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 287 ui::ET_KEY_PRESSED,
291 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, 288 {ui::VKEY_LWIN,
289 ui::DomCode::OS_LEFT,
290 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
291 ui::DomKey::OS,
292 0},
293 {ui::VKEY_LWIN,
294 ui::DomCode::OS_LEFT,
295 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
296 ui::DomKey::OS,
297 0}},
292 298
293 // VKEY_RWIN (right Windows key), Alt modifier. 299 // VKEY_RWIN (right Windows key), Alt modifier.
294 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 300 {KeyTestCase::TEST_ALL,
295 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 301 ui::ET_KEY_PRESSED,
296 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, 302 {ui::VKEY_RWIN,
303 ui::DomCode::OS_RIGHT,
304 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
305 ui::DomKey::OS,
306 0},
307 {ui::VKEY_RWIN,
308 ui::DomCode::OS_RIGHT,
309 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
310 ui::DomKey::OS,
311 0}},
297 }; 312 };
298 313
299 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { 314 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
300 SCOPED_TRACE(i); 315 SCOPED_TRACE(i);
301 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); 316 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]);
302 } 317 }
303 318
304 // An Apple keyboard reusing the ID, zero. 319 // An Apple keyboard reusing the ID, zero.
305 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); 320 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
306 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 321 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
307 322
308 KeyTestCase apple_keyboard_tests[] = { 323 KeyTestCase apple_keyboard_tests[] = {
309 // VKEY_A, Alt modifier. 324 // VKEY_A, Alt modifier.
310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 325 {KeyTestCase::TEST_ALL,
311 {ui::VKEY_A, ui::EF_ALT_DOWN}, 326 ui::ET_KEY_PRESSED,
312 {ui::VKEY_A, ui::EF_ALT_DOWN}}, 327 {ui::VKEY_A,
328 ui::DomCode::KEY_A,
329 ui::EF_ALT_DOWN,
330 ui::DomKey::CHARACTER,
331 'a'},
332 {ui::VKEY_A,
333 ui::DomCode::KEY_A,
334 ui::EF_ALT_DOWN,
335 ui::DomKey::CHARACTER,
336 'a'}},
313 337
314 // VKEY_A, Win modifier. 338 // VKEY_A, Win modifier.
315 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 339 {KeyTestCase::TEST_ALL,
316 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, 340 ui::ET_KEY_PRESSED,
317 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, 341 {ui::VKEY_A,
342 ui::DomCode::KEY_A,
343 ui::EF_COMMAND_DOWN,
344 ui::DomKey::CHARACTER,
345 'a'},
346 {ui::VKEY_A,
347 ui::DomCode::KEY_A,
348 ui::EF_CONTROL_DOWN,
349 ui::DomKey::CHARACTER,
350 'a'}},
318 351
319 // VKEY_A, Alt+Win modifier. 352 // VKEY_A, Alt+Win modifier.
320 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 353 {KeyTestCase::TEST_ALL,
321 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 354 ui::ET_KEY_PRESSED,
322 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, 355 {ui::VKEY_A,
356 ui::DomCode::KEY_A,
357 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
358 ui::DomKey::CHARACTER,
359 'a'},
360 {ui::VKEY_A,
361 ui::DomCode::KEY_A,
362 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
363 ui::DomKey::CHARACTER,
364 'a'}},
323 365
324 // VKEY_LWIN (left Windows key), Alt modifier. 366 // VKEY_LWIN (left Windows key), Alt modifier.
325 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 367 {KeyTestCase::TEST_ALL,
326 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 368 ui::ET_KEY_PRESSED,
327 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, 369 {ui::VKEY_LWIN,
370 ui::DomCode::OS_LEFT,
371 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
372 ui::DomKey::OS,
373 0},
374 {ui::VKEY_CONTROL,
375 ui::DomCode::CONTROL_LEFT,
376 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
377 ui::DomKey::CONTROL,
378 0}},
328 379
329 // VKEY_RWIN (right Windows key), Alt modifier. 380 // VKEY_RWIN (right Windows key), Alt modifier.
330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 381 {KeyTestCase::TEST_ALL,
331 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 382 ui::ET_KEY_PRESSED,
332 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, 383 {ui::VKEY_RWIN,
384 ui::DomCode::OS_RIGHT,
385 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
386 ui::DomKey::OS,
387 0},
388 {ui::VKEY_CONTROL,
389 ui::DomCode::CONTROL_LEFT,
390 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
391 ui::DomKey::CONTROL,
392 0}},
333 }; 393 };
334 394
335 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { 395 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
336 SCOPED_TRACE(i); 396 SCOPED_TRACE(i);
337 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); 397 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]);
338 } 398 }
339 } 399 }
340 400
341 // For crbug.com/133896. 401 // For crbug.com/133896.
342 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { 402 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
343 // Remap Control to Alt. 403 // Remap Control to Alt.
344 TestingPrefServiceSyncable prefs; 404 TestingPrefServiceSyncable prefs;
345 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 405 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
346 IntegerPrefMember control; 406 IntegerPrefMember control;
347 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 407 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
348 control.SetValue(chromeos::input_method::kAltKey); 408 control.SetValue(chromeos::input_method::kAltKey);
349 409
350 EventRewriter rewriter(NULL); 410 EventRewriter rewriter(NULL);
351 rewriter.set_pref_service_for_testing(&prefs); 411 rewriter.set_pref_service_for_testing(&prefs);
352 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 412 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
353 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 413 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
354 414
355 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt. 415 KeyTestCase pc_keyboard_tests[] = {
356 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 416 // Control should be remapped to Alt.
357 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 417 {KeyTestCase::TEST_ALL,
358 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 418 ui::ET_KEY_PRESSED,
419 {ui::VKEY_CONTROL,
420 ui::DomCode::CONTROL_LEFT,
421 ui::EF_CONTROL_DOWN,
422 ui::DomKey::CONTROL,
423 0},
424 {ui::VKEY_MENU,
425 ui::DomCode::ALT_LEFT,
426 ui::EF_ALT_DOWN,
427 ui::DomKey::ALT,
428 0}},
359 }; 429 };
360 430
361 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { 431 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
362 SCOPED_TRACE(i); 432 SCOPED_TRACE(i);
363 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); 433 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]);
364 } 434 }
365 435
366 // An Apple keyboard reusing the ID, zero. 436 // An Apple keyboard reusing the ID, zero.
367 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); 437 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
368 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 438 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
369 439
370 KeyTestCase apple_keyboard_tests[] = { 440 KeyTestCase apple_keyboard_tests[] = {
371 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command 441 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
372 // key should never be re-remapped to Alt. 442 // key should never be re-remapped to Alt.
373 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 443 {KeyTestCase::TEST_ALL,
374 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 444 ui::ET_KEY_PRESSED,
375 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, 445 {ui::VKEY_LWIN,
446 ui::DomCode::OS_LEFT,
447 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
448 ui::DomKey::OS,
449 0},
450 {ui::VKEY_CONTROL,
451 ui::DomCode::CONTROL_LEFT,
452 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
453 ui::DomKey::CONTROL,
454 0}},
376 455
377 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command 456 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command
378 // key should never be re-remapped to Alt. 457 // key should never be re-remapped to Alt.
379 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 458 {KeyTestCase::TEST_ALL,
380 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 459 ui::ET_KEY_PRESSED,
381 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, 460 {ui::VKEY_RWIN,
461 ui::DomCode::OS_RIGHT,
462 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
463 ui::DomKey::OS,
464 0},
465 {ui::VKEY_CONTROL,
466 ui::DomCode::CONTROL_LEFT,
467 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
468 ui::DomKey::CONTROL,
469 0}},
382 }; 470 };
383 471
384 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { 472 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
385 SCOPED_TRACE(i); 473 SCOPED_TRACE(i);
386 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); 474 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]);
387 } 475 }
388 } 476 }
389 477
390 void EventRewriterTest::TestRewriteNumPadKeys() { 478 void EventRewriterTest::TestRewriteNumPadKeys() {
391 TestingPrefServiceSyncable prefs; 479 TestingPrefServiceSyncable prefs;
392 EventRewriter rewriter(NULL); 480 EventRewriter rewriter(NULL);
393 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 481 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
394 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 482 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
395 rewriter.set_pref_service_for_testing(&prefs); 483 rewriter.set_pref_service_for_testing(&prefs);
396 484
397 KeyTestCase tests[] = { 485 KeyTestCase tests[] = {
398 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. 486 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
399 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 487 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
400 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY}, 488 ui::ET_KEY_PRESSED,
401 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, 489 {ui::VKEY_INSERT,
490 ui::DomCode::NUMPAD0,
491 ui::EF_NONE,
492 ui::DomKey::INSERT,
493 0},
494 {ui::VKEY_NUMPAD0,
495 ui::DomCode::NUMPAD0,
496 ui::EF_NONE,
497 ui::DomKey::CHARACTER,
498 '0'}},
402 499
403 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. 500 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
404 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 501 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
405 {ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 502 ui::ET_KEY_PRESSED,
406 {ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 503 {ui::VKEY_INSERT,
504 ui::DomCode::NUMPAD0,
505 ui::EF_ALT_DOWN,
506 ui::DomKey::INSERT,
507 0},
508 {ui::VKEY_NUMPAD0,
509 ui::DomCode::NUMPAD0,
510 ui::EF_ALT_DOWN,
511 ui::DomKey::CHARACTER,
512 '0'}},
407 513
408 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. 514 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier.
409 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 515 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
410 {ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 516 ui::ET_KEY_PRESSED,
411 {ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 517 {ui::VKEY_DELETE,
518 ui::DomCode::NUMPAD_DECIMAL,
519 ui::EF_ALT_DOWN,
520 ui::DomKey::DEL,
521 0},
522 {ui::VKEY_DECIMAL,
523 ui::DomCode::NUMPAD_DECIMAL,
524 ui::EF_ALT_DOWN,
525 ui::DomKey::CHARACTER,
526 '.'}},
412 527
413 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. 528 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier.
414 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 529 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
415 {ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 530 ui::ET_KEY_PRESSED,
416 {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 531 {ui::VKEY_END,
532 ui::DomCode::NUMPAD1,
533 ui::EF_ALT_DOWN,
534 ui::DomKey::END,
535 0},
536 {ui::VKEY_NUMPAD1,
537 ui::DomCode::NUMPAD1,
538 ui::EF_ALT_DOWN,
539 ui::DomKey::CHARACTER,
540 '1'}},
417 541
418 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. 542 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier.
419 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 543 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
420 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 544 ui::ET_KEY_PRESSED,
421 {ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 545 {ui::VKEY_DOWN,
546 ui::DomCode::NUMPAD2,
547 ui::EF_ALT_DOWN,
548 ui::DomKey::ARROW_DOWN,
549 0},
550 {ui::VKEY_NUMPAD2,
551 ui::DomCode::NUMPAD2,
552 ui::EF_ALT_DOWN,
553 ui::DomKey::CHARACTER,
554 '2'}},
422 555
423 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. 556 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier.
424 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 557 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
425 {ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 558 ui::ET_KEY_PRESSED,
426 {ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 559 {ui::VKEY_NEXT,
560 ui::DomCode::NUMPAD3,
561 ui::EF_ALT_DOWN,
562 ui::DomKey::PAGE_DOWN,
563 0},
564 {ui::VKEY_NUMPAD3,
565 ui::DomCode::NUMPAD3,
566 ui::EF_ALT_DOWN,
567 ui::DomKey::CHARACTER,
568 '3'}},
427 569
428 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. 570 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier.
429 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 571 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
430 {ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 572 ui::ET_KEY_PRESSED,
431 {ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 573 {ui::VKEY_LEFT,
574 ui::DomCode::NUMPAD4,
575 ui::EF_ALT_DOWN,
576 ui::DomKey::ARROW_LEFT,
577 0},
578 {ui::VKEY_NUMPAD4,
579 ui::DomCode::NUMPAD4,
580 ui::EF_ALT_DOWN,
581 ui::DomKey::CHARACTER,
582 '4'}},
432 583
433 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. 584 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier.
434 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 585 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
435 {ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 586 ui::ET_KEY_PRESSED,
436 {ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 587 {ui::VKEY_CLEAR,
588 ui::DomCode::NUMPAD5,
589 ui::EF_ALT_DOWN,
590 ui::DomKey::CLEAR,
591 0},
592 {ui::VKEY_NUMPAD5,
593 ui::DomCode::NUMPAD5,
594 ui::EF_ALT_DOWN,
595 ui::DomKey::CHARACTER,
596 '5'}},
437 597
438 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. 598 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier.
439 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 599 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
440 {ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 600 ui::ET_KEY_PRESSED,
441 {ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 601 {ui::VKEY_RIGHT,
602 ui::DomCode::NUMPAD6,
603 ui::EF_ALT_DOWN,
604 ui::DomKey::ARROW_RIGHT,
605 0},
606 {ui::VKEY_NUMPAD6,
607 ui::DomCode::NUMPAD6,
608 ui::EF_ALT_DOWN,
609 ui::DomKey::CHARACTER,
610 '6'}},
442 611
443 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. 612 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier.
444 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 613 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
445 {ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 614 ui::ET_KEY_PRESSED,
446 {ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 615 {ui::VKEY_HOME,
616 ui::DomCode::NUMPAD7,
617 ui::EF_ALT_DOWN,
618 ui::DomKey::HOME,
619 0},
620 {ui::VKEY_NUMPAD7,
621 ui::DomCode::NUMPAD7,
622 ui::EF_ALT_DOWN,
623 ui::DomKey::CHARACTER,
624 '7'}},
447 625
448 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. 626 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier.
449 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 627 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
450 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 628 ui::ET_KEY_PRESSED,
451 {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 629 {ui::VKEY_UP,
630 ui::DomCode::NUMPAD8,
631 ui::EF_ALT_DOWN,
632 ui::DomKey::ARROW_UP,
633 0},
634 {ui::VKEY_NUMPAD8,
635 ui::DomCode::NUMPAD8,
636 ui::EF_ALT_DOWN,
637 ui::DomKey::CHARACTER,
638 '8'}},
452 639
453 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. 640 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier.
454 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 641 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
455 {ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, 642 ui::ET_KEY_PRESSED,
456 {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, 643 {ui::VKEY_PRIOR,
644 ui::DomCode::NUMPAD9,
645 ui::EF_ALT_DOWN,
646 ui::DomKey::PAGE_UP,
647 0},
648 {ui::VKEY_NUMPAD9,
649 ui::DomCode::NUMPAD9,
650 ui::EF_ALT_DOWN,
651 ui::DomKey::CHARACTER,
652 '9'}},
457 653
458 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. 654 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier.
459 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 655 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
460 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}, 656 ui::ET_KEY_PRESSED,
461 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, 657 {ui::VKEY_NUMPAD0,
658 ui::DomCode::NUMPAD0,
659 ui::EF_NONE,
660 ui::DomKey::CHARACTER,
661 '0'},
662 {ui::VKEY_NUMPAD0,
663 ui::DomCode::NUMPAD0,
664 ui::EF_NONE,
665 ui::DomKey::CHARACTER,
666 '0'}},
462 667
463 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. 668 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
464 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 669 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
465 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}, 670 ui::ET_KEY_PRESSED,
466 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}}, 671 {ui::VKEY_DECIMAL,
672 ui::DomCode::NUMPAD_DECIMAL,
673 ui::EF_NONE,
674 ui::DomKey::CHARACTER,
675 '.'},
676 {ui::VKEY_DECIMAL,
677 ui::DomCode::NUMPAD_DECIMAL,
678 ui::EF_NONE,
679 ui::DomKey::CHARACTER,
680 '.'}},
467 681
468 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. 682 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
469 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 683 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
470 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}, 684 ui::ET_KEY_PRESSED,
471 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}}, 685 {ui::VKEY_NUMPAD1,
686 ui::DomCode::NUMPAD1,
687 ui::EF_NONE,
688 ui::DomKey::CHARACTER,
689 '1'},
690 {ui::VKEY_NUMPAD1,
691 ui::DomCode::NUMPAD1,
692 ui::EF_NONE,
693 ui::DomKey::CHARACTER,
694 '1'}},
472 695
473 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. 696 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
474 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 697 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
475 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}, 698 ui::ET_KEY_PRESSED,
476 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}}, 699 {ui::VKEY_NUMPAD2,
700 ui::DomCode::NUMPAD2,
701 ui::EF_NONE,
702 ui::DomKey::CHARACTER,
703 '2'},
704 {ui::VKEY_NUMPAD2,
705 ui::DomCode::NUMPAD2,
706 ui::EF_NONE,
707 ui::DomKey::CHARACTER,
708 '2'}},
477 709
478 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. 710 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
479 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 711 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
480 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}, 712 ui::ET_KEY_PRESSED,
481 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}}, 713 {ui::VKEY_NUMPAD3,
714 ui::DomCode::NUMPAD3,
715 ui::EF_NONE,
716 ui::DomKey::CHARACTER,
717 '3'},
718 {ui::VKEY_NUMPAD3,
719 ui::DomCode::NUMPAD3,
720 ui::EF_NONE,
721 ui::DomKey::CHARACTER,
722 '3'}},
482 723
483 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. 724 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
484 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 725 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
485 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}, 726 ui::ET_KEY_PRESSED,
486 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}}, 727 {ui::VKEY_NUMPAD4,
487 728 ui::DomCode::NUMPAD4,
488 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. 729 ui::EF_NONE,
489 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 730 ui::DomKey::CHARACTER,
490 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}, 731 '4'},
491 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}}, 732 {ui::VKEY_NUMPAD4,
492 733 ui::DomCode::NUMPAD4,
493 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. 734 ui::EF_NONE,
494 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 735 ui::DomKey::CHARACTER,
495 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}, 736 '4'}},
496 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}}, 737
497 738 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock
498 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. 739 // modifier.
499 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 740 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
500 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}, 741 ui::ET_KEY_PRESSED,
501 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}}, 742 {ui::VKEY_NUMPAD5,
502 743 ui::DomCode::NUMPAD5,
503 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. 744 ui::EF_NONE,
504 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 745 ui::DomKey::CHARACTER,
505 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}, 746 '5'},
506 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}}, 747 {ui::VKEY_NUMPAD5,
507 748 ui::DomCode::NUMPAD5,
508 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. 749 ui::EF_NONE,
509 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 750 ui::DomKey::CHARACTER,
510 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}, 751 '5'}},
511 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}}, 752
753 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock
754 // modifier.
755 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
756 ui::ET_KEY_PRESSED,
757 {ui::VKEY_NUMPAD6,
758 ui::DomCode::NUMPAD6,
759 ui::EF_NONE,
760 ui::DomKey::CHARACTER,
761 '6'},
762 {ui::VKEY_NUMPAD6,
763 ui::DomCode::NUMPAD6,
764 ui::EF_NONE,
765 ui::DomKey::CHARACTER,
766 '6'}},
767
768 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock
769 // modifier.
770 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
771 ui::ET_KEY_PRESSED,
772 {ui::VKEY_NUMPAD7,
773 ui::DomCode::NUMPAD7,
774 ui::EF_NONE,
775 ui::DomKey::CHARACTER,
776 '7'},
777 {ui::VKEY_NUMPAD7,
778 ui::DomCode::NUMPAD7,
779 ui::EF_NONE,
780 ui::DomKey::CHARACTER,
781 '7'}},
782
783 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock
784 // modifier.
785 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
786 ui::ET_KEY_PRESSED,
787 {ui::VKEY_NUMPAD8,
788 ui::DomCode::NUMPAD8,
789 ui::EF_NONE,
790 ui::DomKey::CHARACTER,
791 '8'},
792 {ui::VKEY_NUMPAD8,
793 ui::DomCode::NUMPAD8,
794 ui::EF_NONE,
795 ui::DomKey::CHARACTER,
796 '8'}},
797
798 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock
799 // modifier.
800 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
801 ui::ET_KEY_PRESSED,
802 {ui::VKEY_NUMPAD9,
803 ui::DomCode::NUMPAD9,
804 ui::EF_NONE,
805 ui::DomKey::CHARACTER,
806 '9'},
807 {ui::VKEY_NUMPAD9,
808 ui::DomCode::NUMPAD9,
809 ui::EF_NONE,
810 ui::DomKey::CHARACTER,
811 '9'}},
512 }; 812 };
513 813
514 for (size_t i = 0; i < arraysize(tests); ++i) { 814 for (size_t i = 0; i < arraysize(tests); ++i) {
515 SCOPED_TRACE(i); 815 SCOPED_TRACE(i);
516 CheckKeyTestCase(&rewriter, tests[i]); 816 CheckKeyTestCase(&rewriter, tests[i]);
517 } 817 }
518 } 818 }
519 819
520 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { 820 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) {
521 TestRewriteNumPadKeys(); 821 TestRewriteNumPadKeys();
(...skipping 13 matching lines...) Expand all
535 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { 835 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
536 TestingPrefServiceSyncable prefs; 836 TestingPrefServiceSyncable prefs;
537 EventRewriter rewriter(NULL); 837 EventRewriter rewriter(NULL);
538 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); 838 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
539 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 839 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
540 rewriter.set_pref_service_for_testing(&prefs); 840 rewriter.set_pref_service_for_testing(&prefs);
541 841
542 KeyTestCase tests[] = { 842 KeyTestCase tests[] = {
543 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. 843 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
544 // The result should be "Num Pad 1 with Control + Num Lock modifiers". 844 // The result should be "Num Pad 1 with Control + Num Lock modifiers".
545 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 845 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
546 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, 846 ui::ET_KEY_PRESSED,
547 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, 847 {ui::VKEY_END,
848 ui::DomCode::NUMPAD1,
849 ui::EF_COMMAND_DOWN,
850 ui::DomKey::END,
851 0},
852 {ui::VKEY_NUMPAD1,
853 ui::DomCode::NUMPAD1,
854 ui::EF_CONTROL_DOWN,
855 ui::DomKey::CHARACTER,
856 '1'}},
548 857
549 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. 858 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier.
550 // The result should also be "Num Pad 1 with Control + Num Lock 859 // The result should also be "Num Pad 1 with Control + Num Lock
551 // modifiers". 860 // modifiers".
552 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 861 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD,
553 {ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, 862 ui::ET_KEY_PRESSED,
554 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, 863 {ui::VKEY_NUMPAD1,
555 }; 864 ui::DomCode::NUMPAD1,
865 ui::EF_COMMAND_DOWN,
866 ui::DomKey::CHARACTER,
867 '1'},
868 {ui::VKEY_NUMPAD1,
869 ui::DomCode::NUMPAD1,
870 ui::EF_CONTROL_DOWN,
871 ui::DomKey::CHARACTER,
872 '1'}}};
556 873
557 for (size_t i = 0; i < arraysize(tests); ++i) { 874 for (size_t i = 0; i < arraysize(tests); ++i) {
558 SCOPED_TRACE(i); 875 SCOPED_TRACE(i);
559 CheckKeyTestCase(&rewriter, tests[i]); 876 CheckKeyTestCase(&rewriter, tests[i]);
560 } 877 }
561 } 878 }
562 879
563 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { 880 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) {
564 TestRewriteNumPadKeysOnAppleKeyboard(); 881 TestRewriteNumPadKeysOnAppleKeyboard();
565 } 882 }
(...skipping 10 matching lines...) Expand all
576 } 893 }
577 894
578 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { 895 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
579 TestingPrefServiceSyncable prefs; 896 TestingPrefServiceSyncable prefs;
580 EventRewriter rewriter(NULL); 897 EventRewriter rewriter(NULL);
581 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 898 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
582 rewriter.set_pref_service_for_testing(&prefs); 899 rewriter.set_pref_service_for_testing(&prefs);
583 900
584 KeyTestCase tests[] = { 901 KeyTestCase tests[] = {
585 // Press Search. Confirm the event is not rewritten. 902 // Press Search. Confirm the event is not rewritten.
586 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 903 {KeyTestCase::TEST_ALL,
587 {ui::VKEY_LWIN, ui::EF_NONE}, 904 ui::ET_KEY_PRESSED,
588 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, 905 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
906 {ui::VKEY_LWIN,
907 ui::DomCode::OS_LEFT,
908 ui::EF_COMMAND_DOWN,
909 ui::DomKey::OS,
910 0}},
589 911
590 // Press left Control. Confirm the event is not rewritten. 912 // Press left Control. Confirm the event is not rewritten.
591 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 913 {KeyTestCase::TEST_ALL,
592 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 914 ui::ET_KEY_PRESSED,
593 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 915 {ui::VKEY_CONTROL,
916 ui::DomCode::CONTROL_LEFT,
917 ui::EF_CONTROL_DOWN,
918 ui::DomKey::CONTROL,
919 0},
920 {ui::VKEY_CONTROL,
921 ui::DomCode::CONTROL_LEFT,
922 ui::EF_CONTROL_DOWN,
923 ui::DomKey::CONTROL,
924 0}},
594 925
595 // Press right Control. Confirm the event is not rewritten. 926 // Press right Control. Confirm the event is not rewritten.
596 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 927 {KeyTestCase::TEST_ALL,
597 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 928 ui::ET_KEY_PRESSED,
598 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 929 {ui::VKEY_CONTROL,
930 ui::DomCode::CONTROL_LEFT,
931 ui::EF_CONTROL_DOWN,
932 ui::DomKey::CONTROL,
933 0},
934 {ui::VKEY_CONTROL,
935 ui::DomCode::CONTROL_LEFT,
936 ui::EF_CONTROL_DOWN,
937 ui::DomKey::CONTROL,
938 0}},
599 939
600 // Press left Alt. Confirm the event is not rewritten. 940 // Press left Alt. Confirm the event is not rewritten.
601 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 941 {KeyTestCase::TEST_ALL,
602 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, 942 ui::ET_KEY_PRESSED,
603 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 943 {ui::VKEY_MENU,
944 ui::DomCode::ALT_LEFT,
945 ui::EF_ALT_DOWN,
946 ui::DomKey::ALT,
947 0},
948 {ui::VKEY_MENU,
949 ui::DomCode::ALT_LEFT,
950 ui::EF_ALT_DOWN,
951 ui::DomKey::ALT,
952 0}},
604 953
605 // Press right Alt. Confirm the event is not rewritten. 954 // Press right Alt. Confirm the event is not rewritten.
606 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 955 {KeyTestCase::TEST_ALL,
607 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, 956 ui::ET_KEY_PRESSED,
608 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 957 {ui::VKEY_MENU,
958 ui::DomCode::ALT_LEFT,
959 ui::EF_ALT_DOWN,
960 ui::DomKey::ALT,
961 0},
962 {ui::VKEY_MENU,
963 ui::DomCode::ALT_LEFT,
964 ui::EF_ALT_DOWN,
965 ui::DomKey::ALT,
966 0}},
609 967
610 // Test KeyRelease event, just in case. 968 // Test KeyRelease event, just in case.
611 // Release Search. Confirm the release event is not rewritten. 969 // Release Search. Confirm the release event is not rewritten.
612 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, 970 {KeyTestCase::TEST_ALL,
613 {ui::VKEY_LWIN, ui::EF_NONE}, 971 ui::ET_KEY_RELEASED,
614 {ui::VKEY_LWIN, ui::EF_NONE}}, 972 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
973 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}},
615 }; 974 };
616 975
617 for (size_t i = 0; i < arraysize(tests); ++i) { 976 for (size_t i = 0; i < arraysize(tests); ++i) {
618 SCOPED_TRACE(i); 977 SCOPED_TRACE(i);
619 CheckKeyTestCase(&rewriter, tests[i]); 978 CheckKeyTestCase(&rewriter, tests[i]);
620 } 979 }
621 } 980 }
622 981
623 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { 982 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
624 TestingPrefServiceSyncable prefs; 983 TestingPrefServiceSyncable prefs;
625 EventRewriter rewriter(NULL); 984 EventRewriter rewriter(NULL);
626 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 985 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
627 rewriter.set_pref_service_for_testing(&prefs); 986 rewriter.set_pref_service_for_testing(&prefs);
628 987
629 KeyTestCase tests[] = { 988 KeyTestCase tests[] = {
630 // Press Alt with Shift. Confirm the event is not rewritten. 989 // Press Alt with Shift. Confirm the event is not rewritten.
631 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 990 {KeyTestCase::TEST_ALL,
632 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 991 ui::ET_KEY_PRESSED,
633 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, 992 {ui::VKEY_MENU,
993 ui::DomCode::ALT_LEFT,
994 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
995 ui::DomKey::ALT,
996 0},
997 {ui::VKEY_MENU,
998 ui::DomCode::ALT_LEFT,
999 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
1000 ui::DomKey::ALT,
1001 0}},
634 1002
635 // Press Search with Caps Lock mask. Confirm the event is not rewritten. 1003 // Press Search with Caps Lock mask. Confirm the event is not rewritten.
636 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1004 {KeyTestCase::TEST_ALL,
637 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}, 1005 ui::ET_KEY_PRESSED,
638 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}}, 1006 {ui::VKEY_LWIN,
1007 ui::DomCode::OS_LEFT,
1008 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN,
1009 ui::DomKey::OS,
1010 0},
1011 {ui::VKEY_LWIN,
1012 ui::DomCode::OS_LEFT,
1013 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN,
1014 ui::DomKey::OS,
1015 0}},
639 1016
640 // Release Search with Caps Lock mask. Confirm the event is not rewritten. 1017 // Release Search with Caps Lock mask. Confirm the event is not rewritten.
641 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, 1018 {KeyTestCase::TEST_ALL,
642 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}, 1019 ui::ET_KEY_RELEASED,
643 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}}, 1020 {ui::VKEY_LWIN,
1021 ui::DomCode::OS_LEFT,
1022 ui::EF_CAPS_LOCK_DOWN,
1023 ui::DomKey::OS,
1024 0},
1025 {ui::VKEY_LWIN,
1026 ui::DomCode::OS_LEFT,
1027 ui::EF_CAPS_LOCK_DOWN,
1028 ui::DomKey::OS,
1029 0}},
644 1030
645 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. 1031 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten.
646 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1032 {KeyTestCase::TEST_ALL,
647 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | 1033 ui::ET_KEY_PRESSED,
648 ui::EF_COMMAND_DOWN}, 1034 {ui::VKEY_B,
649 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | 1035 ui::DomCode::KEY_B,
650 ui::EF_COMMAND_DOWN}}, 1036 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1037 ui::EF_COMMAND_DOWN,
1038 ui::DomKey::CHARACTER,
1039 'B'},
1040 {ui::VKEY_B,
1041 ui::DomCode::KEY_B,
1042 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1043 ui::EF_COMMAND_DOWN,
1044 ui::DomKey::CHARACTER,
1045 'B'}},
651 }; 1046 };
652 1047
653 for (size_t i = 0; i < arraysize(tests); ++i) { 1048 for (size_t i = 0; i < arraysize(tests); ++i) {
654 SCOPED_TRACE(i); 1049 SCOPED_TRACE(i);
655 CheckKeyTestCase(&rewriter, tests[i]); 1050 CheckKeyTestCase(&rewriter, tests[i]);
656 } 1051 }
657 } 1052 }
658 1053
659 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { 1054 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
660 // Disable Search and Control keys. 1055 // Disable Search and Control keys.
661 TestingPrefServiceSyncable prefs; 1056 TestingPrefServiceSyncable prefs;
662 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1057 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
663 IntegerPrefMember search; 1058 IntegerPrefMember search;
664 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1059 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
665 search.SetValue(chromeos::input_method::kVoidKey); 1060 search.SetValue(chromeos::input_method::kVoidKey);
666 IntegerPrefMember control; 1061 IntegerPrefMember control;
667 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 1062 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
668 control.SetValue(chromeos::input_method::kVoidKey); 1063 control.SetValue(chromeos::input_method::kVoidKey);
669 1064
670 EventRewriter rewriter(NULL); 1065 EventRewriter rewriter(NULL);
671 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1066 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
672 rewriter.set_pref_service_for_testing(&prefs); 1067 rewriter.set_pref_service_for_testing(&prefs);
673 1068
674 KeyTestCase disabled_modifier_tests[] = { 1069 KeyTestCase disabled_modifier_tests[] = {
675 // Press Alt with Shift. This key press shouldn't be affected by the 1070 // Press Alt with Shift. This key press shouldn't be affected by the
676 // pref. Confirm the event is not rewritten. 1071 // pref. Confirm the event is not rewritten.
677 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1072 {KeyTestCase::TEST_ALL,
678 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 1073 ui::ET_KEY_PRESSED,
679 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, 1074 {ui::VKEY_MENU,
1075 ui::DomCode::ALT_LEFT,
1076 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
1077 ui::DomKey::ALT,
1078 0},
1079 {ui::VKEY_MENU,
1080 ui::DomCode::ALT_LEFT,
1081 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
1082 ui::DomKey::ALT,
1083 0}},
680 1084
681 // Press Search. Confirm the event is now VKEY_UNKNOWN. 1085 // Press Search. Confirm the event is now VKEY_UNKNOWN.
682 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1086 {KeyTestCase::TEST_ALL,
683 {ui::VKEY_LWIN, ui::EF_NONE}, 1087 ui::ET_KEY_PRESSED,
684 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, 1088 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
1089 {ui::VKEY_UNKNOWN,
1090 ui::DomCode::NONE,
1091 ui::EF_NONE,
1092 ui::DomKey::UNIDENTIFIED,
1093 0}},
685 1094
686 // Press Control. Confirm the event is now VKEY_UNKNOWN. 1095 // Press Control. Confirm the event is now VKEY_UNKNOWN.
687 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1096 {KeyTestCase::TEST_ALL,
688 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 1097 ui::ET_KEY_PRESSED,
689 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, 1098 {ui::VKEY_CONTROL,
1099 ui::DomCode::CONTROL_LEFT,
1100 ui::EF_CONTROL_DOWN,
1101 ui::DomKey::CONTROL,
1102 0},
1103 {ui::VKEY_UNKNOWN,
1104 ui::DomCode::NONE,
1105 ui::EF_NONE,
1106 ui::DomKey::UNIDENTIFIED,
1107 0}},
690 1108
691 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN 1109 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN
692 // without any modifiers. 1110 // without any modifiers.
693 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1111 {KeyTestCase::TEST_ALL,
694 {ui::VKEY_LWIN, ui::EF_CONTROL_DOWN}, 1112 ui::ET_KEY_PRESSED,
695 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, 1113 {ui::VKEY_LWIN,
1114 ui::DomCode::OS_LEFT,
1115 ui::EF_CONTROL_DOWN,
1116 ui::DomKey::OS,
1117 0},
1118 {ui::VKEY_UNKNOWN,
1119 ui::DomCode::NONE,
1120 ui::EF_NONE,
1121 ui::DomKey::UNIDENTIFIED,
1122 0}},
696 1123
697 // Press Control+Search+a. Confirm the event is now VKEY_A without any 1124 // Press Control+Search+a. Confirm the event is now VKEY_A without any
698 // modifiers. 1125 // modifiers.
699 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1126 {KeyTestCase::TEST_ALL,
700 {ui::VKEY_A, ui::EF_CONTROL_DOWN}, 1127 ui::ET_KEY_PRESSED,
701 {ui::VKEY_A, ui::EF_NONE}}, 1128 {ui::VKEY_A,
1129 ui::DomCode::KEY_A,
1130 ui::EF_CONTROL_DOWN,
1131 ui::DomKey::CHARACTER,
1132 'a'},
1133 {ui::VKEY_A,
1134 ui::DomCode::KEY_A,
1135 ui::EF_NONE,
1136 ui::DomKey::CHARACTER,
1137 'a'}},
702 1138
703 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with 1139 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with
704 // the Alt modifier. 1140 // the Alt modifier.
705 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1141 {KeyTestCase::TEST_ALL,
706 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}, 1142 ui::ET_KEY_PRESSED,
707 {ui::VKEY_A, ui::EF_ALT_DOWN}}, 1143 {ui::VKEY_A,
1144 ui::DomCode::KEY_A,
1145 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
1146 ui::DomKey::CHARACTER,
1147 'a'},
1148 {ui::VKEY_A,
1149 ui::DomCode::KEY_A,
1150 ui::EF_ALT_DOWN,
1151 ui::DomKey::CHARACTER,
1152 'a'}},
708 }; 1153 };
709 1154
710 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { 1155 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) {
711 SCOPED_TRACE(i); 1156 SCOPED_TRACE(i);
712 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]); 1157 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]);
713 } 1158 }
714 1159
715 // Remap Alt to Control. 1160 // Remap Alt to Control.
716 IntegerPrefMember alt; 1161 IntegerPrefMember alt;
717 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 1162 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
718 alt.SetValue(chromeos::input_method::kControlKey); 1163 alt.SetValue(chromeos::input_method::kControlKey);
719 1164
720 KeyTestCase tests[] = { 1165 KeyTestCase tests[] = {
721 // Press left Alt. Confirm the event is now VKEY_CONTROL 1166 // Press left Alt. Confirm the event is now VKEY_CONTROL
722 // even though the Control key itself is disabled. 1167 // even though the Control key itself is disabled.
723 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1168 {KeyTestCase::TEST_ALL,
724 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, 1169 ui::ET_KEY_PRESSED,
725 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1170 {ui::VKEY_MENU,
1171 ui::DomCode::ALT_LEFT,
1172 ui::EF_ALT_DOWN,
1173 ui::DomKey::ALT,
1174 0},
1175 {ui::VKEY_CONTROL,
1176 ui::DomCode::CONTROL_LEFT,
1177 ui::EF_CONTROL_DOWN,
1178 ui::DomKey::CONTROL,
1179 0}},
726 1180
727 // Press Alt+a. Confirm the event is now Control+a even though the Control 1181 // Press Alt+a. Confirm the event is now Control+a even though the Control
728 // key itself is disabled. 1182 // key itself is disabled.
729 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1183 {KeyTestCase::TEST_ALL,
730 {ui::VKEY_A, ui::EF_ALT_DOWN}, 1184 ui::ET_KEY_PRESSED,
731 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, 1185 {ui::VKEY_A,
1186 ui::DomCode::KEY_A,
1187 ui::EF_ALT_DOWN,
1188 ui::DomKey::CHARACTER,
1189 'a'},
1190 {ui::VKEY_A,
1191 ui::DomCode::KEY_A,
1192 ui::EF_CONTROL_DOWN,
1193 ui::DomKey::CHARACTER,
1194 'a'}},
732 }; 1195 };
733 1196
734 for (size_t i = 0; i < arraysize(tests); ++i) { 1197 for (size_t i = 0; i < arraysize(tests); ++i) {
735 SCOPED_TRACE(i); 1198 SCOPED_TRACE(i);
736 CheckKeyTestCase(&rewriter, tests[i]); 1199 CheckKeyTestCase(&rewriter, tests[i]);
737 } 1200 }
738 } 1201 }
739 1202
740 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { 1203 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
741 // Remap Search to Control. 1204 // Remap Search to Control.
742 TestingPrefServiceSyncable prefs; 1205 TestingPrefServiceSyncable prefs;
743 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1206 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
744 IntegerPrefMember search; 1207 IntegerPrefMember search;
745 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1208 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
746 search.SetValue(chromeos::input_method::kControlKey); 1209 search.SetValue(chromeos::input_method::kControlKey);
747 1210
748 EventRewriter rewriter(NULL); 1211 EventRewriter rewriter(NULL);
749 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1212 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
750 rewriter.set_pref_service_for_testing(&prefs); 1213 rewriter.set_pref_service_for_testing(&prefs);
751 1214
752 KeyTestCase s_tests[] = { 1215 KeyTestCase s_tests[] = {
753 // Press Search. Confirm the event is now VKEY_CONTROL. 1216 // Press Search. Confirm the event is now VKEY_CONTROL.
754 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1217 {KeyTestCase::TEST_ALL,
755 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 1218 ui::ET_KEY_PRESSED,
756 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1219 {ui::VKEY_LWIN,
1220 ui::DomCode::OS_LEFT,
1221 ui::EF_COMMAND_DOWN,
1222 ui::DomKey::OS,
1223 0},
1224 {ui::VKEY_CONTROL,
1225 ui::DomCode::CONTROL_LEFT,
1226 ui::EF_CONTROL_DOWN,
1227 ui::DomKey::CONTROL,
1228 0}},
757 }; 1229 };
758 1230
759 for (size_t i = 0; i < arraysize(s_tests); ++i) { 1231 for (size_t i = 0; i < arraysize(s_tests); ++i) {
760 SCOPED_TRACE(i); 1232 SCOPED_TRACE(i);
761 CheckKeyTestCase(&rewriter, s_tests[i]); 1233 CheckKeyTestCase(&rewriter, s_tests[i]);
762 } 1234 }
763 1235
764 // Remap Alt to Control too. 1236 // Remap Alt to Control too.
765 IntegerPrefMember alt; 1237 IntegerPrefMember alt;
766 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 1238 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
767 alt.SetValue(chromeos::input_method::kControlKey); 1239 alt.SetValue(chromeos::input_method::kControlKey);
768 1240
769 KeyTestCase sa_tests[] = { 1241 KeyTestCase sa_tests[] = {
770 // Press Alt. Confirm the event is now VKEY_CONTROL. 1242 // Press Alt. Confirm the event is now VKEY_CONTROL.
771 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1243 {KeyTestCase::TEST_ALL,
772 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, 1244 ui::ET_KEY_PRESSED,
773 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1245 {ui::VKEY_MENU,
1246 ui::DomCode::ALT_LEFT,
1247 ui::EF_ALT_DOWN,
1248 ui::DomKey::ALT,
1249 0},
1250 {ui::VKEY_CONTROL,
1251 ui::DomCode::CONTROL_LEFT,
1252 ui::EF_CONTROL_DOWN,
1253 ui::DomKey::CONTROL,
1254 0}},
774 1255
775 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. 1256 // Press Alt+Search. Confirm the event is now VKEY_CONTROL.
776 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1257 {KeyTestCase::TEST_ALL,
777 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1258 ui::ET_KEY_PRESSED,
778 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1259 {ui::VKEY_LWIN,
1260 ui::DomCode::OS_LEFT,
1261 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
1262 ui::DomKey::OS,
1263 0},
1264 {ui::VKEY_CONTROL,
1265 ui::DomCode::CONTROL_LEFT,
1266 ui::EF_CONTROL_DOWN,
1267 ui::DomKey::CONTROL,
1268 0}},
779 1269
780 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. 1270 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL.
781 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1271 {KeyTestCase::TEST_ALL,
1272 ui::ET_KEY_PRESSED,
782 {ui::VKEY_LWIN, 1273 {ui::VKEY_LWIN,
783 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1274 ui::DomCode::OS_LEFT,
784 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1275 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
1276 ui::DomKey::OS,
1277 0},
1278 {ui::VKEY_CONTROL,
1279 ui::DomCode::CONTROL_LEFT,
1280 ui::EF_CONTROL_DOWN,
1281 ui::DomKey::CONTROL,
1282 0}},
785 1283
786 // Press Shift+Control+Alt+Search. Confirm the event is now Control with 1284 // Press Shift+Control+Alt+Search. Confirm the event is now Control with
787 // Shift and Control modifiers. 1285 // Shift and Control modifiers.
788 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1286 {KeyTestCase::TEST_ALL,
789 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | 1287 ui::ET_KEY_PRESSED,
790 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1288 {ui::VKEY_LWIN,
791 {ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, 1289 ui::DomCode::OS_LEFT,
1290 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1291 ui::EF_COMMAND_DOWN,
1292 ui::DomKey::OS,
1293 0},
1294 {ui::VKEY_CONTROL,
1295 ui::DomCode::CONTROL_LEFT,
1296 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
1297 ui::DomKey::CONTROL,
1298 0}},
792 1299
793 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift 1300 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift
794 // and Control modifiers. 1301 // and Control modifiers.
795 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1302 {KeyTestCase::TEST_ALL,
796 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | 1303 ui::ET_KEY_PRESSED,
797 ui::EF_COMMAND_DOWN}, 1304 {ui::VKEY_B,
798 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, 1305 ui::DomCode::KEY_B,
1306 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1307 ui::EF_COMMAND_DOWN,
1308 ui::DomKey::CHARACTER,
1309 'B'},
1310 {ui::VKEY_B,
1311 ui::DomCode::KEY_B,
1312 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
1313 ui::DomKey::CHARACTER,
1314 'B'}},
799 }; 1315 };
800 1316
801 for (size_t i = 0; i < arraysize(sa_tests); ++i) { 1317 for (size_t i = 0; i < arraysize(sa_tests); ++i) {
802 SCOPED_TRACE(i); 1318 SCOPED_TRACE(i);
803 CheckKeyTestCase(&rewriter, sa_tests[i]); 1319 CheckKeyTestCase(&rewriter, sa_tests[i]);
804 } 1320 }
805 } 1321 }
806 1322
807 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { 1323 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
808 // Remap Search to ESC. 1324 // Remap Search to ESC.
809 TestingPrefServiceSyncable prefs; 1325 TestingPrefServiceSyncable prefs;
810 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1326 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
811 IntegerPrefMember search; 1327 IntegerPrefMember search;
812 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1328 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
813 search.SetValue(chromeos::input_method::kEscapeKey); 1329 search.SetValue(chromeos::input_method::kEscapeKey);
814 1330
815 EventRewriter rewriter(NULL); 1331 EventRewriter rewriter(NULL);
816 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1332 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
817 rewriter.set_pref_service_for_testing(&prefs); 1333 rewriter.set_pref_service_for_testing(&prefs);
818 1334
819 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE. 1335 KeyTestCase tests[] = {
820 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1336 // Press Search. Confirm the event is now VKEY_ESCAPE.
821 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 1337 {KeyTestCase::TEST_ALL,
822 {ui::VKEY_ESCAPE, ui::EF_NONE}}, 1338 ui::ET_KEY_PRESSED,
1339 {ui::VKEY_LWIN,
1340 ui::DomCode::OS_LEFT,
1341 ui::EF_COMMAND_DOWN,
1342 ui::DomKey::OS,
1343 0},
1344 {ui::VKEY_ESCAPE,
1345 ui::DomCode::ESCAPE,
1346 ui::EF_NONE,
1347 ui::DomKey::ESCAPE,
1348 0}},
823 }; 1349 };
824 1350
825 for (size_t i = 0; i < arraysize(tests); ++i) { 1351 for (size_t i = 0; i < arraysize(tests); ++i) {
826 SCOPED_TRACE(i); 1352 SCOPED_TRACE(i);
827 CheckKeyTestCase(&rewriter, tests[i]); 1353 CheckKeyTestCase(&rewriter, tests[i]);
828 } 1354 }
829 } 1355 }
830 1356
831 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { 1357 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
832 // Remap Search to Alt. 1358 // Remap Search to Alt.
833 TestingPrefServiceSyncable prefs; 1359 TestingPrefServiceSyncable prefs;
834 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1360 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
835 IntegerPrefMember search; 1361 IntegerPrefMember search;
836 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1362 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
837 search.SetValue(chromeos::input_method::kAltKey); 1363 search.SetValue(chromeos::input_method::kAltKey);
838 1364
839 EventRewriter rewriter(NULL); 1365 EventRewriter rewriter(NULL);
840 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1366 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
841 rewriter.set_pref_service_for_testing(&prefs); 1367 rewriter.set_pref_service_for_testing(&prefs);
842 1368
843 KeyTestCase s2a_tests[] = { 1369 KeyTestCase s2a_tests[] = {
844 // Press Search. Confirm the event is now VKEY_MENU. 1370 // Press Search. Confirm the event is now VKEY_MENU.
845 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1371 {KeyTestCase::TEST_ALL,
846 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 1372 ui::ET_KEY_PRESSED,
847 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 1373 {ui::VKEY_LWIN,
1374 ui::DomCode::OS_LEFT,
1375 ui::EF_COMMAND_DOWN,
1376 ui::DomKey::OS,
1377 0},
1378 {ui::VKEY_MENU,
1379 ui::DomCode::ALT_LEFT,
1380 ui::EF_ALT_DOWN,
1381 ui::DomKey::ALT,
1382 0}},
848 }; 1383 };
849 1384
850 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { 1385 for (size_t i = 0; i < arraysize(s2a_tests); ++i) {
851 SCOPED_TRACE(i); 1386 SCOPED_TRACE(i);
852 CheckKeyTestCase(&rewriter, s2a_tests[i]); 1387 CheckKeyTestCase(&rewriter, s2a_tests[i]);
853 } 1388 }
854 1389
855 // Remap Alt to Control. 1390 // Remap Alt to Control.
856 IntegerPrefMember alt; 1391 IntegerPrefMember alt;
857 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 1392 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
858 alt.SetValue(chromeos::input_method::kControlKey); 1393 alt.SetValue(chromeos::input_method::kControlKey);
859 1394
860 KeyTestCase a2c_tests[] = { 1395 KeyTestCase a2c_tests[] = {
861 // Press left Alt. Confirm the event is now VKEY_CONTROL. 1396 // Press left Alt. Confirm the event is now VKEY_CONTROL.
862 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1397 {KeyTestCase::TEST_ALL,
863 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, 1398 ui::ET_KEY_PRESSED,
864 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1399 {ui::VKEY_MENU,
1400 ui::DomCode::ALT_LEFT,
1401 ui::EF_ALT_DOWN,
1402 ui::DomKey::ALT,
1403 0},
1404 {ui::VKEY_CONTROL,
1405 ui::DomCode::CONTROL_LEFT,
1406 ui::EF_CONTROL_DOWN,
1407 ui::DomKey::CONTROL,
1408 0}},
865 // Press Shift+comma. Verify that only the flags are changed. 1409 // Press Shift+comma. Verify that only the flags are changed.
866 // The X11 portion of the test addresses crbug.com/390263 by verifying 1410 // The X11 portion of the test addresses crbug.com/390263 by verifying
867 // that the X keycode remains that for ',<' and not for 105-key '<>'. 1411 // that the X keycode remains that for ',<' and not for 105-key '<>'.
868 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1412 {KeyTestCase::TEST_ALL,
869 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 1413 ui::ET_KEY_PRESSED,
870 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, 1414 {ui::VKEY_OEM_COMMA,
1415 ui::DomCode::COMMA,
1416 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
1417 ui::DomKey::UNIDENTIFIED,
1418 0},
1419 {ui::VKEY_OEM_COMMA,
1420 ui::DomCode::COMMA,
1421 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
1422 ui::DomKey::UNIDENTIFIED,
1423 0}},
871 // Press Shift+9. Verify that only the flags are changed. 1424 // Press Shift+9. Verify that only the flags are changed.
872 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1425 {KeyTestCase::TEST_ALL,
873 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 1426 ui::ET_KEY_PRESSED,
874 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, 1427 {ui::VKEY_9,
1428 ui::DomCode::DIGIT9,
1429 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
1430 ui::DomKey::CHARACTER,
1431 '9'},
1432 {ui::VKEY_9,
1433 ui::DomCode::DIGIT9,
1434 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
1435 ui::DomKey::CHARACTER,
1436 '9'}},
875 }; 1437 };
876 1438
877 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { 1439 for (size_t i = 0; i < arraysize(a2c_tests); ++i) {
878 SCOPED_TRACE(i); 1440 SCOPED_TRACE(i);
879 CheckKeyTestCase(&rewriter, a2c_tests[i]); 1441 CheckKeyTestCase(&rewriter, a2c_tests[i]);
880 } 1442 }
881 1443
882 // Remap Control to Search. 1444 // Remap Control to Search.
883 IntegerPrefMember control; 1445 IntegerPrefMember control;
884 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 1446 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
885 control.SetValue(chromeos::input_method::kSearchKey); 1447 control.SetValue(chromeos::input_method::kSearchKey);
886 1448
887 KeyTestCase c2s_tests[] = { 1449 KeyTestCase c2s_tests[] = {
888 // Press left Control. Confirm the event is now VKEY_LWIN. 1450 // Press left Control. Confirm the event is now VKEY_LWIN.
889 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1451 {KeyTestCase::TEST_ALL,
890 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 1452 ui::ET_KEY_PRESSED,
891 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, 1453 {ui::VKEY_CONTROL,
1454 ui::DomCode::CONTROL_LEFT,
1455 ui::EF_CONTROL_DOWN,
1456 ui::DomKey::CONTROL,
1457 0},
1458 {ui::VKEY_LWIN,
1459 ui::DomCode::OS_LEFT,
1460 ui::EF_COMMAND_DOWN,
1461 ui::DomKey::OS,
1462 0}},
892 1463
893 // Then, press all of the three, Control+Alt+Search. 1464 // Then, press all of the three, Control+Alt+Search.
894 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1465 {KeyTestCase::TEST_ALL,
1466 ui::ET_KEY_PRESSED,
895 {ui::VKEY_LWIN, 1467 {ui::VKEY_LWIN,
896 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1468 ui::DomCode::OS_LEFT,
1469 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
1470 ui::DomKey::OS,
1471 0},
897 {ui::VKEY_MENU, 1472 {ui::VKEY_MENU,
898 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, 1473 ui::DomCode::ALT_LEFT,
1474 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
1475 ui::DomKey::ALT,
1476 0}},
899 1477
900 // Press Shift+Control+Alt+Search. 1478 // Press Shift+Control+Alt+Search.
901 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1479 {KeyTestCase::TEST_ALL,
902 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | 1480 ui::ET_KEY_PRESSED,
903 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1481 {ui::VKEY_LWIN,
904 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | 1482 ui::DomCode::OS_LEFT,
905 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, 1483 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1484 ui::EF_COMMAND_DOWN,
1485 ui::DomKey::OS,
1486 0},
1487 {ui::VKEY_MENU,
1488 ui::DomCode::ALT_LEFT,
1489 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1490 ui::EF_COMMAND_DOWN,
1491 ui::DomKey::ALT,
1492 0}},
906 1493
907 // Press Shift+Control+Alt+Search+B 1494 // Press Shift+Control+Alt+Search+B
908 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1495 {KeyTestCase::TEST_ALL,
909 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | 1496 ui::ET_KEY_PRESSED,
910 ui::EF_COMMAND_DOWN}, 1497 {ui::VKEY_B,
911 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | 1498 ui::DomCode::KEY_B,
912 ui::EF_COMMAND_DOWN}}, 1499 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1500 ui::EF_COMMAND_DOWN,
1501 ui::DomKey::CHARACTER,
1502 'B'},
1503 {ui::VKEY_B,
1504 ui::DomCode::KEY_B,
1505 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
1506 ui::EF_COMMAND_DOWN,
1507 ui::DomKey::CHARACTER,
1508 'B'}},
913 }; 1509 };
914 1510
915 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { 1511 for (size_t i = 0; i < arraysize(c2s_tests); ++i) {
916 SCOPED_TRACE(i); 1512 SCOPED_TRACE(i);
917 CheckKeyTestCase(&rewriter, c2s_tests[i]); 1513 CheckKeyTestCase(&rewriter, c2s_tests[i]);
918 } 1514 }
919 } 1515 }
920 1516
921 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { 1517 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
922 // Remap Search to Caps Lock. 1518 // Remap Search to Caps Lock.
923 TestingPrefServiceSyncable prefs; 1519 TestingPrefServiceSyncable prefs;
924 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1520 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
925 IntegerPrefMember search; 1521 IntegerPrefMember search;
926 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1522 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
927 search.SetValue(chromeos::input_method::kCapsLockKey); 1523 search.SetValue(chromeos::input_method::kCapsLockKey);
928 1524
929 chromeos::input_method::FakeImeKeyboard ime_keyboard; 1525 chromeos::input_method::FakeImeKeyboard ime_keyboard;
930 EventRewriter rewriter(NULL); 1526 EventRewriter rewriter(NULL);
931 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1527 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
932 rewriter.set_pref_service_for_testing(&prefs); 1528 rewriter.set_pref_service_for_testing(&prefs);
933 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 1529 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
934 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1530 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
935 1531
936 // Press Search. 1532 // Press Search.
937 EXPECT_EQ( 1533 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
938 GetExpectedResultAsString(ui::VKEY_CAPITAL, 1534 ui::DomCode::CAPS_LOCK,
939 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1535 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
940 ui::ET_KEY_PRESSED), 1536 ui::DomKey::CAPS_LOCK, 0),
941 GetRewrittenEventAsString( 1537 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
942 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); 1538 ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
1539 ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0));
943 // Confirm that the Caps Lock status is changed. 1540 // Confirm that the Caps Lock status is changed.
944 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); 1541 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
945 1542
946 // Release Search. 1543 // Release Search.
947 EXPECT_EQ(GetExpectedResultAsString( 1544 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
948 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1545 ui::DomCode::CAPS_LOCK, ui::EF_NONE,
949 GetRewrittenEventAsString( 1546 ui::DomKey::CAPS_LOCK, 0),
950 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1547 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1548 ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
1549 ui::EF_NONE, ui::DomKey::OS, 0));
951 // Confirm that the Caps Lock status is not changed. 1550 // Confirm that the Caps Lock status is not changed.
952 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); 1551 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
953 1552
954 // Press Search. 1553 // Press Search.
955 EXPECT_EQ( 1554 EXPECT_EQ(
956 GetExpectedResultAsString(ui::VKEY_CAPITAL, 1555 GetExpectedResultAsString(
957 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1556 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
958 ui::ET_KEY_PRESSED), 1557 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0),
959 GetRewrittenEventAsString(&rewriter, 1558 GetRewrittenEventAsString(
960 ui::VKEY_LWIN, 1559 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
961 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, 1560 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0));
962 ui::ET_KEY_PRESSED));
963 // Confirm that the Caps Lock status is changed. 1561 // Confirm that the Caps Lock status is changed.
964 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1562 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
965 1563
966 // Release Search. 1564 // Release Search.
967 EXPECT_EQ(GetExpectedResultAsString( 1565 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
968 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1566 ui::DomCode::CAPS_LOCK, ui::EF_NONE,
969 GetRewrittenEventAsString( 1567 ui::DomKey::CAPS_LOCK, 0),
970 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1568 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1569 ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
1570 ui::EF_NONE, ui::DomKey::OS, 0));
971 // Confirm that the Caps Lock status is not changed. 1571 // Confirm that the Caps Lock status is not changed.
972 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1572 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
973 1573
974 // Press Caps Lock (on an external keyboard). 1574 // Press Caps Lock (on an external keyboard).
975 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 1575 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
1576 ui::DomCode::CAPS_LOCK,
976 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1577 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
977 ui::ET_KEY_PRESSED), 1578 ui::DomKey::CAPS_LOCK, 0),
978 GetRewrittenEventAsString(&rewriter, 1579 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
979 ui::VKEY_CAPITAL, 1580 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
980 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1581 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
981 ui::ET_KEY_PRESSED)); 1582 ui::DomKey::CAPS_LOCK, 0));
982 1583
983 // Confirm that calling RewriteForTesting() does not change the state of 1584 // Confirm that calling RewriteForTesting() does not change the state of
984 // |ime_keyboard|. In this case, X Window system itself should change the 1585 // |ime_keyboard|. In this case, X Window system itself should change the
985 // Caps Lock state, not ash::EventRewriter. 1586 // Caps Lock state, not ash::EventRewriter.
986 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1587 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
987 1588
988 // Release Caps Lock (on an external keyboard). 1589 // Release Caps Lock (on an external keyboard).
989 EXPECT_EQ(GetExpectedResultAsString( 1590 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
990 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1591 ui::DomCode::CAPS_LOCK, ui::EF_NONE,
991 GetRewrittenEventAsString( 1592 ui::DomKey::CAPS_LOCK, 0),
992 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1593 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1594 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
1595 ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0));
993 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1596 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
994 } 1597 }
995 1598
996 TEST_F(EventRewriterTest, TestRewriteCapsLock) { 1599 TEST_F(EventRewriterTest, TestRewriteCapsLock) {
997 TestingPrefServiceSyncable prefs; 1600 TestingPrefServiceSyncable prefs;
998 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1601 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
999 1602
1000 chromeos::input_method::FakeImeKeyboard ime_keyboard; 1603 chromeos::input_method::FakeImeKeyboard ime_keyboard;
1001 EventRewriter rewriter(NULL); 1604 EventRewriter rewriter(NULL);
1002 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1605 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1003 rewriter.set_pref_service_for_testing(&prefs); 1606 rewriter.set_pref_service_for_testing(&prefs);
1004 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 1607 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
1005 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 1608 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
1006 1609
1007 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. 1610 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask.
1008 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 1611 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
1612 ui::DomCode::CAPS_LOCK,
1009 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1613 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
1010 ui::ET_KEY_PRESSED), 1614 ui::DomKey::CAPS_LOCK, 0),
1011 GetRewrittenEventAsString( 1615 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1012 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); 1616 ui::VKEY_F16, ui::DomCode::F16,
1617 ui::EF_MOD3_DOWN, ui::DomKey::F16, 0));
1013 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); 1618 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
1014 } 1619 }
1015 1620
1016 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { 1621 TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
1017 TestingPrefServiceSyncable prefs; 1622 TestingPrefServiceSyncable prefs;
1018 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1623 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1019 1624
1020 chromeos::input_method::FakeImeKeyboard ime_keyboard; 1625 chromeos::input_method::FakeImeKeyboard ime_keyboard;
1021 EventRewriter rewriter(NULL); 1626 EventRewriter rewriter(NULL);
1022 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1627 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1023 rewriter.set_pref_service_for_testing(&prefs); 1628 rewriter.set_pref_service_for_testing(&prefs);
1024 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 1629 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
1025 1630
1026 KeyTestCase tests[] = { 1631 KeyTestCase tests[] = {
1027 // F15 should work as Ctrl when --has-chromeos-diamond-key is not 1632 // F15 should work as Ctrl when --has-chromeos-diamond-key is not
1028 // specified. 1633 // specified.
1029 {KeyTestCase::TEST_VKEY, 1634 {KeyTestCase::TEST_VKEY,
1030 ui::ET_KEY_PRESSED, 1635 ui::ET_KEY_PRESSED,
1031 {ui::VKEY_F15, ui::EF_NONE}, 1636 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0},
1032 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 1637 {ui::VKEY_CONTROL,
1638 ui::DomCode::CONTROL_LEFT,
1639 ui::EF_CONTROL_DOWN,
1640 ui::DomKey::CONTROL,
1641 0}},
1033 1642
1034 {KeyTestCase::TEST_VKEY, 1643 {KeyTestCase::TEST_VKEY,
1035 ui::ET_KEY_RELEASED, 1644 ui::ET_KEY_RELEASED,
1036 {ui::VKEY_F15, ui::EF_NONE}, 1645 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0},
1037 {ui::VKEY_CONTROL, ui::EF_NONE}}, 1646 {ui::VKEY_CONTROL,
1647 ui::DomCode::CONTROL_LEFT,
1648 ui::EF_NONE,
1649 ui::DomKey::CONTROL,
1650 0}},
1038 1651
1039 // However, Mod2Mask should not be rewritten to CtrlMask when 1652 // However, Mod2Mask should not be rewritten to CtrlMask when
1040 // --has-chromeos-diamond-key is not specified. 1653 // --has-chromeos-diamond-key is not specified.
1041 {KeyTestCase::TEST_VKEY, 1654 {KeyTestCase::TEST_VKEY,
1042 ui::ET_KEY_PRESSED, 1655 ui::ET_KEY_PRESSED,
1043 {ui::VKEY_A, ui::EF_NONE}, 1656 {ui::VKEY_A,
1044 {ui::VKEY_A, ui::EF_NONE}}, 1657 ui::DomCode::KEY_A,
1658 ui::EF_NONE,
1659 ui::DomKey::CHARACTER,
1660 'a'},
1661 {ui::VKEY_A,
1662 ui::DomCode::KEY_A,
1663 ui::EF_NONE,
1664 ui::DomKey::CHARACTER,
1665 'a'}},
1045 }; 1666 };
1046 1667
1047 for (size_t i = 0; i < arraysize(tests); ++i) { 1668 for (size_t i = 0; i < arraysize(tests); ++i) {
1048 SCOPED_TRACE(i); 1669 SCOPED_TRACE(i);
1049 CheckKeyTestCase(&rewriter, tests[i]); 1670 CheckKeyTestCase(&rewriter, tests[i]);
1050 } 1671 }
1051 } 1672 }
1052 1673
1053 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { 1674 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
1054 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); 1675 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess());
1055 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1676 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
1056 chromeos::switches::kHasChromeOSDiamondKey, ""); 1677 chromeos::switches::kHasChromeOSDiamondKey, "");
1057 1678
1058 TestingPrefServiceSyncable prefs; 1679 TestingPrefServiceSyncable prefs;
1059 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1680 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1060 1681
1061 chromeos::input_method::FakeImeKeyboard ime_keyboard; 1682 chromeos::input_method::FakeImeKeyboard ime_keyboard;
1062 EventRewriter rewriter(NULL); 1683 EventRewriter rewriter(NULL);
1063 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1684 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1064 rewriter.set_pref_service_for_testing(&prefs); 1685 rewriter.set_pref_service_for_testing(&prefs);
1065 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 1686 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
1066 1687
1067 // By default, F15 should work as Control. 1688 // By default, F15 should work as Control.
1068 EXPECT_EQ(GetExpectedResultAsString( 1689 EXPECT_EQ(GetExpectedResultAsString(
1069 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), 1690 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
1070 GetRewrittenEventAsString( 1691 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0),
1071 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1692 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1693 ui::VKEY_F15, ui::DomCode::F15,
1694 ui::EF_NONE, ui::DomKey::F15, 0));
1072 // Check that Control is applied to a subsequent key press. 1695 // Check that Control is applied to a subsequent key press.
1073 EXPECT_EQ(GetExpectedResultAsString( 1696 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1074 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), 1697 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
1075 GetRewrittenEventAsString( 1698 ui::DomKey::CHARACTER, 'a'),
1076 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1699 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1700 ui::DomCode::KEY_A, ui::EF_NONE,
1701 ui::DomKey::CHARACTER, 'a'));
1077 // Release F15 1702 // Release F15
1078 EXPECT_EQ(GetExpectedResultAsString( 1703 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL,
1079 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1704 ui::DomCode::CONTROL_LEFT, ui::EF_NONE,
1080 GetRewrittenEventAsString( 1705 ui::DomKey::CONTROL, 0),
1081 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1706 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1707 ui::VKEY_F15, ui::DomCode::F15,
1708 ui::EF_NONE, ui::DomKey::F15, 0));
1082 // Check that Control is no longer applied to a subsequent key press. 1709 // Check that Control is no longer applied to a subsequent key press.
1083 EXPECT_EQ( 1710 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1084 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1711 ui::DomCode::KEY_A, ui::EF_NONE,
1085 GetRewrittenEventAsString( 1712 ui::DomKey::CHARACTER, 'a'),
1086 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1713 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1714 ui::DomCode::KEY_A, ui::EF_NONE,
1715 ui::DomKey::CHARACTER, 'a'));
1087 1716
1088 IntegerPrefMember diamond; 1717 IntegerPrefMember diamond;
1089 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); 1718 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs);
1090 diamond.SetValue(chromeos::input_method::kVoidKey); 1719 diamond.SetValue(chromeos::input_method::kVoidKey);
1091 1720
1092 EXPECT_EQ(GetExpectedResultAsString( 1721 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN,
1093 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), 1722 ui::DomCode::NONE, ui::EF_NONE,
1094 GetRewrittenEventAsString( 1723 ui::DomKey::NONE, 0),
1095 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1724 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1725 ui::VKEY_F15, ui::DomCode::F15,
1726 ui::EF_NONE, ui::DomKey::F15, 0));
1096 // Check that no modifier is applied to another key. 1727 // Check that no modifier is applied to another key.
1097 EXPECT_EQ( 1728 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1098 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1729 ui::DomCode::KEY_A, ui::EF_NONE,
1099 GetRewrittenEventAsString( 1730 ui::DomKey::CHARACTER, 'a'),
1100 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1731 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1732 ui::DomCode::KEY_A, ui::EF_NONE,
1733 ui::DomKey::CHARACTER, 'a'));
1101 1734
1102 diamond.SetValue(chromeos::input_method::kControlKey); 1735 diamond.SetValue(chromeos::input_method::kControlKey);
1103 1736
1104 EXPECT_EQ(GetExpectedResultAsString( 1737 EXPECT_EQ(GetExpectedResultAsString(
1105 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), 1738 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
1106 GetRewrittenEventAsString( 1739 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0),
1107 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1740 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1741 ui::VKEY_F15, ui::DomCode::F15,
1742 ui::EF_NONE, ui::DomKey::F15, 0));
1108 // Check that Control is applied to a subsequent key press. 1743 // Check that Control is applied to a subsequent key press.
1109 EXPECT_EQ(GetExpectedResultAsString( 1744 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1110 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), 1745 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
1111 GetRewrittenEventAsString( 1746 ui::DomKey::CHARACTER, 'a'),
1112 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1747 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1748 ui::DomCode::KEY_A, ui::EF_NONE,
1749 ui::DomKey::CHARACTER, 'a'));
1113 // Release F15 1750 // Release F15
1114 EXPECT_EQ(GetExpectedResultAsString( 1751 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL,
1115 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1752 ui::DomCode::CONTROL_LEFT, ui::EF_NONE,
1116 GetRewrittenEventAsString( 1753 ui::DomKey::CONTROL, 0),
1117 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1754 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1755 ui::VKEY_F15, ui::DomCode::F15,
1756 ui::EF_NONE, ui::DomKey::F15, 0));
1118 // Check that Control is no longer applied to a subsequent key press. 1757 // Check that Control is no longer applied to a subsequent key press.
1119 EXPECT_EQ( 1758 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1120 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1759 ui::DomCode::KEY_A, ui::EF_NONE,
1121 GetRewrittenEventAsString( 1760 ui::DomKey::CHARACTER, 'a'),
1122 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1761 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1762 ui::DomCode::KEY_A, ui::EF_NONE,
1763 ui::DomKey::CHARACTER, 'a'));
1123 1764
1124 diamond.SetValue(chromeos::input_method::kAltKey); 1765 diamond.SetValue(chromeos::input_method::kAltKey);
1125 1766
1126 EXPECT_EQ(GetExpectedResultAsString( 1767 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU,
1127 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), 1768 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
1128 GetRewrittenEventAsString( 1769 ui::DomKey::ALT, 0),
1129 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1770 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1771 ui::VKEY_F15, ui::DomCode::F15,
1772 ui::EF_NONE, ui::DomKey::F15, 0));
1130 // Check that Alt is applied to a subsequent key press. 1773 // Check that Alt is applied to a subsequent key press.
1131 EXPECT_EQ(GetExpectedResultAsString( 1774 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1132 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), 1775 ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
1133 GetRewrittenEventAsString( 1776 ui::DomKey::CHARACTER, 'a'),
1134 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1777 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1778 ui::DomCode::KEY_A, ui::EF_NONE,
1779 ui::DomKey::CHARACTER, 'a'));
1135 // Release F15 1780 // Release F15
1136 EXPECT_EQ(GetExpectedResultAsString( 1781 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU,
1137 ui::VKEY_MENU, ui::EF_NONE, ui::ET_KEY_RELEASED), 1782 ui::DomCode::ALT_LEFT, ui::EF_NONE,
1138 GetRewrittenEventAsString( 1783 ui::DomKey::ALT, 0),
1139 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1784 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1785 ui::VKEY_F15, ui::DomCode::F15,
1786 ui::EF_NONE, ui::DomKey::F15, 0));
1140 // Check that Alt is no longer applied to a subsequent key press. 1787 // Check that Alt is no longer applied to a subsequent key press.
1141 EXPECT_EQ( 1788 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1142 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1789 ui::DomCode::KEY_A, ui::EF_NONE,
1143 GetRewrittenEventAsString( 1790 ui::DomKey::CHARACTER, 'a'),
1144 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1791 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1792 ui::DomCode::KEY_A, ui::EF_NONE,
1793 ui::DomKey::CHARACTER, 'a'));
1145 1794
1146 diamond.SetValue(chromeos::input_method::kCapsLockKey); 1795 diamond.SetValue(chromeos::input_method::kCapsLockKey);
1147 1796
1148 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 1797 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
1798 ui::DomCode::CAPS_LOCK,
1149 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1799 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
1150 ui::ET_KEY_PRESSED), 1800 ui::DomKey::CAPS_LOCK, 0),
1151 GetRewrittenEventAsString( 1801 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
1152 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1802 ui::VKEY_F15, ui::DomCode::F15,
1803 ui::EF_NONE, ui::DomKey::F15, 0));
1153 // Check that Caps is applied to a subsequent key press. 1804 // Check that Caps is applied to a subsequent key press.
1154 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 1805 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1806 ui::DomCode::KEY_A,
1155 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 1807 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
1156 ui::ET_KEY_PRESSED), 1808 ui::DomKey::CHARACTER, 'a'),
1157 GetRewrittenEventAsString( 1809 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1158 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1810 ui::DomCode::KEY_A, ui::EF_NONE,
1811 ui::DomKey::CHARACTER, 'a'));
1159 // Release F15 1812 // Release F15
1160 EXPECT_EQ(GetExpectedResultAsString( 1813 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
1161 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), 1814 ui::DomCode::CAPS_LOCK, ui::EF_NONE,
1162 GetRewrittenEventAsString( 1815 ui::DomKey::CAPS_LOCK, 0),
1163 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); 1816 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
1817 ui::VKEY_F15, ui::DomCode::F15,
1818 ui::EF_NONE, ui::DomKey::F15, 0));
1164 // Check that Control is no longer applied to a subsequent key press. 1819 // Check that Control is no longer applied to a subsequent key press.
1165 EXPECT_EQ( 1820 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1166 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1821 ui::DomCode::KEY_A, ui::EF_NONE,
1167 GetRewrittenEventAsString( 1822 ui::DomKey::CHARACTER, 'a'),
1168 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1823 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1824 ui::DomCode::KEY_A, ui::EF_NONE,
1825 ui::DomKey::CHARACTER, 'a'));
1169 1826
1170 *base::CommandLine::ForCurrentProcess() = original_cl; 1827 *base::CommandLine::ForCurrentProcess() = original_cl;
1171 } 1828 }
1172 1829
1173 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { 1830 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
1174 // Remap CapsLock to Control. 1831 // Remap CapsLock to Control.
1175 TestingPrefServiceSyncable prefs; 1832 TestingPrefServiceSyncable prefs;
1176 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1833 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1177 IntegerPrefMember control; 1834 IntegerPrefMember control;
1178 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 1835 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
1179 control.SetValue(chromeos::input_method::kControlKey); 1836 control.SetValue(chromeos::input_method::kControlKey);
1180 1837
1181 EventRewriter rewriter(NULL); 1838 EventRewriter rewriter(NULL);
1182 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1839 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1183 rewriter.set_pref_service_for_testing(&prefs); 1840 rewriter.set_pref_service_for_testing(&prefs);
1184 1841
1185 KeyTestCase tests[] = { 1842 KeyTestCase tests[] = {
1186 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. 1843 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
1187 // On Chrome OS, CapsLock works as a Mod3 modifier. 1844 // On Chrome OS, CapsLock works as a Mod3 modifier.
1188 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1845 {KeyTestCase::TEST_ALL,
1189 {ui::VKEY_A, ui::EF_MOD3_DOWN}, 1846 ui::ET_KEY_PRESSED,
1190 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, 1847 {ui::VKEY_A,
1848 ui::DomCode::KEY_A,
1849 ui::EF_MOD3_DOWN,
1850 ui::DomKey::CHARACTER,
1851 'a'},
1852 {ui::VKEY_A,
1853 ui::DomCode::KEY_A,
1854 ui::EF_CONTROL_DOWN,
1855 ui::DomKey::CHARACTER,
1856 'a'}},
1191 1857
1192 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to 1858 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to
1193 // ControlMask 1859 // ControlMask
1194 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1860 {KeyTestCase::TEST_ALL,
1195 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN}, 1861 ui::ET_KEY_PRESSED,
1196 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, 1862 {ui::VKEY_A,
1863 ui::DomCode::KEY_A,
1864 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN,
1865 ui::DomKey::CHARACTER,
1866 'a'},
1867 {ui::VKEY_A,
1868 ui::DomCode::KEY_A,
1869 ui::EF_CONTROL_DOWN,
1870 ui::DomKey::CHARACTER,
1871 'a'}},
1197 1872
1198 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to 1873 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to
1199 // ControlMask. 1874 // ControlMask.
1200 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1875 {KeyTestCase::TEST_ALL,
1201 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN}, 1876 ui::ET_KEY_PRESSED,
1202 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, 1877 {ui::VKEY_A,
1878 ui::DomCode::KEY_A,
1879 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN,
1880 ui::DomKey::CHARACTER,
1881 'a'},
1882 {ui::VKEY_A,
1883 ui::DomCode::KEY_A,
1884 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
1885 ui::DomKey::CHARACTER,
1886 'a'}},
1203 }; 1887 };
1204 1888
1205 for (size_t i = 0; i < arraysize(tests); ++i) { 1889 for (size_t i = 0; i < arraysize(tests); ++i) {
1206 SCOPED_TRACE(i); 1890 SCOPED_TRACE(i);
1207 CheckKeyTestCase(&rewriter, tests[i]); 1891 CheckKeyTestCase(&rewriter, tests[i]);
1208 } 1892 }
1209 } 1893 }
1210 1894
1211 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { 1895 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
1212 // Remap CapsLock to Control. 1896 // Remap CapsLock to Control.
1213 TestingPrefServiceSyncable prefs; 1897 TestingPrefServiceSyncable prefs;
1214 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1898 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1215 IntegerPrefMember control; 1899 IntegerPrefMember control;
1216 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 1900 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
1217 control.SetValue(chromeos::input_method::kControlKey); 1901 control.SetValue(chromeos::input_method::kControlKey);
1218 1902
1219 EventRewriter rewriter(NULL); 1903 EventRewriter rewriter(NULL);
1220 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1904 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1221 rewriter.set_pref_service_for_testing(&prefs); 1905 rewriter.set_pref_service_for_testing(&prefs);
1222 input_method_manager_mock_->set_mod3_used(true); 1906 input_method_manager_mock_->set_mod3_used(true);
1223 1907
1224 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask 1908 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask
1225 // when Mod3Mask is already in use by the current XKB layout. 1909 // when Mod3Mask is already in use by the current XKB layout.
1226 EXPECT_EQ( 1910 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
1227 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1911 ui::DomCode::KEY_A, ui::EF_NONE,
1228 GetRewrittenEventAsString( 1912 ui::DomKey::CHARACTER, 'a'),
1229 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1913 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
1914 ui::DomCode::KEY_A, ui::EF_NONE,
1915 ui::DomKey::CHARACTER, 'a'));
1230 1916
1231 input_method_manager_mock_->set_mod3_used(false); 1917 input_method_manager_mock_->set_mod3_used(false);
1232 } 1918 }
1233 1919
1234 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { 1920 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
1235 TestingPrefServiceSyncable prefs; 1921 TestingPrefServiceSyncable prefs;
1236 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1922 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1237 EventRewriter rewriter(NULL); 1923 EventRewriter rewriter(NULL);
1238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 1924 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); 1925 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
1240 rewriter.set_pref_service_for_testing(&prefs); 1926 rewriter.set_pref_service_for_testing(&prefs);
1241 1927
1242 KeyTestCase tests[] = { 1928 KeyTestCase tests[] = {
1243 // Alt+Backspace -> Delete 1929 // Alt+Backspace -> Delete
1244 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1930 {KeyTestCase::TEST_ALL,
1245 {ui::VKEY_BACK, ui::EF_ALT_DOWN}, 1931 ui::ET_KEY_PRESSED,
1246 {ui::VKEY_DELETE, ui::EF_NONE}}, 1932 {ui::VKEY_BACK,
1933 ui::DomCode::BACKSPACE,
1934 ui::EF_ALT_DOWN,
1935 ui::DomKey::BACKSPACE,
1936 0},
1937 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}},
1247 // Control+Alt+Backspace -> Control+Delete 1938 // Control+Alt+Backspace -> Control+Delete
1248 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1939 {KeyTestCase::TEST_ALL,
1249 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 1940 ui::ET_KEY_PRESSED,
1250 {ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}}, 1941 {ui::VKEY_BACK,
1942 ui::DomCode::BACKSPACE,
1943 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
1944 ui::DomKey::BACKSPACE,
1945 0},
1946 {ui::VKEY_DELETE,
1947 ui::DomCode::DEL,
1948 ui::EF_CONTROL_DOWN,
1949 ui::DomKey::DEL,
1950 0}},
1251 // Search+Alt+Backspace -> Alt+Backspace 1951 // Search+Alt+Backspace -> Alt+Backspace
1252 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1952 {KeyTestCase::TEST_ALL,
1253 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 1953 ui::ET_KEY_PRESSED,
1254 {ui::VKEY_BACK, ui::EF_ALT_DOWN}}, 1954 {ui::VKEY_BACK,
1955 ui::DomCode::BACKSPACE,
1956 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
1957 ui::DomKey::BACKSPACE,
1958 0},
1959 {ui::VKEY_BACK,
1960 ui::DomCode::BACKSPACE,
1961 ui::EF_ALT_DOWN,
1962 ui::DomKey::BACKSPACE,
1963 0}},
1255 // Search+Control+Alt+Backspace -> Control+Alt+Backspace 1964 // Search+Control+Alt+Backspace -> Control+Alt+Backspace
1256 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1965 {KeyTestCase::TEST_ALL,
1257 {ui::VKEY_BACK, 1966 ui::ET_KEY_PRESSED,
1258 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 1967 {ui::VKEY_BACK,
1259 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, 1968 ui::DomCode::BACKSPACE,
1969 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
1970 ui::DomKey::BACKSPACE,
1971 0},
1972 {ui::VKEY_BACK,
1973 ui::DomCode::BACKSPACE,
1974 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
1975 ui::DomKey::BACKSPACE,
1976 0}},
1260 // Alt+Up -> Prior 1977 // Alt+Up -> Prior
1261 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1978 {KeyTestCase::TEST_ALL,
1262 {ui::VKEY_UP, ui::EF_ALT_DOWN}, 1979 ui::ET_KEY_PRESSED,
1263 {ui::VKEY_PRIOR, ui::EF_NONE}}, 1980 {ui::VKEY_UP,
1981 ui::DomCode::ARROW_UP,
1982 ui::EF_ALT_DOWN,
1983 ui::DomKey::ARROW_UP,
1984 0},
1985 {ui::VKEY_PRIOR,
1986 ui::DomCode::PAGE_UP,
1987 ui::EF_NONE,
1988 ui::DomKey::PAGE_UP,
1989 0}},
1264 // Alt+Down -> Next 1990 // Alt+Down -> Next
1265 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1991 {KeyTestCase::TEST_ALL,
1266 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}, 1992 ui::ET_KEY_PRESSED,
1267 {ui::VKEY_NEXT, ui::EF_NONE}}, 1993 {ui::VKEY_DOWN,
1994 ui::DomCode::ARROW_DOWN,
1995 ui::EF_ALT_DOWN,
1996 ui::DomKey::ARROW_DOWN,
1997 0},
1998 {ui::VKEY_NEXT,
1999 ui::DomCode::PAGE_DOWN,
2000 ui::EF_NONE,
2001 ui::DomKey::PAGE_DOWN,
2002 0}},
1268 // Ctrl+Alt+Up -> Home 2003 // Ctrl+Alt+Up -> Home
1269 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2004 {KeyTestCase::TEST_ALL,
1270 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 2005 ui::ET_KEY_PRESSED,
1271 {ui::VKEY_HOME, ui::EF_NONE}}, 2006 {ui::VKEY_UP,
2007 ui::DomCode::ARROW_UP,
2008 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2009 ui::DomKey::ARROW_UP,
2010 0},
2011 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}},
1272 // Ctrl+Alt+Down -> End 2012 // Ctrl+Alt+Down -> End
1273 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2013 {KeyTestCase::TEST_ALL,
1274 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 2014 ui::ET_KEY_PRESSED,
1275 {ui::VKEY_END, ui::EF_NONE}}, 2015 {ui::VKEY_DOWN,
2016 ui::DomCode::ARROW_DOWN,
2017 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2018 ui::DomKey::ARROW_DOWN,
2019 0},
2020 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
1276 2021
1277 // Search+Alt+Up -> Alt+Up 2022 // Search+Alt+Up -> Alt+Up
1278 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2023 {KeyTestCase::TEST_ALL,
1279 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 2024 ui::ET_KEY_PRESSED,
1280 {ui::VKEY_UP, ui::EF_ALT_DOWN}}, 2025 {ui::VKEY_UP,
2026 ui::DomCode::ARROW_UP,
2027 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
2028 ui::DomKey::ARROW_UP,
2029 0},
2030 {ui::VKEY_UP,
2031 ui::DomCode::ARROW_UP,
2032 ui::EF_ALT_DOWN,
2033 ui::DomKey::ARROW_UP,
2034 0}},
1281 // Search+Alt+Down -> Alt+Down 2035 // Search+Alt+Down -> Alt+Down
1282 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2036 {KeyTestCase::TEST_ALL,
1283 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, 2037 ui::ET_KEY_PRESSED,
1284 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}}, 2038 {ui::VKEY_DOWN,
2039 ui::DomCode::ARROW_DOWN,
2040 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
2041 ui::DomKey::ARROW_DOWN,
2042 0},
2043 {ui::VKEY_DOWN,
2044 ui::DomCode::ARROW_DOWN,
2045 ui::EF_ALT_DOWN,
2046 ui::DomKey::ARROW_DOWN,
2047 0}},
1285 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up 2048 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up
1286 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2049 {KeyTestCase::TEST_ALL,
1287 {ui::VKEY_UP, 2050 ui::ET_KEY_PRESSED,
1288 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 2051 {ui::VKEY_UP,
1289 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, 2052 ui::DomCode::ARROW_UP,
2053 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2054 ui::DomKey::ARROW_UP,
2055 0},
2056 {ui::VKEY_UP,
2057 ui::DomCode::ARROW_UP,
2058 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2059 ui::DomKey::ARROW_UP,
2060 0}},
1290 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down 2061 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down
1291 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2062 {KeyTestCase::TEST_ALL,
1292 {ui::VKEY_DOWN, 2063 ui::ET_KEY_PRESSED,
1293 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, 2064 {ui::VKEY_DOWN,
1294 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, 2065 ui::DomCode::ARROW_DOWN,
2066 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2067 ui::DomKey::ARROW_DOWN,
2068 0},
2069 {ui::VKEY_DOWN,
2070 ui::DomCode::ARROW_DOWN,
2071 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
2072 ui::DomKey::ARROW_DOWN,
2073 0}},
1295 2074
1296 // Period -> Period 2075 // Period -> Period
1297 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2076 {KeyTestCase::TEST_ALL,
1298 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}, 2077 ui::ET_KEY_PRESSED,
1299 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}}, 2078 {ui::VKEY_OEM_PERIOD,
2079 ui::DomCode::PERIOD,
2080 ui::EF_NONE,
2081 ui::DomKey::CHARACTER,
2082 '.'},
2083 {ui::VKEY_OEM_PERIOD,
2084 ui::DomCode::PERIOD,
2085 ui::EF_NONE,
2086 ui::DomKey::CHARACTER,
2087 '.'}},
1300 2088
1301 // Search+Backspace -> Delete 2089 // Search+Backspace -> Delete
1302 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2090 {KeyTestCase::TEST_ALL,
1303 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN}, 2091 ui::ET_KEY_PRESSED,
1304 {ui::VKEY_DELETE, ui::EF_NONE}}, 2092 {ui::VKEY_BACK,
2093 ui::DomCode::BACKSPACE,
2094 ui::EF_COMMAND_DOWN,
2095 ui::DomKey::BACKSPACE,
2096 0},
2097 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}},
1305 // Search+Up -> Prior 2098 // Search+Up -> Prior
1306 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2099 {KeyTestCase::TEST_ALL,
1307 {ui::VKEY_UP, ui::EF_COMMAND_DOWN}, 2100 ui::ET_KEY_PRESSED,
1308 {ui::VKEY_PRIOR, ui::EF_NONE}}, 2101 {ui::VKEY_UP,
2102 ui::DomCode::ARROW_UP,
2103 ui::EF_COMMAND_DOWN,
2104 ui::DomKey::ARROW_UP,
2105 0},
2106 {ui::VKEY_PRIOR,
2107 ui::DomCode::PAGE_UP,
2108 ui::EF_NONE,
2109 ui::DomKey::PAGE_UP,
2110 0}},
1309 // Search+Down -> Next 2111 // Search+Down -> Next
1310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2112 {KeyTestCase::TEST_ALL,
1311 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN}, 2113 ui::ET_KEY_PRESSED,
1312 {ui::VKEY_NEXT, ui::EF_NONE}}, 2114 {ui::VKEY_DOWN,
2115 ui::DomCode::ARROW_DOWN,
2116 ui::EF_COMMAND_DOWN,
2117 ui::DomKey::ARROW_DOWN,
2118 0},
2119 {ui::VKEY_NEXT,
2120 ui::DomCode::PAGE_DOWN,
2121 ui::EF_NONE,
2122 ui::DomKey::PAGE_DOWN,
2123 0}},
1313 // Search+Left -> Home 2124 // Search+Left -> Home
1314 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2125 {KeyTestCase::TEST_ALL,
1315 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN}, 2126 ui::ET_KEY_PRESSED,
1316 {ui::VKEY_HOME, ui::EF_NONE}}, 2127 {ui::VKEY_LEFT,
2128 ui::DomCode::ARROW_LEFT,
2129 ui::EF_COMMAND_DOWN,
2130 ui::DomKey::ARROW_LEFT,
2131 0},
2132 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}},
1317 // Control+Search+Left -> Home 2133 // Control+Search+Left -> Home
1318 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2134 {KeyTestCase::TEST_ALL,
1319 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, 2135 ui::ET_KEY_PRESSED,
1320 {ui::VKEY_HOME, ui::EF_CONTROL_DOWN}}, 2136 {ui::VKEY_LEFT,
2137 ui::DomCode::ARROW_LEFT,
2138 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
2139 ui::DomKey::ARROW_LEFT,
2140 0},
2141 {ui::VKEY_HOME,
2142 ui::DomCode::HOME,
2143 ui::EF_CONTROL_DOWN,
2144 ui::DomKey::HOME,
2145 0}},
1321 // Search+Right -> End 2146 // Search+Right -> End
1322 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2147 {KeyTestCase::TEST_ALL,
1323 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN}, 2148 ui::ET_KEY_PRESSED,
1324 {ui::VKEY_END, ui::EF_NONE}}, 2149 {ui::VKEY_RIGHT,
2150 ui::DomCode::ARROW_RIGHT,
2151 ui::EF_COMMAND_DOWN,
2152 ui::DomKey::ARROW_RIGHT,
2153 0},
2154 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
1325 // Control+Search+Right -> End 2155 // Control+Search+Right -> End
1326 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2156 {KeyTestCase::TEST_ALL,
1327 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, 2157 ui::ET_KEY_PRESSED,
1328 {ui::VKEY_END, ui::EF_CONTROL_DOWN}}, 2158 {ui::VKEY_RIGHT,
2159 ui::DomCode::ARROW_RIGHT,
2160 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
2161 ui::DomKey::ARROW_RIGHT,
2162 0},
2163 {ui::VKEY_END,
2164 ui::DomCode::END,
2165 ui::EF_CONTROL_DOWN,
2166 ui::DomKey::END,
2167 0}},
1329 // Search+Period -> Insert 2168 // Search+Period -> Insert
1330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2169 {KeyTestCase::TEST_ALL,
1331 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN}, 2170 ui::ET_KEY_PRESSED,
1332 {ui::VKEY_INSERT, ui::EF_NONE}}, 2171 {ui::VKEY_OEM_PERIOD,
2172 ui::DomCode::PERIOD,
2173 ui::EF_COMMAND_DOWN,
2174 ui::DomKey::CHARACTER,
2175 '.'},
2176 {ui::VKEY_INSERT,
2177 ui::DomCode::INSERT,
2178 ui::EF_NONE,
2179 ui::DomKey::INSERT,
2180 0}},
1333 // Control+Search+Period -> Control+Insert 2181 // Control+Search+Period -> Control+Insert
1334 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2182 {KeyTestCase::TEST_ALL,
1335 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, 2183 ui::ET_KEY_PRESSED,
1336 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}}; 2184 {ui::VKEY_OEM_PERIOD,
2185 ui::DomCode::PERIOD,
2186 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
2187 ui::DomKey::CHARACTER,
2188 '.'},
2189 {ui::VKEY_INSERT,
2190 ui::DomCode::INSERT,
2191 ui::EF_CONTROL_DOWN,
2192 ui::DomKey::INSERT,
2193 0}}};
1337 2194
1338 for (size_t i = 0; i < arraysize(tests); ++i) { 2195 for (size_t i = 0; i < arraysize(tests); ++i) {
1339 SCOPED_TRACE(i); 2196 SCOPED_TRACE(i);
1340 CheckKeyTestCase(&rewriter, tests[i]); 2197 CheckKeyTestCase(&rewriter, tests[i]);
1341 } 2198 }
1342 } 2199 }
1343 2200
1344 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { 2201 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
1345 TestingPrefServiceSyncable prefs; 2202 TestingPrefServiceSyncable prefs;
1346 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 2203 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1347 EventRewriter rewriter(NULL); 2204 EventRewriter rewriter(NULL);
1348 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 2205 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1349 rewriter.set_pref_service_for_testing(&prefs); 2206 rewriter.set_pref_service_for_testing(&prefs);
1350 2207
1351 FunctionKeyTestCase tests[] = { 2208 KeyTestCase tests[] = {
1352 // F1 -> Back 2209 // F1 -> Back
1353 {ui::ET_KEY_PRESSED, 2210 {KeyTestCase::TEST_ALL,
1354 {ui::VKEY_F1, ui::EF_NONE}, 2211 ui::ET_KEY_PRESSED,
1355 {ui::VKEY_BROWSER_BACK, ui::EF_NONE}, 2212 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0},
1356 {ui::VKEY_BROWSER_BACK, ui::EF_FUNCTION_KEY}}, 2213 {ui::VKEY_BROWSER_BACK,
1357 {ui::ET_KEY_PRESSED, 2214 ui::DomCode::BROWSER_BACK,
1358 {ui::VKEY_F1, ui::EF_CONTROL_DOWN}, 2215 ui::EF_NONE,
1359 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}, 2216 ui::DomKey::BROWSER_BACK,
1360 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2217 0}},
1361 {ui::ET_KEY_PRESSED, 2218 {KeyTestCase::TEST_ALL,
1362 {ui::VKEY_F1, ui::EF_ALT_DOWN}, 2219 ui::ET_KEY_PRESSED,
1363 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, 2220 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0},
1364 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2221 {ui::VKEY_BROWSER_BACK,
2222 ui::DomCode::BROWSER_BACK,
2223 ui::EF_CONTROL_DOWN,
2224 ui::DomKey::BROWSER_BACK,
2225 0}},
2226 {KeyTestCase::TEST_ALL,
2227 ui::ET_KEY_PRESSED,
2228 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0},
2229 {ui::VKEY_BROWSER_BACK,
2230 ui::DomCode::BROWSER_BACK,
2231 ui::EF_ALT_DOWN,
2232 ui::DomKey::BROWSER_BACK,
2233 0}},
1365 // F2 -> Forward 2234 // F2 -> Forward
1366 {ui::ET_KEY_PRESSED, 2235 {KeyTestCase::TEST_ALL,
1367 {ui::VKEY_F2, ui::EF_NONE}, 2236 ui::ET_KEY_PRESSED,
1368 {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, 2237 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0},
1369 {ui::VKEY_BROWSER_FORWARD, ui::EF_FUNCTION_KEY}}, 2238 {ui::VKEY_BROWSER_FORWARD,
1370 {ui::ET_KEY_PRESSED, 2239 ui::DomCode::BROWSER_FORWARD,
1371 {ui::VKEY_F2, ui::EF_CONTROL_DOWN}, 2240 ui::EF_NONE,
1372 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}, 2241 ui::DomKey::BROWSER_FORWARD,
1373 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2242 0}},
1374 {ui::ET_KEY_PRESSED, 2243 {KeyTestCase::TEST_ALL,
1375 {ui::VKEY_F2, ui::EF_ALT_DOWN}, 2244 ui::ET_KEY_PRESSED,
1376 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN}, 2245 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0},
1377 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2246 {ui::VKEY_BROWSER_FORWARD,
2247 ui::DomCode::BROWSER_FORWARD,
2248 ui::EF_CONTROL_DOWN,
2249 ui::DomKey::BROWSER_FORWARD,
2250 0}},
2251 {KeyTestCase::TEST_ALL,
2252 ui::ET_KEY_PRESSED,
2253 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0},
2254 {ui::VKEY_BROWSER_FORWARD,
2255 ui::DomCode::BROWSER_FORWARD,
2256 ui::EF_ALT_DOWN,
2257 ui::DomKey::BROWSER_FORWARD,
2258 0}},
1378 // F3 -> Refresh 2259 // F3 -> Refresh
1379 {ui::ET_KEY_PRESSED, 2260 {KeyTestCase::TEST_ALL,
1380 {ui::VKEY_F3, ui::EF_NONE}, 2261 ui::ET_KEY_PRESSED,
1381 {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, 2262 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0},
1382 {ui::VKEY_BROWSER_REFRESH, ui::EF_FUNCTION_KEY}}, 2263 {ui::VKEY_BROWSER_REFRESH,
1383 {ui::ET_KEY_PRESSED, 2264 ui::DomCode::BROWSER_REFRESH,
1384 {ui::VKEY_F3, ui::EF_CONTROL_DOWN}, 2265 ui::EF_NONE,
1385 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN}, 2266 ui::DomKey::BROWSER_REFRESH,
1386 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2267 0}},
1387 {ui::ET_KEY_PRESSED, 2268 {KeyTestCase::TEST_ALL,
1388 {ui::VKEY_F3, ui::EF_ALT_DOWN}, 2269 ui::ET_KEY_PRESSED,
1389 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN}, 2270 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0},
1390 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2271 {ui::VKEY_BROWSER_REFRESH,
2272 ui::DomCode::BROWSER_REFRESH,
2273 ui::EF_CONTROL_DOWN,
2274 ui::DomKey::BROWSER_REFRESH,
2275 0}},
2276 {KeyTestCase::TEST_ALL,
2277 ui::ET_KEY_PRESSED,
2278 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0},
2279 {ui::VKEY_BROWSER_REFRESH,
2280 ui::DomCode::BROWSER_REFRESH,
2281 ui::EF_ALT_DOWN,
2282 ui::DomKey::BROWSER_REFRESH,
2283 0}},
1391 // F4 -> Launch App 2 2284 // F4 -> Launch App 2
1392 {ui::ET_KEY_PRESSED, 2285 {KeyTestCase::TEST_ALL,
1393 {ui::VKEY_F4, ui::EF_NONE}, 2286 ui::ET_KEY_PRESSED,
1394 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, 2287 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0},
1395 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_FUNCTION_KEY}}, 2288 {ui::VKEY_MEDIA_LAUNCH_APP2,
1396 {ui::ET_KEY_PRESSED, 2289 ui::DomCode::ZOOM_TOGGLE,
1397 {ui::VKEY_F4, ui::EF_CONTROL_DOWN}, 2290 ui::EF_NONE,
1398 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN}, 2291 ui::DomKey::ZOOM_TOGGLE,
1399 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2292 0}},
1400 {ui::ET_KEY_PRESSED, 2293 {KeyTestCase::TEST_ALL,
1401 {ui::VKEY_F4, ui::EF_ALT_DOWN}, 2294 ui::ET_KEY_PRESSED,
1402 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN}, 2295 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0},
1403 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2296 {ui::VKEY_MEDIA_LAUNCH_APP2,
2297 ui::DomCode::ZOOM_TOGGLE,
2298 ui::EF_CONTROL_DOWN,
2299 ui::DomKey::ZOOM_TOGGLE,
2300 0}},
2301 {KeyTestCase::TEST_ALL,
2302 ui::ET_KEY_PRESSED,
2303 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0},
2304 {ui::VKEY_MEDIA_LAUNCH_APP2,
2305 ui::DomCode::ZOOM_TOGGLE,
2306 ui::EF_ALT_DOWN,
2307 ui::DomKey::ZOOM_TOGGLE,
2308 0}},
1404 // F5 -> Launch App 1 2309 // F5 -> Launch App 1
1405 {ui::ET_KEY_PRESSED, 2310 {KeyTestCase::TEST_ALL,
1406 {ui::VKEY_F5, ui::EF_NONE}, 2311 ui::ET_KEY_PRESSED,
1407 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, 2312 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0},
1408 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_FUNCTION_KEY}}, 2313 {ui::VKEY_MEDIA_LAUNCH_APP1,
1409 {ui::ET_KEY_PRESSED, 2314 ui::DomCode::SELECT_TASK,
1410 {ui::VKEY_F5, ui::EF_CONTROL_DOWN}, 2315 ui::EF_NONE,
1411 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}, 2316 ui::DomKey::LAUNCH_MY_COMPUTER,
1412 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2317 0}},
1413 {ui::ET_KEY_PRESSED, 2318 {KeyTestCase::TEST_ALL,
1414 {ui::VKEY_F5, ui::EF_ALT_DOWN}, 2319 ui::ET_KEY_PRESSED,
1415 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN}, 2320 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0},
1416 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2321 {ui::VKEY_MEDIA_LAUNCH_APP1,
2322 ui::DomCode::SELECT_TASK,
2323 ui::EF_CONTROL_DOWN,
2324 ui::DomKey::LAUNCH_MY_COMPUTER,
2325 0}},
2326 {KeyTestCase::TEST_ALL,
2327 ui::ET_KEY_PRESSED,
2328 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0},
2329 {ui::VKEY_MEDIA_LAUNCH_APP1,
2330 ui::DomCode::SELECT_TASK,
2331 ui::EF_ALT_DOWN,
2332 ui::DomKey::LAUNCH_MY_COMPUTER,
2333 0}},
1417 // F6 -> Brightness down 2334 // F6 -> Brightness down
1418 {ui::ET_KEY_PRESSED, 2335 {KeyTestCase::TEST_ALL,
1419 {ui::VKEY_F6, ui::EF_NONE}, 2336 ui::ET_KEY_PRESSED,
1420 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, 2337 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0},
1421 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_FUNCTION_KEY}}, 2338 {ui::VKEY_BRIGHTNESS_DOWN,
1422 {ui::ET_KEY_PRESSED, 2339 ui::DomCode::BRIGHTNESS_DOWN,
1423 {ui::VKEY_F6, ui::EF_CONTROL_DOWN}, 2340 ui::EF_NONE,
1424 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN}, 2341 ui::DomKey::BRIGHTNESS_DOWN,
1425 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2342 0}},
1426 {ui::ET_KEY_PRESSED, 2343 {KeyTestCase::TEST_ALL,
1427 {ui::VKEY_F6, ui::EF_ALT_DOWN}, 2344 ui::ET_KEY_PRESSED,
1428 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}, 2345 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0},
1429 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2346 {ui::VKEY_BRIGHTNESS_DOWN,
2347 ui::DomCode::BRIGHTNESS_DOWN,
2348 ui::EF_CONTROL_DOWN,
2349 ui::DomKey::BRIGHTNESS_DOWN,
2350 0}},
2351 {KeyTestCase::TEST_ALL,
2352 ui::ET_KEY_PRESSED,
2353 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0},
2354 {ui::VKEY_BRIGHTNESS_DOWN,
2355 ui::DomCode::BRIGHTNESS_DOWN,
2356 ui::EF_ALT_DOWN,
2357 ui::DomKey::BRIGHTNESS_DOWN,
2358 0}},
1430 // F7 -> Brightness up 2359 // F7 -> Brightness up
1431 {ui::ET_KEY_PRESSED, 2360 {KeyTestCase::TEST_ALL,
1432 {ui::VKEY_F7, ui::EF_NONE}, 2361 ui::ET_KEY_PRESSED,
1433 {ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, 2362 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0},
1434 {ui::VKEY_BRIGHTNESS_UP, ui::EF_FUNCTION_KEY}}, 2363 {ui::VKEY_BRIGHTNESS_UP,
1435 {ui::ET_KEY_PRESSED, 2364 ui::DomCode::BRIGHTNESS_UP,
1436 {ui::VKEY_F7, ui::EF_CONTROL_DOWN}, 2365 ui::EF_NONE,
1437 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN}, 2366 ui::DomKey::BRIGHTNESS_UP,
1438 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2367 0}},
1439 {ui::ET_KEY_PRESSED, 2368 {KeyTestCase::TEST_ALL,
1440 {ui::VKEY_F7, ui::EF_ALT_DOWN}, 2369 ui::ET_KEY_PRESSED,
1441 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, 2370 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0},
1442 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2371 {ui::VKEY_BRIGHTNESS_UP,
2372 ui::DomCode::BRIGHTNESS_UP,
2373 ui::EF_CONTROL_DOWN,
2374 ui::DomKey::BRIGHTNESS_UP,
2375 0}},
2376 {KeyTestCase::TEST_ALL,
2377 ui::ET_KEY_PRESSED,
2378 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0},
2379 {ui::VKEY_BRIGHTNESS_UP,
2380 ui::DomCode::BRIGHTNESS_UP,
2381 ui::EF_ALT_DOWN,
2382 ui::DomKey::BRIGHTNESS_UP,
2383 0}},
1443 // F8 -> Volume Mute 2384 // F8 -> Volume Mute
1444 {ui::ET_KEY_PRESSED, 2385 {KeyTestCase::TEST_ALL,
1445 {ui::VKEY_F8, ui::EF_NONE}, 2386 ui::ET_KEY_PRESSED,
1446 {ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, 2387 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0},
1447 {ui::VKEY_VOLUME_MUTE, ui::EF_FUNCTION_KEY}}, 2388 {ui::VKEY_VOLUME_MUTE,
1448 {ui::ET_KEY_PRESSED, 2389 ui::DomCode::VOLUME_MUTE,
1449 {ui::VKEY_F8, ui::EF_CONTROL_DOWN}, 2390 ui::EF_NONE,
1450 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN}, 2391 ui::DomKey::VOLUME_MUTE,
1451 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2392 0}},
1452 {ui::ET_KEY_PRESSED, 2393 {KeyTestCase::TEST_ALL,
1453 {ui::VKEY_F8, ui::EF_ALT_DOWN}, 2394 ui::ET_KEY_PRESSED,
1454 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, 2395 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0},
1455 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2396 {ui::VKEY_VOLUME_MUTE,
2397 ui::DomCode::VOLUME_MUTE,
2398 ui::EF_CONTROL_DOWN,
2399 ui::DomKey::VOLUME_MUTE,
2400 0}},
2401 {KeyTestCase::TEST_ALL,
2402 ui::ET_KEY_PRESSED,
2403 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0},
2404 {ui::VKEY_VOLUME_MUTE,
2405 ui::DomCode::VOLUME_MUTE,
2406 ui::EF_ALT_DOWN,
2407 ui::DomKey::VOLUME_MUTE,
2408 0}},
1456 // F9 -> Volume Down 2409 // F9 -> Volume Down
1457 {ui::ET_KEY_PRESSED, 2410 {KeyTestCase::TEST_ALL,
1458 {ui::VKEY_F9, ui::EF_NONE}, 2411 ui::ET_KEY_PRESSED,
1459 {ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, 2412 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0},
1460 {ui::VKEY_VOLUME_DOWN, ui::EF_FUNCTION_KEY}}, 2413 {ui::VKEY_VOLUME_DOWN,
1461 {ui::ET_KEY_PRESSED, 2414 ui::DomCode::VOLUME_DOWN,
1462 {ui::VKEY_F9, ui::EF_CONTROL_DOWN}, 2415 ui::EF_NONE,
1463 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN}, 2416 ui::DomKey::VOLUME_DOWN,
1464 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2417 0}},
1465 {ui::ET_KEY_PRESSED, 2418 {KeyTestCase::TEST_ALL,
1466 {ui::VKEY_F9, ui::EF_ALT_DOWN}, 2419 ui::ET_KEY_PRESSED,
1467 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, 2420 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0},
1468 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2421 {ui::VKEY_VOLUME_DOWN,
2422 ui::DomCode::VOLUME_DOWN,
2423 ui::EF_CONTROL_DOWN,
2424 ui::DomKey::VOLUME_DOWN,
2425 0}},
2426 {KeyTestCase::TEST_ALL,
2427 ui::ET_KEY_PRESSED,
2428 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0},
2429 {ui::VKEY_VOLUME_DOWN,
2430 ui::DomCode::VOLUME_DOWN,
2431 ui::EF_ALT_DOWN,
2432 ui::DomKey::VOLUME_DOWN,
2433 0}},
1469 // F10 -> Volume Up 2434 // F10 -> Volume Up
1470 {ui::ET_KEY_PRESSED, 2435 {KeyTestCase::TEST_ALL,
1471 {ui::VKEY_F10, ui::EF_NONE}, 2436 ui::ET_KEY_PRESSED,
1472 {ui::VKEY_VOLUME_UP, ui::EF_NONE}, 2437 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0},
1473 {ui::VKEY_VOLUME_UP, ui::EF_FUNCTION_KEY}}, 2438 {ui::VKEY_VOLUME_UP,
1474 {ui::ET_KEY_PRESSED, 2439 ui::DomCode::VOLUME_UP,
1475 {ui::VKEY_F10, ui::EF_CONTROL_DOWN}, 2440 ui::EF_NONE,
1476 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN}, 2441 ui::DomKey::VOLUME_UP,
1477 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2442 0}},
1478 {ui::ET_KEY_PRESSED, 2443 {KeyTestCase::TEST_ALL,
1479 {ui::VKEY_F10, ui::EF_ALT_DOWN}, 2444 ui::ET_KEY_PRESSED,
1480 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, 2445 {ui::VKEY_F10,
1481 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2446 ui::DomCode::F10,
2447 ui::EF_CONTROL_DOWN,
2448 ui::DomKey::F10,
2449 0},
2450 {ui::VKEY_VOLUME_UP,
2451 ui::DomCode::VOLUME_UP,
2452 ui::EF_CONTROL_DOWN,
2453 ui::DomKey::VOLUME_UP,
2454 0}},
2455 {KeyTestCase::TEST_ALL,
2456 ui::ET_KEY_PRESSED,
2457 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0},
2458 {ui::VKEY_VOLUME_UP,
2459 ui::DomCode::VOLUME_UP,
2460 ui::EF_ALT_DOWN,
2461 ui::DomKey::VOLUME_UP,
2462 0}},
1482 // F11 -> F11 2463 // F11 -> F11
1483 {ui::ET_KEY_PRESSED, 2464 {KeyTestCase::TEST_ALL,
1484 {ui::VKEY_F11, ui::EF_NONE}, 2465 ui::ET_KEY_PRESSED,
1485 {ui::VKEY_F11, ui::EF_NONE}, 2466 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0},
1486 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, 2467 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
1487 {ui::ET_KEY_PRESSED, 2468 {KeyTestCase::TEST_ALL,
1488 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, 2469 ui::ET_KEY_PRESSED,
1489 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, 2470 {ui::VKEY_F11,
1490 {ui::VKEY_F11, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2471 ui::DomCode::F11,
1491 {ui::ET_KEY_PRESSED, 2472 ui::EF_CONTROL_DOWN,
1492 {ui::VKEY_F11, ui::EF_ALT_DOWN}, 2473 ui::DomKey::F11,
1493 {ui::VKEY_F11, ui::EF_ALT_DOWN}, 2474 0},
1494 {ui::VKEY_F11, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2475 {ui::VKEY_F11,
2476 ui::DomCode::F11,
2477 ui::EF_CONTROL_DOWN,
2478 ui::DomKey::F11,
2479 0}},
2480 {KeyTestCase::TEST_ALL,
2481 ui::ET_KEY_PRESSED,
2482 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0},
2483 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}},
1495 // F12 -> F12 2484 // F12 -> F12
1496 {ui::ET_KEY_PRESSED, 2485 {KeyTestCase::TEST_ALL,
1497 {ui::VKEY_F12, ui::EF_NONE}, 2486 ui::ET_KEY_PRESSED,
1498 {ui::VKEY_F12, ui::EF_NONE}, 2487 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0},
1499 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, 2488 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}},
1500 {ui::ET_KEY_PRESSED, 2489 {KeyTestCase::TEST_ALL,
1501 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, 2490 ui::ET_KEY_PRESSED,
1502 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, 2491 {ui::VKEY_F12,
1503 {ui::VKEY_F12, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, 2492 ui::DomCode::F12,
1504 {ui::ET_KEY_PRESSED, 2493 ui::EF_CONTROL_DOWN,
1505 {ui::VKEY_F12, ui::EF_ALT_DOWN}, 2494 ui::DomKey::F12,
1506 {ui::VKEY_F12, ui::EF_ALT_DOWN}, 2495 0},
1507 {ui::VKEY_F12, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, 2496 {ui::VKEY_F12,
2497 ui::DomCode::F12,
2498 ui::EF_CONTROL_DOWN,
2499 ui::DomKey::F12,
2500 0}},
2501 {KeyTestCase::TEST_ALL,
2502 ui::ET_KEY_PRESSED,
2503 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0},
2504 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}},
1508 2505
1509 // The number row should not be rewritten without Search key. 2506 // The number row should not be rewritten without Search key.
1510 {ui::ET_KEY_PRESSED, 2507 {KeyTestCase::TEST_ALL,
1511 {ui::VKEY_1, ui::EF_NONE}, 2508 ui::ET_KEY_PRESSED,
1512 {ui::VKEY_1, ui::EF_NONE}, 2509 {ui::VKEY_1,
1513 {ui::VKEY_1, ui::EF_NONE}}, 2510 ui::DomCode::DIGIT1,
1514 {ui::ET_KEY_PRESSED, 2511 ui::EF_NONE,
1515 {ui::VKEY_2, ui::EF_NONE}, 2512 ui::DomKey::CHARACTER,
1516 {ui::VKEY_2, ui::EF_NONE}, 2513 '1'},
1517 {ui::VKEY_2, ui::EF_NONE}}, 2514 {ui::VKEY_1,
1518 {ui::ET_KEY_PRESSED, 2515 ui::DomCode::DIGIT1,
1519 {ui::VKEY_3, ui::EF_NONE}, 2516 ui::EF_NONE,
1520 {ui::VKEY_3, ui::EF_NONE}, 2517 ui::DomKey::CHARACTER,
1521 {ui::VKEY_3, ui::EF_NONE}}, 2518 '1'}},
1522 {ui::ET_KEY_PRESSED, 2519 {KeyTestCase::TEST_ALL,
1523 {ui::VKEY_4, ui::EF_NONE}, 2520 ui::ET_KEY_PRESSED,
1524 {ui::VKEY_4, ui::EF_NONE}, 2521 {ui::VKEY_2,
1525 {ui::VKEY_4, ui::EF_NONE}}, 2522 ui::DomCode::DIGIT2,
1526 {ui::ET_KEY_PRESSED, 2523 ui::EF_NONE,
1527 {ui::VKEY_5, ui::EF_NONE}, 2524 ui::DomKey::CHARACTER,
1528 {ui::VKEY_5, ui::EF_NONE}, 2525 '2'},
1529 {ui::VKEY_5, ui::EF_NONE}}, 2526 {ui::VKEY_2,
1530 {ui::ET_KEY_PRESSED, 2527 ui::DomCode::DIGIT2,
1531 {ui::VKEY_6, ui::EF_NONE}, 2528 ui::EF_NONE,
1532 {ui::VKEY_6, ui::EF_NONE}, 2529 ui::DomKey::CHARACTER,
1533 {ui::VKEY_6, ui::EF_NONE}}, 2530 '2'}},
1534 {ui::ET_KEY_PRESSED, 2531 {KeyTestCase::TEST_ALL,
1535 {ui::VKEY_7, ui::EF_NONE}, 2532 ui::ET_KEY_PRESSED,
1536 {ui::VKEY_7, ui::EF_NONE}, 2533 {ui::VKEY_3,
1537 {ui::VKEY_7, ui::EF_NONE}}, 2534 ui::DomCode::DIGIT3,
1538 {ui::ET_KEY_PRESSED, 2535 ui::EF_NONE,
1539 {ui::VKEY_8, ui::EF_NONE}, 2536 ui::DomKey::CHARACTER,
1540 {ui::VKEY_8, ui::EF_NONE}, 2537 '3'},
1541 {ui::VKEY_8, ui::EF_NONE}}, 2538 {ui::VKEY_3,
1542 {ui::ET_KEY_PRESSED, 2539 ui::DomCode::DIGIT3,
1543 {ui::VKEY_9, ui::EF_NONE}, 2540 ui::EF_NONE,
1544 {ui::VKEY_9, ui::EF_NONE}, 2541 ui::DomKey::CHARACTER,
1545 {ui::VKEY_9, ui::EF_NONE}}, 2542 '3'}},
1546 {ui::ET_KEY_PRESSED, 2543 {KeyTestCase::TEST_ALL,
1547 {ui::VKEY_0, ui::EF_NONE}, 2544 ui::ET_KEY_PRESSED,
1548 {ui::VKEY_0, ui::EF_NONE}, 2545 {ui::VKEY_4,
1549 {ui::VKEY_0, ui::EF_NONE}}, 2546 ui::DomCode::DIGIT4,
1550 {ui::ET_KEY_PRESSED, 2547 ui::EF_NONE,
1551 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, 2548 ui::DomKey::CHARACTER,
1552 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, 2549 '4'},
1553 {ui::VKEY_OEM_MINUS, ui::EF_NONE}}, 2550 {ui::VKEY_4,
1554 {ui::ET_KEY_PRESSED, 2551 ui::DomCode::DIGIT4,
1555 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, 2552 ui::EF_NONE,
1556 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, 2553 ui::DomKey::CHARACTER,
1557 {ui::VKEY_OEM_PLUS, ui::EF_NONE}}, 2554 '4'}},
2555 {KeyTestCase::TEST_ALL,
2556 ui::ET_KEY_PRESSED,
2557 {ui::VKEY_5,
2558 ui::DomCode::DIGIT5,
2559 ui::EF_NONE,
2560 ui::DomKey::CHARACTER,
2561 '5'},
2562 {ui::VKEY_5,
2563 ui::DomCode::DIGIT5,
2564 ui::EF_NONE,
2565 ui::DomKey::CHARACTER,
2566 '5'}},
2567 {KeyTestCase::TEST_ALL,
2568 ui::ET_KEY_PRESSED,
2569 {ui::VKEY_6,
2570 ui::DomCode::DIGIT6,
2571 ui::EF_NONE,
2572 ui::DomKey::CHARACTER,
2573 '6'},
2574 {ui::VKEY_6,
2575 ui::DomCode::DIGIT6,
2576 ui::EF_NONE,
2577 ui::DomKey::CHARACTER,
2578 '6'}},
2579 {KeyTestCase::TEST_ALL,
2580 ui::ET_KEY_PRESSED,
2581 {ui::VKEY_7,
2582 ui::DomCode::DIGIT7,
2583 ui::EF_NONE,
2584 ui::DomKey::CHARACTER,
2585 '7'},
2586 {ui::VKEY_7,
2587 ui::DomCode::DIGIT7,
2588 ui::EF_NONE,
2589 ui::DomKey::CHARACTER,
2590 '7'}},
2591 {KeyTestCase::TEST_ALL,
2592 ui::ET_KEY_PRESSED,
2593 {ui::VKEY_8,
2594 ui::DomCode::DIGIT8,
2595 ui::EF_NONE,
2596 ui::DomKey::CHARACTER,
2597 '8'},
2598 {ui::VKEY_8,
2599 ui::DomCode::DIGIT8,
2600 ui::EF_NONE,
2601 ui::DomKey::CHARACTER,
2602 '8'}},
2603 {KeyTestCase::TEST_ALL,
2604 ui::ET_KEY_PRESSED,
2605 {ui::VKEY_9,
2606 ui::DomCode::DIGIT9,
2607 ui::EF_NONE,
2608 ui::DomKey::CHARACTER,
2609 '9'},
2610 {ui::VKEY_9,
2611 ui::DomCode::DIGIT9,
2612 ui::EF_NONE,
2613 ui::DomKey::CHARACTER,
2614 '9'}},
2615 {KeyTestCase::TEST_ALL,
2616 ui::ET_KEY_PRESSED,
2617 {ui::VKEY_0,
2618 ui::DomCode::DIGIT0,
2619 ui::EF_NONE,
2620 ui::DomKey::CHARACTER,
2621 '0'},
2622 {ui::VKEY_0,
2623 ui::DomCode::DIGIT0,
2624 ui::EF_NONE,
2625 ui::DomKey::CHARACTER,
2626 '0'}},
2627 {KeyTestCase::TEST_ALL,
2628 ui::ET_KEY_PRESSED,
2629 {ui::VKEY_OEM_MINUS,
2630 ui::DomCode::MINUS,
2631 ui::EF_NONE,
2632 ui::DomKey::CHARACTER,
2633 '-'},
2634 {ui::VKEY_OEM_MINUS,
2635 ui::DomCode::MINUS,
2636 ui::EF_NONE,
2637 ui::DomKey::CHARACTER,
2638 '-'}},
2639 {KeyTestCase::TEST_ALL,
2640 ui::ET_KEY_PRESSED,
2641 {ui::VKEY_OEM_PLUS,
2642 ui::DomCode::EQUAL,
2643 ui::EF_NONE,
2644 ui::DomKey::CHARACTER,
2645 '='},
2646 {ui::VKEY_OEM_PLUS,
2647 ui::DomCode::EQUAL,
2648 ui::EF_NONE,
2649 ui::DomKey::CHARACTER,
2650 '='}},
1558 2651
1559 // The number row should be rewritten as the F<number> row with Search 2652 // The number row should be rewritten as the F<number> row with Search
1560 // key. 2653 // key.
1561 {ui::ET_KEY_PRESSED, 2654 {KeyTestCase::TEST_ALL,
1562 {ui::VKEY_1, ui::EF_COMMAND_DOWN}, 2655 ui::ET_KEY_PRESSED,
1563 {ui::VKEY_F1, ui::EF_NONE}, 2656 {ui::VKEY_1,
1564 {ui::VKEY_F1, ui::EF_NONE}}, 2657 ui::DomCode::DIGIT1,
1565 {ui::ET_KEY_PRESSED, 2658 ui::EF_COMMAND_DOWN,
1566 {ui::VKEY_2, ui::EF_COMMAND_DOWN}, 2659 ui::DomKey::CHARACTER,
1567 {ui::VKEY_F2, ui::EF_NONE}, 2660 '1'},
1568 {ui::VKEY_F2, ui::EF_NONE}}, 2661 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}},
1569 {ui::ET_KEY_PRESSED, 2662 {KeyTestCase::TEST_ALL,
1570 {ui::VKEY_3, ui::EF_COMMAND_DOWN}, 2663 ui::ET_KEY_PRESSED,
1571 {ui::VKEY_F3, ui::EF_NONE}, 2664 {ui::VKEY_2,
1572 {ui::VKEY_F3, ui::EF_NONE}}, 2665 ui::DomCode::DIGIT2,
1573 {ui::ET_KEY_PRESSED, 2666 ui::EF_COMMAND_DOWN,
1574 {ui::VKEY_4, ui::EF_COMMAND_DOWN}, 2667 ui::DomKey::CHARACTER,
1575 {ui::VKEY_F4, ui::EF_NONE}, 2668 '2'},
1576 {ui::VKEY_F4, ui::EF_NONE}}, 2669 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}},
1577 {ui::ET_KEY_PRESSED, 2670 {KeyTestCase::TEST_ALL,
1578 {ui::VKEY_5, ui::EF_COMMAND_DOWN}, 2671 ui::ET_KEY_PRESSED,
1579 {ui::VKEY_F5, ui::EF_NONE}, 2672 {ui::VKEY_3,
1580 {ui::VKEY_F5, ui::EF_NONE}}, 2673 ui::DomCode::DIGIT3,
1581 {ui::ET_KEY_PRESSED, 2674 ui::EF_COMMAND_DOWN,
1582 {ui::VKEY_6, ui::EF_COMMAND_DOWN}, 2675 ui::DomKey::CHARACTER,
1583 {ui::VKEY_F6, ui::EF_NONE}, 2676 '3'},
1584 {ui::VKEY_F6, ui::EF_NONE}}, 2677 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}},
1585 {ui::ET_KEY_PRESSED, 2678 {KeyTestCase::TEST_ALL,
1586 {ui::VKEY_7, ui::EF_COMMAND_DOWN}, 2679 ui::ET_KEY_PRESSED,
1587 {ui::VKEY_F7, ui::EF_NONE}, 2680 {ui::VKEY_4,
1588 {ui::VKEY_F7, ui::EF_NONE}}, 2681 ui::DomCode::DIGIT4,
1589 {ui::ET_KEY_PRESSED, 2682 ui::EF_COMMAND_DOWN,
1590 {ui::VKEY_8, ui::EF_COMMAND_DOWN}, 2683 ui::DomKey::CHARACTER,
1591 {ui::VKEY_F8, ui::EF_NONE}, 2684 '4'},
1592 {ui::VKEY_F8, ui::EF_NONE}}, 2685 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}},
1593 {ui::ET_KEY_PRESSED, 2686 {KeyTestCase::TEST_ALL,
1594 {ui::VKEY_9, ui::EF_COMMAND_DOWN}, 2687 ui::ET_KEY_PRESSED,
1595 {ui::VKEY_F9, ui::EF_NONE}, 2688 {ui::VKEY_5,
1596 {ui::VKEY_F9, ui::EF_NONE}}, 2689 ui::DomCode::DIGIT5,
1597 {ui::ET_KEY_PRESSED, 2690 ui::EF_COMMAND_DOWN,
1598 {ui::VKEY_0, ui::EF_COMMAND_DOWN}, 2691 ui::DomKey::CHARACTER,
1599 {ui::VKEY_F10, ui::EF_NONE}, 2692 '5'},
1600 {ui::VKEY_F10, ui::EF_NONE}}, 2693 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}},
1601 {ui::ET_KEY_PRESSED, 2694 {KeyTestCase::TEST_ALL,
1602 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN}, 2695 ui::ET_KEY_PRESSED,
1603 {ui::VKEY_F11, ui::EF_NONE}, 2696 {ui::VKEY_6,
1604 {ui::VKEY_F11, ui::EF_NONE}}, 2697 ui::DomCode::DIGIT6,
1605 {ui::ET_KEY_PRESSED, 2698 ui::EF_COMMAND_DOWN,
1606 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN}, 2699 ui::DomKey::CHARACTER,
1607 {ui::VKEY_F12, ui::EF_NONE}, 2700 '6'},
1608 {ui::VKEY_F12, ui::EF_NONE}}, 2701 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}},
2702 {KeyTestCase::TEST_ALL,
2703 ui::ET_KEY_PRESSED,
2704 {ui::VKEY_7,
2705 ui::DomCode::DIGIT7,
2706 ui::EF_COMMAND_DOWN,
2707 ui::DomKey::CHARACTER,
2708 '7'},
2709 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}},
2710 {KeyTestCase::TEST_ALL,
2711 ui::ET_KEY_PRESSED,
2712 {ui::VKEY_8,
2713 ui::DomCode::DIGIT8,
2714 ui::EF_COMMAND_DOWN,
2715 ui::DomKey::CHARACTER,
2716 '8'},
2717 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}},
2718 {KeyTestCase::TEST_ALL,
2719 ui::ET_KEY_PRESSED,
2720 {ui::VKEY_9,
2721 ui::DomCode::DIGIT9,
2722 ui::EF_COMMAND_DOWN,
2723 ui::DomKey::CHARACTER,
2724 '9'},
2725 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}},
2726 {KeyTestCase::TEST_ALL,
2727 ui::ET_KEY_PRESSED,
2728 {ui::VKEY_0,
2729 ui::DomCode::DIGIT0,
2730 ui::EF_COMMAND_DOWN,
2731 ui::DomKey::CHARACTER,
2732 '0'},
2733 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}},
2734 {KeyTestCase::TEST_ALL,
2735 ui::ET_KEY_PRESSED,
2736 {ui::VKEY_OEM_MINUS,
2737 ui::DomCode::MINUS,
2738 ui::EF_COMMAND_DOWN,
2739 ui::DomKey::CHARACTER,
2740 '-'},
2741 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
2742 {KeyTestCase::TEST_ALL,
2743 ui::ET_KEY_PRESSED,
2744 {ui::VKEY_OEM_PLUS,
2745 ui::DomCode::EQUAL,
2746 ui::EF_COMMAND_DOWN,
2747 ui::DomKey::CHARACTER,
2748 '='},
2749 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}},
1609 2750
1610 // The function keys should not be rewritten with Search key pressed. 2751 // The function keys should not be rewritten with Search key pressed.
1611 {ui::ET_KEY_PRESSED, 2752 {KeyTestCase::TEST_ALL,
1612 {ui::VKEY_F1, ui::EF_COMMAND_DOWN}, 2753 ui::ET_KEY_PRESSED,
1613 {ui::VKEY_F1, ui::EF_NONE}, 2754 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0},
1614 {ui::VKEY_F1, ui::EF_FUNCTION_KEY}}, 2755 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}},
1615 {ui::ET_KEY_PRESSED, 2756 {KeyTestCase::TEST_ALL,
1616 {ui::VKEY_F2, ui::EF_COMMAND_DOWN}, 2757 ui::ET_KEY_PRESSED,
1617 {ui::VKEY_F2, ui::EF_NONE}, 2758 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0},
1618 {ui::VKEY_F2, ui::EF_FUNCTION_KEY}}, 2759 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}},
1619 {ui::ET_KEY_PRESSED, 2760 {KeyTestCase::TEST_ALL,
1620 {ui::VKEY_F3, ui::EF_COMMAND_DOWN}, 2761 ui::ET_KEY_PRESSED,
1621 {ui::VKEY_F3, ui::EF_NONE}, 2762 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0},
1622 {ui::VKEY_F3, ui::EF_FUNCTION_KEY}}, 2763 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}},
1623 {ui::ET_KEY_PRESSED, 2764 {KeyTestCase::TEST_ALL,
1624 {ui::VKEY_F4, ui::EF_COMMAND_DOWN}, 2765 ui::ET_KEY_PRESSED,
1625 {ui::VKEY_F4, ui::EF_NONE}, 2766 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0},
1626 {ui::VKEY_F4, ui::EF_FUNCTION_KEY}}, 2767 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}},
1627 {ui::ET_KEY_PRESSED, 2768 {KeyTestCase::TEST_ALL,
1628 {ui::VKEY_F5, ui::EF_COMMAND_DOWN}, 2769 ui::ET_KEY_PRESSED,
1629 {ui::VKEY_F5, ui::EF_NONE}, 2770 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0},
1630 {ui::VKEY_F5, ui::EF_FUNCTION_KEY}}, 2771 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}},
1631 {ui::ET_KEY_PRESSED, 2772 {KeyTestCase::TEST_ALL,
1632 {ui::VKEY_F6, ui::EF_COMMAND_DOWN}, 2773 ui::ET_KEY_PRESSED,
1633 {ui::VKEY_F6, ui::EF_NONE}, 2774 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0},
1634 {ui::VKEY_F6, ui::EF_FUNCTION_KEY}}, 2775 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}},
1635 {ui::ET_KEY_PRESSED, 2776 {KeyTestCase::TEST_ALL,
1636 {ui::VKEY_F7, ui::EF_COMMAND_DOWN}, 2777 ui::ET_KEY_PRESSED,
1637 {ui::VKEY_F7, ui::EF_NONE}, 2778 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0},
1638 {ui::VKEY_F7, ui::EF_FUNCTION_KEY}}, 2779 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}},
1639 {ui::ET_KEY_PRESSED, 2780 {KeyTestCase::TEST_ALL,
1640 {ui::VKEY_F8, ui::EF_COMMAND_DOWN}, 2781 ui::ET_KEY_PRESSED,
1641 {ui::VKEY_F8, ui::EF_NONE}, 2782 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0},
1642 {ui::VKEY_F8, ui::EF_FUNCTION_KEY}}, 2783 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}},
1643 {ui::ET_KEY_PRESSED, 2784 {KeyTestCase::TEST_ALL,
1644 {ui::VKEY_F9, ui::EF_COMMAND_DOWN}, 2785 ui::ET_KEY_PRESSED,
1645 {ui::VKEY_F9, ui::EF_NONE}, 2786 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0},
1646 {ui::VKEY_F9, ui::EF_FUNCTION_KEY}}, 2787 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}},
1647 {ui::ET_KEY_PRESSED, 2788 {KeyTestCase::TEST_ALL,
1648 {ui::VKEY_F10, ui::EF_COMMAND_DOWN}, 2789 ui::ET_KEY_PRESSED,
1649 {ui::VKEY_F10, ui::EF_NONE}, 2790 {ui::VKEY_F10,
1650 {ui::VKEY_F10, ui::EF_FUNCTION_KEY}}, 2791 ui::DomCode::F10,
1651 {ui::ET_KEY_PRESSED, 2792 ui::EF_COMMAND_DOWN,
1652 {ui::VKEY_F11, ui::EF_COMMAND_DOWN}, 2793 ui::DomKey::F10,
1653 {ui::VKEY_F11, ui::EF_NONE}, 2794 0},
1654 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, 2795 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}},
1655 {ui::ET_KEY_PRESSED, 2796 {KeyTestCase::TEST_ALL,
1656 {ui::VKEY_F12, ui::EF_COMMAND_DOWN}, 2797 ui::ET_KEY_PRESSED,
1657 {ui::VKEY_F12, ui::EF_NONE}, 2798 {ui::VKEY_F11,
1658 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, 2799 ui::DomCode::F11,
1659 }; 2800 ui::EF_COMMAND_DOWN,
2801 ui::DomKey::F11,
2802 0},
2803 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
2804 {KeyTestCase::TEST_ALL,
2805 ui::ET_KEY_PRESSED,
2806 {ui::VKEY_F12,
2807 ui::DomCode::F12,
2808 ui::EF_COMMAND_DOWN,
2809 ui::DomKey::F12,
2810 0},
2811 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}};
1660 2812
1661 for (size_t i = 0; i < arraysize(tests); ++i) { 2813 for (size_t i = 0; i < arraysize(tests); ++i) {
1662 SCOPED_TRACE(i); 2814 SCOPED_TRACE(i);
1663 CheckFunctionKeyTestCase(&rewriter, tests[i]); 2815 CheckKeyTestCase(&rewriter, tests[i]);
1664 } 2816 }
1665 } 2817 }
1666 2818
1667 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { 2819 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
1668 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); 2820 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess());
1669 2821
1670 // Remap Search to Control. 2822 // Remap Search to Control.
1671 TestingPrefServiceSyncable prefs; 2823 TestingPrefServiceSyncable prefs;
1672 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 2824 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1673 IntegerPrefMember search; 2825 IntegerPrefMember search;
1674 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 2826 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
1675 search.SetValue(chromeos::input_method::kControlKey); 2827 search.SetValue(chromeos::input_method::kControlKey);
1676 2828
1677 EventRewriter rewriter(NULL); 2829 EventRewriter rewriter(NULL);
1678 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 2830 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1679 rewriter.set_pref_service_for_testing(&prefs); 2831 rewriter.set_pref_service_for_testing(&prefs);
1680 2832
1681 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 2833 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
1682 chromeos::switches::kHasChromeOSKeyboard, ""); 2834 chromeos::switches::kHasChromeOSKeyboard, "");
1683 2835
1684 KeyTestCase tests[] = { 2836 KeyTestCase tests[] = {
1685 // Alt+Search+Down -> End 2837 // Alt+Search+Down -> End
1686 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2838 {KeyTestCase::TEST_ALL,
1687 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 2839 ui::ET_KEY_PRESSED,
1688 {ui::VKEY_END, ui::EF_NONE}}, 2840 {ui::VKEY_DOWN,
2841 ui::DomCode::ARROW_DOWN,
2842 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
2843 ui::DomKey::ARROW_DOWN,
2844 0},
2845 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
1689 2846
1690 // Shift+Alt+Search+Down -> Shift+End 2847 // Shift+Alt+Search+Down -> Shift+End
1691 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 2848 {KeyTestCase::TEST_ALL,
2849 ui::ET_KEY_PRESSED,
1692 {ui::VKEY_DOWN, 2850 {ui::VKEY_DOWN,
1693 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 2851 ui::DomCode::ARROW_DOWN,
1694 {ui::VKEY_END, ui::EF_SHIFT_DOWN}}, 2852 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
2853 ui::DomKey::ARROW_DOWN,
2854 0},
2855 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}},
1695 }; 2856 };
1696 2857
1697 for (size_t i = 0; i < arraysize(tests); ++i) { 2858 for (size_t i = 0; i < arraysize(tests); ++i) {
1698 SCOPED_TRACE(i); 2859 SCOPED_TRACE(i);
1699 CheckKeyTestCase(&rewriter, tests[i]); 2860 CheckKeyTestCase(&rewriter, tests[i]);
1700 } 2861 }
1701 2862
1702 *base::CommandLine::ForCurrentProcess() = original_cl; 2863 *base::CommandLine::ForCurrentProcess() = original_cl;
1703 } 2864 }
1704 2865
1705 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { 2866 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
1706 // Remap Control to Alt. 2867 // Remap Control to Alt.
1707 TestingPrefServiceSyncable prefs; 2868 TestingPrefServiceSyncable prefs;
1708 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 2869 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1709 IntegerPrefMember control; 2870 IntegerPrefMember control;
1710 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 2871 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1711 control.SetValue(chromeos::input_method::kAltKey); 2872 control.SetValue(chromeos::input_method::kAltKey);
1712 2873
1713 EventRewriter rewriter(NULL); 2874 EventRewriter rewriter(NULL);
1714 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 2875 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1715 rewriter.set_pref_service_for_testing(&prefs); 2876 rewriter.set_pref_service_for_testing(&prefs);
1716 2877
1717 // Send left control press. 2878 // Send left control press.
1718 { 2879 {
1719 ui::KeyEvent keyevent( 2880 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
1720 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::EF_FINAL); 2881 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL,
2882 ui::DomKey::CONTROL, 0, ui::EventTimeForNow());
1721 scoped_ptr<ui::Event> new_event; 2883 scoped_ptr<ui::Event> new_event;
1722 // Control should NOT be remapped to Alt if EF_FINAL is set. 2884 // Control should NOT be remapped to Alt if EF_FINAL is set.
1723 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, 2885 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE,
1724 rewriter.RewriteEvent(keyevent, &new_event)); 2886 rewriter.RewriteEvent(keyevent, &new_event));
1725 EXPECT_FALSE(new_event); 2887 EXPECT_FALSE(new_event);
1726 } 2888 }
1727 #if defined(USE_X11) 2889 #if defined(USE_X11)
1728 // Send left control press, using XI2 native events. 2890 // Send left control press, using XI2 native events.
1729 { 2891 {
1730 ui::ScopedXI2Event xev; 2892 ui::ScopedXI2Event xev;
(...skipping 19 matching lines...) Expand all
1750 IntegerPrefMember control; 2912 IntegerPrefMember control;
1751 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 2913 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1752 control.SetValue(chromeos::input_method::kAltKey); 2914 control.SetValue(chromeos::input_method::kAltKey);
1753 2915
1754 EventRewriter rewriter(NULL); 2916 EventRewriter rewriter(NULL);
1755 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 2917 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1756 rewriter.set_pref_service_for_testing(&prefs); 2918 rewriter.set_pref_service_for_testing(&prefs);
1757 2919
1758 const int kTouchId = 2; 2920 const int kTouchId = 2;
1759 gfx::Point location(0, 0); 2921 gfx::Point location(0, 0);
1760 ui::TouchEvent press( 2922 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId,
1761 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta()); 2923 base::TimeDelta());
1762 press.set_flags(ui::EF_CONTROL_DOWN); 2924 press.set_flags(ui::EF_CONTROL_DOWN);
1763 #if defined(USE_X11) 2925 #if defined(USE_X11)
1764 ui::UpdateX11EventForFlags(&press); 2926 ui::UpdateX11EventForFlags(&press);
1765 #endif 2927 #endif
1766 2928
1767 scoped_ptr<ui::Event> new_event; 2929 scoped_ptr<ui::Event> new_event;
1768 rewriter.RewriteEvent(press, &new_event); 2930 rewriter.RewriteEvent(press, &new_event);
1769 EXPECT_TRUE(new_event); 2931 EXPECT_TRUE(new_event);
1770 // Control should be remapped to Alt. 2932 // Control should be remapped to Alt.
1771 EXPECT_EQ(ui::EF_ALT_DOWN, 2933 EXPECT_EQ(ui::EF_ALT_DOWN,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 2990
1829 bool RewriteFunctionKeys(const ui::Event& event, 2991 bool RewriteFunctionKeys(const ui::Event& event,
1830 scoped_ptr<ui::Event>* rewritten_event) { 2992 scoped_ptr<ui::Event>* rewritten_event) {
1831 return rewriter_->RewriteEvent(event, rewritten_event); 2993 return rewriter_->RewriteEvent(event, rewritten_event);
1832 } 2994 }
1833 2995
1834 ui::EventDispatchDetails Send(ui::Event* event) { 2996 ui::EventDispatchDetails Send(ui::Event* event) {
1835 return source_.Send(event); 2997 return source_.Send(event);
1836 } 2998 }
1837 2999
1838 void SendKeyEvent(ui::EventType type, ui::KeyboardCode key_code) { 3000 void SendKeyEvent(ui::EventType type,
1839 ui::KeyEvent press(type, key_code, ui::EF_NONE); 3001 ui::KeyboardCode key_code,
3002 ui::DomCode code,
3003 ui::DomKey key,
3004 base::char16 character) {
3005 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character,
3006 ui::EventTimeForNow());
1840 ui::EventDispatchDetails details = Send(&press); 3007 ui::EventDispatchDetails details = Send(&press);
1841 CHECK(!details.dispatcher_destroyed); 3008 CHECK(!details.dispatcher_destroyed);
1842 } 3009 }
1843 3010
1844 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) { 3011 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code,
1845 SendKeyEvent(ui::ET_KEY_PRESSED, key_code); 3012 ui::DomCode code,
1846 SendKeyEvent(ui::ET_KEY_RELEASED, key_code); 3013 ui::DomKey key,
3014 base::char16 character) {
3015 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character);
3016 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character);
1847 } 3017 }
1848 3018
1849 protected: 3019 protected:
1850 TestingPrefServiceSyncable* prefs() { return &prefs_; } 3020 TestingPrefServiceSyncable* prefs() { return &prefs_; }
1851 3021
1852 void PopEvents(ScopedVector<ui::Event>* events) { 3022 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); }
1853 buffer_.PopEvents(events);
1854 }
1855 3023
1856 void SetUp() override { 3024 void SetUp() override {
1857 AshTestBase::SetUp(); 3025 AshTestBase::SetUp();
1858 sticky_keys_controller_ = 3026 sticky_keys_controller_ =
1859 ash::Shell::GetInstance()->sticky_keys_controller(); 3027 ash::Shell::GetInstance()->sticky_keys_controller();
1860 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); 3028 rewriter_.reset(new EventRewriter(sticky_keys_controller_));
1861 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); 3029 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
1862 rewriter_->set_pref_service_for_testing(&prefs_); 3030 rewriter_->set_pref_service_for_testing(&prefs_);
1863 #if defined(USE_X11) 3031 #if defined(USE_X11)
1864 ui::SetUpTouchPadForTest(kTouchPadDeviceId); 3032 ui::SetUpTouchPadForTest(kTouchPadDeviceId);
(...skipping 23 matching lines...) Expand all
1888 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); 3056 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
1889 }; 3057 };
1890 3058
1891 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { 3059 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
1892 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); 3060 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1));
1893 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); 3061 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get());
1894 window_state->Activate(); 3062 window_state->Activate();
1895 ScopedVector<ui::Event> events; 3063 ScopedVector<ui::Event> events;
1896 3064
1897 // Create a simulated keypress of F1 targetted at the window. 3065 // Create a simulated keypress of F1 targetted at the window.
1898 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::EF_NONE); 3066 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1,
3067 ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow());
1899 3068
1900 // Simulate an apps v2 window that has requested top row keys as function 3069 // Simulate an apps v2 window that has requested top row keys as function
1901 // keys. The event should not be rewritten. 3070 // keys. The event should not be rewritten.
1902 window_state->set_top_row_keys_are_function_keys(true); 3071 window_state->set_top_row_keys_are_function_keys(true);
1903 ui::EventDispatchDetails details = Send(&press_f1); 3072 ui::EventDispatchDetails details = Send(&press_f1);
1904 ASSERT_FALSE(details.dispatcher_destroyed); 3073 ASSERT_FALSE(details.dispatcher_destroyed);
1905 PopEvents(&events); 3074 PopEvents(&events);
1906 EXPECT_EQ(1u, events.size()); 3075 EXPECT_EQ(1u, events.size());
1907 EXPECT_EQ( 3076 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
1908 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), 3077 ui::DomCode::F1, ui::EF_NONE,
1909 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); 3078 ui::DomKey::F1, 0),
3079 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
1910 3080
1911 // The event should also not be rewritten if the send-function-keys pref is 3081 // The event should also not be rewritten if the send-function-keys pref is
1912 // additionally set, for both apps v2 and regular windows. 3082 // additionally set, for both apps v2 and regular windows.
1913 BooleanPrefMember send_function_keys_pref; 3083 BooleanPrefMember send_function_keys_pref;
1914 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); 3084 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs());
1915 send_function_keys_pref.SetValue(true); 3085 send_function_keys_pref.SetValue(true);
1916 window_state->set_top_row_keys_are_function_keys(false); 3086 window_state->set_top_row_keys_are_function_keys(false);
1917 details = Send(&press_f1); 3087 details = Send(&press_f1);
1918 ASSERT_FALSE(details.dispatcher_destroyed); 3088 ASSERT_FALSE(details.dispatcher_destroyed);
1919 PopEvents(&events); 3089 PopEvents(&events);
1920 EXPECT_EQ(1u, events.size()); 3090 EXPECT_EQ(1u, events.size());
1921 EXPECT_EQ( 3091 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
1922 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), 3092 ui::DomCode::F1, ui::EF_NONE,
1923 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); 3093 ui::DomKey::F1, 0),
3094 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
1924 3095
1925 // If the pref isn't set when an event is sent to a regular window, F1 is 3096 // If the pref isn't set when an event is sent to a regular window, F1 is
1926 // rewritten to the back key. 3097 // rewritten to the back key.
1927 send_function_keys_pref.SetValue(false); 3098 send_function_keys_pref.SetValue(false);
1928 details = Send(&press_f1); 3099 details = Send(&press_f1);
1929 ASSERT_FALSE(details.dispatcher_destroyed); 3100 ASSERT_FALSE(details.dispatcher_destroyed);
1930 PopEvents(&events); 3101 PopEvents(&events);
1931 EXPECT_EQ(1u, events.size()); 3102 EXPECT_EQ(1u, events.size());
1932 EXPECT_EQ(GetExpectedResultAsString( 3103 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK,
1933 ui::VKEY_BROWSER_BACK, ui::EF_NONE, ui::ET_KEY_PRESSED), 3104 ui::DomCode::BROWSER_BACK, ui::EF_NONE,
3105 ui::DomKey::BROWSER_BACK, 0),
1934 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); 3106 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
1935 } 3107 }
1936 3108
1937 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { 3109 TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
3110 #if defined(USE_X11)
1938 std::vector<int> device_list; 3111 std::vector<int> device_list;
1939 device_list.push_back(10); 3112 device_list.push_back(10);
1940 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 3113 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
1941 3114
1942 // Remap Control to Search. 3115 // Remap Control to Search.
1943 TestingPrefServiceSyncable prefs; 3116 TestingPrefServiceSyncable prefs;
1944 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 3117 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1945 IntegerPrefMember control; 3118 IntegerPrefMember control;
1946 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 3119 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1947 control.SetValue(chromeos::input_method::kSearchKey); 3120 control.SetValue(chromeos::input_method::kSearchKey);
1948 3121
1949 EventRewriter rewriter(NULL); 3122 EventRewriter rewriter(NULL);
1950 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); 3123 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
1951 rewriter.set_pref_service_for_testing(&prefs); 3124 rewriter.set_pref_service_for_testing(&prefs);
1952 3125
1953 // Check that Control + Left Button is converted (via Search + Left Button) 3126 // Check that Control + Left Button is converted (via Search + Left Button)
1954 // to Right Button. 3127 // to Right Button.
1955 ui::ScopedXI2Event xev; 3128 ui::ScopedXI2Event xev;
1956 xev.InitGenericButtonEvent(10, 3129 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(),
1957 ui::ET_MOUSE_PRESSED,
1958 gfx::Point(),
1959 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); 3130 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN);
1960 ui::MouseEvent press(xev); 3131 ui::MouseEvent press(xev);
1961 // Sanity check. 3132 // Sanity check.
1962 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); 3133 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
1963 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); 3134 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags());
1964 scoped_ptr<ui::Event> new_event; 3135 scoped_ptr<ui::Event> new_event;
1965 const ui::MouseEvent* result = 3136 const ui::MouseEvent* result =
1966 RewriteMouseButtonEvent(&rewriter, press, &new_event); 3137 RewriteMouseButtonEvent(&rewriter, press, &new_event);
1967 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); 3138 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
1968 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); 3139 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
1969 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); 3140 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags());
1970 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags()); 3141 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags());
1971 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); 3142 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
3143 #endif
1972 } 3144 }
1973 3145
1974 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { 3146 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
1975 // TODO(kpschoedel): pending changes for crbug.com/360377 3147 // TODO(kpschoedel): pending changes for crbug.com/360377
1976 // to |chromeos::EventRewriter::RewriteLocatedEvent() 3148 // to |chromeos::EventRewriter::RewriteLocatedEvent()
3149 #if defined(USE_X11)
1977 std::vector<int> device_list; 3150 std::vector<int> device_list;
1978 device_list.push_back(10); 3151 device_list.push_back(10);
1979 device_list.push_back(11); 3152 device_list.push_back(11);
1980 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 3153 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
3154 #endif
1981 TestingPrefServiceSyncable prefs; 3155 TestingPrefServiceSyncable prefs;
1982 EventRewriter rewriter(NULL); 3156 EventRewriter rewriter(NULL);
1983 rewriter.set_pref_service_for_testing(&prefs); 3157 rewriter.set_pref_service_for_testing(&prefs);
1984 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN; 3158 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN;
1985 3159
1986 // Test Search + Left click. 3160 // Test Search + Left click.
1987 { 3161 {
1988 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), 3162 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
1989 ui::EventTimeForNow(), kLeftAndSearchFlag, 3163 ui::EventTimeForNow(), kLeftAndSearchFlag,
1990 ui::EF_LEFT_MOUSE_BUTTON); 3164 ui::EF_LEFT_MOUSE_BUTTON);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
2066 scoped_ptr<ui::Event> new_event; 3240 scoped_ptr<ui::Event> new_event;
2067 const ui::MouseEvent* result = 3241 const ui::MouseEvent* result =
2068 RewriteMouseButtonEvent(&rewriter, release, &new_event); 3242 RewriteMouseButtonEvent(&rewriter, release, &new_event);
2069 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags()); 3243 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags());
2070 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); 3244 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
2071 } 3245 }
2072 #if defined(USE_X11) 3246 #if defined(USE_X11)
2073 // No SEARCH in first click, using XI2 native events. 3247 // No SEARCH in first click, using XI2 native events.
2074 { 3248 {
2075 ui::ScopedXI2Event xev; 3249 ui::ScopedXI2Event xev;
2076 xev.InitGenericButtonEvent( 3250 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(),
2077 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON); 3251 ui::EF_LEFT_MOUSE_BUTTON);
2078 ui::MouseEvent press(xev); 3252 ui::MouseEvent press(xev);
2079 scoped_ptr<ui::Event> new_event; 3253 scoped_ptr<ui::Event> new_event;
2080 const ui::MouseEvent* result = 3254 const ui::MouseEvent* result =
2081 RewriteMouseButtonEvent(&rewriter, press, &new_event); 3255 RewriteMouseButtonEvent(&rewriter, press, &new_event);
2082 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); 3256 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
2083 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); 3257 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
2084 } 3258 }
2085 { 3259 {
2086 ui::ScopedXI2Event xev; 3260 ui::ScopedXI2Event xev;
2087 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), 3261 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2171 EXPECT_FALSE(kLeftAndSearchFlag & result->flags()); 3345 EXPECT_FALSE(kLeftAndSearchFlag & result->flags());
2172 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); 3346 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
2173 } 3347 }
2174 #endif 3348 #endif
2175 } 3349 }
2176 3350
2177 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { 3351 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
2178 // Test the actual key event dispatch implementation. 3352 // Test the actual key event dispatch implementation.
2179 ScopedVector<ui::Event> events; 3353 ScopedVector<ui::Event> events;
2180 3354
2181 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3355 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3356 ui::DomKey::CONTROL, 0);
2182 PopEvents(&events); 3357 PopEvents(&events);
2183 EXPECT_EQ(1u, events.size()); 3358 EXPECT_EQ(1u, events.size());
2184 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); 3359 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
2185 EXPECT_EQ(ui::VKEY_CONTROL, 3360 EXPECT_EQ(ui::VKEY_CONTROL,
2186 static_cast<ui::KeyEvent*>(events[0])->key_code()); 3361 static_cast<ui::KeyEvent*>(events[0])->key_code());
2187 3362
2188 // Test key press event is correctly modified and modifier release 3363 // Test key press event is correctly modified and modifier release
2189 // event is sent. 3364 // event is sent.
2190 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE); 3365 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C,
3366 ui::EF_NONE, ui::DomKey::CHARACTER, 'c',
3367 ui::EventTimeForNow());
2191 ui::EventDispatchDetails details = Send(&press); 3368 ui::EventDispatchDetails details = Send(&press);
2192 PopEvents(&events); 3369 PopEvents(&events);
2193 EXPECT_EQ(2u, events.size()); 3370 EXPECT_EQ(2u, events.size());
2194 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); 3371 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
2195 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); 3372 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
2196 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); 3373 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
2197 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); 3374 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
2198 EXPECT_EQ(ui::VKEY_CONTROL, 3375 EXPECT_EQ(ui::VKEY_CONTROL,
2199 static_cast<ui::KeyEvent*>(events[1])->key_code()); 3376 static_cast<ui::KeyEvent*>(events[1])->key_code());
2200 3377
2201 // Test key release event is not modified. 3378 // Test key release event is not modified.
2202 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE); 3379 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C,
3380 ui::EF_NONE, ui::DomKey::CHARACTER, 'c',
3381 ui::EventTimeForNow());
2203 details = Send(&release); 3382 details = Send(&release);
2204 ASSERT_FALSE(details.dispatcher_destroyed); 3383 ASSERT_FALSE(details.dispatcher_destroyed);
2205 PopEvents(&events); 3384 PopEvents(&events);
2206 EXPECT_EQ(1u, events.size()); 3385 EXPECT_EQ(1u, events.size());
2207 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); 3386 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type());
2208 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); 3387 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
2209 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); 3388 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
2210 } 3389 }
2211 3390
2212 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { 3391 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
2213 ScopedVector<ui::Event> events; 3392 ScopedVector<ui::Event> events;
2214 3393
2215 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3394 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3395 ui::DomKey::CONTROL, 0);
2216 PopEvents(&events); 3396 PopEvents(&events);
2217 3397
2218 // Test mouse press event is correctly modified. 3398 // Test mouse press event is correctly modified.
2219 gfx::Point location(0, 0); 3399 gfx::Point location(0, 0);
2220 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, 3400 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location,
2221 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 3401 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
2222 ui::EF_LEFT_MOUSE_BUTTON); 3402 ui::EF_LEFT_MOUSE_BUTTON);
2223 ui::EventDispatchDetails details = Send(&press); 3403 ui::EventDispatchDetails details = Send(&press);
2224 ASSERT_FALSE(details.dispatcher_destroyed); 3404 ASSERT_FALSE(details.dispatcher_destroyed);
2225 PopEvents(&events); 3405 PopEvents(&events);
(...skipping 15 matching lines...) Expand all
2241 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); 3421 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
2242 EXPECT_EQ(ui::VKEY_CONTROL, 3422 EXPECT_EQ(ui::VKEY_CONTROL,
2243 static_cast<ui::KeyEvent*>(events[1])->key_code()); 3423 static_cast<ui::KeyEvent*>(events[1])->key_code());
2244 } 3424 }
2245 3425
2246 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { 3426 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
2247 ScopedVector<ui::Event> events; 3427 ScopedVector<ui::Event> events;
2248 3428
2249 // Test positive mouse wheel event is correctly modified and modifier release 3429 // Test positive mouse wheel event is correctly modified and modifier release
2250 // event is sent. 3430 // event is sent.
2251 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3431 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3432 ui::DomKey::CONTROL, 0);
2252 PopEvents(&events); 3433 PopEvents(&events);
2253 gfx::Point location(0, 0); 3434 gfx::Point location(0, 0);
2254 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, 3435 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location,
2255 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 3436 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
2256 ui::EF_LEFT_MOUSE_BUTTON); 3437 ui::EF_LEFT_MOUSE_BUTTON);
2257 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); 3438 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta);
2258 ui::EventDispatchDetails details = Send(&positive); 3439 ui::EventDispatchDetails details = Send(&positive);
2259 ASSERT_FALSE(details.dispatcher_destroyed); 3440 ASSERT_FALSE(details.dispatcher_destroyed);
2260 PopEvents(&events); 3441 PopEvents(&events);
2261 EXPECT_EQ(2u, events.size()); 3442 EXPECT_EQ(2u, events.size());
2262 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); 3443 EXPECT_TRUE(events[0]->IsMouseWheelEvent());
2263 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); 3444 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
2264 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); 3445 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
2265 EXPECT_EQ(ui::VKEY_CONTROL, 3446 EXPECT_EQ(ui::VKEY_CONTROL,
2266 static_cast<ui::KeyEvent*>(events[1])->key_code()); 3447 static_cast<ui::KeyEvent*>(events[1])->key_code());
2267 3448
2268 // Test negative mouse wheel event is correctly modified and modifier release 3449 // Test negative mouse wheel event is correctly modified and modifier release
2269 // event is sent. 3450 // event is sent.
2270 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3451 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3452 ui::DomKey::CONTROL, 0);
2271 PopEvents(&events); 3453 PopEvents(&events);
2272 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); 3454 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
2273 details = Send(&negative); 3455 details = Send(&negative);
2274 ASSERT_FALSE(details.dispatcher_destroyed); 3456 ASSERT_FALSE(details.dispatcher_destroyed);
2275 PopEvents(&events); 3457 PopEvents(&events);
2276 EXPECT_EQ(2u, events.size()); 3458 EXPECT_EQ(2u, events.size());
2277 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); 3459 EXPECT_TRUE(events[0]->IsMouseWheelEvent());
2278 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); 3460 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
2279 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); 3461 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
2280 EXPECT_EQ(ui::VKEY_CONTROL, 3462 EXPECT_EQ(ui::VKEY_CONTROL,
(...skipping 14 matching lines...) Expand all
2295 3477
2296 ash::StickyKeysOverlay* overlay_; 3478 ash::StickyKeysOverlay* overlay_;
2297 }; 3479 };
2298 3480
2299 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { 3481 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) {
2300 EXPECT_FALSE(overlay_->is_visible()); 3482 EXPECT_FALSE(overlay_->is_visible());
2301 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3483 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2302 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3484 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2303 3485
2304 // Pressing modifier key should show overlay. 3486 // Pressing modifier key should show overlay.
2305 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3487 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3488 ui::DomKey::CONTROL, 0);
2306 EXPECT_TRUE(overlay_->is_visible()); 3489 EXPECT_TRUE(overlay_->is_visible());
2307 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3490 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2308 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3491 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2309 3492
2310 // Pressing a normal key should hide overlay. 3493 // Pressing a normal key should hide overlay.
2311 SendActivateStickyKeyPattern(ui::VKEY_T); 3494 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T,
3495 ui::DomKey::CHARACTER, 't');
2312 EXPECT_FALSE(overlay_->is_visible()); 3496 EXPECT_FALSE(overlay_->is_visible());
2313 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3497 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2314 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3498 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2315 } 3499 }
2316 3500
2317 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { 3501 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
2318 EXPECT_FALSE(overlay_->is_visible()); 3502 EXPECT_FALSE(overlay_->is_visible());
2319 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3503 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2320 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3504 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2321 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3505 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2322 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3506 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2323 3507
2324 // Pressing two modifiers should show overlay. 3508 // Pressing two modifiers should show overlay.
2325 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); 3509 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
2326 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3510 ui::DomKey::SHIFT, 0);
3511 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3512 ui::DomKey::CONTROL, 0);
2327 EXPECT_TRUE(overlay_->is_visible()); 3513 EXPECT_TRUE(overlay_->is_visible());
2328 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3514 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2329 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3515 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2330 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3516 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2331 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3517 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2332 3518
2333 // Pressing a normal key should hide overlay. 3519 // Pressing a normal key should hide overlay.
2334 SendActivateStickyKeyPattern(ui::VKEY_N); 3520 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N,
3521 ui::DomKey::CHARACTER, 'n');
2335 EXPECT_FALSE(overlay_->is_visible()); 3522 EXPECT_FALSE(overlay_->is_visible());
2336 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3523 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2337 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3524 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2338 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3525 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2339 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3526 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2340 } 3527 }
2341 3528
2342 TEST_F(StickyKeysOverlayTest, LockedModifier) { 3529 TEST_F(StickyKeysOverlayTest, LockedModifier) {
2343 EXPECT_FALSE(overlay_->is_visible()); 3530 EXPECT_FALSE(overlay_->is_visible());
2344 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3531 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2345 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3532 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2346 3533
2347 // Pressing a modifier key twice should lock modifier and show overlay. 3534 // Pressing a modifier key twice should lock modifier and show overlay.
2348 SendActivateStickyKeyPattern(ui::VKEY_LMENU); 3535 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
2349 SendActivateStickyKeyPattern(ui::VKEY_LMENU); 3536 ui::DomKey::ALT, 0);
3537 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
3538 ui::DomKey::ALT, 0);
2350 EXPECT_TRUE(overlay_->is_visible()); 3539 EXPECT_TRUE(overlay_->is_visible());
2351 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3540 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2352 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3541 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2353 3542
2354 // Pressing a normal key should not hide overlay. 3543 // Pressing a normal key should not hide overlay.
2355 SendActivateStickyKeyPattern(ui::VKEY_D); 3544 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D,
3545 ui::DomKey::CHARACTER, 'd');
2356 EXPECT_TRUE(overlay_->is_visible()); 3546 EXPECT_TRUE(overlay_->is_visible());
2357 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3547 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2358 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3548 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2359 } 3549 }
2360 3550
2361 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { 3551 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
2362 EXPECT_FALSE(overlay_->is_visible()); 3552 EXPECT_FALSE(overlay_->is_visible());
2363 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3553 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2364 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3554 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2365 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3555 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2366 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3556 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2367 3557
2368 // Pressing a modifier key twice should lock modifier and show overlay. 3558 // Pressing a modifier key twice should lock modifier and show overlay.
2369 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3559 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
2370 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3560 ui::DomKey::CONTROL, 0);
3561 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
3562 ui::DomKey::CONTROL, 0);
2371 EXPECT_TRUE(overlay_->is_visible()); 3563 EXPECT_TRUE(overlay_->is_visible());
2372 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3564 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2373 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3565 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2374 3566
2375 // Pressing another modifier key should still show overlay. 3567 // Pressing another modifier key should still show overlay.
2376 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); 3568 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
3569 ui::DomKey::SHIFT, 0);
2377 EXPECT_TRUE(overlay_->is_visible()); 3570 EXPECT_TRUE(overlay_->is_visible());
2378 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3571 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2379 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3572 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2380 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3573 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2381 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3574 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2382 3575
2383 // Pressing a normal key should not hide overlay but disable normal modifier. 3576 // Pressing a normal key should not hide overlay but disable normal modifier.
2384 SendActivateStickyKeyPattern(ui::VKEY_D); 3577 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D,
3578 ui::DomKey::CHARACTER, 'd');
2385 EXPECT_TRUE(overlay_->is_visible()); 3579 EXPECT_TRUE(overlay_->is_visible());
2386 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3580 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2387 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3581 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2388 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3582 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2389 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3583 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2390 } 3584 }
2391 3585
2392 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { 3586 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
2393 EXPECT_FALSE(overlay_->is_visible()); 3587 EXPECT_FALSE(overlay_->is_visible());
2394 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3588 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2395 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3589 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2396 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3590 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2397 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3591 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2398 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3592 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2399 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3593 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2400 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3594 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2401 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); 3595 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
2402 3596
2403 // Enable modifiers. 3597 // Enable modifiers.
2404 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3598 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
2405 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); 3599 ui::DomKey::CONTROL, 0);
2406 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); 3600 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
2407 SendActivateStickyKeyPattern(ui::VKEY_LMENU); 3601 ui::DomKey::SHIFT, 0);
2408 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); 3602 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
2409 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); 3603 ui::DomKey::SHIFT, 0);
3604 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
3605 ui::DomKey::ALT, 0);
3606 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
3607 ui::DomKey::OS, 0);
3608 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
3609 ui::DomKey::OS, 0);
2410 3610
2411 EXPECT_TRUE(overlay_->is_visible()); 3611 EXPECT_TRUE(overlay_->is_visible());
2412 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3612 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2413 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3613 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2414 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3614 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2415 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3615 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2416 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, 3616 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
2417 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3617 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2418 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, 3618 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
2419 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); 3619 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
2420 3620
2421 // Disable modifiers and overlay should be hidden. 3621 // Disable modifiers and overlay should be hidden.
2422 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3622 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
2423 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); 3623 ui::DomKey::CONTROL, 0);
2424 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); 3624 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
2425 SendActivateStickyKeyPattern(ui::VKEY_LMENU); 3625 ui::DomKey::CONTROL, 0);
2426 SendActivateStickyKeyPattern(ui::VKEY_LMENU); 3626 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
2427 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); 3627 ui::DomKey::SHIFT, 0);
3628 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
3629 ui::DomKey::ALT, 0);
3630 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
3631 ui::DomKey::ALT, 0);
3632 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
3633 ui::DomKey::OS, 0);
2428 3634
2429 EXPECT_FALSE(overlay_->is_visible()); 3635 EXPECT_FALSE(overlay_->is_visible());
2430 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3636 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2431 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); 3637 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
2432 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3638 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2433 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); 3639 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
2434 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3640 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2435 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); 3641 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
2436 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, 3642 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
2437 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); 3643 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
(...skipping 27 matching lines...) Expand all
2465 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); 3671 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
2466 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); 3672 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
2467 3673
2468 // Turn off AltGr and Mod3. 3674 // Turn off AltGr and Mod3.
2469 sticky_keys_controller_->SetModifiersEnabled(false, false); 3675 sticky_keys_controller_->SetModifiersEnabled(false, false);
2470 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); 3676 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
2471 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); 3677 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
2472 } 3678 }
2473 3679
2474 } // namespace chromeos 3680 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/events/event_rewriter.cc ('k') | content/browser/renderer_host/input/web_input_event_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698