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