| 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" | |
| 6 | |
| 7 #include <vector> | 5 #include <vector> |
| 8 | 6 |
| 9 #include "ash/common/wm/window_state.h" | 7 #include "ash/common/wm/window_state.h" |
| 10 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 11 #include "ash/sticky_keys/sticky_keys_controller.h" | 9 #include "ash/sticky_keys/sticky_keys_controller.h" |
| 12 #include "ash/sticky_keys/sticky_keys_overlay.h" | 10 #include "ash/sticky_keys/sticky_keys_overlay.h" |
| 13 #include "ash/test/ash_test_base.h" | 11 #include "ash/test/ash_test_base.h" |
| 14 #include "ash/wm/window_state_aura.h" | 12 #include "ash/wm/window_state_aura.h" |
| 15 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 16 #include "base/macros.h" | 14 #include "base/macros.h" |
| 17 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 16 #include "chrome/browser/chromeos/events/event_rewriter_delegate_impl.h" |
| 18 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" | 17 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" |
| 19 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h" | 18 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h" |
| 20 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" | 19 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" |
| 21 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" | 20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
| 22 #include "chrome/browser/chromeos/preferences.h" | 21 #include "chrome/browser/chromeos/preferences.h" |
| 23 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
| 24 #include "chromeos/chromeos_switches.h" | 23 #include "chromeos/chromeos_switches.h" |
| 25 #include "components/prefs/pref_member.h" | 24 #include "components/prefs/pref_member.h" |
| 26 #include "components/sync_preferences/testing_pref_service_syncable.h" | 25 #include "components/sync_preferences/testing_pref_service_syncable.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "ui/aura/window.h" | 27 #include "ui/aura/window.h" |
| 29 #include "ui/aura/window_tree_host.h" | 28 #include "ui/aura/window_tree_host.h" |
| 30 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" | 29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" |
| 30 #include "ui/chromeos/events/event_rewriter.h" |
| 31 #include "ui/chromeos/pref_names.h" |
| 31 #include "ui/events/event.h" | 32 #include "ui/events/event.h" |
| 32 #include "ui/events/event_rewriter.h" | 33 #include "ui/events/event_rewriter.h" |
| 33 #include "ui/events/event_utils.h" | 34 #include "ui/events/event_utils.h" |
| 34 #include "ui/events/keycodes/dom/dom_code.h" | 35 #include "ui/events/keycodes/dom/dom_code.h" |
| 35 #include "ui/events/keycodes/dom/dom_key.h" | 36 #include "ui/events/keycodes/dom/dom_key.h" |
| 36 #include "ui/events/keycodes/dom/keycode_converter.h" | 37 #include "ui/events/keycodes/dom/keycode_converter.h" |
| 37 #include "ui/events/test/events_test_utils.h" | 38 #include "ui/events/test/events_test_utils.h" |
| 38 #include "ui/events/test/test_event_processor.h" | 39 #include "ui/events/test/test_event_processor.h" |
| 39 | 40 |
| 40 #if defined(USE_X11) | 41 #if defined(USE_X11) |
| (...skipping 23 matching lines...) Expand all Loading... |
| 64 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, | 65 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, |
| 65 static_cast<unsigned int>(key)); | 66 static_cast<unsigned int>(key)); |
| 66 } | 67 } |
| 67 | 68 |
| 68 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | 69 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
| 69 return GetExpectedResultAsString(keyevent.type(), keyevent.key_code(), | 70 return GetExpectedResultAsString(keyevent.type(), keyevent.key_code(), |
| 70 keyevent.code(), keyevent.flags(), | 71 keyevent.code(), keyevent.flags(), |
| 71 keyevent.GetDomKey()); | 72 keyevent.GetDomKey()); |
| 72 } | 73 } |
| 73 | 74 |
| 74 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 75 std::string GetRewrittenEventAsString( |
| 75 ui::EventType ui_type, | 76 const std::unique_ptr<ui::chromeos::EventRewriter>& rewriter, |
| 76 ui::KeyboardCode ui_keycode, | 77 ui::EventType ui_type, |
| 77 ui::DomCode code, | 78 ui::KeyboardCode ui_keycode, |
| 78 int ui_flags, // ui::EventFlags | 79 ui::DomCode code, |
| 79 ui::DomKey key) { | 80 int ui_flags, // ui::EventFlags |
| 81 ui::DomKey key) { |
| 80 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, | 82 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, |
| 81 ui::EventTimeForNow()); | 83 ui::EventTimeForNow()); |
| 82 std::unique_ptr<ui::Event> new_event; | 84 std::unique_ptr<ui::Event> new_event; |
| 83 rewriter->RewriteEvent(event, &new_event); | 85 rewriter->RewriteEvent(event, &new_event); |
| 84 if (new_event) | 86 if (new_event) |
| 85 return GetKeyEventAsString(*new_event->AsKeyEvent()); | 87 return GetKeyEventAsString(*new_event->AsKeyEvent()); |
| 86 return GetKeyEventAsString(event); | 88 return GetKeyEventAsString(event); |
| 87 } | 89 } |
| 88 | 90 |
| 89 // Table entry for simple single key event rewriting tests. | 91 // Table entry for simple single key event rewriting tests. |
| 90 struct KeyTestCase { | 92 struct KeyTestCase { |
| 91 ui::EventType type; | 93 ui::EventType type; |
| 92 struct Event { | 94 struct Event { |
| 93 ui::KeyboardCode key_code; | 95 ui::KeyboardCode key_code; |
| 94 ui::DomCode code; | 96 ui::DomCode code; |
| 95 int flags; // ui::EventFlags | 97 int flags; // ui::EventFlags |
| 96 ui::DomKey::Base key; | 98 ui::DomKey::Base key; |
| 97 } input, expected; | 99 } input, expected; |
| 98 }; | 100 }; |
| 99 | 101 |
| 100 std::string GetTestCaseAsString(ui::EventType ui_type, | 102 std::string GetTestCaseAsString(ui::EventType ui_type, |
| 101 const KeyTestCase::Event& test) { | 103 const KeyTestCase::Event& test) { |
| 102 return GetExpectedResultAsString(ui_type, test.key_code, test.code, | 104 return GetExpectedResultAsString(ui_type, test.key_code, test.code, |
| 103 test.flags, test.key); | 105 test.flags, test.key); |
| 104 } | 106 } |
| 105 | 107 |
| 106 // Tests a single stateless key rewrite operation. | 108 // Tests a single stateless key rewrite operation. |
| 107 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, | 109 void CheckKeyTestCase( |
| 108 const KeyTestCase& test) { | 110 const std::unique_ptr<ui::chromeos::EventRewriter>& rewriter, |
| 111 const KeyTestCase& test) { |
| 109 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); | 112 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); |
| 110 std::string expected = GetTestCaseAsString(test.type, test.expected); | 113 std::string expected = GetTestCaseAsString(test.type, test.expected); |
| 111 EXPECT_EQ(expected, GetRewrittenEventAsString( | 114 EXPECT_EQ(expected, GetRewrittenEventAsString( |
| 112 rewriter, test.type, test.input.key_code, | 115 rewriter, test.type, test.input.key_code, |
| 113 test.input.code, test.input.flags, test.input.key)); | 116 test.input.code, test.input.flags, test.input.key)); |
| 114 } | 117 } |
| 115 | 118 |
| 116 } // namespace | 119 } // namespace |
| 117 | 120 |
| 118 namespace chromeos { | 121 namespace chromeos { |
| 119 | 122 |
| 120 class EventRewriterTest : public ash::test::AshTestBase { | 123 class EventRewriterTest : public ash::test::AshTestBase { |
| 121 public: | 124 public: |
| 122 EventRewriterTest() | 125 EventRewriterTest() |
| 123 : fake_user_manager_(new chromeos::FakeChromeUserManager), | 126 : fake_user_manager_(new chromeos::FakeChromeUserManager), |
| 124 user_manager_enabler_(fake_user_manager_) {} | 127 user_manager_enabler_(fake_user_manager_) {} |
| 125 ~EventRewriterTest() override {} | 128 ~EventRewriterTest() override {} |
| 126 | 129 |
| 127 void SetUp() override { | 130 void SetUp() override { |
| 128 input_method_manager_mock_ = new input_method::MockInputMethodManagerImpl; | 131 input_method_manager_mock_ = new input_method::MockInputMethodManagerImpl; |
| 129 chromeos::input_method::InitializeForTesting( | 132 chromeos::input_method::InitializeForTesting( |
| 130 input_method_manager_mock_); // pass ownership | 133 input_method_manager_mock_); // pass ownership |
| 131 | 134 delegate_ = base::MakeUnique<EventRewriterDelegateImpl>(); |
| 135 delegate_->set_pref_service_for_testing(prefs()); |
| 136 rewriter_ = |
| 137 base::MakeUnique<ui::chromeos::EventRewriter>(delegate_.get(), nullptr); |
| 132 AshTestBase::SetUp(); | 138 AshTestBase::SetUp(); |
| 133 } | 139 } |
| 134 | 140 |
| 135 void TearDown() override { | 141 void TearDown() override { |
| 136 AshTestBase::TearDown(); | 142 AshTestBase::TearDown(); |
| 137 // Shutdown() deletes the IME mock object. | 143 // Shutdown() deletes the IME mock object. |
| 138 chromeos::input_method::Shutdown(); | 144 chromeos::input_method::Shutdown(); |
| 139 } | 145 } |
| 140 | 146 |
| 141 protected: | 147 protected: |
| 142 void TestRewriteNumPadKeys(); | 148 void TestRewriteNumPadKeys(); |
| 143 void TestRewriteNumPadKeysOnAppleKeyboard(); | 149 void TestRewriteNumPadKeysOnAppleKeyboard(); |
| 144 | 150 |
| 145 const ui::MouseEvent* RewriteMouseButtonEvent( | 151 const ui::MouseEvent* RewriteMouseButtonEvent( |
| 146 chromeos::EventRewriter* rewriter, | |
| 147 const ui::MouseEvent& event, | 152 const ui::MouseEvent& event, |
| 148 std::unique_ptr<ui::Event>* new_event) { | 153 std::unique_ptr<ui::Event>* new_event) { |
| 149 rewriter->RewriteMouseButtonEventForTesting(event, new_event); | 154 rewriter_->RewriteMouseButtonEventForTesting(event, new_event); |
| 150 return *new_event ? new_event->get()->AsMouseEvent() : &event; | 155 return *new_event ? new_event->get()->AsMouseEvent() : &event; |
| 151 } | 156 } |
| 152 | 157 |
| 158 sync_preferences::TestingPrefServiceSyncable* prefs() { return &prefs_; } |
| 159 |
| 153 FakeChromeUserManager* fake_user_manager_; // Not owned. | 160 FakeChromeUserManager* fake_user_manager_; // Not owned. |
| 154 ScopedUserManagerEnabler user_manager_enabler_; | 161 ScopedUserManagerEnabler user_manager_enabler_; |
| 155 input_method::MockInputMethodManagerImpl* input_method_manager_mock_; | 162 input_method::MockInputMethodManagerImpl* input_method_manager_mock_; |
| 163 |
| 164 sync_preferences::TestingPrefServiceSyncable prefs_; |
| 165 std::unique_ptr<EventRewriterDelegateImpl> delegate_; |
| 166 std::unique_ptr<ui::chromeos::EventRewriter> rewriter_; |
| 156 }; | 167 }; |
| 157 | 168 |
| 158 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 169 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
| 159 // First, test with a PC keyboard. | 170 // First, test with a PC keyboard. |
| 160 sync_preferences::TestingPrefServiceSyncable prefs; | 171 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 161 EventRewriter rewriter(NULL); | 172 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 162 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 163 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | |
| 164 rewriter.set_pref_service_for_testing(&prefs); | |
| 165 | 173 |
| 166 KeyTestCase pc_keyboard_tests[] = { | 174 KeyTestCase pc_keyboard_tests[] = { |
| 167 // VKEY_A, Alt modifier. | 175 // VKEY_A, Alt modifier. |
| 168 {ui::ET_KEY_PRESSED, | 176 {ui::ET_KEY_PRESSED, |
| 169 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 177 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 170 ui::DomKey::UNIDENTIFIED}, | 178 ui::DomKey::UNIDENTIFIED}, |
| 171 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 179 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 172 ui::DomKey::UNIDENTIFIED}}, | 180 ui::DomKey::UNIDENTIFIED}}, |
| 173 | 181 |
| 174 // VKEY_A, Win modifier. | 182 // VKEY_A, Win modifier. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 193 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}}, | 201 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}}, |
| 194 | 202 |
| 195 // VKEY_RWIN (right Windows key), Alt modifier. | 203 // VKEY_RWIN (right Windows key), Alt modifier. |
| 196 {ui::ET_KEY_PRESSED, | 204 {ui::ET_KEY_PRESSED, |
| 197 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, | 205 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, |
| 198 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}, | 206 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}, |
| 199 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, | 207 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, |
| 200 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}}, | 208 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::META}}, |
| 201 }; | 209 }; |
| 202 | 210 |
| 203 for (const auto& test : pc_keyboard_tests) { | 211 for (const auto& test : pc_keyboard_tests) |
| 204 CheckKeyTestCase(&rewriter, test); | 212 CheckKeyTestCase(rewriter_, test); |
| 205 } | |
| 206 | 213 |
| 207 // An Apple keyboard reusing the ID, zero. | 214 // An Apple keyboard reusing the ID, zero. |
| 208 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 215 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 209 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 216 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 210 | 217 |
| 211 KeyTestCase apple_keyboard_tests[] = { | 218 KeyTestCase apple_keyboard_tests[] = { |
| 212 // VKEY_A, Alt modifier. | 219 // VKEY_A, Alt modifier. |
| 213 {ui::ET_KEY_PRESSED, | 220 {ui::ET_KEY_PRESSED, |
| 214 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 221 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 215 ui::DomKey::UNIDENTIFIED}, | 222 ui::DomKey::UNIDENTIFIED}, |
| 216 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 223 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 217 ui::DomKey::UNIDENTIFIED}}, | 224 ui::DomKey::UNIDENTIFIED}}, |
| 218 | 225 |
| 219 // VKEY_A, Win modifier. | 226 // VKEY_A, Win modifier. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 238 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 245 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 239 | 246 |
| 240 // VKEY_RWIN (right Windows key), Alt modifier. | 247 // VKEY_RWIN (right Windows key), Alt modifier. |
| 241 {ui::ET_KEY_PRESSED, | 248 {ui::ET_KEY_PRESSED, |
| 242 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, | 249 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, |
| 243 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, | 250 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, |
| 244 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, | 251 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
| 245 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 252 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 246 }; | 253 }; |
| 247 | 254 |
| 248 for (const auto& test : apple_keyboard_tests) { | 255 for (const auto& test : apple_keyboard_tests) |
| 249 CheckKeyTestCase(&rewriter, test); | 256 CheckKeyTestCase(rewriter_, test); |
| 250 } | |
| 251 } | 257 } |
| 252 | 258 |
| 253 // For crbug.com/133896. | 259 // For crbug.com/133896. |
| 254 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 260 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
| 255 // Remap Control to Alt. | 261 // Remap Control to Alt. |
| 256 sync_preferences::TestingPrefServiceSyncable prefs; | 262 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 257 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 258 IntegerPrefMember control; | 263 IntegerPrefMember control; |
| 259 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 264 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 260 control.SetValue(chromeos::input_method::kAltKey); | 265 control.SetValue(chromeos::input_method::kAltKey); |
| 261 | 266 |
| 262 EventRewriter rewriter(NULL); | 267 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 263 rewriter.set_pref_service_for_testing(&prefs); | 268 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 264 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 265 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | |
| 266 | 269 |
| 267 KeyTestCase pc_keyboard_tests[] = { | 270 KeyTestCase pc_keyboard_tests[] = { |
| 268 // Control should be remapped to Alt. | 271 // Control should be remapped to Alt. |
| 269 {ui::ET_KEY_PRESSED, | 272 {ui::ET_KEY_PRESSED, |
| 270 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 273 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 271 ui::DomKey::CONTROL}, | 274 ui::DomKey::CONTROL}, |
| 272 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 275 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 273 ui::DomKey::ALT}}, | 276 ui::DomKey::ALT}}, |
| 274 }; | 277 }; |
| 275 | 278 |
| 276 for (const auto& test : pc_keyboard_tests) { | 279 for (const auto& test : pc_keyboard_tests) |
| 277 CheckKeyTestCase(&rewriter, test); | 280 CheckKeyTestCase(rewriter_, test); |
| 278 } | |
| 279 | 281 |
| 280 // An Apple keyboard reusing the ID, zero. | 282 // An Apple keyboard reusing the ID, zero. |
| 281 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 283 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 282 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 284 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 283 | 285 |
| 284 KeyTestCase apple_keyboard_tests[] = { | 286 KeyTestCase apple_keyboard_tests[] = { |
| 285 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 287 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command |
| 286 // key should never be re-remapped to Alt. | 288 // key should never be re-remapped to Alt. |
| 287 {ui::ET_KEY_PRESSED, | 289 {ui::ET_KEY_PRESSED, |
| 288 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, | 290 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, |
| 289 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, | 291 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, |
| 290 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 292 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 291 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 293 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 292 | 294 |
| 293 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 295 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command |
| 294 // key should never be re-remapped to Alt. | 296 // key should never be re-remapped to Alt. |
| 295 {ui::ET_KEY_PRESSED, | 297 {ui::ET_KEY_PRESSED, |
| 296 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, | 298 {ui::VKEY_RWIN, ui::DomCode::META_RIGHT, |
| 297 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, | 299 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::META}, |
| 298 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, | 300 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
| 299 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 301 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 300 }; | 302 }; |
| 301 | 303 |
| 302 for (const auto& test : apple_keyboard_tests) { | 304 for (const auto& test : apple_keyboard_tests) |
| 303 CheckKeyTestCase(&rewriter, test); | 305 CheckKeyTestCase(rewriter_, test); |
| 304 } | |
| 305 } | 306 } |
| 306 | 307 |
| 307 void EventRewriterTest::TestRewriteNumPadKeys() { | 308 void EventRewriterTest::TestRewriteNumPadKeys() { |
| 308 sync_preferences::TestingPrefServiceSyncable prefs; | 309 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 309 EventRewriter rewriter(NULL); | 310 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 310 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 311 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | |
| 312 rewriter.set_pref_service_for_testing(&prefs); | |
| 313 | 311 |
| 314 KeyTestCase tests[] = { | 312 KeyTestCase tests[] = { |
| 315 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 313 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
| 316 {ui::ET_KEY_PRESSED, | 314 {ui::ET_KEY_PRESSED, |
| 317 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, | 315 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, |
| 318 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, | 316 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, |
| 319 ui::DomKey::Constant<'0'>::Character}}, | 317 ui::DomKey::Constant<'0'>::Character}}, |
| 320 | 318 |
| 321 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 319 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
| 322 {ui::ET_KEY_PRESSED, | 320 {ui::ET_KEY_PRESSED, |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 | 467 |
| 470 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock | 468 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock |
| 471 // modifier. | 469 // modifier. |
| 472 {ui::ET_KEY_PRESSED, | 470 {ui::ET_KEY_PRESSED, |
| 473 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, | 471 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, |
| 474 ui::DomKey::Constant<'9'>::Character}, | 472 ui::DomKey::Constant<'9'>::Character}, |
| 475 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, | 473 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, |
| 476 ui::DomKey::Constant<'9'>::Character}}, | 474 ui::DomKey::Constant<'9'>::Character}}, |
| 477 }; | 475 }; |
| 478 | 476 |
| 479 for (const auto& test : tests) { | 477 for (const auto& test : tests) |
| 480 CheckKeyTestCase(&rewriter, test); | 478 CheckKeyTestCase(rewriter_, test); |
| 481 } | |
| 482 } | 479 } |
| 483 | 480 |
| 484 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 481 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
| 485 TestRewriteNumPadKeys(); | 482 TestRewriteNumPadKeys(); |
| 486 } | 483 } |
| 487 | 484 |
| 488 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { | 485 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { |
| 489 // Make sure the num lock works correctly even when Diamond key exists. | 486 // Make sure the num lock works correctly even when Diamond key exists. |
| 490 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 487 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 491 chromeos::switches::kHasChromeOSDiamondKey, ""); | 488 chromeos::switches::kHasChromeOSDiamondKey, ""); |
| 492 TestRewriteNumPadKeys(); | 489 TestRewriteNumPadKeys(); |
| 493 } | 490 } |
| 494 | 491 |
| 495 // Tests if the rewriter can handle a Command + Num Pad event. | 492 // Tests if the rewriter can handle a Command + Num Pad event. |
| 496 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 493 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
| 497 sync_preferences::TestingPrefServiceSyncable prefs; | 494 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 498 EventRewriter rewriter(NULL); | 495 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 499 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | |
| 500 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | |
| 501 rewriter.set_pref_service_for_testing(&prefs); | |
| 502 | 496 |
| 503 KeyTestCase tests[] = { | 497 KeyTestCase tests[] = { |
| 504 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 498 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
| 505 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 499 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
| 506 {ui::ET_KEY_PRESSED, | 500 {ui::ET_KEY_PRESSED, |
| 507 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, | 501 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
| 508 ui::DomKey::END}, | 502 ui::DomKey::END}, |
| 509 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, | 503 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
| 510 ui::DomKey::Constant<'1'>::Character}}, | 504 ui::DomKey::Constant<'1'>::Character}}, |
| 511 | 505 |
| 512 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 506 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
| 513 // The result should also be "Num Pad 1 with Control + Num Lock | 507 // The result should also be "Num Pad 1 with Control + Num Lock |
| 514 // modifiers". | 508 // modifiers". |
| 515 {ui::ET_KEY_PRESSED, | 509 {ui::ET_KEY_PRESSED, |
| 516 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, | 510 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
| 517 ui::DomKey::Constant<'1'>::Character}, | 511 ui::DomKey::Constant<'1'>::Character}, |
| 518 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, | 512 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
| 519 ui::DomKey::Constant<'1'>::Character}}}; | 513 ui::DomKey::Constant<'1'>::Character}}}; |
| 520 | 514 |
| 521 for (const auto& test : tests) { | 515 for (const auto& test : tests) |
| 522 CheckKeyTestCase(&rewriter, test); | 516 CheckKeyTestCase(rewriter_, test); |
| 523 } | |
| 524 } | 517 } |
| 525 | 518 |
| 526 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 519 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
| 527 TestRewriteNumPadKeysOnAppleKeyboard(); | 520 TestRewriteNumPadKeysOnAppleKeyboard(); |
| 528 } | 521 } |
| 529 | 522 |
| 530 TEST_F(EventRewriterTest, | 523 TEST_F(EventRewriterTest, |
| 531 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { | 524 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { |
| 532 // Makes sure the num lock works correctly even when Diamond key exists. | 525 // Makes sure the num lock works correctly even when Diamond key exists. |
| 533 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 526 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| 534 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 527 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 535 chromeos::switches::kHasChromeOSDiamondKey, ""); | 528 chromeos::switches::kHasChromeOSDiamondKey, ""); |
| 536 | 529 |
| 537 TestRewriteNumPadKeysOnAppleKeyboard(); | 530 TestRewriteNumPadKeysOnAppleKeyboard(); |
| 538 *base::CommandLine::ForCurrentProcess() = original_cl; | 531 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 539 } | 532 } |
| 540 | 533 |
| 541 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 534 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
| 542 sync_preferences::TestingPrefServiceSyncable prefs; | 535 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 543 EventRewriter rewriter(NULL); | |
| 544 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 545 rewriter.set_pref_service_for_testing(&prefs); | |
| 546 | 536 |
| 547 KeyTestCase tests[] = { | 537 KeyTestCase tests[] = { |
| 548 // Press Search. Confirm the event is not rewritten. | 538 // Press Search. Confirm the event is not rewritten. |
| 549 {ui::ET_KEY_PRESSED, | 539 {ui::ET_KEY_PRESSED, |
| 550 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, | 540 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, |
| 551 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 541 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
| 552 ui::DomKey::META}}, | 542 ui::DomKey::META}}, |
| 553 | 543 |
| 554 // Press left Control. Confirm the event is not rewritten. | 544 // Press left Control. Confirm the event is not rewritten. |
| 555 {ui::ET_KEY_PRESSED, | 545 {ui::ET_KEY_PRESSED, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 577 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 567 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 578 ui::DomKey::ALT}}, | 568 ui::DomKey::ALT}}, |
| 579 | 569 |
| 580 // Test KeyRelease event, just in case. | 570 // Test KeyRelease event, just in case. |
| 581 // Release Search. Confirm the release event is not rewritten. | 571 // Release Search. Confirm the release event is not rewritten. |
| 582 {ui::ET_KEY_RELEASED, | 572 {ui::ET_KEY_RELEASED, |
| 583 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, | 573 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, |
| 584 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}}, | 574 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}}, |
| 585 }; | 575 }; |
| 586 | 576 |
| 587 for (const auto& test : tests) { | 577 for (const auto& test : tests) |
| 588 CheckKeyTestCase(&rewriter, test); | 578 CheckKeyTestCase(rewriter_, test); |
| 589 } | |
| 590 } | 579 } |
| 591 | 580 |
| 592 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 581 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
| 593 sync_preferences::TestingPrefServiceSyncable prefs; | 582 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 594 EventRewriter rewriter(NULL); | |
| 595 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 596 rewriter.set_pref_service_for_testing(&prefs); | |
| 597 | 583 |
| 598 KeyTestCase tests[] = { | 584 KeyTestCase tests[] = { |
| 599 // Press Alt with Shift. Confirm the event is not rewritten. | 585 // Press Alt with Shift. Confirm the event is not rewritten. |
| 600 {ui::ET_KEY_PRESSED, | 586 {ui::ET_KEY_PRESSED, |
| 601 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 587 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 602 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 588 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 603 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 589 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 604 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, | 590 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
| 605 | 591 |
| 606 // Press Escape with Alt and Shift. Confirm the event is not rewritten. | 592 // Press Escape with Alt and Shift. Confirm the event is not rewritten. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 {ui::VKEY_B, ui::DomCode::US_B, | 626 {ui::VKEY_B, ui::DomCode::US_B, |
| 641 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 627 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 642 ui::EF_COMMAND_DOWN, | 628 ui::EF_COMMAND_DOWN, |
| 643 ui::DomKey::Constant<'B'>::Character}, | 629 ui::DomKey::Constant<'B'>::Character}, |
| 644 {ui::VKEY_B, ui::DomCode::US_B, | 630 {ui::VKEY_B, ui::DomCode::US_B, |
| 645 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 631 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 646 ui::EF_COMMAND_DOWN, | 632 ui::EF_COMMAND_DOWN, |
| 647 ui::DomKey::Constant<'B'>::Character}}, | 633 ui::DomKey::Constant<'B'>::Character}}, |
| 648 }; | 634 }; |
| 649 | 635 |
| 650 for (const auto& test : tests) { | 636 for (const auto& test : tests) |
| 651 CheckKeyTestCase(&rewriter, test); | 637 CheckKeyTestCase(rewriter_, test); |
| 652 } | |
| 653 } | 638 } |
| 654 | 639 |
| 655 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 640 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
| 656 // Disable Search, Control and Escape keys. | 641 // Disable Search, Control and Escape keys. |
| 657 sync_preferences::TestingPrefServiceSyncable prefs; | 642 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 658 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 659 IntegerPrefMember search; | 643 IntegerPrefMember search; |
| 660 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 644 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 661 search.SetValue(chromeos::input_method::kVoidKey); | 645 search.SetValue(chromeos::input_method::kVoidKey); |
| 662 IntegerPrefMember control; | 646 IntegerPrefMember control; |
| 663 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 647 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 664 control.SetValue(chromeos::input_method::kVoidKey); | 648 control.SetValue(chromeos::input_method::kVoidKey); |
| 665 IntegerPrefMember escape; | 649 IntegerPrefMember escape; |
| 666 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); | 650 escape.Init(prefs::kLanguageRemapEscapeKeyTo, prefs()); |
| 667 escape.SetValue(chromeos::input_method::kVoidKey); | 651 escape.SetValue(chromeos::input_method::kVoidKey); |
| 668 | 652 |
| 669 EventRewriter rewriter(NULL); | 653 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 670 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 671 rewriter.set_pref_service_for_testing(&prefs); | |
| 672 | 654 |
| 673 KeyTestCase disabled_modifier_tests[] = { | 655 KeyTestCase disabled_modifier_tests[] = { |
| 674 // Press Alt with Shift. This key press shouldn't be affected by the | 656 // Press Alt with Shift. This key press shouldn't be affected by the |
| 675 // pref. Confirm the event is not rewritten. | 657 // pref. Confirm the event is not rewritten. |
| 676 {ui::ET_KEY_PRESSED, | 658 {ui::ET_KEY_PRESSED, |
| 677 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 659 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 678 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 660 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 679 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 661 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 680 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, | 662 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
| 681 | 663 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 | 698 |
| 717 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 699 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
| 718 // the Alt modifier. | 700 // the Alt modifier. |
| 719 {ui::ET_KEY_PRESSED, | 701 {ui::ET_KEY_PRESSED, |
| 720 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 702 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 721 ui::DomKey::Constant<'a'>::Character}, | 703 ui::DomKey::Constant<'a'>::Character}, |
| 722 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 704 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 723 ui::DomKey::Constant<'a'>::Character}}, | 705 ui::DomKey::Constant<'a'>::Character}}, |
| 724 }; | 706 }; |
| 725 | 707 |
| 726 for (const auto& test : disabled_modifier_tests) { | 708 for (const auto& test : disabled_modifier_tests) |
| 727 CheckKeyTestCase(&rewriter, test); | 709 CheckKeyTestCase(rewriter_, test); |
| 728 } | |
| 729 | 710 |
| 730 // Remap Alt to Control. | 711 // Remap Alt to Control. |
| 731 IntegerPrefMember alt; | 712 IntegerPrefMember alt; |
| 732 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 713 alt.Init(prefs::kLanguageRemapAltKeyTo, prefs()); |
| 733 alt.SetValue(chromeos::input_method::kControlKey); | 714 alt.SetValue(chromeos::input_method::kControlKey); |
| 734 | 715 |
| 735 KeyTestCase tests[] = { | 716 KeyTestCase tests[] = { |
| 736 // Press left Alt. Confirm the event is now VKEY_CONTROL | 717 // Press left Alt. Confirm the event is now VKEY_CONTROL |
| 737 // even though the Control key itself is disabled. | 718 // even though the Control key itself is disabled. |
| 738 {ui::ET_KEY_PRESSED, | 719 {ui::ET_KEY_PRESSED, |
| 739 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 720 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 740 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 721 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 741 ui::DomKey::CONTROL}}, | 722 ui::DomKey::CONTROL}}, |
| 742 | 723 |
| 743 // Press Alt+a. Confirm the event is now Control+a even though the Control | 724 // Press Alt+a. Confirm the event is now Control+a even though the Control |
| 744 // key itself is disabled. | 725 // key itself is disabled. |
| 745 {ui::ET_KEY_PRESSED, | 726 {ui::ET_KEY_PRESSED, |
| 746 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 727 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 747 ui::DomKey::Constant<'a'>::Character}, | 728 ui::DomKey::Constant<'a'>::Character}, |
| 748 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, | 729 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 749 ui::DomKey::Constant<'a'>::Character}}, | 730 ui::DomKey::Constant<'a'>::Character}}, |
| 750 }; | 731 }; |
| 751 | 732 |
| 752 for (const auto& test : tests) { | 733 for (const auto& test : tests) |
| 753 CheckKeyTestCase(&rewriter, test); | 734 CheckKeyTestCase(rewriter_, test); |
| 754 } | |
| 755 } | 735 } |
| 756 | 736 |
| 757 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 737 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
| 758 // Remap Search to Control. | 738 // Remap Search to Control. |
| 759 sync_preferences::TestingPrefServiceSyncable prefs; | 739 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 760 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 761 IntegerPrefMember search; | 740 IntegerPrefMember search; |
| 762 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 741 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 763 search.SetValue(chromeos::input_method::kControlKey); | 742 search.SetValue(chromeos::input_method::kControlKey); |
| 764 | 743 |
| 765 EventRewriter rewriter(NULL); | 744 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 766 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 767 rewriter.set_pref_service_for_testing(&prefs); | |
| 768 | 745 |
| 769 KeyTestCase s_tests[] = { | 746 KeyTestCase s_tests[] = { |
| 770 // Press Search. Confirm the event is now VKEY_CONTROL. | 747 // Press Search. Confirm the event is now VKEY_CONTROL. |
| 771 {ui::ET_KEY_PRESSED, | 748 {ui::ET_KEY_PRESSED, |
| 772 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 749 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
| 773 ui::DomKey::META}, | 750 ui::DomKey::META}, |
| 774 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 751 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 775 ui::DomKey::CONTROL}}, | 752 ui::DomKey::CONTROL}}, |
| 776 }; | 753 }; |
| 777 | 754 |
| 778 for (const auto& test : s_tests) { | 755 for (const auto& test : s_tests) |
| 779 CheckKeyTestCase(&rewriter, test); | 756 CheckKeyTestCase(rewriter_, test); |
| 780 } | |
| 781 | 757 |
| 782 // Remap Alt to Control too. | 758 // Remap Alt to Control too. |
| 783 IntegerPrefMember alt; | 759 IntegerPrefMember alt; |
| 784 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 760 alt.Init(prefs::kLanguageRemapAltKeyTo, prefs()); |
| 785 alt.SetValue(chromeos::input_method::kControlKey); | 761 alt.SetValue(chromeos::input_method::kControlKey); |
| 786 | 762 |
| 787 KeyTestCase sa_tests[] = { | 763 KeyTestCase sa_tests[] = { |
| 788 // Press Alt. Confirm the event is now VKEY_CONTROL. | 764 // Press Alt. Confirm the event is now VKEY_CONTROL. |
| 789 {ui::ET_KEY_PRESSED, | 765 {ui::ET_KEY_PRESSED, |
| 790 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 766 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 791 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 767 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 792 ui::DomKey::CONTROL}}, | 768 ui::DomKey::CONTROL}}, |
| 793 | 769 |
| 794 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 770 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 820 // and Control modifiers. | 796 // and Control modifiers. |
| 821 {ui::ET_KEY_PRESSED, | 797 {ui::ET_KEY_PRESSED, |
| 822 {ui::VKEY_B, ui::DomCode::US_B, | 798 {ui::VKEY_B, ui::DomCode::US_B, |
| 823 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 799 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 824 ui::EF_COMMAND_DOWN, | 800 ui::EF_COMMAND_DOWN, |
| 825 ui::DomKey::Constant<'B'>::Character}, | 801 ui::DomKey::Constant<'B'>::Character}, |
| 826 {ui::VKEY_B, ui::DomCode::US_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 802 {ui::VKEY_B, ui::DomCode::US_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 827 ui::DomKey::Constant<'B'>::Character}}, | 803 ui::DomKey::Constant<'B'>::Character}}, |
| 828 }; | 804 }; |
| 829 | 805 |
| 830 for (const auto& test : sa_tests) { | 806 for (const auto& test : sa_tests) |
| 831 CheckKeyTestCase(&rewriter, test); | 807 CheckKeyTestCase(rewriter_, test); |
| 832 } | |
| 833 } | 808 } |
| 834 | 809 |
| 835 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 810 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
| 836 // Remap Search to Escape. | 811 // Remap Search to Escape. |
| 837 sync_preferences::TestingPrefServiceSyncable prefs; | 812 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 838 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 839 IntegerPrefMember search; | 813 IntegerPrefMember search; |
| 840 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 814 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 841 search.SetValue(chromeos::input_method::kEscapeKey); | 815 search.SetValue(chromeos::input_method::kEscapeKey); |
| 842 | 816 |
| 843 EventRewriter rewriter(NULL); | 817 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 844 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 845 rewriter.set_pref_service_for_testing(&prefs); | |
| 846 | 818 |
| 847 KeyTestCase tests[] = { | 819 KeyTestCase tests[] = { |
| 848 // Press Search. Confirm the event is now VKEY_ESCAPE. | 820 // Press Search. Confirm the event is now VKEY_ESCAPE. |
| 849 {ui::ET_KEY_PRESSED, | 821 {ui::ET_KEY_PRESSED, |
| 850 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 822 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
| 851 ui::DomKey::META}, | 823 ui::DomKey::META}, |
| 852 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, | 824 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
| 853 }; | 825 }; |
| 854 | 826 |
| 855 for (const auto& test : tests) { | 827 for (const auto& test : tests) |
| 856 CheckKeyTestCase(&rewriter, test); | 828 CheckKeyTestCase(rewriter_, test); |
| 857 } | |
| 858 } | 829 } |
| 859 | 830 |
| 860 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 831 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
| 861 // Remap Escape to Alt. | 832 // Remap Escape to Alt. |
| 862 sync_preferences::TestingPrefServiceSyncable prefs; | 833 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 863 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 864 IntegerPrefMember escape; | 834 IntegerPrefMember escape; |
| 865 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); | 835 escape.Init(prefs::kLanguageRemapEscapeKeyTo, prefs()); |
| 866 escape.SetValue(chromeos::input_method::kAltKey); | 836 escape.SetValue(chromeos::input_method::kAltKey); |
| 867 | 837 |
| 868 EventRewriter rewriter(NULL); | 838 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 869 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 870 rewriter.set_pref_service_for_testing(&prefs); | |
| 871 | 839 |
| 872 KeyTestCase e2a_tests[] = { | 840 KeyTestCase e2a_tests[] = { |
| 873 // Press Escape. Confirm the event is now VKEY_MENU. | 841 // Press Escape. Confirm the event is now VKEY_MENU. |
| 874 {ui::ET_KEY_PRESSED, | 842 {ui::ET_KEY_PRESSED, |
| 875 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, | 843 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, |
| 876 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 844 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 877 ui::DomKey::ALT}}, | 845 ui::DomKey::ALT}}, |
| 878 // Release Escape to clear flags. | 846 // Release Escape to clear flags. |
| 879 {ui::ET_KEY_RELEASED, | 847 {ui::ET_KEY_RELEASED, |
| 880 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, | 848 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, |
| 881 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_NONE, ui::DomKey::ALT}}, | 849 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_NONE, ui::DomKey::ALT}}, |
| 882 }; | 850 }; |
| 883 | 851 |
| 884 for (const auto& test : e2a_tests) { | 852 for (const auto& test : e2a_tests) |
| 885 CheckKeyTestCase(&rewriter, test); | 853 CheckKeyTestCase(rewriter_, test); |
| 886 } | |
| 887 | 854 |
| 888 // Remap Alt to Control. | 855 // Remap Alt to Control. |
| 889 IntegerPrefMember alt; | 856 IntegerPrefMember alt; |
| 890 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 857 alt.Init(prefs::kLanguageRemapAltKeyTo, prefs()); |
| 891 alt.SetValue(chromeos::input_method::kControlKey); | 858 alt.SetValue(chromeos::input_method::kControlKey); |
| 892 | 859 |
| 893 KeyTestCase a2c_tests[] = { | 860 KeyTestCase a2c_tests[] = { |
| 894 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 861 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
| 895 {ui::ET_KEY_PRESSED, | 862 {ui::ET_KEY_PRESSED, |
| 896 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 863 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 897 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 864 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 898 ui::DomKey::CONTROL}}, | 865 ui::DomKey::CONTROL}}, |
| 899 // Press Shift+comma. Verify that only the flags are changed. | 866 // Press Shift+comma. Verify that only the flags are changed. |
| 900 {ui::ET_KEY_PRESSED, | 867 {ui::ET_KEY_PRESSED, |
| 901 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, | 868 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
| 902 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::UNIDENTIFIED}, | 869 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::UNIDENTIFIED}, |
| 903 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, | 870 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
| 904 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 871 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 905 ui::DomKey::Constant<'<'>::Character}}, | 872 ui::DomKey::Constant<'<'>::Character}}, |
| 906 // Press Shift+9. Verify that only the flags are changed. | 873 // Press Shift+9. Verify that only the flags are changed. |
| 907 {ui::ET_KEY_PRESSED, | 874 {ui::ET_KEY_PRESSED, |
| 908 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 875 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 909 ui::DomKey::UNIDENTIFIED}, | 876 ui::DomKey::UNIDENTIFIED}, |
| 910 {ui::VKEY_9, ui::DomCode::DIGIT9, | 877 {ui::VKEY_9, ui::DomCode::DIGIT9, |
| 911 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 878 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 912 ui::DomKey::Constant<'('>::Character}}, | 879 ui::DomKey::Constant<'('>::Character}}, |
| 913 }; | 880 }; |
| 914 | 881 |
| 915 for (const auto& test : a2c_tests) { | 882 for (const auto& test : a2c_tests) |
| 916 CheckKeyTestCase(&rewriter, test); | 883 CheckKeyTestCase(rewriter_, test); |
| 917 } | |
| 918 | 884 |
| 919 // Remap Control to Search. | 885 // Remap Control to Search. |
| 920 IntegerPrefMember control; | 886 IntegerPrefMember control; |
| 921 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 887 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 922 control.SetValue(chromeos::input_method::kSearchKey); | 888 control.SetValue(chromeos::input_method::kSearchKey); |
| 923 | 889 |
| 924 KeyTestCase c2s_tests[] = { | 890 KeyTestCase c2s_tests[] = { |
| 925 // Press left Control. Confirm the event is now VKEY_LWIN. | 891 // Press left Control. Confirm the event is now VKEY_LWIN. |
| 926 {ui::ET_KEY_PRESSED, | 892 {ui::ET_KEY_PRESSED, |
| 927 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 893 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 928 ui::DomKey::CONTROL}, | 894 ui::DomKey::CONTROL}, |
| 929 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 895 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
| 930 ui::DomKey::META}}, | 896 ui::DomKey::META}}, |
| 931 | 897 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 951 {ui::ET_KEY_PRESSED, | 917 {ui::ET_KEY_PRESSED, |
| 952 {ui::VKEY_B, ui::DomCode::US_B, | 918 {ui::VKEY_B, ui::DomCode::US_B, |
| 953 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 919 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 954 ui::DomKey::Constant<'B'>::Character}, | 920 ui::DomKey::Constant<'B'>::Character}, |
| 955 {ui::VKEY_B, ui::DomCode::US_B, | 921 {ui::VKEY_B, ui::DomCode::US_B, |
| 956 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 922 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 957 ui::EF_COMMAND_DOWN, | 923 ui::EF_COMMAND_DOWN, |
| 958 ui::DomKey::Constant<'B'>::Character}}, | 924 ui::DomKey::Constant<'B'>::Character}}, |
| 959 }; | 925 }; |
| 960 | 926 |
| 961 for (const auto& test : c2s_tests) { | 927 for (const auto& test : c2s_tests) |
| 962 CheckKeyTestCase(&rewriter, test); | 928 CheckKeyTestCase(rewriter_, test); |
| 963 } | |
| 964 | 929 |
| 965 // Remap Search to Backspace. | 930 // Remap Search to Backspace. |
| 966 IntegerPrefMember search; | 931 IntegerPrefMember search; |
| 967 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 932 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 968 search.SetValue(chromeos::input_method::kBackspaceKey); | 933 search.SetValue(chromeos::input_method::kBackspaceKey); |
| 969 | 934 |
| 970 KeyTestCase s2b_tests[] = { | 935 KeyTestCase s2b_tests[] = { |
| 971 // Release Control and Escape, as Search and Alt would transform Backspace | 936 // Release Control and Escape, as Search and Alt would transform Backspace |
| 972 // to Delete. | 937 // to Delete. |
| 973 {ui::ET_KEY_RELEASED, | 938 {ui::ET_KEY_RELEASED, |
| 974 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 939 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 975 ui::DomKey::CONTROL}, | 940 ui::DomKey::CONTROL}, |
| 976 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_ALT_DOWN, | 941 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_ALT_DOWN, |
| 977 ui::DomKey::META}}, | 942 ui::DomKey::META}}, |
| 978 {ui::ET_KEY_RELEASED, | 943 {ui::ET_KEY_RELEASED, |
| 979 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, | 944 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}, |
| 980 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_NONE, ui::DomKey::ALT}}, | 945 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_NONE, ui::DomKey::ALT}}, |
| 981 // Press Search. Confirm the event is now VKEY_BACK. | 946 // Press Search. Confirm the event is now VKEY_BACK. |
| 982 {ui::ET_KEY_PRESSED, | 947 {ui::ET_KEY_PRESSED, |
| 983 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 948 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
| 984 ui::DomKey::META}, | 949 ui::DomKey::META}, |
| 985 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_NONE, | 950 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_NONE, |
| 986 ui::DomKey::BACKSPACE}}, | 951 ui::DomKey::BACKSPACE}}, |
| 987 }; | 952 }; |
| 988 | 953 |
| 989 for (const auto& test : s2b_tests) { | 954 for (const auto& test : s2b_tests) |
| 990 CheckKeyTestCase(&rewriter, test); | 955 CheckKeyTestCase(rewriter_, test); |
| 991 } | |
| 992 | 956 |
| 993 // Remap Backspace to Escape. | 957 // Remap Backspace to Escape. |
| 994 IntegerPrefMember backspace; | 958 IntegerPrefMember backspace; |
| 995 backspace.Init(prefs::kLanguageRemapBackspaceKeyTo, &prefs); | 959 backspace.Init(prefs::kLanguageRemapBackspaceKeyTo, prefs()); |
| 996 backspace.SetValue(chromeos::input_method::kEscapeKey); | 960 backspace.SetValue(chromeos::input_method::kEscapeKey); |
| 997 | 961 |
| 998 KeyTestCase b2e_tests[] = { | 962 KeyTestCase b2e_tests[] = { |
| 999 // Press Backspace. Confirm the event is now VKEY_ESCAPE. | 963 // Press Backspace. Confirm the event is now VKEY_ESCAPE. |
| 1000 {ui::ET_KEY_PRESSED, | 964 {ui::ET_KEY_PRESSED, |
| 1001 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_NONE, | 965 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_NONE, |
| 1002 ui::DomKey::BACKSPACE}, | 966 ui::DomKey::BACKSPACE}, |
| 1003 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, | 967 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
| 1004 }; | 968 }; |
| 1005 | 969 |
| 1006 for (const auto& test : b2e_tests) { | 970 for (const auto& test : b2e_tests) |
| 1007 CheckKeyTestCase(&rewriter, test); | 971 CheckKeyTestCase(rewriter_, test); |
| 1008 } | |
| 1009 } | 972 } |
| 1010 | 973 |
| 1011 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 974 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
| 1012 // Remap Search to Caps Lock. | 975 // Remap Search to Caps Lock. |
| 1013 sync_preferences::TestingPrefServiceSyncable prefs; | 976 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1014 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1015 IntegerPrefMember search; | 977 IntegerPrefMember search; |
| 1016 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 978 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 1017 search.SetValue(chromeos::input_method::kCapsLockKey); | 979 search.SetValue(chromeos::input_method::kCapsLockKey); |
| 1018 | 980 |
| 1019 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 981 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1020 EventRewriter rewriter(NULL); | 982 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1021 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 983 rewriter_->set_ime_keyboard_for_testing(&ime_keyboard); |
| 1022 rewriter.set_pref_service_for_testing(&prefs); | |
| 1023 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | |
| 1024 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 984 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1025 | 985 |
| 1026 // Press Search. | 986 // Press Search. |
| 1027 EXPECT_EQ(GetExpectedResultAsString( | 987 EXPECT_EQ(GetExpectedResultAsString( |
| 1028 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 988 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1029 ui::EF_MOD3_DOWN | ui::EF_CAPS_LOCK_ON, ui::DomKey::CAPS_LOCK), | 989 ui::EF_MOD3_DOWN | ui::EF_CAPS_LOCK_ON, ui::DomKey::CAPS_LOCK), |
| 1030 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 990 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1031 ui::VKEY_LWIN, ui::DomCode::META_LEFT, | 991 ui::VKEY_LWIN, ui::DomCode::META_LEFT, |
| 1032 ui::EF_COMMAND_DOWN, ui::DomKey::META)); | 992 ui::EF_COMMAND_DOWN, ui::DomKey::META)); |
| 1033 // Confirm that the Caps Lock status is changed. | 993 // Confirm that the Caps Lock status is changed. |
| 1034 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 994 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1035 | 995 |
| 1036 // Release Search. | 996 // Release Search. |
| 1037 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 997 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1038 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 998 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1039 ui::DomKey::CAPS_LOCK), | 999 ui::DomKey::CAPS_LOCK), |
| 1040 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1000 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1041 ui::VKEY_LWIN, ui::DomCode::META_LEFT, | 1001 ui::VKEY_LWIN, ui::DomCode::META_LEFT, |
| 1042 ui::EF_NONE, ui::DomKey::META)); | 1002 ui::EF_NONE, ui::DomKey::META)); |
| 1043 // Confirm that the Caps Lock status is not changed. | 1003 // Confirm that the Caps Lock status is not changed. |
| 1044 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1004 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1045 | 1005 |
| 1046 // Press Search. | 1006 // Press Search. |
| 1047 EXPECT_EQ(GetExpectedResultAsString( | 1007 EXPECT_EQ(GetExpectedResultAsString( |
| 1048 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1008 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1049 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 1009 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
| 1050 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1010 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1051 ui::VKEY_LWIN, ui::DomCode::META_LEFT, | 1011 ui::VKEY_LWIN, ui::DomCode::META_LEFT, |
| 1052 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_ON, | 1012 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_ON, |
| 1053 ui::DomKey::META)); | 1013 ui::DomKey::META)); |
| 1054 // Confirm that the Caps Lock status is changed. | 1014 // Confirm that the Caps Lock status is changed. |
| 1055 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1015 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1056 | 1016 |
| 1057 // Release Search. | 1017 // Release Search. |
| 1058 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1018 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1059 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1019 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1060 ui::DomKey::CAPS_LOCK), | 1020 ui::DomKey::CAPS_LOCK), |
| 1061 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1021 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1062 ui::VKEY_LWIN, ui::DomCode::META_LEFT, | 1022 ui::VKEY_LWIN, ui::DomCode::META_LEFT, |
| 1063 ui::EF_NONE, ui::DomKey::META)); | 1023 ui::EF_NONE, ui::DomKey::META)); |
| 1064 // Confirm that the Caps Lock status is not changed. | 1024 // Confirm that the Caps Lock status is not changed. |
| 1065 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1025 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1066 | 1026 |
| 1067 // Press Caps Lock (on an external keyboard). | 1027 // Press Caps Lock (on an external keyboard). |
| 1068 EXPECT_EQ(GetExpectedResultAsString( | 1028 EXPECT_EQ(GetExpectedResultAsString( |
| 1069 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1029 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1070 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 1030 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
| 1071 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1031 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1072 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1032 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1073 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, | 1033 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, |
| 1074 ui::DomKey::CAPS_LOCK)); | 1034 ui::DomKey::CAPS_LOCK)); |
| 1075 | 1035 |
| 1076 #if defined(USE_X11) | 1036 #if defined(USE_X11) |
| 1077 // Confirm that calling RewriteForTesting() does not change the state of | 1037 // Confirm that calling RewriteForTesting() does not change the state of |
| 1078 // |ime_keyboard|. In this case, X Window system itself should change the | 1038 // |ime_keyboard|. In this case, X Window system itself should change the |
| 1079 // Caps Lock state, not ash::EventRewriter. | 1039 // Caps Lock state, not ash::EventRewriter. |
| 1080 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1040 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1081 #elif defined(USE_OZONE) | 1041 #elif defined(USE_OZONE) |
| 1082 // Under Ozone the rewriter is responsible for changing the caps lock | 1042 // Under Ozone the rewriter is responsible for changing the caps lock |
| 1083 // state when the final key is Caps Lock, regardless of whether the | 1043 // state when the final key is Caps Lock, regardless of whether the |
| 1084 // initial key is Caps Lock. | 1044 // initial key is Caps Lock. |
| 1085 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1045 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1086 #endif | 1046 #endif |
| 1087 | 1047 |
| 1088 // Release Caps Lock (on an external keyboard). | 1048 // Release Caps Lock (on an external keyboard). |
| 1089 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1049 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1090 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1050 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1091 ui::DomKey::CAPS_LOCK), | 1051 ui::DomKey::CAPS_LOCK), |
| 1092 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1052 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1093 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1053 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1094 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); | 1054 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); |
| 1095 #if defined(USE_X11) | 1055 #if defined(USE_X11) |
| 1096 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1056 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1097 #elif defined(USE_OZONE) | 1057 #elif defined(USE_OZONE) |
| 1098 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1058 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1099 #endif | 1059 #endif |
| 1100 } | 1060 } |
| 1101 | 1061 |
| 1102 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 1062 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
| 1103 sync_preferences::TestingPrefServiceSyncable prefs; | 1063 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1104 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1105 | 1064 |
| 1106 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1065 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1107 EventRewriter rewriter(NULL); | 1066 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1108 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1067 rewriter_->set_ime_keyboard_for_testing(&ime_keyboard); |
| 1109 rewriter.set_pref_service_for_testing(&prefs); | |
| 1110 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | |
| 1111 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1068 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1112 | 1069 |
| 1113 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1070 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
| 1114 EXPECT_EQ(GetExpectedResultAsString( | 1071 EXPECT_EQ(GetExpectedResultAsString( |
| 1115 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1072 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1116 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 1073 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
| 1117 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1074 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1118 ui::VKEY_F16, ui::DomCode::F16, | 1075 ui::VKEY_F16, ui::DomCode::F16, |
| 1119 ui::EF_MOD3_DOWN, ui::DomKey::F16)); | 1076 ui::EF_MOD3_DOWN, ui::DomKey::F16)); |
| 1120 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1077 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1121 } | 1078 } |
| 1122 | 1079 |
| 1123 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1080 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
| 1124 sync_preferences::TestingPrefServiceSyncable prefs; | 1081 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1125 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1126 | 1082 |
| 1127 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1083 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1128 EventRewriter rewriter(NULL); | 1084 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1129 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1085 rewriter_->set_ime_keyboard_for_testing(&ime_keyboard); |
| 1130 rewriter.set_pref_service_for_testing(&prefs); | |
| 1131 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | |
| 1132 | 1086 |
| 1133 KeyTestCase tests[] = { | 1087 KeyTestCase tests[] = { |
| 1134 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1088 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
| 1135 // specified. | 1089 // specified. |
| 1136 {ui::ET_KEY_PRESSED, | 1090 {ui::ET_KEY_PRESSED, |
| 1137 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, | 1091 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
| 1138 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 1092 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1139 ui::DomKey::CONTROL}}, | 1093 ui::DomKey::CONTROL}}, |
| 1140 | 1094 |
| 1141 {ui::ET_KEY_RELEASED, | 1095 {ui::ET_KEY_RELEASED, |
| 1142 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, | 1096 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
| 1143 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1097 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1144 ui::DomKey::CONTROL}}, | 1098 ui::DomKey::CONTROL}}, |
| 1145 | 1099 |
| 1146 // However, Mod2Mask should not be rewritten to CtrlMask when | 1100 // However, Mod2Mask should not be rewritten to CtrlMask when |
| 1147 // --has-chromeos-diamond-key is not specified. | 1101 // --has-chromeos-diamond-key is not specified. |
| 1148 {ui::ET_KEY_PRESSED, | 1102 {ui::ET_KEY_PRESSED, |
| 1149 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, | 1103 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, |
| 1150 ui::DomKey::Constant<'a'>::Character}, | 1104 ui::DomKey::Constant<'a'>::Character}, |
| 1151 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, | 1105 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, |
| 1152 ui::DomKey::Constant<'a'>::Character}}, | 1106 ui::DomKey::Constant<'a'>::Character}}, |
| 1153 }; | 1107 }; |
| 1154 | 1108 |
| 1155 for (const auto& test : tests) { | 1109 for (const auto& test : tests) |
| 1156 CheckKeyTestCase(&rewriter, test); | 1110 CheckKeyTestCase(rewriter_, test); |
| 1157 } | |
| 1158 } | 1111 } |
| 1159 | 1112 |
| 1160 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1113 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
| 1161 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1114 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| 1162 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1115 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1163 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1116 chromeos::switches::kHasChromeOSDiamondKey, ""); |
| 1164 | 1117 |
| 1165 sync_preferences::TestingPrefServiceSyncable prefs; | 1118 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1166 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1167 | 1119 |
| 1168 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1120 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1169 EventRewriter rewriter(NULL); | 1121 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1170 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1122 rewriter_->set_ime_keyboard_for_testing(&ime_keyboard); |
| 1171 rewriter.set_pref_service_for_testing(&prefs); | |
| 1172 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | |
| 1173 | 1123 |
| 1174 // By default, F15 should work as Control. | 1124 // By default, F15 should work as Control. |
| 1175 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1125 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1176 ui::DomCode::CONTROL_LEFT, | 1126 ui::DomCode::CONTROL_LEFT, |
| 1177 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), | 1127 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1178 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1128 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1179 ui::VKEY_F15, ui::DomCode::F15, | 1129 ui::VKEY_F15, ui::DomCode::F15, |
| 1180 ui::EF_NONE, ui::DomKey::F15)); | 1130 ui::EF_NONE, ui::DomKey::F15)); |
| 1181 // Check that Control is applied to a subsequent key press. | 1131 // Check that Control is applied to a subsequent key press. |
| 1182 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1132 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1183 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, | 1133 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1184 ui::DomKey::Constant<'a'>::Character), | 1134 ui::DomKey::Constant<'a'>::Character), |
| 1185 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1135 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1186 ui::DomCode::US_A, ui::EF_NONE, | 1136 ui::DomCode::US_A, ui::EF_NONE, |
| 1187 ui::DomKey::Constant<'a'>::Character)); | 1137 ui::DomKey::Constant<'a'>::Character)); |
| 1188 // Release F15 | 1138 // Release F15 |
| 1189 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1139 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1190 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1140 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1191 ui::DomKey::CONTROL), | 1141 ui::DomKey::CONTROL), |
| 1192 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1142 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1193 ui::VKEY_F15, ui::DomCode::F15, | 1143 ui::VKEY_F15, ui::DomCode::F15, |
| 1194 ui::EF_NONE, ui::DomKey::F15)); | 1144 ui::EF_NONE, ui::DomKey::F15)); |
| 1195 // Check that Control is no longer applied to a subsequent key press. | 1145 // Check that Control is no longer applied to a subsequent key press. |
| 1196 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1146 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1197 ui::DomCode::US_A, ui::EF_NONE, | 1147 ui::DomCode::US_A, ui::EF_NONE, |
| 1198 ui::DomKey::Constant<'a'>::Character), | 1148 ui::DomKey::Constant<'a'>::Character), |
| 1199 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1149 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1200 ui::DomCode::US_A, ui::EF_NONE, | 1150 ui::DomCode::US_A, ui::EF_NONE, |
| 1201 ui::DomKey::Constant<'a'>::Character)); | 1151 ui::DomKey::Constant<'a'>::Character)); |
| 1202 | 1152 |
| 1203 IntegerPrefMember diamond; | 1153 IntegerPrefMember diamond; |
| 1204 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1154 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, prefs()); |
| 1205 diamond.SetValue(chromeos::input_method::kVoidKey); | 1155 diamond.SetValue(chromeos::input_method::kVoidKey); |
| 1206 | 1156 |
| 1207 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, | 1157 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, |
| 1208 ui::DomCode::NONE, ui::EF_NONE, | 1158 ui::DomCode::NONE, ui::EF_NONE, |
| 1209 ui::DomKey::UNIDENTIFIED), | 1159 ui::DomKey::UNIDENTIFIED), |
| 1210 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1160 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1211 ui::VKEY_F15, ui::DomCode::F15, | 1161 ui::VKEY_F15, ui::DomCode::F15, |
| 1212 ui::EF_NONE, ui::DomKey::F15)); | 1162 ui::EF_NONE, ui::DomKey::F15)); |
| 1213 // Check that no modifier is applied to another key. | 1163 // Check that no modifier is applied to another key. |
| 1214 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1164 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1215 ui::DomCode::US_A, ui::EF_NONE, | 1165 ui::DomCode::US_A, ui::EF_NONE, |
| 1216 ui::DomKey::Constant<'a'>::Character), | 1166 ui::DomKey::Constant<'a'>::Character), |
| 1217 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1167 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1218 ui::DomCode::US_A, ui::EF_NONE, | 1168 ui::DomCode::US_A, ui::EF_NONE, |
| 1219 ui::DomKey::Constant<'a'>::Character)); | 1169 ui::DomKey::Constant<'a'>::Character)); |
| 1220 | 1170 |
| 1221 diamond.SetValue(chromeos::input_method::kControlKey); | 1171 diamond.SetValue(chromeos::input_method::kControlKey); |
| 1222 | 1172 |
| 1223 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1173 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1224 ui::DomCode::CONTROL_LEFT, | 1174 ui::DomCode::CONTROL_LEFT, |
| 1225 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), | 1175 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1226 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1176 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1227 ui::VKEY_F15, ui::DomCode::F15, | 1177 ui::VKEY_F15, ui::DomCode::F15, |
| 1228 ui::EF_NONE, ui::DomKey::F15)); | 1178 ui::EF_NONE, ui::DomKey::F15)); |
| 1229 // Check that Control is applied to a subsequent key press. | 1179 // Check that Control is applied to a subsequent key press. |
| 1230 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1180 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1231 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, | 1181 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1232 ui::DomKey::Constant<'a'>::Character), | 1182 ui::DomKey::Constant<'a'>::Character), |
| 1233 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1183 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1234 ui::DomCode::US_A, ui::EF_NONE, | 1184 ui::DomCode::US_A, ui::EF_NONE, |
| 1235 ui::DomKey::Constant<'a'>::Character)); | 1185 ui::DomKey::Constant<'a'>::Character)); |
| 1236 // Release F15 | 1186 // Release F15 |
| 1237 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1187 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1238 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1188 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1239 ui::DomKey::CONTROL), | 1189 ui::DomKey::CONTROL), |
| 1240 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1190 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1241 ui::VKEY_F15, ui::DomCode::F15, | 1191 ui::VKEY_F15, ui::DomCode::F15, |
| 1242 ui::EF_NONE, ui::DomKey::F15)); | 1192 ui::EF_NONE, ui::DomKey::F15)); |
| 1243 // Check that Control is no longer applied to a subsequent key press. | 1193 // Check that Control is no longer applied to a subsequent key press. |
| 1244 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1194 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1245 ui::DomCode::US_A, ui::EF_NONE, | 1195 ui::DomCode::US_A, ui::EF_NONE, |
| 1246 ui::DomKey::Constant<'a'>::Character), | 1196 ui::DomKey::Constant<'a'>::Character), |
| 1247 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1197 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1248 ui::DomCode::US_A, ui::EF_NONE, | 1198 ui::DomCode::US_A, ui::EF_NONE, |
| 1249 ui::DomKey::Constant<'a'>::Character)); | 1199 ui::DomKey::Constant<'a'>::Character)); |
| 1250 | 1200 |
| 1251 diamond.SetValue(chromeos::input_method::kAltKey); | 1201 diamond.SetValue(chromeos::input_method::kAltKey); |
| 1252 | 1202 |
| 1253 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, | 1203 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, |
| 1254 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 1204 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 1255 ui::DomKey::ALT), | 1205 ui::DomKey::ALT), |
| 1256 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1206 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1257 ui::VKEY_F15, ui::DomCode::F15, | 1207 ui::VKEY_F15, ui::DomCode::F15, |
| 1258 ui::EF_NONE, ui::DomKey::F15)); | 1208 ui::EF_NONE, ui::DomKey::F15)); |
| 1259 // Check that Alt is applied to a subsequent key press. | 1209 // Check that Alt is applied to a subsequent key press. |
| 1260 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1210 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1261 ui::DomCode::US_A, ui::EF_ALT_DOWN, | 1211 ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 1262 ui::DomKey::Constant<'a'>::Character), | 1212 ui::DomKey::Constant<'a'>::Character), |
| 1263 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1213 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1264 ui::DomCode::US_A, ui::EF_NONE, | 1214 ui::DomCode::US_A, ui::EF_NONE, |
| 1265 ui::DomKey::Constant<'a'>::Character)); | 1215 ui::DomKey::Constant<'a'>::Character)); |
| 1266 // Release F15 | 1216 // Release F15 |
| 1267 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, | 1217 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, |
| 1268 ui::DomCode::ALT_LEFT, ui::EF_NONE, | 1218 ui::DomCode::ALT_LEFT, ui::EF_NONE, |
| 1269 ui::DomKey::ALT), | 1219 ui::DomKey::ALT), |
| 1270 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1220 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1271 ui::VKEY_F15, ui::DomCode::F15, | 1221 ui::VKEY_F15, ui::DomCode::F15, |
| 1272 ui::EF_NONE, ui::DomKey::F15)); | 1222 ui::EF_NONE, ui::DomKey::F15)); |
| 1273 // Check that Alt is no longer applied to a subsequent key press. | 1223 // Check that Alt is no longer applied to a subsequent key press. |
| 1274 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1224 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1275 ui::DomCode::US_A, ui::EF_NONE, | 1225 ui::DomCode::US_A, ui::EF_NONE, |
| 1276 ui::DomKey::Constant<'a'>::Character), | 1226 ui::DomKey::Constant<'a'>::Character), |
| 1277 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1227 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1278 ui::DomCode::US_A, ui::EF_NONE, | 1228 ui::DomCode::US_A, ui::EF_NONE, |
| 1279 ui::DomKey::Constant<'a'>::Character)); | 1229 ui::DomKey::Constant<'a'>::Character)); |
| 1280 | 1230 |
| 1281 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1231 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
| 1282 | 1232 |
| 1283 EXPECT_EQ(GetExpectedResultAsString( | 1233 EXPECT_EQ(GetExpectedResultAsString( |
| 1284 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1234 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1285 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 1235 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
| 1286 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1236 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, |
| 1287 ui::VKEY_F15, ui::DomCode::F15, | 1237 ui::VKEY_F15, ui::DomCode::F15, |
| 1288 ui::EF_NONE, ui::DomKey::F15)); | 1238 ui::EF_NONE, ui::DomKey::F15)); |
| 1289 // Check that Caps is applied to a subsequent key press. | 1239 // Check that Caps is applied to a subsequent key press. |
| 1290 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1240 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1291 ui::DomCode::US_A, | 1241 ui::DomCode::US_A, |
| 1292 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, | 1242 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, |
| 1293 ui::DomKey::Constant<'A'>::Character), | 1243 ui::DomKey::Constant<'A'>::Character), |
| 1294 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1244 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1295 ui::DomCode::US_A, ui::EF_NONE, | 1245 ui::DomCode::US_A, ui::EF_NONE, |
| 1296 ui::DomKey::Constant<'a'>::Character)); | 1246 ui::DomKey::Constant<'a'>::Character)); |
| 1297 // Release F15 | 1247 // Release F15 |
| 1298 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1248 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1299 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1249 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1300 ui::DomKey::CAPS_LOCK), | 1250 ui::DomKey::CAPS_LOCK), |
| 1301 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1251 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_RELEASED, |
| 1302 ui::VKEY_F15, ui::DomCode::F15, | 1252 ui::VKEY_F15, ui::DomCode::F15, |
| 1303 ui::EF_NONE, ui::DomKey::F15)); | 1253 ui::EF_NONE, ui::DomKey::F15)); |
| 1304 // Check that Control is no longer applied to a subsequent key press. | 1254 // Check that Control is no longer applied to a subsequent key press. |
| 1305 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1255 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1306 ui::DomCode::US_A, ui::EF_NONE, | 1256 ui::DomCode::US_A, ui::EF_NONE, |
| 1307 ui::DomKey::Constant<'a'>::Character), | 1257 ui::DomKey::Constant<'a'>::Character), |
| 1308 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1258 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1309 ui::DomCode::US_A, ui::EF_NONE, | 1259 ui::DomCode::US_A, ui::EF_NONE, |
| 1310 ui::DomKey::Constant<'a'>::Character)); | 1260 ui::DomKey::Constant<'a'>::Character)); |
| 1311 | 1261 |
| 1312 *base::CommandLine::ForCurrentProcess() = original_cl; | 1262 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 1313 } | 1263 } |
| 1314 | 1264 |
| 1315 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1265 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1316 // Remap CapsLock to Control. | 1266 // Remap CapsLock to Control. |
| 1317 sync_preferences::TestingPrefServiceSyncable prefs; | 1267 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1318 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1319 IntegerPrefMember control; | 1268 IntegerPrefMember control; |
| 1320 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1269 control.Init(prefs::kLanguageRemapCapsLockKeyTo, prefs()); |
| 1321 control.SetValue(chromeos::input_method::kControlKey); | 1270 control.SetValue(chromeos::input_method::kControlKey); |
| 1322 | 1271 |
| 1323 EventRewriter rewriter(NULL); | 1272 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1324 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1325 rewriter.set_pref_service_for_testing(&prefs); | |
| 1326 | 1273 |
| 1327 KeyTestCase tests[] = { | 1274 KeyTestCase tests[] = { |
| 1328 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1275 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
| 1329 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1276 // On Chrome OS, CapsLock works as a Mod3 modifier. |
| 1330 {ui::ET_KEY_PRESSED, | 1277 {ui::ET_KEY_PRESSED, |
| 1331 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_MOD3_DOWN, | 1278 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_MOD3_DOWN, |
| 1332 ui::DomKey::Constant<'a'>::Character}, | 1279 ui::DomKey::Constant<'a'>::Character}, |
| 1333 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, | 1280 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1334 ui::DomKey::Constant<'a'>::Character}}, | 1281 ui::DomKey::Constant<'a'>::Character}}, |
| 1335 | 1282 |
| 1336 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1283 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1337 // ControlMask | 1284 // ControlMask |
| 1338 {ui::ET_KEY_PRESSED, | 1285 {ui::ET_KEY_PRESSED, |
| 1339 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, | 1286 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, |
| 1340 ui::DomKey::Constant<'a'>::Character}, | 1287 ui::DomKey::Constant<'a'>::Character}, |
| 1341 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, | 1288 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1342 ui::DomKey::Constant<'a'>::Character}}, | 1289 ui::DomKey::Constant<'a'>::Character}}, |
| 1343 | 1290 |
| 1344 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1291 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1345 // ControlMask. | 1292 // ControlMask. |
| 1346 {ui::ET_KEY_PRESSED, | 1293 {ui::ET_KEY_PRESSED, |
| 1347 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, | 1294 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
| 1348 ui::DomKey::Constant<'a'>::Character}, | 1295 ui::DomKey::Constant<'a'>::Character}, |
| 1349 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1296 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1350 ui::DomKey::Constant<'a'>::Character}}, | 1297 ui::DomKey::Constant<'a'>::Character}}, |
| 1351 }; | 1298 }; |
| 1352 | 1299 |
| 1353 for (const auto& test : tests) { | 1300 for (const auto& test : tests) |
| 1354 CheckKeyTestCase(&rewriter, test); | 1301 CheckKeyTestCase(rewriter_, test); |
| 1355 } | |
| 1356 } | 1302 } |
| 1357 | 1303 |
| 1358 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1304 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
| 1359 // Remap CapsLock to Control. | 1305 // Remap CapsLock to Control. |
| 1360 sync_preferences::TestingPrefServiceSyncable prefs; | 1306 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1361 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1362 IntegerPrefMember control; | 1307 IntegerPrefMember control; |
| 1363 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1308 control.Init(prefs::kLanguageRemapCapsLockKeyTo, prefs()); |
| 1364 control.SetValue(chromeos::input_method::kControlKey); | 1309 control.SetValue(chromeos::input_method::kControlKey); |
| 1365 | 1310 |
| 1366 EventRewriter rewriter(NULL); | 1311 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1367 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1368 rewriter.set_pref_service_for_testing(&prefs); | |
| 1369 input_method_manager_mock_->set_mod3_used(true); | 1312 input_method_manager_mock_->set_mod3_used(true); |
| 1370 | 1313 |
| 1371 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1314 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
| 1372 // when Mod3Mask is already in use by the current XKB layout. | 1315 // when Mod3Mask is already in use by the current XKB layout. |
| 1373 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1316 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1374 ui::DomCode::US_A, ui::EF_NONE, | 1317 ui::DomCode::US_A, ui::EF_NONE, |
| 1375 ui::DomKey::Constant<'a'>::Character), | 1318 ui::DomKey::Constant<'a'>::Character), |
| 1376 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1319 GetRewrittenEventAsString(rewriter_, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1377 ui::DomCode::US_A, ui::EF_NONE, | 1320 ui::DomCode::US_A, ui::EF_NONE, |
| 1378 ui::DomKey::Constant<'a'>::Character)); | 1321 ui::DomKey::Constant<'a'>::Character)); |
| 1379 | 1322 |
| 1380 input_method_manager_mock_->set_mod3_used(false); | 1323 input_method_manager_mock_->set_mod3_used(false); |
| 1381 } | 1324 } |
| 1382 | 1325 |
| 1383 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1326 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
| 1384 sync_preferences::TestingPrefServiceSyncable prefs; | 1327 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1385 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1328 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1386 EventRewriter rewriter(NULL); | 1329 rewriter_->set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 1387 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1388 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | |
| 1389 rewriter.set_pref_service_for_testing(&prefs); | |
| 1390 | 1330 |
| 1391 KeyTestCase tests[] = { | 1331 KeyTestCase tests[] = { |
| 1392 // Alt+Backspace -> Delete | 1332 // Alt+Backspace -> Delete |
| 1393 {ui::ET_KEY_PRESSED, | 1333 {ui::ET_KEY_PRESSED, |
| 1394 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, | 1334 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
| 1395 ui::DomKey::BACKSPACE}, | 1335 ui::DomKey::BACKSPACE}, |
| 1396 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, | 1336 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, |
| 1397 // Control+Alt+Backspace -> Control+Delete | 1337 // Control+Alt+Backspace -> Control+Delete |
| 1398 {ui::ET_KEY_PRESSED, | 1338 {ui::ET_KEY_PRESSED, |
| 1399 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, | 1339 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1514 ui::DomKey::Constant<'.'>::Character}, | 1454 ui::DomKey::Constant<'.'>::Character}, |
| 1515 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_NONE, ui::DomKey::INSERT}}, | 1455 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_NONE, ui::DomKey::INSERT}}, |
| 1516 // Control+Search+Period -> Control+Insert | 1456 // Control+Search+Period -> Control+Insert |
| 1517 {ui::ET_KEY_PRESSED, | 1457 {ui::ET_KEY_PRESSED, |
| 1518 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, | 1458 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, |
| 1519 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1459 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
| 1520 ui::DomKey::Constant<'.'>::Character}, | 1460 ui::DomKey::Constant<'.'>::Character}, |
| 1521 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, | 1461 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, |
| 1522 ui::DomKey::INSERT}}}; | 1462 ui::DomKey::INSERT}}}; |
| 1523 | 1463 |
| 1524 for (const auto& test : tests) { | 1464 for (const auto& test : tests) |
| 1525 CheckKeyTestCase(&rewriter, test); | 1465 CheckKeyTestCase(rewriter_, test); |
| 1526 } | |
| 1527 } | 1466 } |
| 1528 | 1467 |
| 1529 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1468 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
| 1530 sync_preferences::TestingPrefServiceSyncable prefs; | 1469 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1531 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1470 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1532 EventRewriter rewriter(NULL); | |
| 1533 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1534 rewriter.set_pref_service_for_testing(&prefs); | |
| 1535 | 1471 |
| 1536 KeyTestCase tests[] = { | 1472 KeyTestCase tests[] = { |
| 1537 // F1 -> Back | 1473 // F1 -> Back |
| 1538 {ui::ET_KEY_PRESSED, | 1474 {ui::ET_KEY_PRESSED, |
| 1539 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, | 1475 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, |
| 1540 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, | 1476 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
| 1541 ui::DomKey::BROWSER_BACK}}, | 1477 ui::DomKey::BROWSER_BACK}}, |
| 1542 {ui::ET_KEY_PRESSED, | 1478 {ui::ET_KEY_PRESSED, |
| 1543 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1}, | 1479 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1}, |
| 1544 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN, | 1480 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN, |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1829 {ui::ET_KEY_PRESSED, | 1765 {ui::ET_KEY_PRESSED, |
| 1830 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_COMMAND_DOWN, ui::DomKey::F10}, | 1766 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_COMMAND_DOWN, ui::DomKey::F10}, |
| 1831 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, | 1767 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, |
| 1832 {ui::ET_KEY_PRESSED, | 1768 {ui::ET_KEY_PRESSED, |
| 1833 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_COMMAND_DOWN, ui::DomKey::F11}, | 1769 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_COMMAND_DOWN, ui::DomKey::F11}, |
| 1834 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, | 1770 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
| 1835 {ui::ET_KEY_PRESSED, | 1771 {ui::ET_KEY_PRESSED, |
| 1836 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, | 1772 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, |
| 1837 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; | 1773 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; |
| 1838 | 1774 |
| 1839 for (const auto& test : tests) { | 1775 for (const auto& test : tests) |
| 1840 CheckKeyTestCase(&rewriter, test); | 1776 CheckKeyTestCase(rewriter_, test); |
| 1841 } | |
| 1842 } | 1777 } |
| 1843 | 1778 |
| 1844 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1779 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
| 1845 // Remap Search to Control. | 1780 // Remap Search to Control. |
| 1846 sync_preferences::TestingPrefServiceSyncable prefs; | 1781 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1847 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1848 IntegerPrefMember search; | 1782 IntegerPrefMember search; |
| 1849 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1783 search.Init(prefs::kLanguageRemapSearchKeyTo, prefs()); |
| 1850 search.SetValue(chromeos::input_method::kControlKey); | 1784 search.SetValue(chromeos::input_method::kControlKey); |
| 1851 | 1785 |
| 1852 EventRewriter rewriter(NULL); | 1786 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1853 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1854 rewriter.set_pref_service_for_testing(&prefs); | |
| 1855 | 1787 |
| 1856 KeyTestCase tests[] = { | 1788 KeyTestCase tests[] = { |
| 1857 // Alt+Search+Down -> End | 1789 // Alt+Search+Down -> End |
| 1858 {ui::ET_KEY_PRESSED, | 1790 {ui::ET_KEY_PRESSED, |
| 1859 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, | 1791 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1860 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::ARROW_DOWN}, | 1792 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::ARROW_DOWN}, |
| 1861 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, | 1793 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
| 1862 | 1794 |
| 1863 // Shift+Alt+Search+Down -> Shift+End | 1795 // Shift+Alt+Search+Down -> Shift+End |
| 1864 {ui::ET_KEY_PRESSED, | 1796 {ui::ET_KEY_PRESSED, |
| 1865 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, | 1797 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1866 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1798 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1867 ui::DomKey::ARROW_DOWN}, | 1799 ui::DomKey::ARROW_DOWN}, |
| 1868 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, | 1800 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, |
| 1869 }; | 1801 }; |
| 1870 | 1802 |
| 1871 for (const auto& test : tests) { | 1803 for (const auto& test : tests) |
| 1872 CheckKeyTestCase(&rewriter, test); | 1804 CheckKeyTestCase(rewriter_, test); |
| 1873 } | |
| 1874 } | 1805 } |
| 1875 | 1806 |
| 1876 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1807 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
| 1877 // Remap Control to Alt. | 1808 // Remap Control to Alt. |
| 1878 sync_preferences::TestingPrefServiceSyncable prefs; | 1809 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1879 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1880 IntegerPrefMember control; | 1810 IntegerPrefMember control; |
| 1881 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1811 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 1882 control.SetValue(chromeos::input_method::kAltKey); | 1812 control.SetValue(chromeos::input_method::kAltKey); |
| 1883 | 1813 |
| 1884 EventRewriter rewriter(NULL); | 1814 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1885 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1886 rewriter.set_pref_service_for_testing(&prefs); | |
| 1887 | 1815 |
| 1888 // Send left control press. | 1816 // Send left control press. |
| 1889 { | 1817 { |
| 1890 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1818 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1891 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, | 1819 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, |
| 1892 ui::DomKey::CONTROL, ui::EventTimeForNow()); | 1820 ui::DomKey::CONTROL, ui::EventTimeForNow()); |
| 1893 std::unique_ptr<ui::Event> new_event; | 1821 std::unique_ptr<ui::Event> new_event; |
| 1894 // Control should NOT be remapped to Alt if EF_FINAL is set. | 1822 // Control should NOT be remapped to Alt if EF_FINAL is set. |
| 1895 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1823 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 1896 rewriter.RewriteEvent(keyevent, &new_event)); | 1824 rewriter_->RewriteEvent(keyevent, &new_event)); |
| 1897 EXPECT_FALSE(new_event); | 1825 EXPECT_FALSE(new_event); |
| 1898 } | 1826 } |
| 1899 #if defined(USE_X11) | 1827 #if defined(USE_X11) |
| 1900 // Send left control press, using XI2 native events. | 1828 // Send left control press, using XI2 native events. |
| 1901 { | 1829 { |
| 1902 ui::ScopedXI2Event xev; | 1830 ui::ScopedXI2Event xev; |
| 1903 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 1831 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
| 1904 XEvent* xevent = xev; | 1832 XEvent* xevent = xev; |
| 1905 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); | 1833 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); |
| 1906 xevent->xkey.send_event = True; // XSendEvent() always does this. | 1834 xevent->xkey.send_event = True; // XSendEvent() always does this. |
| 1907 ui::KeyEvent keyevent(xev); | 1835 ui::KeyEvent keyevent(xev); |
| 1908 std::unique_ptr<ui::Event> new_event; | 1836 std::unique_ptr<ui::Event> new_event; |
| 1909 // Control should NOT be remapped to Alt if send_event | 1837 // Control should NOT be remapped to Alt if send_event |
| 1910 // flag in the event is True. | 1838 // flag in the event is True. |
| 1911 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1839 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 1912 rewriter.RewriteEvent(keyevent, &new_event)); | 1840 rewriter_->RewriteEvent(keyevent, &new_event)); |
| 1913 EXPECT_FALSE(new_event); | 1841 EXPECT_FALSE(new_event); |
| 1914 } | 1842 } |
| 1915 #endif | 1843 #endif |
| 1916 } | 1844 } |
| 1917 | 1845 |
| 1918 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { | 1846 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { |
| 1919 // Remap Control to Alt. | 1847 // Remap Control to Alt. |
| 1920 sync_preferences::TestingPrefServiceSyncable prefs; | 1848 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 1921 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 1922 IntegerPrefMember control; | 1849 IntegerPrefMember control; |
| 1923 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1850 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 1924 control.SetValue(chromeos::input_method::kAltKey); | 1851 control.SetValue(chromeos::input_method::kAltKey); |
| 1925 | 1852 |
| 1926 EventRewriter rewriter(NULL); | 1853 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1927 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 1928 rewriter.set_pref_service_for_testing(&prefs); | |
| 1929 | 1854 |
| 1930 const int kTouchId = 2; | 1855 const int kTouchId = 2; |
| 1931 gfx::Point location(0, 0); | 1856 gfx::Point location(0, 0); |
| 1932 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, | 1857 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, |
| 1933 base::TimeTicks()); | 1858 base::TimeTicks()); |
| 1934 press.set_flags(ui::EF_CONTROL_DOWN); | 1859 press.set_flags(ui::EF_CONTROL_DOWN); |
| 1935 #if defined(USE_X11) | 1860 #if defined(USE_X11) |
| 1936 ui::UpdateX11EventForFlags(&press); | 1861 ui::UpdateX11EventForFlags(&press); |
| 1937 #endif | 1862 #endif |
| 1938 | 1863 |
| 1939 std::unique_ptr<ui::Event> new_event; | 1864 std::unique_ptr<ui::Event> new_event; |
| 1940 rewriter.RewriteEvent(press, &new_event); | 1865 rewriter_->RewriteEvent(press, &new_event); |
| 1941 EXPECT_TRUE(new_event); | 1866 EXPECT_TRUE(new_event); |
| 1942 // Control should be remapped to Alt. | 1867 // Control should be remapped to Alt. |
| 1943 EXPECT_EQ(ui::EF_ALT_DOWN, | 1868 EXPECT_EQ(ui::EF_ALT_DOWN, |
| 1944 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); | 1869 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); |
| 1945 } | 1870 } |
| 1946 | 1871 |
| 1947 // Keeps a buffer of handled events. | 1872 // Keeps a buffer of handled events. |
| 1948 class EventBuffer : public ui::test::TestEventProcessor { | 1873 class EventBuffer : public ui::test::TestEventProcessor { |
| 1949 public: | 1874 public: |
| 1950 EventBuffer() {} | 1875 EventBuffer() {} |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2018 | 1943 |
| 2019 protected: | 1944 protected: |
| 2020 sync_preferences::TestingPrefServiceSyncable* prefs() { return &prefs_; } | 1945 sync_preferences::TestingPrefServiceSyncable* prefs() { return &prefs_; } |
| 2021 | 1946 |
| 2022 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } | 1947 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } |
| 2023 | 1948 |
| 2024 void SetUp() override { | 1949 void SetUp() override { |
| 2025 AshTestBase::SetUp(); | 1950 AshTestBase::SetUp(); |
| 2026 sticky_keys_controller_ = | 1951 sticky_keys_controller_ = |
| 2027 ash::Shell::GetInstance()->sticky_keys_controller(); | 1952 ash::Shell::GetInstance()->sticky_keys_controller(); |
| 2028 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); | 1953 delegate_ = base::MakeUnique<EventRewriterDelegateImpl>(); |
| 1954 delegate_->set_pref_service_for_testing(prefs()); |
| 1955 rewriter_ = base::MakeUnique<ui::chromeos::EventRewriter>( |
| 1956 delegate_.get(), sticky_keys_controller_); |
| 2029 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); | 1957 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); |
| 2030 rewriter_->set_pref_service_for_testing(&prefs_); | |
| 2031 #if defined(USE_X11) | 1958 #if defined(USE_X11) |
| 2032 ui::SetUpTouchPadForTest(kTouchPadDeviceId); | 1959 ui::SetUpTouchPadForTest(kTouchPadDeviceId); |
| 2033 #endif | 1960 #endif |
| 2034 source_.AddEventRewriter(rewriter_.get()); | 1961 source_.AddEventRewriter(rewriter_.get()); |
| 2035 sticky_keys_controller_->Enable(true); | 1962 sticky_keys_controller_->Enable(true); |
| 2036 } | 1963 } |
| 2037 | 1964 |
| 2038 void TearDown() override { | 1965 void TearDown() override { |
| 2039 rewriter_.reset(); | 1966 rewriter_.reset(); |
| 2040 AshTestBase::TearDown(); | 1967 AshTestBase::TearDown(); |
| 2041 } | 1968 } |
| 2042 | 1969 |
| 2043 protected: | 1970 protected: |
| 2044 ash::StickyKeysController* sticky_keys_controller_; | 1971 ash::StickyKeysController* sticky_keys_controller_; |
| 2045 | 1972 |
| 2046 private: | 1973 private: |
| 2047 std::unique_ptr<EventRewriter> rewriter_; | 1974 std::unique_ptr<EventRewriterDelegateImpl> delegate_; |
| 1975 std::unique_ptr<ui::chromeos::EventRewriter> rewriter_; |
| 2048 | 1976 |
| 2049 EventBuffer buffer_; | 1977 EventBuffer buffer_; |
| 2050 TestEventSource source_; | 1978 TestEventSource source_; |
| 2051 | 1979 |
| 2052 chromeos::FakeChromeUserManager* fake_user_manager_; // Not owned. | 1980 chromeos::FakeChromeUserManager* fake_user_manager_; // Not owned. |
| 2053 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 1981 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
| 2054 sync_preferences::TestingPrefServiceSyncable prefs_; | 1982 sync_preferences::TestingPrefServiceSyncable prefs_; |
| 2055 | 1983 |
| 2056 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 1984 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
| 2057 }; | 1985 }; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2093 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 2021 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 2094 } | 2022 } |
| 2095 | 2023 |
| 2096 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 2024 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
| 2097 #if defined(USE_X11) | 2025 #if defined(USE_X11) |
| 2098 std::vector<int> device_list; | 2026 std::vector<int> device_list; |
| 2099 device_list.push_back(10); | 2027 device_list.push_back(10); |
| 2100 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 2028 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
| 2101 | 2029 |
| 2102 // Remap Control to Alt. | 2030 // Remap Control to Alt. |
| 2103 sync_preferences::TestingPrefServiceSyncable prefs; | 2031 chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); |
| 2104 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | |
| 2105 IntegerPrefMember control; | 2032 IntegerPrefMember control; |
| 2106 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 2033 control.Init(prefs::kLanguageRemapControlKeyTo, prefs()); |
| 2107 control.SetValue(chromeos::input_method::kAltKey); | 2034 control.SetValue(chromeos::input_method::kAltKey); |
| 2108 | 2035 |
| 2109 EventRewriter rewriter(NULL); | 2036 rewriter_->KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 2110 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | |
| 2111 rewriter.set_pref_service_for_testing(&prefs); | |
| 2112 | 2037 |
| 2113 // Check that Control + Left Button is converted (via Alt + Left Button) | 2038 // Check that Control + Left Button is converted (via Alt + Left Button) |
| 2114 // to Right Button. | 2039 // to Right Button. |
| 2115 ui::ScopedXI2Event xev; | 2040 ui::ScopedXI2Event xev; |
| 2116 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2041 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2117 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); | 2042 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); |
| 2118 ui::MouseEvent press(xev); | 2043 ui::MouseEvent press(xev); |
| 2119 // Sanity check. | 2044 // Sanity check. |
| 2120 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2045 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2121 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); | 2046 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); |
| 2122 std::unique_ptr<ui::Event> new_event; | 2047 std::unique_ptr<ui::Event> new_event; |
| 2123 const ui::MouseEvent* result = | 2048 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2124 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2125 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2049 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2126 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2050 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2127 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); | 2051 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); |
| 2128 EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags()); | 2052 EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags()); |
| 2129 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2053 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2130 #endif | 2054 #endif |
| 2131 } | 2055 } |
| 2132 | 2056 |
| 2133 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { | 2057 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { |
| 2134 // TODO(kpschoedel): pending changes for crbug.com/360377 | 2058 // TODO(kpschoedel): pending changes for crbug.com/360377 |
| 2135 // to |chromeos::EventRewriter::RewriteLocatedEvent() | 2059 // to |ui::chromeos::EventRewriter::RewriteLocatedEvent() |
| 2136 #if defined(USE_X11) | 2060 #if defined(USE_X11) |
| 2137 std::vector<int> device_list; | 2061 std::vector<int> device_list; |
| 2138 device_list.push_back(10); | 2062 device_list.push_back(10); |
| 2139 device_list.push_back(11); | 2063 device_list.push_back(11); |
| 2140 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 2064 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
| 2141 #endif | 2065 #endif |
| 2142 sync_preferences::TestingPrefServiceSyncable prefs; | |
| 2143 EventRewriter rewriter(NULL); | |
| 2144 rewriter.set_pref_service_for_testing(&prefs); | |
| 2145 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; | 2066 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; |
| 2146 | 2067 |
| 2147 // Test Alt + Left click. | 2068 // Test Alt + Left click. |
| 2148 { | 2069 { |
| 2149 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2070 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2150 ui::EventTimeForNow(), kLeftAndAltFlag, | 2071 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2151 ui::EF_LEFT_MOUSE_BUTTON); | 2072 ui::EF_LEFT_MOUSE_BUTTON); |
| 2152 ui::EventTestApi test_press(&press); | 2073 ui::EventTestApi test_press(&press); |
| 2153 test_press.set_source_device_id(10); | 2074 test_press.set_source_device_id(10); |
| 2154 // Sanity check. | 2075 // Sanity check. |
| 2155 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2076 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2156 EXPECT_EQ(kLeftAndAltFlag, press.flags()); | 2077 EXPECT_EQ(kLeftAndAltFlag, press.flags()); |
| 2157 std::unique_ptr<ui::Event> new_event; | 2078 std::unique_ptr<ui::Event> new_event; |
| 2158 const ui::MouseEvent* result = | 2079 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2159 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2160 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2080 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2161 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2081 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2162 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2082 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2163 } | 2083 } |
| 2164 { | 2084 { |
| 2165 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2085 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2166 ui::EventTimeForNow(), kLeftAndAltFlag, | 2086 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2167 ui::EF_LEFT_MOUSE_BUTTON); | 2087 ui::EF_LEFT_MOUSE_BUTTON); |
| 2168 ui::EventTestApi test_release(&release); | 2088 ui::EventTestApi test_release(&release); |
| 2169 test_release.set_source_device_id(10); | 2089 test_release.set_source_device_id(10); |
| 2170 std::unique_ptr<ui::Event> new_event; | 2090 std::unique_ptr<ui::Event> new_event; |
| 2171 const ui::MouseEvent* result = | 2091 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2172 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2173 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2092 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2174 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2093 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2175 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2094 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2176 } | 2095 } |
| 2177 #if defined(USE_X11) | 2096 #if defined(USE_X11) |
| 2178 // Test Alt + Left click, using XI2 native events. | 2097 // Test Alt + Left click, using XI2 native events. |
| 2179 { | 2098 { |
| 2180 ui::ScopedXI2Event xev; | 2099 ui::ScopedXI2Event xev; |
| 2181 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2100 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2182 kLeftAndAltFlag); | 2101 kLeftAndAltFlag); |
| 2183 ui::MouseEvent press(xev); | 2102 ui::MouseEvent press(xev); |
| 2184 // Sanity check. | 2103 // Sanity check. |
| 2185 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2104 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2186 EXPECT_EQ(kLeftAndAltFlag, press.flags()); | 2105 EXPECT_EQ(kLeftAndAltFlag, press.flags()); |
| 2187 std::unique_ptr<ui::Event> new_event; | 2106 std::unique_ptr<ui::Event> new_event; |
| 2188 const ui::MouseEvent* result = | 2107 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2189 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2190 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2108 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2191 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2109 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2192 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2110 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2193 } | 2111 } |
| 2194 { | 2112 { |
| 2195 ui::ScopedXI2Event xev; | 2113 ui::ScopedXI2Event xev; |
| 2196 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2114 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2197 kLeftAndAltFlag); | 2115 kLeftAndAltFlag); |
| 2198 ui::MouseEvent release(xev); | 2116 ui::MouseEvent release(xev); |
| 2199 std::unique_ptr<ui::Event> new_event; | 2117 std::unique_ptr<ui::Event> new_event; |
| 2200 const ui::MouseEvent* result = | 2118 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2201 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2202 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2119 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2203 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2120 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2204 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2121 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2205 } | 2122 } |
| 2206 #endif | 2123 #endif |
| 2207 | 2124 |
| 2208 // No ALT in frst click. | 2125 // No ALT in frst click. |
| 2209 { | 2126 { |
| 2210 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2127 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2211 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2128 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 2212 ui::EF_LEFT_MOUSE_BUTTON); | 2129 ui::EF_LEFT_MOUSE_BUTTON); |
| 2213 ui::EventTestApi test_press(&press); | 2130 ui::EventTestApi test_press(&press); |
| 2214 test_press.set_source_device_id(10); | 2131 test_press.set_source_device_id(10); |
| 2215 std::unique_ptr<ui::Event> new_event; | 2132 std::unique_ptr<ui::Event> new_event; |
| 2216 const ui::MouseEvent* result = | 2133 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2217 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2218 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2134 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2219 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2135 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2220 } | 2136 } |
| 2221 { | 2137 { |
| 2222 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2138 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2223 ui::EventTimeForNow(), kLeftAndAltFlag, | 2139 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2224 ui::EF_LEFT_MOUSE_BUTTON); | 2140 ui::EF_LEFT_MOUSE_BUTTON); |
| 2225 ui::EventTestApi test_release(&release); | 2141 ui::EventTestApi test_release(&release); |
| 2226 test_release.set_source_device_id(10); | 2142 test_release.set_source_device_id(10); |
| 2227 std::unique_ptr<ui::Event> new_event; | 2143 std::unique_ptr<ui::Event> new_event; |
| 2228 const ui::MouseEvent* result = | 2144 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2229 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2230 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2145 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2231 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2146 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2232 } | 2147 } |
| 2233 #if defined(USE_X11) | 2148 #if defined(USE_X11) |
| 2234 // No ALT in frst click, using XI2 native events. | 2149 // No ALT in frst click, using XI2 native events. |
| 2235 { | 2150 { |
| 2236 ui::ScopedXI2Event xev; | 2151 ui::ScopedXI2Event xev; |
| 2237 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2152 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2238 ui::EF_LEFT_MOUSE_BUTTON); | 2153 ui::EF_LEFT_MOUSE_BUTTON); |
| 2239 ui::MouseEvent press(xev); | 2154 ui::MouseEvent press(xev); |
| 2240 std::unique_ptr<ui::Event> new_event; | 2155 std::unique_ptr<ui::Event> new_event; |
| 2241 const ui::MouseEvent* result = | 2156 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2242 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2243 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2157 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2244 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2158 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2245 } | 2159 } |
| 2246 { | 2160 { |
| 2247 ui::ScopedXI2Event xev; | 2161 ui::ScopedXI2Event xev; |
| 2248 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2162 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2249 kLeftAndAltFlag); | 2163 kLeftAndAltFlag); |
| 2250 ui::MouseEvent release(xev); | 2164 ui::MouseEvent release(xev); |
| 2251 std::unique_ptr<ui::Event> new_event; | 2165 std::unique_ptr<ui::Event> new_event; |
| 2252 const ui::MouseEvent* result = | 2166 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2253 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2254 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2167 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2255 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2168 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2256 } | 2169 } |
| 2257 #endif | 2170 #endif |
| 2258 | 2171 |
| 2259 // ALT on different device. | 2172 // ALT on different device. |
| 2260 { | 2173 { |
| 2261 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2174 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2262 ui::EventTimeForNow(), kLeftAndAltFlag, | 2175 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2263 ui::EF_LEFT_MOUSE_BUTTON); | 2176 ui::EF_LEFT_MOUSE_BUTTON); |
| 2264 ui::EventTestApi test_press(&press); | 2177 ui::EventTestApi test_press(&press); |
| 2265 test_press.set_source_device_id(11); | 2178 test_press.set_source_device_id(11); |
| 2266 std::unique_ptr<ui::Event> new_event; | 2179 std::unique_ptr<ui::Event> new_event; |
| 2267 const ui::MouseEvent* result = | 2180 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2268 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2269 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2181 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2270 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2182 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2271 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2183 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2272 } | 2184 } |
| 2273 { | 2185 { |
| 2274 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2186 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2275 ui::EventTimeForNow(), kLeftAndAltFlag, | 2187 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2276 ui::EF_LEFT_MOUSE_BUTTON); | 2188 ui::EF_LEFT_MOUSE_BUTTON); |
| 2277 ui::EventTestApi test_release(&release); | 2189 ui::EventTestApi test_release(&release); |
| 2278 test_release.set_source_device_id(10); | 2190 test_release.set_source_device_id(10); |
| 2279 std::unique_ptr<ui::Event> new_event; | 2191 std::unique_ptr<ui::Event> new_event; |
| 2280 const ui::MouseEvent* result = | 2192 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2281 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2282 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2193 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2283 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2194 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2284 } | 2195 } |
| 2285 { | 2196 { |
| 2286 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2197 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2287 ui::EventTimeForNow(), kLeftAndAltFlag, | 2198 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2288 ui::EF_LEFT_MOUSE_BUTTON); | 2199 ui::EF_LEFT_MOUSE_BUTTON); |
| 2289 ui::EventTestApi test_release(&release); | 2200 ui::EventTestApi test_release(&release); |
| 2290 test_release.set_source_device_id(11); | 2201 test_release.set_source_device_id(11); |
| 2291 std::unique_ptr<ui::Event> new_event; | 2202 std::unique_ptr<ui::Event> new_event; |
| 2292 const ui::MouseEvent* result = | 2203 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2293 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2294 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2204 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2295 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2205 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2296 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2206 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2297 } | 2207 } |
| 2298 #if defined(USE_X11) | 2208 #if defined(USE_X11) |
| 2299 // ALT on different device, using XI2 native events. | 2209 // ALT on different device, using XI2 native events. |
| 2300 { | 2210 { |
| 2301 ui::ScopedXI2Event xev; | 2211 ui::ScopedXI2Event xev; |
| 2302 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2212 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2303 kLeftAndAltFlag); | 2213 kLeftAndAltFlag); |
| 2304 ui::MouseEvent press(xev); | 2214 ui::MouseEvent press(xev); |
| 2305 std::unique_ptr<ui::Event> new_event; | 2215 std::unique_ptr<ui::Event> new_event; |
| 2306 const ui::MouseEvent* result = | 2216 const ui::MouseEvent* result = RewriteMouseButtonEvent(press, &new_event); |
| 2307 RewriteMouseButtonEvent(&rewriter, press, &new_event); | |
| 2308 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2217 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2309 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2218 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2310 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2219 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2311 } | 2220 } |
| 2312 { | 2221 { |
| 2313 ui::ScopedXI2Event xev; | 2222 ui::ScopedXI2Event xev; |
| 2314 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2223 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2315 kLeftAndAltFlag); | 2224 kLeftAndAltFlag); |
| 2316 ui::MouseEvent release(xev); | 2225 ui::MouseEvent release(xev); |
| 2317 std::unique_ptr<ui::Event> new_event; | 2226 std::unique_ptr<ui::Event> new_event; |
| 2318 const ui::MouseEvent* result = | 2227 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2319 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2320 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2228 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2321 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2229 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2322 } | 2230 } |
| 2323 { | 2231 { |
| 2324 ui::ScopedXI2Event xev; | 2232 ui::ScopedXI2Event xev; |
| 2325 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2233 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2326 kLeftAndAltFlag); | 2234 kLeftAndAltFlag); |
| 2327 ui::MouseEvent release(xev); | 2235 ui::MouseEvent release(xev); |
| 2328 std::unique_ptr<ui::Event> new_event; | 2236 std::unique_ptr<ui::Event> new_event; |
| 2329 const ui::MouseEvent* result = | 2237 const ui::MouseEvent* result = RewriteMouseButtonEvent(release, &new_event); |
| 2330 RewriteMouseButtonEvent(&rewriter, release, &new_event); | |
| 2331 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2238 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2332 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2239 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2333 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2240 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2334 } | 2241 } |
| 2335 #endif | 2242 #endif |
| 2336 } | 2243 } |
| 2337 | 2244 |
| 2338 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 2245 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
| 2339 // Test the actual key event dispatch implementation. | 2246 // Test the actual key event dispatch implementation. |
| 2340 ScopedVector<ui::Event> events; | 2247 ScopedVector<ui::Event> events; |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2686 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2593 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2687 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2594 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2688 | 2595 |
| 2689 // Turn off AltGr and Mod3. | 2596 // Turn off AltGr and Mod3. |
| 2690 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2597 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 2691 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2598 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2692 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2599 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2693 } | 2600 } |
| 2694 | 2601 |
| 2695 } // namespace chromeos | 2602 } // namespace chromeos |
| OLD | NEW |