OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/events/event_rewriter.h" | 5 #include "chrome/browser/chromeos/events/event_rewriter.h" |
6 | 6 |
7 #include <X11/keysym.h> | 7 #include <X11/keysym.h> |
8 #include <X11/XF86keysym.h> | 8 #include <X11/XF86keysym.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #undef Bool | 10 #undef Bool |
11 #undef None | 11 #undef None |
12 #undef RootWindow | 12 #undef RootWindow |
13 | 13 |
| 14 #include <vector> |
| 15 |
14 #include "ash/test/ash_test_base.h" | 16 #include "ash/test/ash_test_base.h" |
15 #include "ash/wm/window_state.h" | 17 #include "ash/wm/window_state.h" |
16 #include "base/basictypes.h" | 18 #include "base/basictypes.h" |
17 #include "base/command_line.h" | 19 #include "base/command_line.h" |
18 #include "base/prefs/pref_member.h" | 20 #include "base/prefs/pref_member.h" |
19 #include "base/strings/stringprintf.h" | 21 #include "base/strings/stringprintf.h" |
20 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" | 22 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" |
21 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" | 23 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" |
22 #include "chrome/browser/chromeos/login/mock_user_manager.h" | 24 #include "chrome/browser/chromeos/login/mock_user_manager.h" |
23 #include "chrome/browser/chromeos/login/user_manager.h" | 25 #include "chrome/browser/chromeos/login/user_manager.h" |
24 #include "chrome/browser/chromeos/preferences.h" | 26 #include "chrome/browser/chromeos/preferences.h" |
25 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
26 #include "chrome/test/base/testing_pref_service_syncable.h" | 28 #include "chrome/test/base/testing_pref_service_syncable.h" |
27 #include "chromeos/chromeos_switches.h" | 29 #include "chromeos/chromeos_switches.h" |
28 #include "chromeos/ime/fake_ime_keyboard.h" | 30 #include "chromeos/ime/fake_ime_keyboard.h" |
29 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
30 #include "ui/aura/window.h" | 32 #include "ui/aura/window.h" |
31 #include "ui/events/event.h" | 33 #include "ui/events/event.h" |
| 34 #include "ui/events/event_rewriter.h" |
32 #include "ui/events/test/events_test_utils_x11.h" | 35 #include "ui/events/test/events_test_utils_x11.h" |
33 #include "ui/events/x/touch_factory_x11.h" | 36 #include "ui/events/x/touch_factory_x11.h" |
34 #include "ui/gfx/x/x11_types.h" | 37 #include "ui/gfx/x/x11_types.h" |
35 | 38 |
36 namespace { | 39 namespace { |
37 | 40 |
| 41 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
| 42 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
| 43 keyevent.key_code(), |
| 44 keyevent.flags(), |
| 45 keyevent.type()); |
| 46 } |
| 47 |
38 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 48 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
39 ui::KeyboardCode ui_keycode, | 49 ui::KeyboardCode ui_keycode, |
40 int ui_flags, | 50 int ui_flags, |
41 ui::EventType ui_type, | 51 ui::EventType ui_type) { |
42 KeyCode x_keycode, | 52 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags, false); |
43 unsigned int x_state) { | 53 scoped_ptr<ui::Event> new_event; |
44 ui::ScopedXI2Event xev; | 54 rewriter->RewriteEvent(event, &new_event); |
45 xev.InitKeyEvent(ui_type, ui_keycode, ui_flags); | 55 if (new_event) |
46 XEvent* xevent = xev; | 56 return GetKeyEventAsString( |
47 xevent->xkey.keycode = x_keycode; | 57 static_cast<const ui::KeyEvent&>(*new_event.get())); |
48 xevent->xkey.state = x_state; | 58 return GetKeyEventAsString(event); |
49 rewriter->RewriteForTesting(xevent); | |
50 ui::KeyEvent keyevent(xevent, false /* is_char */); | |
51 return base::StringPrintf( | |
52 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", | |
53 keyevent.key_code(), keyevent.flags(), keyevent.type(), | |
54 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); | |
55 } | 59 } |
56 | 60 |
57 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, | 61 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, |
58 int ui_flags, | 62 int ui_flags, |
59 ui::EventType ui_type, | 63 ui::EventType ui_type) { |
60 KeyCode x_keycode, | 64 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
61 unsigned int x_state, | 65 ui_keycode, |
62 int x_type) { | 66 ui_flags, |
63 return base::StringPrintf( | 67 ui_type); |
64 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", | 68 } |
65 ui_keycode, ui_flags, ui_type, x_keycode, x_state, x_type); | 69 |
| 70 std::string GetRewrittenEventNumbered(size_t i, |
| 71 chromeos::EventRewriter* rewriter, |
| 72 ui::KeyboardCode ui_keycode, |
| 73 int ui_flags, |
| 74 ui::EventType ui_type) { |
| 75 return base::StringPrintf("(%zu) ", i) + |
| 76 GetRewrittenEventAsString(rewriter, ui_keycode, ui_flags, ui_type); |
| 77 } |
| 78 |
| 79 std::string GetExpectedResultNumbered(size_t i, |
| 80 ui::KeyboardCode ui_keycode, |
| 81 int ui_flags, |
| 82 ui::EventType ui_type) { |
| 83 return base::StringPrintf("(%zu) ", i) + |
| 84 GetExpectedResultAsString(ui_keycode, ui_flags, ui_type); |
66 } | 85 } |
67 | 86 |
68 } // namespace | 87 } // namespace |
69 | 88 |
70 namespace chromeos { | 89 namespace chromeos { |
71 | 90 |
72 class EventRewriterTest : public ash::test::AshTestBase { | 91 class EventRewriterTest : public ash::test::AshTestBase { |
73 public: | 92 public: |
74 EventRewriterTest() | 93 EventRewriterTest() |
75 : display_(gfx::GetXDisplay()), | 94 : display_(gfx::GetXDisplay()), |
76 keycode_a_(XKeysymToKeycode(display_, XK_a)), | |
77 keycode_alt_l_(XKeysymToKeycode(display_, XK_Alt_L)), | |
78 keycode_alt_r_(XKeysymToKeycode(display_, XK_Alt_R)), | |
79 keycode_b_(XKeysymToKeycode(display_, XK_B)), | |
80 keycode_caps_lock_(XKeysymToKeycode(display_, XK_Caps_Lock)), | |
81 keycode_control_l_(XKeysymToKeycode(display_, XK_Control_L)), | |
82 keycode_control_r_(XKeysymToKeycode(display_, XK_Control_R)), | |
83 keycode_meta_l_(XKeysymToKeycode(display_, XK_Meta_L)), | |
84 keycode_meta_r_(XKeysymToKeycode(display_, XK_Meta_R)), | |
85 keycode_num_pad_0_(XKeysymToKeycode(display_, XK_KP_0)), | |
86 keycode_num_pad_1_(XKeysymToKeycode(display_, XK_KP_1)), | |
87 keycode_num_pad_2_(XKeysymToKeycode(display_, XK_KP_2)), | |
88 keycode_num_pad_3_(XKeysymToKeycode(display_, XK_KP_3)), | |
89 keycode_num_pad_4_(XKeysymToKeycode(display_, XK_KP_4)), | |
90 keycode_num_pad_5_(XKeysymToKeycode(display_, XK_KP_5)), | |
91 keycode_num_pad_6_(XKeysymToKeycode(display_, XK_KP_6)), | |
92 keycode_num_pad_7_(XKeysymToKeycode(display_, XK_KP_7)), | |
93 keycode_num_pad_8_(XKeysymToKeycode(display_, XK_KP_8)), | |
94 keycode_num_pad_9_(XKeysymToKeycode(display_, XK_KP_9)), | |
95 keycode_num_pad_begin_(XKeysymToKeycode(display_, XK_KP_Begin)), | |
96 keycode_num_pad_decimal_(XKeysymToKeycode(display_, XK_KP_Decimal)), | |
97 keycode_num_pad_delete_(XKeysymToKeycode(display_, XK_KP_Delete)), | |
98 keycode_num_pad_down_(XKeysymToKeycode(display_, XK_KP_Down)), | |
99 keycode_num_pad_end_(XKeysymToKeycode(display_, XK_KP_End)), | |
100 keycode_num_pad_home_(XKeysymToKeycode(display_, XK_KP_Home)), | |
101 keycode_num_pad_insert_(XKeysymToKeycode(display_, XK_KP_Insert)), | |
102 keycode_num_pad_left_(XKeysymToKeycode(display_, XK_KP_Left)), | |
103 keycode_num_pad_next_(XKeysymToKeycode(display_, XK_KP_Next)), | |
104 keycode_num_pad_prior_(XKeysymToKeycode(display_, XK_KP_Prior)), | |
105 keycode_num_pad_right_(XKeysymToKeycode(display_, XK_KP_Right)), | |
106 keycode_num_pad_up_(XKeysymToKeycode(display_, XK_KP_Up)), | |
107 keycode_super_l_(XKeysymToKeycode(display_, XK_Super_L)), | |
108 keycode_super_r_(XKeysymToKeycode(display_, XK_Super_R)), | |
109 keycode_void_symbol_(XKeysymToKeycode(display_, XK_VoidSymbol)), | |
110 keycode_delete_(XKeysymToKeycode(display_, XK_Delete)), | |
111 keycode_backspace_(XKeysymToKeycode(display_, XK_BackSpace)), | |
112 keycode_up_(XKeysymToKeycode(display_, XK_Up)), | |
113 keycode_down_(XKeysymToKeycode(display_, XK_Down)), | |
114 keycode_left_(XKeysymToKeycode(display_, XK_Left)), | |
115 keycode_right_(XKeysymToKeycode(display_, XK_Right)), | |
116 keycode_prior_(XKeysymToKeycode(display_, XK_Prior)), | |
117 keycode_next_(XKeysymToKeycode(display_, XK_Next)), | |
118 keycode_home_(XKeysymToKeycode(display_, XK_Home)), | |
119 keycode_end_(XKeysymToKeycode(display_, XK_End)), | |
120 keycode_escape_(XKeysymToKeycode(display_, XK_Escape)), | |
121 keycode_launch6_(XKeysymToKeycode(display_, XF86XK_Launch6)), | |
122 keycode_launch7_(XKeysymToKeycode(display_, XF86XK_Launch7)), | |
123 keycode_f1_(XKeysymToKeycode(display_, XK_F1)), | |
124 keycode_f2_(XKeysymToKeycode(display_, XK_F2)), | |
125 keycode_f3_(XKeysymToKeycode(display_, XK_F3)), | |
126 keycode_f4_(XKeysymToKeycode(display_, XK_F4)), | |
127 keycode_f5_(XKeysymToKeycode(display_, XK_F5)), | |
128 keycode_f6_(XKeysymToKeycode(display_, XK_F6)), | |
129 keycode_f7_(XKeysymToKeycode(display_, XK_F7)), | |
130 keycode_f8_(XKeysymToKeycode(display_, XK_F8)), | |
131 keycode_f9_(XKeysymToKeycode(display_, XK_F9)), | |
132 keycode_f10_(XKeysymToKeycode(display_, XK_F10)), | |
133 keycode_f11_(XKeysymToKeycode(display_, XK_F11)), | |
134 keycode_f12_(XKeysymToKeycode(display_, XK_F12)), | |
135 keycode_browser_back_(XKeysymToKeycode(display_, XF86XK_Back)), | |
136 keycode_browser_forward_(XKeysymToKeycode(display_, XF86XK_Forward)), | |
137 keycode_browser_refresh_(XKeysymToKeycode(display_, XF86XK_Reload)), | |
138 keycode_media_launch_app1_(XKeysymToKeycode(display_, XF86XK_LaunchA)), | |
139 keycode_media_launch_app2_(XKeysymToKeycode(display_, XF86XK_LaunchB)), | |
140 keycode_brightness_down_(XKeysymToKeycode( | |
141 display_, XF86XK_MonBrightnessDown)), | |
142 keycode_brightness_up_(XKeysymToKeycode( | |
143 display_, XF86XK_MonBrightnessUp)), | |
144 keycode_volume_mute_(XKeysymToKeycode(display_, XF86XK_AudioMute)), | |
145 keycode_volume_down_(XKeysymToKeycode( | |
146 display_, XF86XK_AudioLowerVolume)), | |
147 keycode_volume_up_(XKeysymToKeycode( | |
148 display_, XF86XK_AudioRaiseVolume)), | |
149 keycode_power_(XKeysymToKeycode(display_, XF86XK_PowerOff)), | |
150 keycode_1_(XKeysymToKeycode(display_, XK_1)), | |
151 keycode_2_(XKeysymToKeycode(display_, XK_2)), | |
152 keycode_3_(XKeysymToKeycode(display_, XK_3)), | |
153 keycode_4_(XKeysymToKeycode(display_, XK_4)), | |
154 keycode_5_(XKeysymToKeycode(display_, XK_5)), | |
155 keycode_6_(XKeysymToKeycode(display_, XK_6)), | |
156 keycode_7_(XKeysymToKeycode(display_, XK_7)), | |
157 keycode_8_(XKeysymToKeycode(display_, XK_8)), | |
158 keycode_9_(XKeysymToKeycode(display_, XK_9)), | |
159 keycode_0_(XKeysymToKeycode(display_, XK_0)), | |
160 keycode_minus_(XKeysymToKeycode(display_, XK_minus)), | |
161 keycode_equal_(XKeysymToKeycode(display_, XK_equal)), | |
162 keycode_period_(XKeysymToKeycode(display_, XK_period)), | |
163 keycode_insert_(XKeysymToKeycode(display_, XK_Insert)), | |
164 mock_user_manager_(new chromeos::MockUserManager), | 95 mock_user_manager_(new chromeos::MockUserManager), |
165 user_manager_enabler_(mock_user_manager_), | 96 user_manager_enabler_(mock_user_manager_), |
166 input_method_manager_mock_(NULL) { | 97 input_method_manager_mock_(NULL) { |
167 } | 98 } |
168 virtual ~EventRewriterTest() {} | 99 virtual ~EventRewriterTest() {} |
169 | 100 |
170 virtual void SetUp() { | 101 virtual void SetUp() { |
171 // Mocking user manager because the real one needs to be called on UI thread | 102 // Mocking user manager because the real one needs to be called on UI thread |
172 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) | 103 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) |
173 .WillRepeatedly(testing::Return(false)); | 104 .WillRepeatedly(testing::Return(false)); |
174 input_method_manager_mock_ = | 105 input_method_manager_mock_ = |
175 new chromeos::input_method::MockInputMethodManager; | 106 new chromeos::input_method::MockInputMethodManager; |
176 chromeos::input_method::InitializeForTesting( | 107 chromeos::input_method::InitializeForTesting( |
177 input_method_manager_mock_); // pass ownership | 108 input_method_manager_mock_); // pass ownership |
178 | 109 |
179 AshTestBase::SetUp(); | 110 AshTestBase::SetUp(); |
180 } | 111 } |
181 | 112 |
182 virtual void TearDown() { | 113 virtual void TearDown() { |
183 AshTestBase::TearDown(); | 114 AshTestBase::TearDown(); |
184 // Shutdown() deletes the IME mock object. | 115 // Shutdown() deletes the IME mock object. |
185 chromeos::input_method::Shutdown(); | 116 chromeos::input_method::Shutdown(); |
186 } | 117 } |
187 | 118 |
188 protected: | 119 protected: |
189 void TestRewriteNumPadKeys(); | 120 void TestRewriteNumPadKeys(); |
190 void TestRewriteNumPadKeysOnAppleKeyboard(); | 121 void TestRewriteNumPadKeysOnAppleKeyboard(); |
191 | 122 |
192 void RewriteMouseEvent(EventRewriter* rewriter, | 123 int RewriteMouseEvent(chromeos::EventRewriter* rewriter, |
193 ui::MouseEvent* event) { | 124 const ui::MouseEvent& event) { |
194 XEvent* xevent = event->native_event(); | 125 int flags = event.flags(); |
195 rewriter->RewriteLocatedEvent(xevent); | 126 rewriter->RewriteLocatedEventForTesting(event, &flags); |
196 *event = ui::MouseEvent(xevent); | 127 return flags; |
197 } | 128 } |
198 | 129 |
199 Display* display_; | 130 Display* display_; |
200 const KeyCode keycode_a_; | |
201 const KeyCode keycode_alt_l_; | |
202 const KeyCode keycode_alt_r_; | |
203 const KeyCode keycode_b_; | |
204 const KeyCode keycode_caps_lock_; | |
205 const KeyCode keycode_control_l_; | |
206 const KeyCode keycode_control_r_; | |
207 const KeyCode keycode_meta_l_; | |
208 const KeyCode keycode_meta_r_; | |
209 const KeyCode keycode_num_pad_0_; | |
210 const KeyCode keycode_num_pad_1_; | |
211 const KeyCode keycode_num_pad_2_; | |
212 const KeyCode keycode_num_pad_3_; | |
213 const KeyCode keycode_num_pad_4_; | |
214 const KeyCode keycode_num_pad_5_; | |
215 const KeyCode keycode_num_pad_6_; | |
216 const KeyCode keycode_num_pad_7_; | |
217 const KeyCode keycode_num_pad_8_; | |
218 const KeyCode keycode_num_pad_9_; | |
219 const KeyCode keycode_num_pad_begin_; | |
220 const KeyCode keycode_num_pad_decimal_; | |
221 const KeyCode keycode_num_pad_delete_; | |
222 const KeyCode keycode_num_pad_down_; | |
223 const KeyCode keycode_num_pad_end_; | |
224 const KeyCode keycode_num_pad_home_; | |
225 const KeyCode keycode_num_pad_insert_; | |
226 const KeyCode keycode_num_pad_left_; | |
227 const KeyCode keycode_num_pad_next_; | |
228 const KeyCode keycode_num_pad_prior_; | |
229 const KeyCode keycode_num_pad_right_; | |
230 const KeyCode keycode_num_pad_up_; | |
231 const KeyCode keycode_super_l_; | |
232 const KeyCode keycode_super_r_; | |
233 const KeyCode keycode_void_symbol_; | |
234 const KeyCode keycode_delete_; | |
235 const KeyCode keycode_backspace_; | |
236 const KeyCode keycode_up_; | |
237 const KeyCode keycode_down_; | |
238 const KeyCode keycode_left_; | |
239 const KeyCode keycode_right_; | |
240 const KeyCode keycode_prior_; | |
241 const KeyCode keycode_next_; | |
242 const KeyCode keycode_home_; | |
243 const KeyCode keycode_end_; | |
244 const KeyCode keycode_escape_; | |
245 const KeyCode keycode_launch6_; // F15 | |
246 const KeyCode keycode_launch7_; // F16 | |
247 const KeyCode keycode_f1_; | |
248 const KeyCode keycode_f2_; | |
249 const KeyCode keycode_f3_; | |
250 const KeyCode keycode_f4_; | |
251 const KeyCode keycode_f5_; | |
252 const KeyCode keycode_f6_; | |
253 const KeyCode keycode_f7_; | |
254 const KeyCode keycode_f8_; | |
255 const KeyCode keycode_f9_; | |
256 const KeyCode keycode_f10_; | |
257 const KeyCode keycode_f11_; | |
258 const KeyCode keycode_f12_; | |
259 const KeyCode keycode_browser_back_; | |
260 const KeyCode keycode_browser_forward_; | |
261 const KeyCode keycode_browser_refresh_; | |
262 const KeyCode keycode_media_launch_app1_; | |
263 const KeyCode keycode_media_launch_app2_; | |
264 const KeyCode keycode_brightness_down_; | |
265 const KeyCode keycode_brightness_up_; | |
266 const KeyCode keycode_volume_mute_; | |
267 const KeyCode keycode_volume_down_; | |
268 const KeyCode keycode_volume_up_; | |
269 const KeyCode keycode_power_; | |
270 const KeyCode keycode_1_; | |
271 const KeyCode keycode_2_; | |
272 const KeyCode keycode_3_; | |
273 const KeyCode keycode_4_; | |
274 const KeyCode keycode_5_; | |
275 const KeyCode keycode_6_; | |
276 const KeyCode keycode_7_; | |
277 const KeyCode keycode_8_; | |
278 const KeyCode keycode_9_; | |
279 const KeyCode keycode_0_; | |
280 const KeyCode keycode_minus_; | |
281 const KeyCode keycode_equal_; | |
282 const KeyCode keycode_period_; | |
283 const KeyCode keycode_insert_; | |
284 chromeos::MockUserManager* mock_user_manager_; // Not owned. | 131 chromeos::MockUserManager* mock_user_manager_; // Not owned. |
285 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 132 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
286 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; | 133 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; |
287 }; | 134 }; |
288 | 135 |
289 TEST_F(EventRewriterTest, TestGetDeviceType) { | |
290 // This is the typical string which an Apple keyboard sends. | |
291 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
292 EventRewriter::GetDeviceType("Apple Inc. Apple Keyboard")); | |
293 | |
294 // Other cases we accept. | |
295 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
296 EventRewriter::GetDeviceType("Apple Keyboard")); | |
297 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
298 EventRewriter::GetDeviceType("apple keyboard")); | |
299 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
300 EventRewriter::GetDeviceType("apple keyboard.")); | |
301 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
302 EventRewriter::GetDeviceType("apple.keyboard.")); | |
303 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
304 EventRewriter::GetDeviceType(".apple.keyboard.")); | |
305 | |
306 // Dell, Microsoft, Logitech, ... should be recognized as a kDeviceUnknown. | |
307 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
308 EventRewriter::GetDeviceType("Dell Dell USB Entry Keyboard")); | |
309 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
310 EventRewriter::GetDeviceType( | |
311 "Microsoft Natural Ergonomic Keyboard")); | |
312 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
313 EventRewriter::GetDeviceType("CHESEN USB Keyboard")); | |
314 | |
315 // Some corner cases. | |
316 EXPECT_EQ(EventRewriter::kDeviceUnknown, EventRewriter::GetDeviceType("")); | |
317 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
318 EventRewriter::GetDeviceType(".")); | |
319 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
320 EventRewriter::GetDeviceType(". ")); | |
321 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
322 EventRewriter::GetDeviceType(" .")); | |
323 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
324 EventRewriter::GetDeviceType("not-an-apple keyboard")); | |
325 } | |
326 | |
327 TEST_F(EventRewriterTest, TestDeviceAddedOrRemoved) { | |
328 EventRewriter rewriter; | |
329 EXPECT_TRUE(rewriter.device_id_to_type_for_testing().empty()); | |
330 EXPECT_EQ(EventRewriter::kDeviceUnknown, | |
331 rewriter.DeviceAddedForTesting(0, "PC Keyboard")); | |
332 EXPECT_EQ(1U, rewriter.device_id_to_type_for_testing().size()); | |
333 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
334 rewriter.DeviceAddedForTesting(1, "Apple Keyboard")); | |
335 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); | |
336 // Try to reuse the first ID. | |
337 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, | |
338 rewriter.DeviceAddedForTesting(0, "Apple Keyboard")); | |
339 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); | |
340 } | |
341 | |
342 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 136 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
343 // First, test with a PC keyboard. | 137 // First, test with a PC keyboard. |
344 TestingPrefServiceSyncable prefs; | 138 TestingPrefServiceSyncable prefs; |
345 EventRewriter rewriter; | 139 EventRewriter rewriter; |
346 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); | 140 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
347 rewriter.set_last_device_id_for_testing(0); | 141 rewriter.set_last_device_id_for_testing(0); |
348 rewriter.set_pref_service_for_testing(&prefs); | 142 rewriter.set_pref_service_for_testing(&prefs); |
349 | 143 |
350 // XK_a, Alt modifier. | 144 // VKEY_A, Alt modifier. |
| 145 EXPECT_EQ(GetExpectedResultAsString( |
| 146 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
| 147 GetRewrittenEventAsString( |
| 148 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
| 149 |
| 150 // VKEY_A, Win modifier. |
| 151 EXPECT_EQ( |
| 152 GetExpectedResultAsString( |
| 153 ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
| 154 GetRewrittenEventAsString( |
| 155 &rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
| 156 |
| 157 // VKEY_A, Alt+Win modifier. |
351 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 158 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
352 ui::EF_ALT_DOWN, | 159 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
353 ui::ET_KEY_PRESSED, | 160 ui::ET_KEY_PRESSED), |
354 keycode_a_, | |
355 Mod1Mask, | |
356 KeyPress), | |
357 GetRewrittenEventAsString(&rewriter, | 161 GetRewrittenEventAsString(&rewriter, |
358 ui::VKEY_A, | 162 ui::VKEY_A, |
359 ui::EF_ALT_DOWN, | 163 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
360 ui::ET_KEY_PRESSED, | 164 ui::ET_KEY_PRESSED)); |
361 keycode_a_, | |
362 Mod1Mask)); | |
363 | 165 |
364 // XK_a, Win modifier. | 166 // VKEY_LWIN (left Windows key), Alt modifier. |
365 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | |
366 0, | |
367 ui::ET_KEY_PRESSED, | |
368 keycode_a_, | |
369 Mod4Mask, | |
370 KeyPress), | |
371 GetRewrittenEventAsString(&rewriter, | |
372 ui::VKEY_A, | |
373 0, | |
374 ui::ET_KEY_PRESSED, | |
375 keycode_a_, | |
376 Mod4Mask)); | |
377 | |
378 // XK_a, Alt+Win modifier. | |
379 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | |
380 ui::EF_ALT_DOWN, | |
381 ui::ET_KEY_PRESSED, | |
382 keycode_a_, | |
383 Mod1Mask | Mod4Mask, | |
384 KeyPress), | |
385 GetRewrittenEventAsString(&rewriter, | |
386 ui::VKEY_A, | |
387 ui::EF_ALT_DOWN, | |
388 ui::ET_KEY_PRESSED, | |
389 keycode_a_, | |
390 Mod1Mask | Mod4Mask)); | |
391 | |
392 // XK_Super_L (left Windows key), Alt modifier. | |
393 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | 167 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, |
394 ui::EF_ALT_DOWN, | 168 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
395 ui::ET_KEY_PRESSED, | 169 ui::ET_KEY_PRESSED), |
396 keycode_super_l_, | |
397 Mod1Mask, | |
398 KeyPress), | |
399 GetRewrittenEventAsString(&rewriter, | 170 GetRewrittenEventAsString(&rewriter, |
400 ui::VKEY_LWIN, | 171 ui::VKEY_LWIN, |
401 ui::EF_ALT_DOWN, | 172 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
402 ui::ET_KEY_PRESSED, | 173 ui::ET_KEY_PRESSED)); |
403 keycode_super_l_, | |
404 Mod1Mask)); | |
405 | 174 |
406 // XK_Super_R (right Windows key), Alt modifier. | 175 // VKEY_RWIN (right Windows key), Alt modifier. |
407 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN, | 176 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN, |
408 ui::EF_ALT_DOWN, | 177 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
409 ui::ET_KEY_PRESSED, | 178 ui::ET_KEY_PRESSED), |
410 keycode_super_r_, | |
411 Mod1Mask, | |
412 KeyPress), | |
413 GetRewrittenEventAsString(&rewriter, | 179 GetRewrittenEventAsString(&rewriter, |
414 ui::VKEY_RWIN, | 180 ui::VKEY_RWIN, |
415 ui::EF_ALT_DOWN, | 181 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
416 ui::ET_KEY_PRESSED, | 182 ui::ET_KEY_PRESSED)); |
417 keycode_super_r_, | |
418 Mod1Mask)); | |
419 | 183 |
420 // An Apple keyboard reusing the ID, zero. | 184 // An Apple keyboard reusing the ID, zero. |
421 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 185 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
422 rewriter.set_last_device_id_for_testing(0); | 186 rewriter.set_last_device_id_for_testing(0); |
423 | 187 |
424 // XK_a, Alt modifier. | 188 // VKEY_A, Alt modifier. |
| 189 EXPECT_EQ(GetExpectedResultAsString( |
| 190 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
| 191 GetRewrittenEventAsString( |
| 192 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
| 193 |
| 194 // VKEY_A, Win modifier. |
| 195 EXPECT_EQ( |
| 196 GetExpectedResultAsString( |
| 197 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 198 GetRewrittenEventAsString( |
| 199 &rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
| 200 |
| 201 // VKEY_A, Alt+Win modifier. |
425 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 202 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
426 ui::EF_ALT_DOWN, | 203 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
427 ui::ET_KEY_PRESSED, | 204 ui::ET_KEY_PRESSED), |
428 keycode_a_, | |
429 Mod1Mask, | |
430 KeyPress), | |
431 GetRewrittenEventAsString(&rewriter, | 205 GetRewrittenEventAsString(&rewriter, |
432 ui::VKEY_A, | 206 ui::VKEY_A, |
433 ui::EF_ALT_DOWN, | 207 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
434 ui::ET_KEY_PRESSED, | 208 ui::ET_KEY_PRESSED)); |
435 keycode_a_, | |
436 Mod1Mask)); | |
437 | 209 |
438 // XK_a, Win modifier. | 210 // VKEY_LWIN (left Windows key), Alt modifier. |
439 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | |
440 ui::EF_CONTROL_DOWN, | |
441 ui::ET_KEY_PRESSED, | |
442 keycode_a_, | |
443 ControlMask, | |
444 KeyPress), | |
445 GetRewrittenEventAsString(&rewriter, | |
446 ui::VKEY_A, | |
447 0, | |
448 ui::ET_KEY_PRESSED, | |
449 keycode_a_, | |
450 Mod4Mask)); | |
451 | |
452 // XK_a, Alt+Win modifier. | |
453 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | |
454 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
455 ui::ET_KEY_PRESSED, | |
456 keycode_a_, | |
457 Mod1Mask | ControlMask, | |
458 KeyPress), | |
459 GetRewrittenEventAsString(&rewriter, | |
460 ui::VKEY_A, | |
461 ui::EF_ALT_DOWN, | |
462 ui::ET_KEY_PRESSED, | |
463 keycode_a_, | |
464 Mod1Mask | Mod4Mask)); | |
465 | |
466 // XK_Super_L (left Windows key), Alt modifier. | |
467 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 211 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
468 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 212 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
469 ui::ET_KEY_PRESSED, | 213 ui::ET_KEY_PRESSED), |
470 keycode_control_l_, | |
471 Mod1Mask, | |
472 KeyPress), | |
473 GetRewrittenEventAsString(&rewriter, | 214 GetRewrittenEventAsString(&rewriter, |
474 ui::VKEY_LWIN, | 215 ui::VKEY_LWIN, |
475 ui::EF_ALT_DOWN, | 216 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
476 ui::ET_KEY_PRESSED, | 217 ui::ET_KEY_PRESSED)); |
477 keycode_super_l_, | |
478 Mod1Mask)); | |
479 | 218 |
480 // XK_Super_R (right Windows key), Alt modifier. | 219 // VKEY_RWIN (right Windows key), Alt modifier. |
481 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 220 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
482 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 221 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
483 ui::ET_KEY_PRESSED, | 222 ui::ET_KEY_PRESSED), |
484 keycode_control_r_, | |
485 Mod1Mask, | |
486 KeyPress), | |
487 GetRewrittenEventAsString(&rewriter, | 223 GetRewrittenEventAsString(&rewriter, |
488 ui::VKEY_RWIN, | 224 ui::VKEY_RWIN, |
489 ui::EF_ALT_DOWN, | 225 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
490 ui::ET_KEY_PRESSED, | 226 ui::ET_KEY_PRESSED)); |
491 keycode_super_r_, | |
492 Mod1Mask)); | |
493 } | 227 } |
494 | 228 |
495 // For crbug.com/133896. | 229 // For crbug.com/133896. |
496 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 230 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
497 // Remap Control to Alt. | 231 // Remap Control to Alt. |
498 TestingPrefServiceSyncable prefs; | 232 TestingPrefServiceSyncable prefs; |
499 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 233 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
500 IntegerPrefMember control; | 234 IntegerPrefMember control; |
501 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 235 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
502 control.SetValue(chromeos::input_method::kAltKey); | 236 control.SetValue(chromeos::input_method::kAltKey); |
503 | 237 |
504 EventRewriter rewriter; | 238 EventRewriter rewriter; |
505 rewriter.set_pref_service_for_testing(&prefs); | 239 rewriter.set_pref_service_for_testing(&prefs); |
506 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); | 240 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
507 rewriter.set_last_device_id_for_testing(0); | 241 rewriter.set_last_device_id_for_testing(0); |
508 | 242 |
509 // XK_Control_L (left Control key) should be remapped to Alt. | 243 // Control should be remapped to Alt. |
510 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 244 EXPECT_EQ(GetExpectedResultAsString( |
511 ui::EF_ALT_DOWN, | 245 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
512 ui::ET_KEY_PRESSED, | |
513 keycode_alt_l_, | |
514 0U, | |
515 KeyPress), | |
516 GetRewrittenEventAsString(&rewriter, | 246 GetRewrittenEventAsString(&rewriter, |
517 ui::VKEY_CONTROL, | 247 ui::VKEY_CONTROL, |
518 0, | 248 ui::EF_CONTROL_DOWN, |
519 ui::ET_KEY_PRESSED, | 249 ui::ET_KEY_PRESSED)); |
520 keycode_control_l_, | |
521 0U)); | |
522 | 250 |
523 // An Apple keyboard reusing the ID, zero. | 251 // An Apple keyboard reusing the ID, zero. |
524 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 252 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
525 rewriter.set_last_device_id_for_testing(0); | 253 rewriter.set_last_device_id_for_testing(0); |
526 | 254 |
527 // XK_Super_L (left Command key) with Alt modifier. The remapped Command key | 255 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command key |
528 // should never be re-remapped to Alt. | 256 // should never be re-remapped to Alt. |
529 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 257 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
530 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 258 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
531 ui::ET_KEY_PRESSED, | 259 ui::ET_KEY_PRESSED), |
532 keycode_control_l_, | |
533 Mod1Mask, | |
534 KeyPress), | |
535 GetRewrittenEventAsString(&rewriter, | 260 GetRewrittenEventAsString(&rewriter, |
536 ui::VKEY_LWIN, | 261 ui::VKEY_LWIN, |
537 ui::EF_ALT_DOWN, | 262 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
538 ui::ET_KEY_PRESSED, | 263 ui::ET_KEY_PRESSED)); |
539 keycode_super_l_, | |
540 Mod1Mask)); | |
541 | 264 |
542 // XK_Super_R (right Command key) with Alt modifier. The remapped Command key | 265 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command key |
543 // should never be re-remapped to Alt. | 266 // should never be re-remapped to Alt. |
544 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 267 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
545 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 268 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
546 ui::ET_KEY_PRESSED, | 269 ui::ET_KEY_PRESSED), |
547 keycode_control_r_, | |
548 Mod1Mask, | |
549 KeyPress), | |
550 GetRewrittenEventAsString(&rewriter, | 270 GetRewrittenEventAsString(&rewriter, |
551 ui::VKEY_RWIN, | 271 ui::VKEY_RWIN, |
552 ui::EF_ALT_DOWN, | 272 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
553 ui::ET_KEY_PRESSED, | 273 ui::ET_KEY_PRESSED)); |
554 keycode_super_r_, | |
555 Mod1Mask)); | |
556 } | 274 } |
557 | 275 |
558 void EventRewriterTest::TestRewriteNumPadKeys() { | 276 void EventRewriterTest::TestRewriteNumPadKeys() { |
559 TestingPrefServiceSyncable prefs; | 277 TestingPrefServiceSyncable prefs; |
560 EventRewriter rewriter; | 278 EventRewriter rewriter; |
561 rewriter.set_pref_service_for_testing(&prefs); | 279 rewriter.set_pref_service_for_testing(&prefs); |
562 | 280 |
563 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 281 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
564 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, | 282 EXPECT_EQ( |
565 ui::EF_NUMPAD_KEY, | 283 GetExpectedResultAsString( |
566 ui::ET_KEY_PRESSED, | 284 ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
567 keycode_num_pad_0_, | 285 GetRewrittenEventAsString( |
568 Mod2Mask, // Num Lock | 286 &rewriter, ui::VKEY_INSERT, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
569 KeyPress), | |
570 GetRewrittenEventAsString(&rewriter, | |
571 ui::VKEY_INSERT, | |
572 0, | |
573 ui::ET_KEY_PRESSED, | |
574 keycode_num_pad_insert_, | |
575 0)); | |
576 | 287 |
577 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 288 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
578 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, | 289 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, |
579 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 290 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
580 ui::ET_KEY_PRESSED, | 291 ui::ET_KEY_PRESSED), |
581 keycode_num_pad_0_, | |
582 Mod1Mask | Mod2Mask, | |
583 KeyPress), | |
584 GetRewrittenEventAsString(&rewriter, | 292 GetRewrittenEventAsString(&rewriter, |
585 ui::VKEY_INSERT, | 293 ui::VKEY_INSERT, |
586 ui::EF_ALT_DOWN, | 294 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
587 ui::ET_KEY_PRESSED, | 295 ui::ET_KEY_PRESSED)); |
588 keycode_num_pad_insert_, | |
589 Mod1Mask)); | |
590 | 296 |
591 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 297 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
592 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, | 298 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, |
593 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 299 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
594 ui::ET_KEY_PRESSED, | 300 ui::ET_KEY_PRESSED), |
595 keycode_num_pad_decimal_, | |
596 Mod1Mask | Mod2Mask, | |
597 KeyPress), | |
598 GetRewrittenEventAsString(&rewriter, | 301 GetRewrittenEventAsString(&rewriter, |
599 ui::VKEY_DELETE, | 302 ui::VKEY_DELETE, |
600 ui::EF_ALT_DOWN, | 303 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
601 ui::ET_KEY_PRESSED, | 304 ui::ET_KEY_PRESSED)); |
602 keycode_num_pad_delete_, | |
603 Mod1Mask)); | |
604 | 305 |
605 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 306 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
606 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, | 307 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
607 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 308 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
608 ui::ET_KEY_PRESSED, | 309 ui::ET_KEY_PRESSED), |
609 keycode_num_pad_1_, | |
610 Mod1Mask | Mod2Mask, | |
611 KeyPress), | |
612 GetRewrittenEventAsString(&rewriter, | 310 GetRewrittenEventAsString(&rewriter, |
613 ui::VKEY_END, | 311 ui::VKEY_END, |
614 ui::EF_ALT_DOWN, | 312 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
615 ui::ET_KEY_PRESSED, | 313 ui::ET_KEY_PRESSED)); |
616 keycode_num_pad_end_, | |
617 Mod1Mask)); | |
618 | 314 |
619 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 315 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
620 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, | 316 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, |
621 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 317 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
622 ui::ET_KEY_PRESSED, | 318 ui::ET_KEY_PRESSED), |
623 keycode_num_pad_2_, | |
624 Mod1Mask | Mod2Mask, | |
625 KeyPress), | |
626 GetRewrittenEventAsString(&rewriter, | 319 GetRewrittenEventAsString(&rewriter, |
627 ui::VKEY_DOWN, | 320 ui::VKEY_DOWN, |
628 ui::EF_ALT_DOWN, | 321 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
629 ui::ET_KEY_PRESSED, | 322 ui::ET_KEY_PRESSED)); |
630 keycode_num_pad_down_, | |
631 Mod1Mask)); | |
632 | 323 |
633 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 324 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
634 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, | 325 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, |
635 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 326 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
636 ui::ET_KEY_PRESSED, | 327 ui::ET_KEY_PRESSED), |
637 keycode_num_pad_3_, | |
638 Mod1Mask | Mod2Mask, | |
639 KeyPress), | |
640 GetRewrittenEventAsString(&rewriter, | 328 GetRewrittenEventAsString(&rewriter, |
641 ui::VKEY_NEXT, | 329 ui::VKEY_NEXT, |
642 ui::EF_ALT_DOWN, | 330 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
643 ui::ET_KEY_PRESSED, | 331 ui::ET_KEY_PRESSED)); |
644 keycode_num_pad_next_, | |
645 Mod1Mask)); | |
646 | 332 |
647 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 333 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
648 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, | 334 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, |
649 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 335 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
650 ui::ET_KEY_PRESSED, | 336 ui::ET_KEY_PRESSED), |
651 keycode_num_pad_4_, | |
652 Mod1Mask | Mod2Mask, | |
653 KeyPress), | |
654 GetRewrittenEventAsString(&rewriter, | 337 GetRewrittenEventAsString(&rewriter, |
655 ui::VKEY_LEFT, | 338 ui::VKEY_LEFT, |
656 ui::EF_ALT_DOWN, | 339 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
657 ui::ET_KEY_PRESSED, | 340 ui::ET_KEY_PRESSED)); |
658 keycode_num_pad_left_, | |
659 Mod1Mask)); | |
660 | 341 |
661 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 342 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
662 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, | 343 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, |
663 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 344 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
664 ui::ET_KEY_PRESSED, | 345 ui::ET_KEY_PRESSED), |
665 keycode_num_pad_5_, | |
666 Mod1Mask | Mod2Mask, | |
667 KeyPress), | |
668 GetRewrittenEventAsString(&rewriter, | 346 GetRewrittenEventAsString(&rewriter, |
669 ui::VKEY_CLEAR, | 347 ui::VKEY_CLEAR, |
670 ui::EF_ALT_DOWN, | 348 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
671 ui::ET_KEY_PRESSED, | 349 ui::ET_KEY_PRESSED)); |
672 keycode_num_pad_begin_, | |
673 Mod1Mask)); | |
674 | 350 |
675 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 351 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
676 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, | 352 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, |
677 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 353 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
678 ui::ET_KEY_PRESSED, | 354 ui::ET_KEY_PRESSED), |
679 keycode_num_pad_6_, | |
680 Mod1Mask | Mod2Mask, | |
681 KeyPress), | |
682 GetRewrittenEventAsString(&rewriter, | 355 GetRewrittenEventAsString(&rewriter, |
683 ui::VKEY_RIGHT, | 356 ui::VKEY_RIGHT, |
684 ui::EF_ALT_DOWN, | 357 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
685 ui::ET_KEY_PRESSED, | 358 ui::ET_KEY_PRESSED)); |
686 keycode_num_pad_right_, | |
687 Mod1Mask)); | |
688 | 359 |
689 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 360 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
690 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, | 361 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, |
691 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 362 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
692 ui::ET_KEY_PRESSED, | 363 ui::ET_KEY_PRESSED), |
693 keycode_num_pad_7_, | |
694 Mod1Mask | Mod2Mask, | |
695 KeyPress), | |
696 GetRewrittenEventAsString(&rewriter, | 364 GetRewrittenEventAsString(&rewriter, |
697 ui::VKEY_HOME, | 365 ui::VKEY_HOME, |
698 ui::EF_ALT_DOWN, | 366 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
699 ui::ET_KEY_PRESSED, | 367 ui::ET_KEY_PRESSED)); |
700 keycode_num_pad_home_, | |
701 Mod1Mask)); | |
702 | 368 |
703 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 369 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
704 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, | 370 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, |
705 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 371 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
706 ui::ET_KEY_PRESSED, | 372 ui::ET_KEY_PRESSED), |
707 keycode_num_pad_8_, | |
708 Mod1Mask | Mod2Mask, | |
709 KeyPress), | |
710 GetRewrittenEventAsString(&rewriter, | 373 GetRewrittenEventAsString(&rewriter, |
711 ui::VKEY_UP, | 374 ui::VKEY_UP, |
712 ui::EF_ALT_DOWN, | 375 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
713 ui::ET_KEY_PRESSED, | 376 ui::ET_KEY_PRESSED)); |
714 keycode_num_pad_up_, | |
715 Mod1Mask)); | |
716 | 377 |
717 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 378 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
718 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, | 379 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, |
719 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, | 380 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
720 ui::ET_KEY_PRESSED, | 381 ui::ET_KEY_PRESSED), |
721 keycode_num_pad_9_, | |
722 Mod1Mask | Mod2Mask, | |
723 KeyPress), | |
724 GetRewrittenEventAsString(&rewriter, | 382 GetRewrittenEventAsString(&rewriter, |
725 ui::VKEY_PRIOR, | 383 ui::VKEY_PRIOR, |
726 ui::EF_ALT_DOWN, | 384 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
727 ui::ET_KEY_PRESSED, | 385 ui::ET_KEY_PRESSED)); |
728 keycode_num_pad_prior_, | |
729 Mod1Mask)); | |
730 | 386 |
731 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 387 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
732 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, | 388 EXPECT_EQ( |
733 ui::EF_NUMPAD_KEY, | 389 GetExpectedResultAsString( |
734 ui::ET_KEY_PRESSED, | 390 ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
735 keycode_num_pad_0_, | 391 GetRewrittenEventAsString( |
736 Mod2Mask, | 392 &rewriter, ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
737 KeyPress), | |
738 GetRewrittenEventAsString(&rewriter, | |
739 ui::VKEY_NUMPAD0, | |
740 0, | |
741 ui::ET_KEY_PRESSED, | |
742 keycode_num_pad_0_, | |
743 Mod2Mask)); | |
744 | 393 |
745 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 394 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
746 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, | 395 EXPECT_EQ( |
747 ui::EF_NUMPAD_KEY, | 396 GetExpectedResultAsString( |
748 ui::ET_KEY_PRESSED, | 397 ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
749 keycode_num_pad_decimal_, | 398 GetRewrittenEventAsString( |
750 Mod2Mask, | 399 &rewriter, ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
751 KeyPress), | |
752 GetRewrittenEventAsString(&rewriter, | |
753 ui::VKEY_DECIMAL, | |
754 0, | |
755 ui::ET_KEY_PRESSED, | |
756 keycode_num_pad_decimal_, | |
757 Mod2Mask)); | |
758 | 400 |
759 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 401 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
760 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, | 402 EXPECT_EQ( |
761 ui::EF_NUMPAD_KEY, | 403 GetExpectedResultAsString( |
762 ui::ET_KEY_PRESSED, | 404 ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
763 keycode_num_pad_1_, | 405 GetRewrittenEventAsString( |
764 Mod2Mask, | 406 &rewriter, ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
765 KeyPress), | |
766 GetRewrittenEventAsString(&rewriter, | |
767 ui::VKEY_NUMPAD1, | |
768 0, | |
769 ui::ET_KEY_PRESSED, | |
770 keycode_num_pad_1_, | |
771 Mod2Mask)); | |
772 | 407 |
773 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 408 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
774 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, | 409 EXPECT_EQ( |
775 ui::EF_NUMPAD_KEY, | 410 GetExpectedResultAsString( |
776 ui::ET_KEY_PRESSED, | 411 ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
777 keycode_num_pad_2_, | 412 GetRewrittenEventAsString( |
778 Mod2Mask, | 413 &rewriter, ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
779 KeyPress), | |
780 GetRewrittenEventAsString(&rewriter, | |
781 ui::VKEY_NUMPAD2, | |
782 0, | |
783 ui::ET_KEY_PRESSED, | |
784 keycode_num_pad_2_, | |
785 Mod2Mask)); | |
786 | 414 |
787 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 415 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
788 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, | 416 EXPECT_EQ( |
789 ui::EF_NUMPAD_KEY, | 417 GetExpectedResultAsString( |
790 ui::ET_KEY_PRESSED, | 418 ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
791 keycode_num_pad_3_, | 419 GetRewrittenEventAsString( |
792 Mod2Mask, | 420 &rewriter, ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
793 KeyPress), | |
794 GetRewrittenEventAsString(&rewriter, | |
795 ui::VKEY_NUMPAD3, | |
796 0, | |
797 ui::ET_KEY_PRESSED, | |
798 keycode_num_pad_3_, | |
799 Mod2Mask)); | |
800 | 421 |
801 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 422 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
802 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, | 423 EXPECT_EQ( |
803 ui::EF_NUMPAD_KEY, | 424 GetExpectedResultAsString( |
804 ui::ET_KEY_PRESSED, | 425 ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
805 keycode_num_pad_4_, | 426 GetRewrittenEventAsString( |
806 Mod2Mask, | 427 &rewriter, ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
807 KeyPress), | |
808 GetRewrittenEventAsString(&rewriter, | |
809 ui::VKEY_NUMPAD4, | |
810 0, | |
811 ui::ET_KEY_PRESSED, | |
812 keycode_num_pad_4_, | |
813 Mod2Mask)); | |
814 | 428 |
815 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. | 429 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. |
816 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, | 430 EXPECT_EQ( |
817 ui::EF_NUMPAD_KEY, | 431 GetExpectedResultAsString( |
818 ui::ET_KEY_PRESSED, | 432 ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
819 keycode_num_pad_5_, | 433 GetRewrittenEventAsString( |
820 Mod2Mask, | 434 &rewriter, ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
821 KeyPress), | |
822 GetRewrittenEventAsString(&rewriter, | |
823 ui::VKEY_NUMPAD5, | |
824 0, | |
825 ui::ET_KEY_PRESSED, | |
826 keycode_num_pad_5_, | |
827 Mod2Mask)); | |
828 | 435 |
829 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. | 436 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. |
830 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, | 437 EXPECT_EQ( |
831 ui::EF_NUMPAD_KEY, | 438 GetExpectedResultAsString( |
832 ui::ET_KEY_PRESSED, | 439 ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
833 keycode_num_pad_6_, | 440 GetRewrittenEventAsString( |
834 Mod2Mask, | 441 &rewriter, ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
835 KeyPress), | |
836 GetRewrittenEventAsString(&rewriter, | |
837 ui::VKEY_NUMPAD6, | |
838 0, | |
839 ui::ET_KEY_PRESSED, | |
840 keycode_num_pad_6_, | |
841 Mod2Mask)); | |
842 | 442 |
843 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. | 443 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. |
844 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, | 444 EXPECT_EQ( |
845 ui::EF_NUMPAD_KEY, | 445 GetExpectedResultAsString( |
846 ui::ET_KEY_PRESSED, | 446 ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
847 keycode_num_pad_7_, | 447 GetRewrittenEventAsString( |
848 Mod2Mask, | 448 &rewriter, ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
849 KeyPress), | |
850 GetRewrittenEventAsString(&rewriter, | |
851 ui::VKEY_NUMPAD7, | |
852 0, | |
853 ui::ET_KEY_PRESSED, | |
854 keycode_num_pad_7_, | |
855 Mod2Mask)); | |
856 | 449 |
857 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. | 450 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. |
858 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, | 451 EXPECT_EQ( |
859 ui::EF_NUMPAD_KEY, | 452 GetExpectedResultAsString( |
860 ui::ET_KEY_PRESSED, | 453 ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
861 keycode_num_pad_8_, | 454 GetRewrittenEventAsString( |
862 Mod2Mask, | 455 &rewriter, ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
863 KeyPress), | |
864 GetRewrittenEventAsString(&rewriter, | |
865 ui::VKEY_NUMPAD8, | |
866 0, | |
867 ui::ET_KEY_PRESSED, | |
868 keycode_num_pad_8_, | |
869 Mod2Mask)); | |
870 | 456 |
871 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. | 457 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. |
872 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, | 458 EXPECT_EQ( |
873 ui::EF_NUMPAD_KEY, | 459 GetExpectedResultAsString( |
874 ui::ET_KEY_PRESSED, | 460 ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
875 keycode_num_pad_9_, | 461 GetRewrittenEventAsString( |
876 Mod2Mask, | 462 &rewriter, ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
877 KeyPress), | |
878 GetRewrittenEventAsString(&rewriter, | |
879 ui::VKEY_NUMPAD9, | |
880 0, | |
881 ui::ET_KEY_PRESSED, | |
882 keycode_num_pad_9_, | |
883 Mod2Mask)); | |
884 } | 463 } |
885 | 464 |
886 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 465 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
887 TestRewriteNumPadKeys(); | 466 TestRewriteNumPadKeys(); |
888 } | 467 } |
889 | 468 |
890 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { | 469 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { |
891 // Make sure the num lock works correctly even when Diamond key exists. | 470 // Make sure the num lock works correctly even when Diamond key exists. |
892 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 471 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
893 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 472 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
894 chromeos::switches::kHasChromeOSDiamondKey, ""); | 473 chromeos::switches::kHasChromeOSDiamondKey, ""); |
895 | 474 |
896 TestRewriteNumPadKeys(); | 475 TestRewriteNumPadKeys(); |
897 *CommandLine::ForCurrentProcess() = original_cl; | 476 *CommandLine::ForCurrentProcess() = original_cl; |
898 } | 477 } |
899 | 478 |
900 // Tests if the rewriter can handle a Command + Num Pad event. | 479 // Tests if the rewriter can handle a Command + Num Pad event. |
901 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 480 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
902 TestingPrefServiceSyncable prefs; | 481 TestingPrefServiceSyncable prefs; |
903 EventRewriter rewriter; | 482 EventRewriter rewriter; |
904 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 483 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
905 rewriter.set_last_device_id_for_testing(0); | 484 rewriter.set_last_device_id_for_testing(0); |
906 rewriter.set_pref_service_for_testing(&prefs); | 485 rewriter.set_pref_service_for_testing(&prefs); |
907 | 486 |
908 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 487 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
909 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 488 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
910 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, | 489 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
911 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, | 490 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, |
912 ui::ET_KEY_PRESSED, | 491 ui::ET_KEY_PRESSED), |
913 keycode_num_pad_1_, | |
914 ControlMask | Mod2Mask, | |
915 KeyPress), | |
916 GetRewrittenEventAsString(&rewriter, | 492 GetRewrittenEventAsString(&rewriter, |
917 ui::VKEY_END, | 493 ui::VKEY_END, |
918 0, | 494 ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY, |
919 ui::ET_KEY_PRESSED, | 495 ui::ET_KEY_PRESSED)); |
920 keycode_num_pad_end_, | |
921 Mod4Mask)); | |
922 | 496 |
923 // XK_KP_1 (= NumPad 1 without Num Lock), Win modifier. | 497 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
924 // The result should also be "Num Pad 1 with Control + Num Lock modifiers". | 498 // The result should also be "Num Pad 1 with Control + Num Lock modifiers". |
925 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, | 499 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
926 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, | 500 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, |
927 ui::ET_KEY_PRESSED, | 501 ui::ET_KEY_PRESSED), |
928 keycode_num_pad_1_, | |
929 ControlMask | Mod2Mask, | |
930 KeyPress), | |
931 GetRewrittenEventAsString(&rewriter, | 502 GetRewrittenEventAsString(&rewriter, |
932 ui::VKEY_NUMPAD1, | 503 ui::VKEY_NUMPAD1, |
933 0, | 504 ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY, |
934 ui::ET_KEY_PRESSED, | 505 ui::ET_KEY_PRESSED)); |
935 keycode_num_pad_end_, | |
936 Mod4Mask)); | |
937 } | 506 } |
938 | 507 |
939 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 508 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
940 TestRewriteNumPadKeysOnAppleKeyboard(); | 509 TestRewriteNumPadKeysOnAppleKeyboard(); |
941 } | 510 } |
942 | 511 |
943 TEST_F(EventRewriterTest, | 512 TEST_F(EventRewriterTest, |
944 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { | 513 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { |
945 // Makes sure the num lock works correctly even when Diamond key exists. | 514 // Makes sure the num lock works correctly even when Diamond key exists. |
946 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 515 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
947 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 516 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
948 chromeos::switches::kHasChromeOSDiamondKey, ""); | 517 chromeos::switches::kHasChromeOSDiamondKey, ""); |
949 | 518 |
950 TestRewriteNumPadKeysOnAppleKeyboard(); | 519 TestRewriteNumPadKeysOnAppleKeyboard(); |
951 *CommandLine::ForCurrentProcess() = original_cl; | 520 *CommandLine::ForCurrentProcess() = original_cl; |
952 } | 521 } |
953 | 522 |
954 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 523 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
955 TestingPrefServiceSyncable prefs; | 524 TestingPrefServiceSyncable prefs; |
956 EventRewriter rewriter; | 525 EventRewriter rewriter; |
957 rewriter.set_pref_service_for_testing(&prefs); | 526 rewriter.set_pref_service_for_testing(&prefs); |
958 | 527 |
959 // Press Search. Confirm the event is not rewritten. | 528 // Press Search. Confirm the event is not rewritten. |
960 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | 529 EXPECT_EQ(GetExpectedResultAsString( |
961 0, | 530 ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
962 ui::ET_KEY_PRESSED, | 531 GetRewrittenEventAsString( |
963 keycode_super_l_, | 532 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
964 0U, | |
965 KeyPress), | |
966 GetRewrittenEventAsString(&rewriter, | |
967 ui::VKEY_LWIN, | |
968 0, | |
969 ui::ET_KEY_PRESSED, | |
970 keycode_super_l_, | |
971 0U)); | |
972 | 533 |
973 // Press left Control. Confirm the event is not rewritten. | 534 // Press left Control. Confirm the event is not rewritten. |
974 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 535 EXPECT_EQ(GetExpectedResultAsString( |
975 ui::EF_CONTROL_DOWN, | 536 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
976 ui::ET_KEY_PRESSED, | |
977 keycode_control_l_, | |
978 0U, | |
979 KeyPress), | |
980 GetRewrittenEventAsString(&rewriter, | 537 GetRewrittenEventAsString(&rewriter, |
981 ui::VKEY_CONTROL, | 538 ui::VKEY_CONTROL, |
982 0, | 539 ui::EF_CONTROL_DOWN, |
983 ui::ET_KEY_PRESSED, | 540 ui::ET_KEY_PRESSED)); |
984 keycode_control_l_, | |
985 0U)); | |
986 | 541 |
987 // Press right Control. Confirm the event is not rewritten. | 542 // Press right Control. Confirm the event is not rewritten. |
988 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 543 EXPECT_EQ(GetExpectedResultAsString( |
989 ui::EF_CONTROL_DOWN, | 544 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
990 ui::ET_KEY_PRESSED, | |
991 keycode_control_r_, | |
992 0U, | |
993 KeyPress), | |
994 GetRewrittenEventAsString(&rewriter, | 545 GetRewrittenEventAsString(&rewriter, |
995 ui::VKEY_CONTROL, | 546 ui::VKEY_CONTROL, |
996 0, | 547 ui::EF_CONTROL_DOWN, |
997 ui::ET_KEY_PRESSED, | 548 ui::ET_KEY_PRESSED)); |
998 keycode_control_r_, | |
999 0U)); | |
1000 | 549 |
1001 // Press left Alt. Confirm the event is not rewritten. | 550 // Press left Alt. Confirm the event is not rewritten. |
1002 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 551 EXPECT_EQ(GetExpectedResultAsString( |
1003 ui::EF_ALT_DOWN, | 552 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1004 ui::ET_KEY_PRESSED, | 553 GetRewrittenEventAsString( |
1005 keycode_alt_l_, | 554 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1006 0, | |
1007 KeyPress), | |
1008 GetRewrittenEventAsString(&rewriter, | |
1009 ui::VKEY_MENU, | |
1010 0, | |
1011 ui::ET_KEY_PRESSED, | |
1012 keycode_alt_l_, | |
1013 0U)); | |
1014 | 555 |
1015 // Press right Alt. Confirm the event is not rewritten. | 556 // Press right Alt. Confirm the event is not rewritten. |
1016 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 557 EXPECT_EQ(GetExpectedResultAsString( |
1017 ui::EF_ALT_DOWN, | 558 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1018 ui::ET_KEY_PRESSED, | 559 GetRewrittenEventAsString( |
1019 keycode_alt_r_, | 560 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1020 0, | |
1021 KeyPress), | |
1022 GetRewrittenEventAsString(&rewriter, | |
1023 ui::VKEY_MENU, | |
1024 0, | |
1025 ui::ET_KEY_PRESSED, | |
1026 keycode_alt_r_, | |
1027 0U)); | |
1028 | 561 |
1029 // Test KeyRelease event, just in case. | 562 // Test KeyRelease event, just in case. |
1030 // Release Search. Confirm the release event is not rewritten. | 563 // Release Search. Confirm the release event is not rewritten. |
1031 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | 564 EXPECT_EQ(GetExpectedResultAsString( |
1032 0, | 565 ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1033 ui::ET_KEY_RELEASED, | 566 GetRewrittenEventAsString( |
1034 keycode_super_l_, | 567 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1035 Mod4Mask, | |
1036 KeyRelease), | |
1037 GetRewrittenEventAsString(&rewriter, | |
1038 ui::VKEY_LWIN, | |
1039 0, | |
1040 ui::ET_KEY_RELEASED, | |
1041 keycode_super_l_, | |
1042 Mod4Mask)); | |
1043 } | 568 } |
1044 | 569 |
1045 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 570 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
1046 TestingPrefServiceSyncable prefs; | 571 TestingPrefServiceSyncable prefs; |
1047 EventRewriter rewriter; | 572 EventRewriter rewriter; |
1048 rewriter.set_pref_service_for_testing(&prefs); | 573 rewriter.set_pref_service_for_testing(&prefs); |
1049 | 574 |
1050 // Press left Alt with Shift. Confirm the event is not rewritten. | 575 // Press Alt with Shift. Confirm the event is not rewritten. |
1051 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 576 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
1052 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 577 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
1053 ui::ET_KEY_PRESSED, | 578 ui::ET_KEY_PRESSED), |
1054 keycode_meta_l_, | |
1055 ShiftMask, | |
1056 KeyPress), | |
1057 GetRewrittenEventAsString(&rewriter, | 579 GetRewrittenEventAsString(&rewriter, |
1058 ui::VKEY_MENU, | 580 ui::VKEY_MENU, |
1059 ui::EF_SHIFT_DOWN, | |
1060 ui::ET_KEY_PRESSED, | |
1061 keycode_meta_l_, | |
1062 ShiftMask)); | |
1063 | |
1064 // Press right Alt with Shift. Confirm the event is not rewritten. | |
1065 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | |
1066 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 581 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
1067 ui::ET_KEY_PRESSED, | 582 ui::ET_KEY_PRESSED)); |
1068 keycode_meta_r_, | |
1069 ShiftMask, | |
1070 KeyPress), | |
1071 GetRewrittenEventAsString(&rewriter, | |
1072 ui::VKEY_MENU, | |
1073 ui::EF_SHIFT_DOWN, | |
1074 ui::ET_KEY_PRESSED, | |
1075 keycode_meta_r_, | |
1076 ShiftMask)); | |
1077 | 583 |
1078 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 584 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
1079 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | 585 EXPECT_EQ( |
1080 ui::EF_CAPS_LOCK_DOWN, | 586 GetExpectedResultAsString(ui::VKEY_LWIN, |
1081 ui::ET_KEY_PRESSED, | 587 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
1082 keycode_super_l_, | 588 ui::ET_KEY_PRESSED), |
1083 LockMask, | 589 GetRewrittenEventAsString(&rewriter, |
1084 KeyPress), | 590 ui::VKEY_LWIN, |
| 591 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
| 592 ui::ET_KEY_PRESSED)); |
| 593 |
| 594 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
| 595 EXPECT_EQ(GetExpectedResultAsString( |
| 596 ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_RELEASED), |
1085 GetRewrittenEventAsString(&rewriter, | 597 GetRewrittenEventAsString(&rewriter, |
1086 ui::VKEY_LWIN, | 598 ui::VKEY_LWIN, |
1087 ui::EF_CAPS_LOCK_DOWN, | 599 ui::EF_CAPS_LOCK_DOWN, |
1088 ui::ET_KEY_PRESSED, | 600 ui::ET_KEY_RELEASED)); |
1089 keycode_super_l_, | |
1090 LockMask)); | |
1091 | |
1092 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | |
1093 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | |
1094 ui::EF_CAPS_LOCK_DOWN, | |
1095 ui::ET_KEY_RELEASED, | |
1096 keycode_super_l_, | |
1097 LockMask | Mod4Mask, | |
1098 KeyRelease), | |
1099 GetRewrittenEventAsString(&rewriter, | |
1100 ui::VKEY_LWIN, | |
1101 ui::EF_CAPS_LOCK_DOWN, | |
1102 ui::ET_KEY_RELEASED, | |
1103 keycode_super_l_, | |
1104 LockMask | Mod4Mask)); | |
1105 | 601 |
1106 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 602 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
1107 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, | 603 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
1108 ui::EF_SHIFT_DOWN | | 604 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1109 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 605 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1110 ui::ET_KEY_PRESSED, | 606 ui::ET_KEY_PRESSED), |
1111 keycode_b_, | |
1112 ShiftMask | ControlMask | Mod1Mask | | |
1113 Mod4Mask, | |
1114 KeyPress), | |
1115 GetRewrittenEventAsString(&rewriter, | 607 GetRewrittenEventAsString(&rewriter, |
1116 ui::VKEY_B, | 608 ui::VKEY_B, |
1117 ui::EF_SHIFT_DOWN | | 609 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1118 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 610 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1119 ui::ET_KEY_PRESSED, | 611 ui::ET_KEY_PRESSED)); |
1120 keycode_b_, | |
1121 ShiftMask | ControlMask | Mod1Mask | | |
1122 Mod4Mask)); | |
1123 } | 612 } |
1124 | 613 |
1125 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 614 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
1126 // Disable Search and Control keys. | 615 // Disable Search and Control keys. |
1127 TestingPrefServiceSyncable prefs; | 616 TestingPrefServiceSyncable prefs; |
1128 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 617 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1129 IntegerPrefMember search; | 618 IntegerPrefMember search; |
1130 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 619 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1131 search.SetValue(chromeos::input_method::kVoidKey); | 620 search.SetValue(chromeos::input_method::kVoidKey); |
1132 IntegerPrefMember control; | 621 IntegerPrefMember control; |
1133 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 622 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1134 control.SetValue(chromeos::input_method::kVoidKey); | 623 control.SetValue(chromeos::input_method::kVoidKey); |
1135 | 624 |
1136 EventRewriter rewriter; | 625 EventRewriter rewriter; |
1137 rewriter.set_pref_service_for_testing(&prefs); | 626 rewriter.set_pref_service_for_testing(&prefs); |
1138 | 627 |
1139 // Press left Alt with Shift. This key press shouldn't be affected by the | 628 // Press Alt with Shift. This key press shouldn't be affected by the |
1140 // pref. Confirm the event is not rewritten. | 629 // pref. Confirm the event is not rewritten. |
1141 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 630 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
1142 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 631 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
1143 ui::ET_KEY_PRESSED, | 632 ui::ET_KEY_PRESSED), |
1144 keycode_meta_l_, | |
1145 ShiftMask, | |
1146 KeyPress), | |
1147 GetRewrittenEventAsString(&rewriter, | 633 GetRewrittenEventAsString(&rewriter, |
1148 ui::VKEY_MENU, | 634 ui::VKEY_MENU, |
1149 ui::EF_SHIFT_DOWN, | 635 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
1150 ui::ET_KEY_PRESSED, | 636 ui::ET_KEY_PRESSED)); |
1151 keycode_meta_l_, | |
1152 ShiftMask)); | |
1153 | 637 |
1154 // Press Search. Confirm the event is now VKEY_UNKNOWN + XK_VoidSymbol. | 638 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
1155 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, | 639 EXPECT_EQ(GetExpectedResultAsString( |
1156 0, | 640 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1157 ui::ET_KEY_PRESSED, | 641 GetRewrittenEventAsString( |
1158 keycode_void_symbol_, | 642 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1159 0U, | |
1160 KeyPress), | |
1161 GetRewrittenEventAsString(&rewriter, | |
1162 ui::VKEY_LWIN, | |
1163 0, | |
1164 ui::ET_KEY_PRESSED, | |
1165 keycode_super_l_, | |
1166 0U)); | |
1167 | 643 |
1168 // Press Control. Confirm the event is now VKEY_UNKNOWN + XK_VoidSymbol. | 644 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
1169 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, | 645 EXPECT_EQ(GetExpectedResultAsString( |
1170 0, | 646 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1171 ui::ET_KEY_PRESSED, | 647 GetRewrittenEventAsString( |
1172 keycode_void_symbol_, | 648 &rewriter, ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1173 0U, | |
1174 KeyPress), | |
1175 GetRewrittenEventAsString(&rewriter, | |
1176 ui::VKEY_CONTROL, | |
1177 0, | |
1178 ui::ET_KEY_PRESSED, | |
1179 keycode_control_l_, | |
1180 0U)); | |
1181 | 649 |
1182 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN + | 650 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
1183 // XK_VoidSymbol without any modifiers. | 651 // without any modifiers. |
1184 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, | 652 EXPECT_EQ( |
1185 0, | 653 GetExpectedResultAsString( |
1186 ui::ET_KEY_PRESSED, | 654 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1187 keycode_void_symbol_, | 655 GetRewrittenEventAsString( |
1188 0U, | 656 &rewriter, ui::VKEY_LWIN, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
1189 KeyPress), | |
1190 GetRewrittenEventAsString(&rewriter, | |
1191 ui::VKEY_LWIN, | |
1192 ui::EF_CONTROL_DOWN, | |
1193 ui::ET_KEY_PRESSED, | |
1194 keycode_super_l_, | |
1195 ControlMask)); | |
1196 | 657 |
1197 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 658 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
1198 // modifiers. | 659 // modifiers. |
1199 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 660 EXPECT_EQ( |
1200 0, | 661 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1201 ui::ET_KEY_PRESSED, | 662 GetRewrittenEventAsString( |
1202 keycode_a_, | 663 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
1203 0U, | |
1204 KeyPress), | |
1205 GetRewrittenEventAsString(&rewriter, | |
1206 ui::VKEY_A, | |
1207 ui::EF_CONTROL_DOWN, | |
1208 ui::ET_KEY_PRESSED, | |
1209 keycode_a_, | |
1210 ControlMask | Mod4Mask)); | |
1211 | 664 |
1212 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 665 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
1213 // the Alt modifier. | 666 // the Alt modifier. |
1214 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 667 EXPECT_EQ(GetExpectedResultAsString( |
1215 ui::EF_ALT_DOWN, | 668 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1216 ui::ET_KEY_PRESSED, | |
1217 keycode_a_, | |
1218 Mod1Mask, | |
1219 KeyPress), | |
1220 GetRewrittenEventAsString(&rewriter, | 669 GetRewrittenEventAsString(&rewriter, |
1221 ui::VKEY_A, | 670 ui::VKEY_A, |
1222 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 671 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
1223 ui::ET_KEY_PRESSED, | 672 ui::ET_KEY_PRESSED)); |
1224 keycode_a_, | |
1225 ControlMask | Mod1Mask | Mod4Mask)); | |
1226 | 673 |
1227 // Remap Alt to Control. | 674 // Remap Alt to Control. |
1228 IntegerPrefMember alt; | 675 IntegerPrefMember alt; |
1229 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 676 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1230 alt.SetValue(chromeos::input_method::kControlKey); | 677 alt.SetValue(chromeos::input_method::kControlKey); |
1231 | 678 |
1232 // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L | 679 // Press left Alt. Confirm the event is now VKEY_CONTROL |
1233 // even though the Control key itself is disabled. | 680 // even though the Control key itself is disabled. |
1234 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 681 EXPECT_EQ(GetExpectedResultAsString( |
1235 ui::EF_CONTROL_DOWN, | 682 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1236 ui::ET_KEY_PRESSED, | 683 GetRewrittenEventAsString( |
1237 keycode_control_l_, | 684 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1238 0U, | |
1239 KeyPress), | |
1240 GetRewrittenEventAsString(&rewriter, | |
1241 ui::VKEY_MENU, | |
1242 0, | |
1243 ui::ET_KEY_PRESSED, | |
1244 keycode_alt_l_, | |
1245 0U)); | |
1246 | 685 |
1247 // Press Alt+a. Confirm the event is now Control+a even though the Control | 686 // Press Alt+a. Confirm the event is now Control+a even though the Control |
1248 // key itself is disabled. | 687 // key itself is disabled. |
1249 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 688 EXPECT_EQ(GetExpectedResultAsString( |
1250 ui::EF_CONTROL_DOWN, | 689 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1251 ui::ET_KEY_PRESSED, | 690 GetRewrittenEventAsString( |
1252 keycode_a_, | 691 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1253 ControlMask, | |
1254 KeyPress), | |
1255 GetRewrittenEventAsString(&rewriter, | |
1256 ui::VKEY_A, | |
1257 ui::EF_ALT_DOWN, | |
1258 ui::ET_KEY_PRESSED, | |
1259 keycode_a_, | |
1260 Mod1Mask)); | |
1261 } | 692 } |
1262 | 693 |
1263 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 694 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
1264 // Remap Search to Control. | 695 // Remap Search to Control. |
1265 TestingPrefServiceSyncable prefs; | 696 TestingPrefServiceSyncable prefs; |
1266 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 697 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1267 IntegerPrefMember search; | 698 IntegerPrefMember search; |
1268 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 699 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1269 search.SetValue(chromeos::input_method::kControlKey); | 700 search.SetValue(chromeos::input_method::kControlKey); |
1270 | 701 |
1271 EventRewriter rewriter; | 702 EventRewriter rewriter; |
1272 rewriter.set_pref_service_for_testing(&prefs); | 703 rewriter.set_pref_service_for_testing(&prefs); |
1273 | 704 |
1274 // Press Search. Confirm the event is now VKEY_CONTROL + XK_Control_L. | 705 // Press Search. Confirm the event is now VKEY_CONTROL. |
1275 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 706 EXPECT_EQ( |
1276 ui::EF_CONTROL_DOWN, | 707 GetExpectedResultAsString( |
1277 ui::ET_KEY_PRESSED, | 708 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1278 keycode_control_l_, | 709 GetRewrittenEventAsString( |
1279 0U, | 710 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
1280 KeyPress), | |
1281 GetRewrittenEventAsString(&rewriter, | |
1282 ui::VKEY_LWIN, | |
1283 0, | |
1284 ui::ET_KEY_PRESSED, | |
1285 keycode_super_l_, | |
1286 0U)); | |
1287 | 711 |
1288 // Remap Alt to Control too. | 712 // Remap Alt to Control too. |
1289 IntegerPrefMember alt; | 713 IntegerPrefMember alt; |
1290 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 714 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1291 alt.SetValue(chromeos::input_method::kControlKey); | 715 alt.SetValue(chromeos::input_method::kControlKey); |
1292 | 716 |
1293 // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L. | 717 // Press Alt. Confirm the event is now VKEY_CONTROL. |
1294 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 718 EXPECT_EQ(GetExpectedResultAsString( |
1295 ui::EF_CONTROL_DOWN, | 719 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1296 ui::ET_KEY_PRESSED, | 720 GetRewrittenEventAsString( |
1297 keycode_control_l_, | 721 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1298 0U, | |
1299 KeyPress), | |
1300 GetRewrittenEventAsString(&rewriter, | |
1301 ui::VKEY_MENU, | |
1302 0, | |
1303 ui::ET_KEY_PRESSED, | |
1304 keycode_alt_l_, | |
1305 0U)); | |
1306 | 722 |
1307 // Press right Alt. Confirm the event is now VKEY_CONTROL + XK_Control_R. | 723 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
1308 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 724 EXPECT_EQ(GetExpectedResultAsString( |
1309 ui::EF_CONTROL_DOWN, | 725 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1310 ui::ET_KEY_PRESSED, | |
1311 keycode_control_r_, | |
1312 0U, | |
1313 KeyPress), | |
1314 GetRewrittenEventAsString(&rewriter, | |
1315 ui::VKEY_MENU, | |
1316 0, | |
1317 ui::ET_KEY_PRESSED, | |
1318 keycode_alt_r_, | |
1319 0U)); | |
1320 | |
1321 // Press Alt+Search. Confirm the event is now VKEY_CONTROL + XK_Control_L. | |
1322 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | |
1323 ui::EF_CONTROL_DOWN, | |
1324 ui::ET_KEY_PRESSED, | |
1325 keycode_control_l_, | |
1326 ControlMask, | |
1327 KeyPress), | |
1328 GetRewrittenEventAsString(&rewriter, | 726 GetRewrittenEventAsString(&rewriter, |
1329 ui::VKEY_LWIN, | 727 ui::VKEY_LWIN, |
1330 ui::EF_ALT_DOWN, | 728 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1331 ui::ET_KEY_PRESSED, | 729 ui::ET_KEY_PRESSED)); |
1332 keycode_super_l_, | |
1333 Mod1Mask)); | |
1334 | 730 |
1335 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL + | 731 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
1336 // XK_Control_L. | 732 EXPECT_EQ(GetExpectedResultAsString( |
1337 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 733 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1338 ui::EF_CONTROL_DOWN, | 734 GetRewrittenEventAsString( |
1339 ui::ET_KEY_PRESSED, | 735 &rewriter, |
1340 keycode_control_l_, | 736 ui::VKEY_LWIN, |
1341 ControlMask, | 737 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1342 KeyPress), | 738 ui::ET_KEY_PRESSED)); |
1343 GetRewrittenEventAsString(&rewriter, | |
1344 ui::VKEY_LWIN, | |
1345 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
1346 ui::ET_KEY_PRESSED, | |
1347 keycode_super_l_, | |
1348 ControlMask | Mod1Mask)); | |
1349 | 739 |
1350 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 740 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
1351 // Shift and Control modifiers. | 741 // Shift and Control modifiers. |
1352 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 742 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
1353 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 743 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
1354 ui::ET_KEY_PRESSED, | 744 ui::ET_KEY_PRESSED), |
1355 keycode_control_l_, | |
1356 ShiftMask | ControlMask, | |
1357 KeyPress), | |
1358 GetRewrittenEventAsString(&rewriter, | 745 GetRewrittenEventAsString(&rewriter, |
1359 ui::VKEY_LWIN, | 746 ui::VKEY_LWIN, |
1360 ui::EF_SHIFT_DOWN | | 747 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1361 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 748 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1362 ui::ET_KEY_PRESSED, | 749 ui::ET_KEY_PRESSED)); |
1363 keycode_super_l_, | |
1364 ShiftMask | ControlMask | Mod1Mask)); | |
1365 | 750 |
1366 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 751 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
1367 // and Control modifiers. | 752 // and Control modifiers. |
1368 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, | 753 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
1369 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 754 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
1370 ui::ET_KEY_PRESSED, | 755 ui::ET_KEY_PRESSED), |
1371 keycode_b_, | |
1372 ShiftMask | ControlMask, | |
1373 KeyPress), | |
1374 GetRewrittenEventAsString(&rewriter, | 756 GetRewrittenEventAsString(&rewriter, |
1375 ui::VKEY_B, | 757 ui::VKEY_B, |
1376 ui::EF_SHIFT_DOWN | | 758 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1377 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 759 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1378 ui::ET_KEY_PRESSED, | 760 ui::ET_KEY_PRESSED)); |
1379 keycode_b_, | |
1380 ShiftMask | ControlMask | Mod1Mask)); | |
1381 } | 761 } |
1382 | 762 |
1383 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 763 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
1384 // Remap Search to ESC. | 764 // Remap Search to ESC. |
1385 TestingPrefServiceSyncable prefs; | 765 TestingPrefServiceSyncable prefs; |
1386 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 766 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1387 IntegerPrefMember search; | 767 IntegerPrefMember search; |
1388 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 768 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1389 search.SetValue(chromeos::input_method::kEscapeKey); | 769 search.SetValue(chromeos::input_method::kEscapeKey); |
1390 | 770 |
1391 EventRewriter rewriter; | 771 EventRewriter rewriter; |
1392 rewriter.set_pref_service_for_testing(&prefs); | 772 rewriter.set_pref_service_for_testing(&prefs); |
1393 | 773 |
1394 // Press Search. Confirm the event is now VKEY_ESCAPE. | 774 // Press Search. Confirm the event is now VKEY_ESCAPE. |
1395 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_ESCAPE, | 775 EXPECT_EQ( |
1396 ui::EF_NONE, | 776 GetExpectedResultAsString( |
1397 ui::ET_KEY_PRESSED, | 777 ui::VKEY_ESCAPE, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1398 keycode_escape_, | 778 GetRewrittenEventAsString( |
1399 0U, | 779 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
1400 KeyPress), | |
1401 GetRewrittenEventAsString(&rewriter, | |
1402 ui::VKEY_LWIN, | |
1403 0, | |
1404 ui::ET_KEY_PRESSED, | |
1405 keycode_super_l_, | |
1406 0U)); | |
1407 } | 780 } |
1408 | 781 |
1409 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 782 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
1410 // Remap Search to Alt. | 783 // Remap Search to Alt. |
1411 TestingPrefServiceSyncable prefs; | 784 TestingPrefServiceSyncable prefs; |
1412 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 785 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1413 IntegerPrefMember search; | 786 IntegerPrefMember search; |
1414 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 787 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1415 search.SetValue(chromeos::input_method::kAltKey); | 788 search.SetValue(chromeos::input_method::kAltKey); |
1416 | 789 |
1417 EventRewriter rewriter; | 790 EventRewriter rewriter; |
1418 rewriter.set_pref_service_for_testing(&prefs); | 791 rewriter.set_pref_service_for_testing(&prefs); |
1419 | 792 |
1420 // Press Search. Confirm the event is now VKEY_MENU + XK_Alt_L. | 793 // Press Search. Confirm the event is now VKEY_MENU. |
1421 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 794 EXPECT_EQ( |
1422 ui::EF_ALT_DOWN, | 795 GetExpectedResultAsString( |
1423 ui::ET_KEY_PRESSED, | 796 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1424 keycode_alt_l_, | 797 GetRewrittenEventAsString( |
1425 0U, | 798 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
1426 KeyPress), | |
1427 GetRewrittenEventAsString(&rewriter, | |
1428 ui::VKEY_LWIN, | |
1429 0, | |
1430 ui::ET_KEY_PRESSED, | |
1431 keycode_super_l_, | |
1432 0U)); | |
1433 | 799 |
1434 // Remap Alt to Control. | 800 // Remap Alt to Control. |
1435 IntegerPrefMember alt; | 801 IntegerPrefMember alt; |
1436 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 802 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1437 alt.SetValue(chromeos::input_method::kControlKey); | 803 alt.SetValue(chromeos::input_method::kControlKey); |
1438 | 804 |
1439 // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L. | 805 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
1440 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 806 EXPECT_EQ(GetExpectedResultAsString( |
1441 ui::EF_CONTROL_DOWN, | 807 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1442 ui::ET_KEY_PRESSED, | 808 GetRewrittenEventAsString( |
1443 keycode_control_l_, | 809 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
1444 0U, | |
1445 KeyPress), | |
1446 GetRewrittenEventAsString(&rewriter, | |
1447 ui::VKEY_MENU, | |
1448 0, | |
1449 ui::ET_KEY_PRESSED, | |
1450 keycode_alt_l_, | |
1451 0U)); | |
1452 | 810 |
1453 // Remap Control to Search. | 811 // Remap Control to Search. |
1454 IntegerPrefMember control; | 812 IntegerPrefMember control; |
1455 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 813 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1456 control.SetValue(chromeos::input_method::kSearchKey); | 814 control.SetValue(chromeos::input_method::kSearchKey); |
1457 | 815 |
1458 // Press left Control. Confirm the event is now VKEY_LWIN. | 816 // Press left Control. Confirm the event is now VKEY_LWIN. |
1459 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, | 817 EXPECT_EQ(GetExpectedResultAsString( |
1460 0, | 818 ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
1461 ui::ET_KEY_PRESSED, | |
1462 keycode_super_l_, | |
1463 0U, | |
1464 KeyPress), | |
1465 GetRewrittenEventAsString(&rewriter, | 819 GetRewrittenEventAsString(&rewriter, |
1466 ui::VKEY_CONTROL, | 820 ui::VKEY_CONTROL, |
1467 0, | 821 ui::EF_CONTROL_DOWN, |
1468 ui::ET_KEY_PRESSED, | 822 ui::ET_KEY_PRESSED)); |
1469 keycode_control_l_, | |
1470 0U)); | |
1471 | 823 |
1472 // Then, press all of the three, Control+Alt+Search. | 824 // Then, press all of the three, Control+Alt+Search. |
1473 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 825 EXPECT_EQ(GetExpectedResultAsString( |
1474 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 826 ui::VKEY_MENU, |
1475 ui::ET_KEY_PRESSED, | 827 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1476 keycode_alt_l_, | 828 ui::ET_KEY_PRESSED), |
1477 ControlMask | Mod4Mask, | 829 GetRewrittenEventAsString( |
1478 KeyPress), | 830 &rewriter, |
1479 GetRewrittenEventAsString(&rewriter, | 831 ui::VKEY_LWIN, |
1480 ui::VKEY_LWIN, | 832 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1481 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 833 ui::ET_KEY_PRESSED)); |
1482 ui::ET_KEY_PRESSED, | |
1483 keycode_super_l_, | |
1484 ControlMask | Mod1Mask)); | |
1485 | 834 |
1486 // Press Shift+Control+Alt+Search. | 835 // Press Shift+Control+Alt+Search. |
1487 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 836 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
1488 (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 837 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1489 ui::EF_ALT_DOWN), | 838 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1490 ui::ET_KEY_PRESSED, | 839 ui::ET_KEY_PRESSED), |
1491 keycode_alt_l_, | |
1492 ShiftMask | ControlMask | Mod4Mask, | |
1493 KeyPress), | |
1494 GetRewrittenEventAsString(&rewriter, | 840 GetRewrittenEventAsString(&rewriter, |
1495 ui::VKEY_LWIN, | 841 ui::VKEY_LWIN, |
1496 ui::EF_SHIFT_DOWN | | 842 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1497 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 843 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1498 ui::ET_KEY_PRESSED, | 844 ui::ET_KEY_PRESSED)); |
1499 keycode_super_l_, | |
1500 ShiftMask | ControlMask | Mod1Mask)); | |
1501 | 845 |
1502 // Press Shift+Control+Alt+Search+B | 846 // Press Shift+Control+Alt+Search+B |
1503 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, | 847 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
1504 ui::EF_SHIFT_DOWN | | 848 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1505 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 849 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1506 ui::ET_KEY_PRESSED, | 850 ui::ET_KEY_PRESSED), |
1507 keycode_b_, | |
1508 ShiftMask | ControlMask | Mod1Mask | | |
1509 Mod4Mask, | |
1510 KeyPress), | |
1511 GetRewrittenEventAsString(&rewriter, | 851 GetRewrittenEventAsString(&rewriter, |
1512 ui::VKEY_B, | 852 ui::VKEY_B, |
1513 ui::EF_SHIFT_DOWN | | 853 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1514 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 854 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1515 ui::ET_KEY_PRESSED, | 855 ui::ET_KEY_PRESSED)); |
1516 keycode_b_, | |
1517 ShiftMask | ControlMask | Mod1Mask | | |
1518 Mod4Mask)); | |
1519 } | 856 } |
1520 | 857 |
1521 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 858 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
1522 // Remap Search to Caps Lock. | 859 // Remap Search to Caps Lock. |
1523 TestingPrefServiceSyncable prefs; | 860 TestingPrefServiceSyncable prefs; |
1524 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 861 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1525 IntegerPrefMember search; | 862 IntegerPrefMember search; |
1526 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 863 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1527 search.SetValue(chromeos::input_method::kCapsLockKey); | 864 search.SetValue(chromeos::input_method::kCapsLockKey); |
1528 | 865 |
1529 chromeos::input_method::FakeImeKeyboard keyboard; | 866 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1530 EventRewriter rewriter; | 867 EventRewriter rewriter; |
1531 rewriter.set_pref_service_for_testing(&prefs); | 868 rewriter.set_pref_service_for_testing(&prefs); |
1532 rewriter.set_keyboard_for_testing(&keyboard); | 869 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1533 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | 870 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1534 | 871 |
1535 // Press Search. | 872 // Press Search. |
1536 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 873 EXPECT_EQ( |
1537 ui::EF_CAPS_LOCK_DOWN, | 874 GetExpectedResultAsString( |
1538 ui::ET_KEY_PRESSED, | 875 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), |
1539 keycode_caps_lock_, | 876 GetRewrittenEventAsString( |
1540 0U, | 877 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
1541 KeyPress), | |
1542 GetRewrittenEventAsString(&rewriter, | |
1543 ui::VKEY_LWIN, | |
1544 0, | |
1545 ui::ET_KEY_PRESSED, | |
1546 keycode_super_l_, | |
1547 0U)); | |
1548 // Confirm that the Caps Lock status is changed. | 878 // Confirm that the Caps Lock status is changed. |
1549 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); | 879 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1550 | 880 |
1551 // Release Search. | 881 // Release Search. |
1552 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 882 EXPECT_EQ(GetExpectedResultAsString( |
1553 ui::EF_NONE, | 883 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1554 ui::ET_KEY_RELEASED, | 884 GetRewrittenEventAsString( |
1555 keycode_caps_lock_, | 885 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1556 LockMask, | |
1557 KeyRelease), | |
1558 GetRewrittenEventAsString(&rewriter, | |
1559 ui::VKEY_LWIN, | |
1560 ui::EF_CAPS_LOCK_DOWN, | |
1561 ui::ET_KEY_RELEASED, | |
1562 keycode_super_l_, | |
1563 Mod4Mask | LockMask)); | |
1564 // Confirm that the Caps Lock status is not changed. | 886 // Confirm that the Caps Lock status is not changed. |
1565 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); | 887 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1566 | 888 |
1567 // Press Search. | 889 // Press Search. |
1568 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 890 EXPECT_EQ( |
1569 ui::EF_CAPS_LOCK_DOWN, | 891 GetExpectedResultAsString( |
1570 ui::ET_KEY_PRESSED, | 892 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), |
1571 keycode_caps_lock_, | 893 GetRewrittenEventAsString(&rewriter, |
1572 LockMask, | 894 ui::VKEY_LWIN, |
1573 KeyPress), | 895 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, |
1574 GetRewrittenEventAsString(&rewriter, | 896 ui::ET_KEY_PRESSED)); |
1575 ui::VKEY_LWIN, | |
1576 ui::EF_CAPS_LOCK_DOWN, | |
1577 ui::ET_KEY_PRESSED, | |
1578 keycode_super_l_, | |
1579 LockMask)); | |
1580 // Confirm that the Caps Lock status is changed. | 897 // Confirm that the Caps Lock status is changed. |
1581 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | 898 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1582 | 899 |
1583 // Release Search. | 900 // Release Search. |
1584 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 901 EXPECT_EQ(GetExpectedResultAsString( |
1585 ui::EF_NONE, | 902 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1586 ui::ET_KEY_RELEASED, | 903 GetRewrittenEventAsString( |
1587 keycode_caps_lock_, | 904 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1588 LockMask, | |
1589 KeyRelease), | |
1590 GetRewrittenEventAsString(&rewriter, | |
1591 ui::VKEY_LWIN, | |
1592 ui::EF_CAPS_LOCK_DOWN, | |
1593 ui::ET_KEY_RELEASED, | |
1594 keycode_super_l_, | |
1595 Mod4Mask | LockMask)); | |
1596 // Confirm that the Caps Lock status is not changed. | 905 // Confirm that the Caps Lock status is not changed. |
1597 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | 906 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1598 | 907 |
1599 // Press Caps Lock (on an external keyboard). | 908 // Press Caps Lock (on an external keyboard). |
1600 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 909 EXPECT_EQ(GetExpectedResultAsString( |
1601 ui::EF_CAPS_LOCK_DOWN, | 910 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), |
1602 ui::ET_KEY_PRESSED, | |
1603 keycode_caps_lock_, | |
1604 0U, | |
1605 KeyPress), | |
1606 GetRewrittenEventAsString(&rewriter, | |
1607 ui::VKEY_CAPITAL, | |
1608 ui::EF_NONE, | |
1609 ui::ET_KEY_PRESSED, | |
1610 keycode_caps_lock_, | |
1611 0U)); | |
1612 | |
1613 // Confirm that calling RewriteForTesting() does not change the state of | |
1614 // |keyboard|. In this case, X Window system itself should change the | |
1615 // Caps Lock state, not ash::EventRewriter. | |
1616 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | |
1617 | |
1618 // Release Caps Lock (on an external keyboard). | |
1619 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | |
1620 ui::EF_NONE, | |
1621 ui::ET_KEY_RELEASED, | |
1622 keycode_caps_lock_, | |
1623 LockMask, | |
1624 KeyRelease), | |
1625 GetRewrittenEventAsString(&rewriter, | 911 GetRewrittenEventAsString(&rewriter, |
1626 ui::VKEY_CAPITAL, | 912 ui::VKEY_CAPITAL, |
1627 ui::EF_CAPS_LOCK_DOWN, | 913 ui::EF_CAPS_LOCK_DOWN, |
1628 ui::ET_KEY_RELEASED, | 914 ui::ET_KEY_PRESSED)); |
1629 keycode_caps_lock_, | 915 |
1630 LockMask)); | 916 // Confirm that calling RewriteForTesting() does not change the state of |
1631 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | 917 // |ime_keyboard|. In this case, X Window system itself should change the |
| 918 // Caps Lock state, not ash::EventRewriter. |
| 919 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 920 |
| 921 // Release Caps Lock (on an external keyboard). |
| 922 EXPECT_EQ(GetExpectedResultAsString( |
| 923 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 924 GetRewrittenEventAsString( |
| 925 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 926 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1632 } | 927 } |
1633 | 928 |
1634 TEST_F(EventRewriterTest, DISABLED_TestRewriteCapsLock) { | 929 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
1635 // It seems that the X server running on build servers is too old and does not | |
1636 // support F16 (i.e. 'XKeysymToKeycode(display_, XF86XK_Launch7)' call). | |
1637 // TODO(yusukes): Reenable the test once build servers are upgraded. | |
1638 | |
1639 TestingPrefServiceSyncable prefs; | 930 TestingPrefServiceSyncable prefs; |
1640 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 931 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1641 | 932 |
1642 chromeos::input_method::FakeImeKeyboard keyboard; | 933 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1643 EventRewriter rewriter; | 934 EventRewriter rewriter; |
1644 rewriter.set_pref_service_for_testing(&prefs); | 935 rewriter.set_pref_service_for_testing(&prefs); |
1645 rewriter.set_keyboard_for_testing(&keyboard); | 936 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1646 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); | 937 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1647 | 938 |
1648 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 939 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1649 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 940 EXPECT_EQ(GetExpectedResultAsString( |
1650 ui::EF_CAPS_LOCK_DOWN, | 941 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), |
1651 ui::ET_KEY_PRESSED, | 942 GetRewrittenEventAsString( |
1652 keycode_caps_lock_, | 943 &rewriter, ui::VKEY_F16, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1653 0U, | 944 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1654 KeyPress), | |
1655 GetRewrittenEventAsString(&rewriter, | |
1656 ui::VKEY_F16, | |
1657 0, | |
1658 ui::ET_KEY_PRESSED, | |
1659 keycode_launch7_, | |
1660 0U)); | |
1661 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); | |
1662 } | 945 } |
1663 | 946 |
1664 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKey) { | 947 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
1665 // TODO(yusukes): Reenable the test once build servers are upgraded. | |
1666 | |
1667 TestingPrefServiceSyncable prefs; | 948 TestingPrefServiceSyncable prefs; |
1668 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 949 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1669 | 950 |
1670 chromeos::input_method::FakeImeKeyboard keyboard; | 951 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1671 EventRewriter rewriter; | 952 EventRewriter rewriter; |
1672 rewriter.set_pref_service_for_testing(&prefs); | 953 rewriter.set_pref_service_for_testing(&prefs); |
1673 rewriter.set_keyboard_for_testing(&keyboard); | 954 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1674 | 955 |
1675 // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. | 956 // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. |
1676 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 957 EXPECT_EQ(GetExpectedResultAsString( |
1677 ui::EF_CONTROL_DOWN, | 958 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1678 ui::ET_KEY_PRESSED, | 959 GetRewrittenEventAsString( |
1679 keycode_control_l_, | 960 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1680 0U, | |
1681 KeyPress), | |
1682 GetRewrittenEventAsString(&rewriter, | |
1683 ui::VKEY_F15, | |
1684 0, | |
1685 ui::ET_KEY_PRESSED, | |
1686 keycode_launch6_, | |
1687 0U)); | |
1688 | 961 |
1689 // However, Mod2Mask should not be rewritten to CtrlMask when | 962 // However, Mod2Mask should not be rewritten to CtrlMask when |
1690 // --has-chromeos-diamond-key is not specified. | 963 // --has-chromeos-diamond-key is not specified. |
1691 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 964 EXPECT_EQ( |
1692 0, | 965 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1693 ui::ET_KEY_PRESSED, | 966 GetRewrittenEventAsString( |
1694 keycode_a_, | 967 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1695 Mod2Mask, | |
1696 KeyPress), | |
1697 GetRewrittenEventAsString(&rewriter, | |
1698 ui::VKEY_A, | |
1699 0, | |
1700 ui::ET_KEY_PRESSED, | |
1701 keycode_a_, | |
1702 Mod2Mask)); | |
1703 } | 968 } |
1704 | 969 |
1705 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKeyWithFlag) { | 970 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
1706 // TODO(yusukes): Reenable the test once build servers are upgraded. | |
1707 | |
1708 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 971 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
1709 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 972 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1710 chromeos::switches::kHasChromeOSDiamondKey, ""); | 973 chromeos::switches::kHasChromeOSDiamondKey, ""); |
1711 | 974 |
1712 TestingPrefServiceSyncable prefs; | 975 TestingPrefServiceSyncable prefs; |
1713 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 976 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1714 | 977 |
1715 chromeos::input_method::FakeImeKeyboard keyboard; | 978 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1716 EventRewriter rewriter; | 979 EventRewriter rewriter; |
1717 rewriter.set_pref_service_for_testing(&prefs); | 980 rewriter.set_pref_service_for_testing(&prefs); |
1718 rewriter.set_keyboard_for_testing(&keyboard); | 981 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1719 | 982 |
1720 // By default, F15 should work as Control. | 983 // By default, F15 should work as Control. |
1721 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 984 EXPECT_EQ(GetExpectedResultAsString( |
1722 ui::EF_CONTROL_DOWN, | 985 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1723 ui::ET_KEY_PRESSED, | 986 GetRewrittenEventAsString( |
1724 keycode_control_l_, | 987 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1725 0U, | |
1726 KeyPress), | |
1727 GetRewrittenEventAsString(&rewriter, | |
1728 ui::VKEY_F15, | |
1729 0, | |
1730 ui::ET_KEY_PRESSED, | |
1731 keycode_launch6_, | |
1732 0U)); | |
1733 | 988 |
1734 IntegerPrefMember diamond; | 989 IntegerPrefMember diamond; |
1735 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 990 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
1736 diamond.SetValue(chromeos::input_method::kVoidKey); | 991 diamond.SetValue(chromeos::input_method::kVoidKey); |
1737 | 992 |
1738 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, | 993 EXPECT_EQ(GetExpectedResultAsString( |
1739 0, | 994 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1740 ui::ET_KEY_PRESSED, | 995 GetRewrittenEventAsString( |
1741 keycode_void_symbol_, | 996 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1742 0U, | |
1743 KeyPress), | |
1744 GetRewrittenEventAsString(&rewriter, | |
1745 ui::VKEY_F15, | |
1746 0, | |
1747 ui::ET_KEY_PRESSED, | |
1748 keycode_launch6_, | |
1749 0U)); | |
1750 | 997 |
1751 diamond.SetValue(chromeos::input_method::kControlKey); | 998 diamond.SetValue(chromeos::input_method::kControlKey); |
1752 | 999 |
1753 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 1000 EXPECT_EQ(GetExpectedResultAsString( |
1754 ui::EF_CONTROL_DOWN, | 1001 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1755 ui::ET_KEY_PRESSED, | 1002 GetRewrittenEventAsString( |
1756 keycode_control_l_, | 1003 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1757 0U, | |
1758 KeyPress), | |
1759 GetRewrittenEventAsString(&rewriter, | |
1760 ui::VKEY_F15, | |
1761 0, | |
1762 ui::ET_KEY_PRESSED, | |
1763 keycode_launch6_, | |
1764 0U)); | |
1765 | 1004 |
1766 diamond.SetValue(chromeos::input_method::kAltKey); | 1005 diamond.SetValue(chromeos::input_method::kAltKey); |
1767 | 1006 |
1768 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, | 1007 EXPECT_EQ(GetExpectedResultAsString( |
1769 ui::EF_ALT_DOWN, | 1008 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1770 ui::ET_KEY_PRESSED, | 1009 GetRewrittenEventAsString( |
1771 keycode_alt_l_, | 1010 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1772 0, | |
1773 KeyPress), | |
1774 GetRewrittenEventAsString(&rewriter, | |
1775 ui::VKEY_F15, | |
1776 0, | |
1777 ui::ET_KEY_PRESSED, | |
1778 keycode_launch6_, | |
1779 0U)); | |
1780 | 1011 |
1781 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1012 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1782 | 1013 |
1783 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1014 EXPECT_EQ(GetExpectedResultAsString( |
1784 ui::EF_CAPS_LOCK_DOWN, | 1015 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), |
1785 ui::ET_KEY_PRESSED, | 1016 GetRewrittenEventAsString( |
1786 keycode_caps_lock_, | 1017 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1787 0U, | |
1788 KeyPress), | |
1789 GetRewrittenEventAsString(&rewriter, | |
1790 ui::VKEY_F15, | |
1791 0, | |
1792 ui::ET_KEY_PRESSED, | |
1793 keycode_launch6_, | |
1794 0U)); | |
1795 | 1018 |
1796 *CommandLine::ForCurrentProcess() = original_cl; | 1019 *CommandLine::ForCurrentProcess() = original_cl; |
1797 } | 1020 } |
1798 | 1021 |
1799 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1022 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1023 // Remap CapsLock to Control. |
1800 TestingPrefServiceSyncable prefs; | 1024 TestingPrefServiceSyncable prefs; |
1801 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1025 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1802 IntegerPrefMember control; | 1026 IntegerPrefMember control; |
1803 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1027 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1804 control.SetValue(chromeos::input_method::kControlKey); | 1028 control.SetValue(chromeos::input_method::kControlKey); |
1805 | 1029 |
1806 EventRewriter rewriter; | 1030 EventRewriter rewriter; |
1807 rewriter.set_pref_service_for_testing(&prefs); | 1031 rewriter.set_pref_service_for_testing(&prefs); |
1808 | 1032 |
1809 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1033 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1810 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1034 // On Chrome OS, CapsLock works as a Mod3 modifier. |
1811 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1035 EXPECT_EQ( |
1812 ui::EF_CONTROL_DOWN, | 1036 GetExpectedResultAsString( |
1813 ui::ET_KEY_PRESSED, | 1037 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1814 keycode_a_, | 1038 GetRewrittenEventAsString( |
1815 ControlMask, | 1039 &rewriter, ui::VKEY_A, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED)); |
1816 KeyPress), | |
1817 GetRewrittenEventAsString(&rewriter, | |
1818 ui::VKEY_A, | |
1819 0, | |
1820 ui::ET_KEY_PRESSED, | |
1821 keycode_a_, | |
1822 Mod3Mask)); | |
1823 | 1040 |
1824 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask | 1041 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask |
1825 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1042 EXPECT_EQ( |
1826 ui::EF_CONTROL_DOWN, | 1043 GetExpectedResultAsString( |
1827 ui::ET_KEY_PRESSED, | 1044 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1828 keycode_a_, | 1045 GetRewrittenEventAsString( |
1829 ControlMask, | 1046 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
1830 KeyPress), | |
1831 GetRewrittenEventAsString(&rewriter, | |
1832 ui::VKEY_A, | |
1833 ui::EF_CONTROL_DOWN, | |
1834 ui::ET_KEY_PRESSED, | |
1835 keycode_a_, | |
1836 Mod3Mask | ControlMask)); | |
1837 | 1047 |
1838 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1048 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1839 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1049 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
1840 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1050 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1841 ui::ET_KEY_PRESSED, | 1051 ui::ET_KEY_PRESSED), |
1842 keycode_a_, | |
1843 Mod1Mask | ControlMask, | |
1844 KeyPress), | |
1845 GetRewrittenEventAsString(&rewriter, | 1052 GetRewrittenEventAsString(&rewriter, |
1846 ui::VKEY_A, | 1053 ui::VKEY_A, |
1847 ui::EF_ALT_DOWN, | 1054 ui::EF_ALT_DOWN | ui::EF_CAPS_LOCK_DOWN, |
1848 ui::ET_KEY_PRESSED, | 1055 ui::ET_KEY_PRESSED)); |
1849 keycode_a_, | |
1850 Mod1Mask | Mod3Mask)); | |
1851 } | 1056 } |
1852 | 1057 |
1853 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1058 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1854 // Remap CapsLock to Control. | 1059 // Remap CapsLock to Control. |
1855 TestingPrefServiceSyncable prefs; | 1060 TestingPrefServiceSyncable prefs; |
1856 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1061 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1857 IntegerPrefMember control; | 1062 IntegerPrefMember control; |
1858 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1063 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1859 control.SetValue(chromeos::input_method::kControlKey); | 1064 control.SetValue(chromeos::input_method::kControlKey); |
1860 | 1065 |
1861 EventRewriter rewriter; | 1066 EventRewriter rewriter; |
1862 rewriter.set_pref_service_for_testing(&prefs); | 1067 rewriter.set_pref_service_for_testing(&prefs); |
1863 input_method_manager_mock_->set_mod3_used(true); | 1068 input_method_manager_mock_->set_mod3_used(true); |
1864 | 1069 |
1865 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1070 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
1866 // when Mod3Mask is already in use by the current XKB layout. | 1071 // when Mod3Mask is already in use by the current XKB layout. |
1867 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1072 EXPECT_EQ( |
1868 0, | 1073 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1869 ui::ET_KEY_PRESSED, | 1074 GetRewrittenEventAsString( |
1870 keycode_a_, | 1075 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1871 Mod3Mask, | |
1872 KeyPress), | |
1873 GetRewrittenEventAsString(&rewriter, | |
1874 ui::VKEY_A, | |
1875 0, | |
1876 ui::ET_KEY_PRESSED, | |
1877 keycode_a_, | |
1878 Mod3Mask)); | |
1879 | 1076 |
1880 input_method_manager_mock_->set_mod3_used(false); | 1077 input_method_manager_mock_->set_mod3_used(false); |
1881 } | 1078 } |
1882 | 1079 |
1883 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1080 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
1884 TestingPrefServiceSyncable prefs; | 1081 TestingPrefServiceSyncable prefs; |
1885 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1082 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1886 EventRewriter rewriter; | 1083 EventRewriter rewriter; |
| 1084 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
| 1085 rewriter.set_last_device_id_for_testing(0); |
1887 rewriter.set_pref_service_for_testing(&prefs); | 1086 rewriter.set_pref_service_for_testing(&prefs); |
1888 | 1087 |
1889 struct { | 1088 struct { |
1890 ui::KeyboardCode input; | 1089 ui::KeyboardCode input; |
1891 KeyCode input_native; | |
1892 unsigned int input_mods; | 1090 unsigned int input_mods; |
1893 unsigned int input_native_mods; | |
1894 ui::KeyboardCode output; | 1091 ui::KeyboardCode output; |
1895 KeyCode output_native; | |
1896 unsigned int output_mods; | 1092 unsigned int output_mods; |
1897 unsigned int output_native_mods; | |
1898 } chromeos_tests[] = { | 1093 } chromeos_tests[] = { |
1899 // Alt+Backspace -> Delete | 1094 // Alt+Backspace -> Delete |
1900 { ui::VKEY_BACK, keycode_backspace_, | 1095 {ui::VKEY_BACK, ui::EF_ALT_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, |
1901 ui::EF_ALT_DOWN, Mod1Mask, | 1096 // Control+Alt+Backspace -> Control+Delete |
1902 ui::VKEY_DELETE, keycode_delete_, | 1097 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DELETE, |
1903 0, 0, }, | 1098 ui::EF_CONTROL_DOWN}, |
1904 // Control+Alt+Backspace -> Control+Delete | 1099 // Search+Alt+Backspace -> Alt+Backspace |
1905 { ui::VKEY_BACK, keycode_backspace_, | 1100 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_BACK, |
1906 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, | 1101 ui::EF_ALT_DOWN}, |
1907 ui::VKEY_DELETE, keycode_delete_, | 1102 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
1908 ui::EF_CONTROL_DOWN, ControlMask, }, | 1103 {ui::VKEY_BACK, |
1909 // Search+Alt+Backspace -> Alt+Backspace | 1104 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1910 { ui::VKEY_BACK, keycode_backspace_, | 1105 ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1911 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, | 1106 // Alt+Up -> Prior |
1912 ui::VKEY_BACK, keycode_backspace_, | 1107 {ui::VKEY_UP, ui::EF_ALT_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, |
1913 ui::EF_ALT_DOWN, Mod1Mask, }, | 1108 // Alt+Down -> Next |
1914 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | 1109 {ui::VKEY_DOWN, ui::EF_ALT_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, |
1915 { ui::VKEY_BACK, keycode_backspace_, | 1110 // Ctrl+Alt+Up -> Home |
1916 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, | 1111 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_HOME, |
1917 ui::VKEY_BACK, keycode_backspace_, | 1112 ui::EF_NONE}, |
1918 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, }, | 1113 // Ctrl+Alt+Down -> End |
1919 // Alt+Up -> Prior | 1114 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_END, |
1920 { ui::VKEY_UP, keycode_up_, | 1115 ui::EF_NONE}, |
1921 ui::EF_ALT_DOWN, Mod1Mask, | |
1922 ui::VKEY_PRIOR, keycode_prior_, | |
1923 0, 0, }, | |
1924 // Alt+Down -> Next | |
1925 { ui::VKEY_DOWN, keycode_down_, | |
1926 ui::EF_ALT_DOWN, Mod1Mask, | |
1927 ui::VKEY_NEXT, keycode_next_, | |
1928 0, 0, }, | |
1929 // Ctrl+Alt+Up -> Home | |
1930 { ui::VKEY_UP, keycode_up_, | |
1931 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, | |
1932 ui::VKEY_HOME, keycode_home_, | |
1933 0, 0, }, | |
1934 // Ctrl+Alt+Down -> End | |
1935 { ui::VKEY_DOWN, keycode_down_, | |
1936 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, | |
1937 ui::VKEY_END, keycode_end_, | |
1938 0, 0, }, | |
1939 | 1116 |
1940 // Search+Alt+Up -> Alt+Up | 1117 // Search+Alt+Up -> Alt+Up |
1941 { ui::VKEY_UP, keycode_up_, | 1118 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_UP, |
1942 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, | 1119 ui::EF_ALT_DOWN}, |
1943 ui::VKEY_UP, keycode_up_, | 1120 // Search+Alt+Down -> Alt+Down |
1944 ui::EF_ALT_DOWN, Mod1Mask }, | 1121 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_DOWN, |
1945 // Search+Alt+Down -> Alt+Down | 1122 ui::EF_ALT_DOWN}, |
1946 { ui::VKEY_DOWN, keycode_down_, | 1123 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
1947 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, | 1124 {ui::VKEY_UP, |
1948 ui::VKEY_DOWN, keycode_down_, | 1125 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1949 ui::EF_ALT_DOWN, Mod1Mask }, | 1126 ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1950 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | 1127 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
1951 { ui::VKEY_UP, keycode_up_, | 1128 {ui::VKEY_DOWN, |
1952 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, | 1129 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1953 ui::VKEY_UP, keycode_up_, | 1130 ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1954 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask }, | |
1955 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | |
1956 { ui::VKEY_DOWN, keycode_down_, | |
1957 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, | |
1958 ui::VKEY_DOWN, keycode_down_, | |
1959 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask }, | |
1960 | 1131 |
1961 // Period -> Period | 1132 // Period -> Period |
1962 { ui::VKEY_OEM_PERIOD, keycode_period_, 0, 0, | 1133 {ui::VKEY_OEM_PERIOD, ui::EF_NONE, ui::VKEY_OEM_PERIOD, ui::EF_NONE}, |
1963 ui::VKEY_OEM_PERIOD, keycode_period_, 0, 0 }, | |
1964 | 1134 |
1965 // Search+Backspace -> Delete | 1135 // Search+Backspace -> Delete |
1966 { ui::VKEY_BACK, keycode_backspace_, | 1136 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, |
1967 0, Mod4Mask, | 1137 // Search+Up -> Prior |
1968 ui::VKEY_DELETE, keycode_delete_, | 1138 {ui::VKEY_UP, ui::EF_COMMAND_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, |
1969 0, 0, }, | 1139 // Search+Down -> Next |
1970 // Search+Up -> Prior | 1140 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, |
1971 { ui::VKEY_UP, keycode_up_, | 1141 // Search+Left -> Home |
1972 0, Mod4Mask, | 1142 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, ui::VKEY_HOME, ui::EF_NONE}, |
1973 ui::VKEY_PRIOR, keycode_prior_, | 1143 // Control+Search+Left -> Home |
1974 0, 0, }, | 1144 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1975 // Search+Down -> Next | 1145 ui::VKEY_HOME, ui::EF_CONTROL_DOWN}, |
1976 { ui::VKEY_DOWN, keycode_down_, | 1146 // Search+Right -> End |
1977 0, Mod4Mask, | 1147 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN, ui::VKEY_END, ui::EF_NONE}, |
1978 ui::VKEY_NEXT, keycode_next_, | 1148 // Control+Search+Right -> End |
1979 0, 0, }, | 1149 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1980 // Search+Left -> Home | 1150 ui::VKEY_END, ui::EF_CONTROL_DOWN}, |
1981 { ui::VKEY_LEFT, keycode_left_, | 1151 // Search+Period -> Insert |
1982 0, Mod4Mask, | 1152 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN, ui::VKEY_INSERT, |
1983 ui::VKEY_HOME, keycode_home_, | 1153 ui::EF_NONE}, |
1984 0, 0, }, | 1154 // Control+Search+Period -> Control+Insert |
1985 // Control+Search+Left -> Home | 1155 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1986 { ui::VKEY_LEFT, keycode_left_, | 1156 ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}; |
1987 ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, | |
1988 ui::VKEY_HOME, keycode_home_, | |
1989 ui::EF_CONTROL_DOWN, ControlMask }, | |
1990 // Search+Right -> End | |
1991 { ui::VKEY_RIGHT, keycode_right_, | |
1992 0, Mod4Mask, | |
1993 ui::VKEY_END, keycode_end_, | |
1994 0, 0, }, | |
1995 // Control+Search+Right -> End | |
1996 { ui::VKEY_RIGHT, keycode_right_, | |
1997 ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, | |
1998 ui::VKEY_END, keycode_end_, | |
1999 ui::EF_CONTROL_DOWN, ControlMask }, | |
2000 // Search+Period -> Insert | |
2001 { ui::VKEY_OEM_PERIOD, keycode_period_, 0, Mod4Mask, | |
2002 ui::VKEY_INSERT, keycode_insert_, 0, 0 }, | |
2003 // Control+Search+Period -> Control+Insert | |
2004 { ui::VKEY_OEM_PERIOD, keycode_period_, | |
2005 ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, | |
2006 ui::VKEY_INSERT, keycode_insert_, | |
2007 ui::EF_CONTROL_DOWN, ControlMask } | |
2008 }; | |
2009 | 1157 |
2010 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(chromeos_tests); ++i) { | 1158 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(chromeos_tests); ++i) { |
2011 EXPECT_EQ(GetExpectedResultAsString(chromeos_tests[i].output, | 1159 EXPECT_EQ(GetExpectedResultNumbered(i, |
| 1160 chromeos_tests[i].output, |
2012 chromeos_tests[i].output_mods, | 1161 chromeos_tests[i].output_mods, |
2013 ui::ET_KEY_PRESSED, | 1162 ui::ET_KEY_PRESSED), |
2014 chromeos_tests[i].output_native, | 1163 GetRewrittenEventNumbered(i, |
2015 chromeos_tests[i].output_native_mods, | 1164 &rewriter, |
2016 KeyPress), | |
2017 GetRewrittenEventAsString(&rewriter, | |
2018 chromeos_tests[i].input, | 1165 chromeos_tests[i].input, |
2019 chromeos_tests[i].input_mods, | 1166 chromeos_tests[i].input_mods, |
2020 ui::ET_KEY_PRESSED, | 1167 ui::ET_KEY_PRESSED)); |
2021 chromeos_tests[i].input_native, | |
2022 chromeos_tests[i].input_native_mods)); | |
2023 } | 1168 } |
2024 } | 1169 } |
2025 | 1170 |
2026 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1171 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
2027 TestingPrefServiceSyncable prefs; | 1172 TestingPrefServiceSyncable prefs; |
2028 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1173 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2029 EventRewriter rewriter; | 1174 EventRewriter rewriter; |
2030 rewriter.set_pref_service_for_testing(&prefs); | 1175 rewriter.set_pref_service_for_testing(&prefs); |
2031 | 1176 |
2032 struct { | 1177 struct { |
2033 ui::KeyboardCode input; | 1178 ui::KeyboardCode input; |
2034 KeyCode input_native; | |
2035 unsigned int input_native_mods; | |
2036 unsigned int input_mods; | 1179 unsigned int input_mods; |
2037 ui::KeyboardCode output; | 1180 ui::KeyboardCode output; |
2038 KeyCode output_native; | |
2039 unsigned int output_native_mods; | |
2040 unsigned int output_mods; | 1181 unsigned int output_mods; |
2041 } tests[] = { | 1182 } tests[] = { |
2042 // F1 -> Back | 1183 // F1 -> Back |
2043 { ui::VKEY_F1, keycode_f1_, 0, 0, | 1184 {ui::VKEY_F1, ui::EF_NONE, ui::VKEY_BROWSER_BACK, ui::EF_NONE}, |
2044 ui::VKEY_BROWSER_BACK, keycode_browser_back_, 0, 0 }, | 1185 {ui::VKEY_F1, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_BACK, |
2045 { ui::VKEY_F1, keycode_f1_, ControlMask, ui::EF_CONTROL_DOWN, | 1186 ui::EF_CONTROL_DOWN}, |
2046 ui::VKEY_BROWSER_BACK, keycode_browser_back_, | 1187 {ui::VKEY_F1, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, |
2047 ControlMask, ui::EF_CONTROL_DOWN }, | 1188 // F2 -> Forward |
2048 { ui::VKEY_F1, keycode_f1_, Mod1Mask, ui::EF_ALT_DOWN, | 1189 {ui::VKEY_F2, ui::EF_NONE, ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, |
2049 ui::VKEY_BROWSER_BACK, keycode_browser_back_, | 1190 {ui::VKEY_F2, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_FORWARD, |
2050 Mod1Mask, ui::EF_ALT_DOWN }, | 1191 ui::EF_CONTROL_DOWN}, |
2051 // F2 -> Forward | 1192 {ui::VKEY_F2, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_FORWARD, |
2052 { ui::VKEY_F2, keycode_f2_, 0, 0, | 1193 ui::EF_ALT_DOWN}, |
2053 ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, 0, 0 }, | 1194 // F3 -> Refresh |
2054 { ui::VKEY_F2, keycode_f2_, ControlMask, ui::EF_CONTROL_DOWN, | 1195 {ui::VKEY_F3, ui::EF_NONE, ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, |
2055 ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, | 1196 {ui::VKEY_F3, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_REFRESH, |
2056 ControlMask, ui::EF_CONTROL_DOWN }, | 1197 ui::EF_CONTROL_DOWN}, |
2057 { ui::VKEY_F2, keycode_f2_, Mod1Mask, ui::EF_ALT_DOWN, | 1198 {ui::VKEY_F3, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_REFRESH, |
2058 ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, | 1199 ui::EF_ALT_DOWN}, |
2059 Mod1Mask, ui::EF_ALT_DOWN }, | 1200 // F4 -> Launch App 2 |
2060 // F3 -> Refresh | 1201 {ui::VKEY_F4, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, |
2061 { ui::VKEY_F3, keycode_f3_, 0, 0, | 1202 {ui::VKEY_F4, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, |
2062 ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, 0, 0 }, | 1203 ui::EF_CONTROL_DOWN}, |
2063 { ui::VKEY_F3, keycode_f3_, ControlMask, ui::EF_CONTROL_DOWN, | 1204 {ui::VKEY_F4, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, |
2064 ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, | 1205 ui::EF_ALT_DOWN}, |
2065 ControlMask, ui::EF_CONTROL_DOWN }, | 1206 // F5 -> Launch App 1 |
2066 { ui::VKEY_F3, keycode_f3_, Mod1Mask, ui::EF_ALT_DOWN, | 1207 {ui::VKEY_F5, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, |
2067 ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, | 1208 {ui::VKEY_F5, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, |
2068 Mod1Mask, ui::EF_ALT_DOWN }, | 1209 ui::EF_CONTROL_DOWN}, |
2069 // F4 -> Launch App 2 | 1210 {ui::VKEY_F5, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, |
2070 { ui::VKEY_F4, keycode_f4_, 0, 0, | 1211 ui::EF_ALT_DOWN}, |
2071 ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, 0, 0 }, | 1212 // F6 -> Brightness down |
2072 { ui::VKEY_F4, keycode_f4_, ControlMask, ui::EF_CONTROL_DOWN, | 1213 {ui::VKEY_F6, ui::EF_NONE, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, |
2073 ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, | 1214 {ui::VKEY_F6, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_DOWN, |
2074 ControlMask, ui::EF_CONTROL_DOWN }, | 1215 ui::EF_CONTROL_DOWN}, |
2075 { ui::VKEY_F4, keycode_f4_, Mod1Mask, ui::EF_ALT_DOWN, | 1216 {ui::VKEY_F6, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_DOWN, |
2076 ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, | 1217 ui::EF_ALT_DOWN}, |
2077 Mod1Mask, ui::EF_ALT_DOWN }, | 1218 // F7 -> Brightness up |
2078 // F5 -> Launch App 1 | 1219 {ui::VKEY_F7, ui::EF_NONE, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, |
2079 { ui::VKEY_F5, keycode_f5_, 0, 0, | 1220 {ui::VKEY_F7, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_UP, |
2080 ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, 0, 0 }, | 1221 ui::EF_CONTROL_DOWN}, |
2081 { ui::VKEY_F5, keycode_f5_, ControlMask, ui::EF_CONTROL_DOWN, | 1222 {ui::VKEY_F7, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, |
2082 ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, | 1223 // F8 -> Volume Mute |
2083 ControlMask, ui::EF_CONTROL_DOWN }, | 1224 {ui::VKEY_F8, ui::EF_NONE, ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, |
2084 { ui::VKEY_F5, keycode_f5_, Mod1Mask, ui::EF_ALT_DOWN, | 1225 {ui::VKEY_F8, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_MUTE, |
2085 ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, | 1226 ui::EF_CONTROL_DOWN}, |
2086 Mod1Mask, ui::EF_ALT_DOWN }, | 1227 {ui::VKEY_F8, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, |
2087 // F6 -> Brightness down | 1228 // F9 -> Volume Down |
2088 { ui::VKEY_F6, keycode_f6_, 0, 0, | 1229 {ui::VKEY_F9, ui::EF_NONE, ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, |
2089 ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, 0, 0 }, | 1230 {ui::VKEY_F9, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_DOWN, |
2090 { ui::VKEY_F6, keycode_f6_, ControlMask, ui::EF_CONTROL_DOWN, | 1231 ui::EF_CONTROL_DOWN}, |
2091 ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, | 1232 {ui::VKEY_F9, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, |
2092 ControlMask, ui::EF_CONTROL_DOWN }, | 1233 // F10 -> Volume Up |
2093 { ui::VKEY_F6, keycode_f6_, Mod1Mask, ui::EF_ALT_DOWN, | 1234 {ui::VKEY_F10, ui::EF_NONE, ui::VKEY_VOLUME_UP, ui::EF_NONE}, |
2094 ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, | 1235 {ui::VKEY_F10, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_UP, |
2095 Mod1Mask, ui::EF_ALT_DOWN }, | 1236 ui::EF_CONTROL_DOWN}, |
2096 // F7 -> Brightness up | 1237 {ui::VKEY_F10, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, |
2097 { ui::VKEY_F7, keycode_f7_, 0, 0, | 1238 // F11 -> F11 |
2098 ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, 0, 0 }, | 1239 {ui::VKEY_F11, ui::EF_NONE, ui::VKEY_F11, ui::EF_NONE}, |
2099 { ui::VKEY_F7, keycode_f7_, ControlMask, ui::EF_CONTROL_DOWN, | 1240 {ui::VKEY_F11, ui::EF_CONTROL_DOWN, ui::VKEY_F11, ui::EF_CONTROL_DOWN}, |
2100 ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, | 1241 {ui::VKEY_F11, ui::EF_ALT_DOWN, ui::VKEY_F11, ui::EF_ALT_DOWN}, |
2101 ControlMask, ui::EF_CONTROL_DOWN }, | 1242 // F12 -> F12 |
2102 { ui::VKEY_F7, keycode_f7_, Mod1Mask, ui::EF_ALT_DOWN, | 1243 {ui::VKEY_F12, ui::EF_NONE, ui::VKEY_F12, ui::EF_NONE}, |
2103 ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, | 1244 {ui::VKEY_F12, ui::EF_CONTROL_DOWN, ui::VKEY_F12, ui::EF_CONTROL_DOWN}, |
2104 Mod1Mask, ui::EF_ALT_DOWN }, | 1245 {ui::VKEY_F12, ui::EF_ALT_DOWN, ui::VKEY_F12, ui::EF_ALT_DOWN}, |
2105 // F8 -> Volume Mute | |
2106 { ui::VKEY_F8, keycode_f8_, 0, 0, | |
2107 ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, 0, 0 }, | |
2108 { ui::VKEY_F8, keycode_f8_, ControlMask, ui::EF_CONTROL_DOWN, | |
2109 ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, | |
2110 ControlMask, ui::EF_CONTROL_DOWN }, | |
2111 { ui::VKEY_F8, keycode_f8_, Mod1Mask, ui::EF_ALT_DOWN, | |
2112 ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, | |
2113 Mod1Mask, ui::EF_ALT_DOWN }, | |
2114 // F9 -> Volume Down | |
2115 { ui::VKEY_F9, keycode_f9_, 0, 0, | |
2116 ui::VKEY_VOLUME_DOWN, keycode_volume_down_, 0, 0 }, | |
2117 { ui::VKEY_F9, keycode_f9_, ControlMask, ui::EF_CONTROL_DOWN, | |
2118 ui::VKEY_VOLUME_DOWN, keycode_volume_down_, | |
2119 ControlMask, ui::EF_CONTROL_DOWN }, | |
2120 { ui::VKEY_F9, keycode_f9_, Mod1Mask, ui::EF_ALT_DOWN, | |
2121 ui::VKEY_VOLUME_DOWN, keycode_volume_down_, | |
2122 Mod1Mask, ui::EF_ALT_DOWN }, | |
2123 // F10 -> Volume Up | |
2124 { ui::VKEY_F10, keycode_f10_, 0, 0, | |
2125 ui::VKEY_VOLUME_UP, keycode_volume_up_, 0, 0 }, | |
2126 { ui::VKEY_F10, keycode_f10_, ControlMask, ui::EF_CONTROL_DOWN, | |
2127 ui::VKEY_VOLUME_UP, keycode_volume_up_, | |
2128 ControlMask, ui::EF_CONTROL_DOWN }, | |
2129 { ui::VKEY_F10, keycode_f10_, Mod1Mask, ui::EF_ALT_DOWN, | |
2130 ui::VKEY_VOLUME_UP, keycode_volume_up_, | |
2131 Mod1Mask, ui::EF_ALT_DOWN }, | |
2132 // F11 -> F11 | |
2133 { ui::VKEY_F11, keycode_f11_, 0, 0, | |
2134 ui::VKEY_F11, keycode_f11_, 0, 0 }, | |
2135 { ui::VKEY_F11, keycode_f11_, ControlMask, ui::EF_CONTROL_DOWN, | |
2136 ui::VKEY_F11, keycode_f11_, ControlMask, ui::EF_CONTROL_DOWN }, | |
2137 { ui::VKEY_F11, keycode_f11_, Mod1Mask, ui::EF_ALT_DOWN, | |
2138 ui::VKEY_F11, keycode_f11_, Mod1Mask, ui::EF_ALT_DOWN }, | |
2139 // F12 -> F12 | |
2140 { ui::VKEY_F12, keycode_f12_, 0, 0, | |
2141 ui::VKEY_F12, keycode_f12_, 0, 0 }, | |
2142 { ui::VKEY_F12, keycode_f12_, ControlMask, ui::EF_CONTROL_DOWN, | |
2143 ui::VKEY_F12, keycode_f12_, ControlMask, ui::EF_CONTROL_DOWN }, | |
2144 { ui::VKEY_F12, keycode_f12_, Mod1Mask, ui::EF_ALT_DOWN, | |
2145 ui::VKEY_F12, keycode_f12_, Mod1Mask, ui::EF_ALT_DOWN }, | |
2146 | 1246 |
2147 // The number row should not be rewritten without Search key. | 1247 // The number row should not be rewritten without Search key. |
2148 { ui::VKEY_1, keycode_1_, 0, 0, | 1248 {ui::VKEY_1, ui::EF_NONE, ui::VKEY_1, ui::EF_NONE}, |
2149 ui::VKEY_1, keycode_1_, 0, 0 }, | 1249 {ui::VKEY_2, ui::EF_NONE, ui::VKEY_2, ui::EF_NONE}, |
2150 { ui::VKEY_2, keycode_2_, 0, 0, | 1250 {ui::VKEY_3, ui::EF_NONE, ui::VKEY_3, ui::EF_NONE}, |
2151 ui::VKEY_2, keycode_2_, 0, 0 }, | 1251 {ui::VKEY_4, ui::EF_NONE, ui::VKEY_4, ui::EF_NONE}, |
2152 { ui::VKEY_3, keycode_3_, 0, 0, | 1252 {ui::VKEY_5, ui::EF_NONE, ui::VKEY_5, ui::EF_NONE}, |
2153 ui::VKEY_3, keycode_3_, 0, 0 }, | 1253 {ui::VKEY_6, ui::EF_NONE, ui::VKEY_6, ui::EF_NONE}, |
2154 { ui::VKEY_4, keycode_4_, 0, 0, | 1254 {ui::VKEY_7, ui::EF_NONE, ui::VKEY_7, ui::EF_NONE}, |
2155 ui::VKEY_4, keycode_4_, 0, 0 }, | 1255 {ui::VKEY_8, ui::EF_NONE, ui::VKEY_8, ui::EF_NONE}, |
2156 { ui::VKEY_5, keycode_5_, 0, 0, | 1256 {ui::VKEY_9, ui::EF_NONE, ui::VKEY_9, ui::EF_NONE}, |
2157 ui::VKEY_5, keycode_5_, 0, 0 }, | 1257 {ui::VKEY_0, ui::EF_NONE, ui::VKEY_0, ui::EF_NONE}, |
2158 { ui::VKEY_6, keycode_6_, 0, 0, | 1258 {ui::VKEY_OEM_MINUS, ui::EF_NONE, ui::VKEY_OEM_MINUS, ui::EF_NONE}, |
2159 ui::VKEY_6, keycode_6_, 0, 0 }, | 1259 {ui::VKEY_OEM_PLUS, ui::EF_NONE, ui::VKEY_OEM_PLUS, ui::EF_NONE}, |
2160 { ui::VKEY_7, keycode_7_, 0, 0, | |
2161 ui::VKEY_7, keycode_7_, 0, 0 }, | |
2162 { ui::VKEY_8, keycode_8_, 0, 0, | |
2163 ui::VKEY_8, keycode_8_, 0, 0 }, | |
2164 { ui::VKEY_9, keycode_9_, 0, 0, | |
2165 ui::VKEY_9, keycode_9_, 0, 0 }, | |
2166 { ui::VKEY_0, keycode_0_, 0, 0, | |
2167 ui::VKEY_0, keycode_0_, 0, 0 }, | |
2168 { ui::VKEY_OEM_MINUS, keycode_minus_, 0, 0, | |
2169 ui::VKEY_OEM_MINUS, keycode_minus_, 0, 0 }, | |
2170 { ui::VKEY_OEM_PLUS, keycode_equal_, 0, 0, | |
2171 ui::VKEY_OEM_PLUS, keycode_equal_, 0, 0 }, | |
2172 | 1260 |
2173 // The number row should be rewritten as the F<number> row with Search key. | 1261 // The number row should be rewritten as the F<number> row with Search |
2174 { ui::VKEY_1, keycode_1_, Mod4Mask, 0, | 1262 // key. |
2175 ui::VKEY_F1, keycode_f1_, 0, 0 }, | 1263 {ui::VKEY_1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, |
2176 { ui::VKEY_2, keycode_2_, Mod4Mask, 0, | 1264 {ui::VKEY_2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, |
2177 ui::VKEY_F2, keycode_f2_, 0, 0 }, | 1265 {ui::VKEY_3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, |
2178 { ui::VKEY_3, keycode_3_, Mod4Mask, 0, | 1266 {ui::VKEY_4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, |
2179 ui::VKEY_F3, keycode_f3_, 0, 0 }, | 1267 {ui::VKEY_5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, |
2180 { ui::VKEY_4, keycode_4_, Mod4Mask, 0, | 1268 {ui::VKEY_6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, |
2181 ui::VKEY_F4, keycode_f4_, 0, 0 }, | 1269 {ui::VKEY_7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, |
2182 { ui::VKEY_5, keycode_5_, Mod4Mask, 0, | 1270 {ui::VKEY_8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, |
2183 ui::VKEY_F5, keycode_f5_, 0, 0 }, | 1271 {ui::VKEY_9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, |
2184 { ui::VKEY_6, keycode_6_, Mod4Mask, 0, | 1272 {ui::VKEY_0, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, |
2185 ui::VKEY_F6, keycode_f6_, 0, 0 }, | 1273 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, |
2186 { ui::VKEY_7, keycode_7_, Mod4Mask, 0, | 1274 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, |
2187 ui::VKEY_F7, keycode_f7_, 0, 0 }, | |
2188 { ui::VKEY_8, keycode_8_, Mod4Mask, 0, | |
2189 ui::VKEY_F8, keycode_f8_, 0, 0 }, | |
2190 { ui::VKEY_9, keycode_9_, Mod4Mask, 0, | |
2191 ui::VKEY_F9, keycode_f9_, 0, 0 }, | |
2192 { ui::VKEY_0, keycode_0_, Mod4Mask, 0, | |
2193 ui::VKEY_F10, keycode_f10_, 0, 0 }, | |
2194 { ui::VKEY_OEM_MINUS, keycode_minus_, Mod4Mask, 0, | |
2195 ui::VKEY_F11, keycode_f11_, 0, 0 }, | |
2196 { ui::VKEY_OEM_PLUS, keycode_equal_, Mod4Mask, 0, | |
2197 ui::VKEY_F12, keycode_f12_, 0, 0 }, | |
2198 | 1275 |
2199 // The function keys should not be rewritten with Search key pressed. | 1276 // The function keys should not be rewritten with Search key pressed. |
2200 { ui::VKEY_F1, keycode_f1_, Mod4Mask, 0, | 1277 {ui::VKEY_F1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, |
2201 ui::VKEY_F1, keycode_f1_, 0, 0 }, | 1278 {ui::VKEY_F2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, |
2202 { ui::VKEY_F2, keycode_f2_, Mod4Mask, 0, | 1279 {ui::VKEY_F3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, |
2203 ui::VKEY_F2, keycode_f2_, 0, 0 }, | 1280 {ui::VKEY_F4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, |
2204 { ui::VKEY_F3, keycode_f3_, Mod4Mask, 0, | 1281 {ui::VKEY_F5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, |
2205 ui::VKEY_F3, keycode_f3_, 0, 0 }, | 1282 {ui::VKEY_F6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, |
2206 { ui::VKEY_F4, keycode_f4_, Mod4Mask, 0, | 1283 {ui::VKEY_F7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, |
2207 ui::VKEY_F4, keycode_f4_, 0, 0 }, | 1284 {ui::VKEY_F8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, |
2208 { ui::VKEY_F5, keycode_f5_, Mod4Mask, 0, | 1285 {ui::VKEY_F9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, |
2209 ui::VKEY_F5, keycode_f5_, 0, 0 }, | 1286 {ui::VKEY_F10, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, |
2210 { ui::VKEY_F6, keycode_f6_, Mod4Mask, 0, | 1287 {ui::VKEY_F11, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, |
2211 ui::VKEY_F6, keycode_f6_, 0, 0 }, | 1288 {ui::VKEY_F12, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, |
2212 { ui::VKEY_F7, keycode_f7_, Mod4Mask, 0, | 1289 }; |
2213 ui::VKEY_F7, keycode_f7_, 0, 0 }, | |
2214 { ui::VKEY_F8, keycode_f8_, Mod4Mask, 0, | |
2215 ui::VKEY_F8, keycode_f8_, 0, 0 }, | |
2216 { ui::VKEY_F9, keycode_f9_, Mod4Mask, 0, | |
2217 ui::VKEY_F9, keycode_f9_, 0, 0 }, | |
2218 { ui::VKEY_F10, keycode_f10_, Mod4Mask, 0, | |
2219 ui::VKEY_F10, keycode_f10_, 0, 0 }, | |
2220 { ui::VKEY_F11, keycode_f11_, Mod4Mask, 0, | |
2221 ui::VKEY_F11, keycode_f11_, 0, 0 }, | |
2222 { ui::VKEY_F12, keycode_f12_, Mod4Mask, 0, | |
2223 ui::VKEY_F12, keycode_f12_, 0, 0 }, | |
2224 }; | |
2225 | 1290 |
2226 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 1291 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
2227 // XKeysymToKeycode returns zero for unknown keys. So ignore those. | 1292 EXPECT_EQ(GetExpectedResultNumbered( |
2228 if (tests[i].output_native == 0) | 1293 i, tests[i].output, tests[i].output_mods, ui::ET_KEY_PRESSED), |
2229 continue; | 1294 GetRewrittenEventNumbered(i, |
2230 EXPECT_EQ(GetExpectedResultAsString(tests[i].output, | 1295 &rewriter, |
2231 tests[i].output_mods, | |
2232 ui::ET_KEY_PRESSED, | |
2233 tests[i].output_native, | |
2234 tests[i].output_native_mods, | |
2235 KeyPress), | |
2236 GetRewrittenEventAsString(&rewriter, | |
2237 tests[i].input, | 1296 tests[i].input, |
2238 tests[i].input_mods, | 1297 tests[i].input_mods, |
2239 ui::ET_KEY_PRESSED, | 1298 ui::ET_KEY_PRESSED)); |
2240 tests[i].input_native, | |
2241 tests[i].input_native_mods)); | |
2242 } | 1299 } |
2243 } | 1300 } |
2244 | 1301 |
2245 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1302 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
2246 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 1303 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
2247 | 1304 |
2248 // Remap Search to Control. | 1305 // Remap Search to Control. |
2249 TestingPrefServiceSyncable prefs; | 1306 TestingPrefServiceSyncable prefs; |
2250 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1307 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2251 IntegerPrefMember search; | 1308 IntegerPrefMember search; |
2252 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1309 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
2253 search.SetValue(chromeos::input_method::kControlKey); | 1310 search.SetValue(chromeos::input_method::kControlKey); |
2254 | 1311 |
2255 EventRewriter rewriter; | 1312 EventRewriter rewriter; |
2256 rewriter.set_pref_service_for_testing(&prefs); | 1313 rewriter.set_pref_service_for_testing(&prefs); |
2257 | 1314 |
2258 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1315 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
2259 chromeos::switches::kHasChromeOSKeyboard, ""); | 1316 chromeos::switches::kHasChromeOSKeyboard, ""); |
2260 | 1317 |
2261 // Alt+Search+Down -> End | 1318 // Alt+Search+Down -> End |
2262 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_END, | 1319 EXPECT_EQ( |
2263 0, | 1320 GetExpectedResultAsString(ui::VKEY_END, ui::EF_NONE, ui::ET_KEY_PRESSED), |
2264 ui::ET_KEY_PRESSED, | 1321 GetRewrittenEventAsString(&rewriter, |
2265 keycode_end_, | 1322 ui::VKEY_DOWN, |
2266 0U, | 1323 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
2267 KeyPress), | 1324 ui::ET_KEY_PRESSED)); |
2268 GetRewrittenEventAsString(&rewriter, | |
2269 ui::VKEY_DOWN, | |
2270 ui::EF_ALT_DOWN, | |
2271 ui::ET_KEY_PRESSED, | |
2272 keycode_down_, | |
2273 Mod1Mask | Mod4Mask)); | |
2274 | 1325 |
2275 // Shift+Alt+Search+Down -> Shift+End | 1326 // Shift+Alt+Search+Down -> Shift+End |
2276 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_END, | 1327 EXPECT_EQ(GetExpectedResultAsString( |
2277 ui::EF_SHIFT_DOWN, | 1328 ui::VKEY_END, ui::EF_SHIFT_DOWN, ui::ET_KEY_PRESSED), |
2278 ui::ET_KEY_PRESSED, | 1329 GetRewrittenEventAsString( |
2279 keycode_end_, | 1330 &rewriter, |
2280 ShiftMask, | 1331 ui::VKEY_DOWN, |
2281 KeyPress), | 1332 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
2282 GetRewrittenEventAsString(&rewriter, | 1333 ui::ET_KEY_PRESSED)); |
2283 ui::VKEY_DOWN, | |
2284 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
2285 ui::ET_KEY_PRESSED, | |
2286 keycode_down_, | |
2287 ShiftMask | Mod1Mask | Mod4Mask)); | |
2288 | 1334 |
2289 *CommandLine::ForCurrentProcess() = original_cl; | 1335 *CommandLine::ForCurrentProcess() = original_cl; |
2290 } | 1336 } |
2291 | 1337 |
2292 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1338 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
2293 // Remap Control to Alt. | 1339 // Remap Control to Alt. |
2294 TestingPrefServiceSyncable prefs; | 1340 TestingPrefServiceSyncable prefs; |
2295 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1341 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2296 IntegerPrefMember control; | 1342 IntegerPrefMember control; |
2297 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1343 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2298 control.SetValue(chromeos::input_method::kAltKey); | 1344 control.SetValue(chromeos::input_method::kAltKey); |
2299 | 1345 |
2300 EventRewriter rewriter; | 1346 EventRewriter rewriter; |
2301 rewriter.set_pref_service_for_testing(&prefs); | 1347 rewriter.set_pref_service_for_testing(&prefs); |
2302 | 1348 |
2303 // Send left control press. | 1349 // Send left control press. |
2304 std::string rewritten_event; | 1350 std::string rewritten_event; |
2305 { | 1351 { |
2306 ui::ScopedXI2Event xev; | 1352 ui::ScopedXI2Event xev; |
2307 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 1353 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
2308 XEvent* xevent = xev; | 1354 XEvent* xevent = xev; |
2309 xevent->xkey.keycode = keycode_control_l_; | 1355 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); |
2310 xevent->xkey.send_event = True; // XSendEvent() always does this. | 1356 xevent->xkey.send_event = True; // XSendEvent() always does this. |
2311 rewriter.RewriteForTesting(xevent); | |
2312 ui::KeyEvent keyevent(xev, false /* is_char */); | 1357 ui::KeyEvent keyevent(xev, false /* is_char */); |
2313 rewritten_event = base::StringPrintf( | 1358 scoped_ptr<ui::Event> new_event; |
2314 "ui_keycode=%d ui_flags=%d ui_type=%d " | 1359 // Control should NOT be remapped to Alt if send_event |
2315 "x_keycode=%u x_state=%u x_type=%d", | 1360 // flag in the event is True. |
2316 keyevent.key_code(), keyevent.flags(), keyevent.type(), | 1361 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
2317 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); | 1362 rewriter.RewriteEvent(keyevent, &new_event)); |
| 1363 EXPECT_FALSE(new_event); |
2318 } | 1364 } |
| 1365 } |
2319 | 1366 |
2320 // XK_Control_L (left Control key) should NOT be remapped to Alt if send_event | 1367 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { |
2321 // flag in the event is True. | 1368 // Remap Control to Alt. |
2322 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 1369 TestingPrefServiceSyncable prefs; |
2323 ui::EF_CONTROL_DOWN, | 1370 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2324 ui::ET_KEY_PRESSED, | 1371 IntegerPrefMember control; |
2325 keycode_control_l_, | 1372 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2326 0U, | 1373 control.SetValue(chromeos::input_method::kAltKey); |
2327 KeyPress), | 1374 |
2328 rewritten_event); | 1375 EventRewriter rewriter; |
| 1376 rewriter.set_pref_service_for_testing(&prefs); |
| 1377 |
| 1378 const int kTouchId = 2; |
| 1379 gfx::Point location(0, 0); |
| 1380 ui::TouchEvent press( |
| 1381 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta()); |
| 1382 press.set_flags(ui::EF_CONTROL_DOWN); |
| 1383 |
| 1384 scoped_ptr<ui::Event> new_event; |
| 1385 rewriter.RewriteEvent(press, &new_event); |
| 1386 EXPECT_TRUE(new_event); |
| 1387 // Control should be remapped to Alt. |
| 1388 EXPECT_EQ(ui::EF_ALT_DOWN, |
| 1389 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); |
2329 } | 1390 } |
2330 | 1391 |
2331 // Tests of event rewriting that depend on the Ash window manager. | 1392 // Tests of event rewriting that depend on the Ash window manager. |
2332 class EventRewriterAshTest : public ash::test::AshTestBase { | 1393 class EventRewriterAshTest : public ash::test::AshTestBase { |
2333 public: | 1394 public: |
2334 EventRewriterAshTest() { | 1395 EventRewriterAshTest() |
2335 } | 1396 : mock_user_manager_(new chromeos::MockUserManager), |
| 1397 user_manager_enabler_(mock_user_manager_) {} |
2336 virtual ~EventRewriterAshTest() {} | 1398 virtual ~EventRewriterAshTest() {} |
2337 | 1399 |
2338 bool RewriteFunctionKeys(XEvent* event) { | 1400 bool RewriteFunctionKeys(const ui::Event& event, |
2339 return rewriter_->RewriteFunctionKeys(event); | 1401 scoped_ptr<ui::Event>* rewritten_event) { |
| 1402 return rewriter_->RewriteEvent(event, rewritten_event); |
2340 } | 1403 } |
2341 | 1404 |
2342 protected: | 1405 protected: |
2343 virtual void SetUp() OVERRIDE { | 1406 virtual void SetUp() OVERRIDE { |
2344 AshTestBase::SetUp(); | 1407 AshTestBase::SetUp(); |
2345 rewriter_.reset(new EventRewriter()); | 1408 rewriter_.reset(new EventRewriter()); |
2346 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); | 1409 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); |
2347 rewriter_->set_pref_service_for_testing(&prefs_); | 1410 rewriter_->set_pref_service_for_testing(&prefs_); |
2348 } | 1411 } |
2349 | 1412 |
2350 virtual void TearDown() OVERRIDE { | 1413 virtual void TearDown() OVERRIDE { |
2351 rewriter_.reset(); | 1414 rewriter_.reset(); |
2352 AshTestBase::TearDown(); | 1415 AshTestBase::TearDown(); |
2353 } | 1416 } |
2354 | 1417 |
2355 TestingPrefServiceSyncable prefs_; | 1418 TestingPrefServiceSyncable prefs_; |
2356 | 1419 |
2357 private: | 1420 private: |
2358 scoped_ptr<EventRewriter> rewriter_; | 1421 scoped_ptr<EventRewriter> rewriter_; |
2359 | 1422 |
| 1423 chromeos::MockUserManager* mock_user_manager_; // Not owned. |
| 1424 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
| 1425 |
2360 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 1426 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
2361 }; | 1427 }; |
2362 | 1428 |
2363 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 1429 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
2364 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 1430 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
2365 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 1431 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
2366 window_state->Activate(); | 1432 window_state->Activate(); |
2367 | 1433 |
2368 // Create a simulated keypress of F1 targetted at the window. | 1434 // Create a simulated keypress of F1 targetted at the window. |
2369 ui::ScopedXI2Event xev_f1; | 1435 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0, false); |
2370 KeyCode keycode_f1 = XKeysymToKeycode(gfx::GetXDisplay(), XK_F1); | |
2371 xev_f1.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0); | |
2372 XEvent* xevent = xev_f1; | |
2373 xevent->xkey.keycode = keycode_f1; | |
2374 | 1436 |
2375 // Simulate an apps v2 window that has requested top row keys as function | 1437 // Simulate an apps v2 window that has requested top row keys as function |
2376 // keys. The event should not be rewritten. | 1438 // keys. The event should not be rewritten. |
2377 window_state->set_top_row_keys_are_function_keys(true); | 1439 window_state->set_top_row_keys_are_function_keys(true); |
2378 ASSERT_FALSE(RewriteFunctionKeys(xevent)); | 1440 scoped_ptr<ui::Event> rewritten_event; |
2379 ui::KeyEvent press_f1(xev_f1, false); | 1441 ASSERT_FALSE(RewriteFunctionKeys(press_f1, &rewritten_event)); |
2380 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); | 1442 ASSERT_FALSE(rewritten_event); |
| 1443 EXPECT_EQ( |
| 1444 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1445 GetKeyEventAsString(press_f1)); |
2381 | 1446 |
2382 // The event should also not be rewritten if the send-function-keys pref is | 1447 // The event should also not be rewritten if the send-function-keys pref is |
2383 // additionally set, for both apps v2 and regular windows. | 1448 // additionally set, for both apps v2 and regular windows. |
2384 BooleanPrefMember send_function_keys_pref; | 1449 BooleanPrefMember send_function_keys_pref; |
2385 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_); | 1450 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_); |
2386 send_function_keys_pref.SetValue(true); | 1451 send_function_keys_pref.SetValue(true); |
2387 ASSERT_FALSE(RewriteFunctionKeys(xevent)); | |
2388 press_f1 = ui::KeyEvent(xev_f1, false); | |
2389 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); | |
2390 window_state->set_top_row_keys_are_function_keys(false); | 1452 window_state->set_top_row_keys_are_function_keys(false); |
2391 ASSERT_FALSE(RewriteFunctionKeys(xevent)); | 1453 ASSERT_FALSE(RewriteFunctionKeys(press_f1, &rewritten_event)); |
2392 press_f1 = ui::KeyEvent(xev_f1, false); | 1454 ASSERT_FALSE(rewritten_event); |
2393 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); | 1455 EXPECT_EQ( |
| 1456 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1457 GetKeyEventAsString(press_f1)); |
2394 | 1458 |
2395 // If the pref isn't set when an event is sent to a regular window, F1 is | 1459 // If the pref isn't set when an event is sent to a regular window, F1 is |
2396 // rewritten to the back key. | 1460 // rewritten to the back key. |
2397 send_function_keys_pref.SetValue(false); | 1461 send_function_keys_pref.SetValue(false); |
2398 ASSERT_TRUE(RewriteFunctionKeys(xevent)); | 1462 ASSERT_TRUE(RewriteFunctionKeys(press_f1, &rewritten_event)); |
2399 press_f1 = ui::KeyEvent(xev_f1, false); | 1463 ASSERT_TRUE(rewritten_event); |
2400 ASSERT_EQ(ui::VKEY_BROWSER_BACK, press_f1.key_code()); | 1464 EXPECT_EQ(GetExpectedResultAsString( |
| 1465 ui::VKEY_BROWSER_BACK, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1466 GetKeyEventAsString( |
| 1467 *static_cast<const ui::KeyEvent*>(rewritten_event.get()))); |
2401 } | 1468 } |
2402 | 1469 |
2403 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { | 1470 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { |
2404 std::vector<unsigned int> device_list; | 1471 std::vector<unsigned int> device_list; |
2405 device_list.push_back(10); | 1472 device_list.push_back(10); |
2406 device_list.push_back(11); | 1473 device_list.push_back(11); |
2407 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 1474 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
2408 TestingPrefServiceSyncable prefs; | 1475 TestingPrefServiceSyncable prefs; |
2409 EventRewriter rewriter; | 1476 EventRewriter rewriter; |
2410 rewriter.set_pref_service_for_testing(&prefs); | 1477 rewriter.set_pref_service_for_testing(&prefs); |
2411 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; | 1478 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; |
2412 { | 1479 { |
2413 ui::ScopedXI2Event xev; | 1480 ui::ScopedXI2Event xev; |
2414 xev.InitGenericButtonEvent( | 1481 xev.InitGenericButtonEvent( |
2415 10, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag); | 1482 10, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag); |
2416 ui::MouseEvent press(xev); | 1483 ui::MouseEvent press(xev); |
2417 // Sanity check. | 1484 // Sanity check. |
2418 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 1485 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
2419 EXPECT_EQ(kLeftAndAltFlag, press.flags()); | 1486 EXPECT_EQ(kLeftAndAltFlag, press.flags()); |
2420 | 1487 int flags = RewriteMouseEvent(&rewriter, press); |
2421 RewriteMouseEvent(&rewriter, &press); | 1488 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
2422 | |
2423 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & press.flags()); | |
2424 } | 1489 } |
2425 { | 1490 { |
2426 ui::ScopedXI2Event xev; | 1491 ui::ScopedXI2Event xev; |
2427 xev.InitGenericButtonEvent( | 1492 xev.InitGenericButtonEvent( |
2428 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1493 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
2429 ui::MouseEvent release(xev); | 1494 ui::MouseEvent release(xev); |
2430 RewriteMouseEvent(&rewriter, &release); | 1495 int flags = RewriteMouseEvent(&rewriter, release); |
2431 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags()); | 1496 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
2432 } | 1497 } |
2433 | 1498 |
2434 // No ALT in frst click. | 1499 // No ALT in frst click. |
2435 { | 1500 { |
2436 ui::ScopedXI2Event xev; | 1501 ui::ScopedXI2Event xev; |
2437 xev.InitGenericButtonEvent( | 1502 xev.InitGenericButtonEvent( |
2438 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON); | 1503 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON); |
2439 ui::MouseEvent press(xev); | 1504 ui::MouseEvent press(xev); |
2440 RewriteMouseEvent(&rewriter, &press); | 1505 int flags = RewriteMouseEvent(&rewriter, press); |
2441 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & press.flags()); | 1506 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & flags); |
2442 } | 1507 } |
2443 { | 1508 { |
2444 ui::ScopedXI2Event xev; | 1509 ui::ScopedXI2Event xev; |
2445 xev.InitGenericButtonEvent( | 1510 xev.InitGenericButtonEvent( |
2446 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1511 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
2447 ui::MouseEvent release(xev); | 1512 ui::MouseEvent release(xev); |
2448 RewriteMouseEvent(&rewriter, &release); | 1513 int flags = RewriteMouseEvent(&rewriter, release); |
2449 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & | 1514 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags); |
2450 release.flags()); | |
2451 } | 1515 } |
2452 | 1516 |
2453 // ALT on different device. | 1517 // ALT on different device. |
2454 { | 1518 { |
2455 ui::ScopedXI2Event xev; | 1519 ui::ScopedXI2Event xev; |
2456 xev.InitGenericButtonEvent( | 1520 xev.InitGenericButtonEvent( |
2457 11, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag); | 1521 11, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag); |
2458 ui::MouseEvent press(xev); | 1522 ui::MouseEvent press(xev); |
2459 RewriteMouseEvent(&rewriter, &press); | 1523 int flags = RewriteMouseEvent(&rewriter, press); |
2460 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & press.flags()); | 1524 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
2461 } | 1525 } |
2462 { | 1526 { |
2463 ui::ScopedXI2Event xev; | 1527 ui::ScopedXI2Event xev; |
2464 xev.InitGenericButtonEvent( | 1528 xev.InitGenericButtonEvent( |
2465 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1529 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
2466 ui::MouseEvent release(xev); | 1530 ui::MouseEvent release(xev); |
2467 RewriteMouseEvent(&rewriter, &release); | 1531 int flags = RewriteMouseEvent(&rewriter, release); |
2468 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & | 1532 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags); |
2469 release.flags()); | |
2470 } | 1533 } |
2471 { | 1534 { |
2472 ui::ScopedXI2Event xev; | 1535 ui::ScopedXI2Event xev; |
2473 xev.InitGenericButtonEvent( | 1536 xev.InitGenericButtonEvent( |
2474 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1537 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
2475 ui::MouseEvent release(xev); | 1538 ui::MouseEvent release(xev); |
2476 RewriteMouseEvent(&rewriter, &release); | 1539 int flags = RewriteMouseEvent(&rewriter, release); |
2477 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags()); | 1540 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
2478 } | 1541 } |
2479 } | 1542 } |
2480 | 1543 |
2481 } // namespace chromeos | 1544 } // namespace chromeos |
OLD | NEW |