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 |