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

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

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