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

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

Issue 2724913002: Move chromeos::EventRewriter to //ui/chromeos/events (Closed)
Patch Set: Fix build error Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/events/event_rewriter.h"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698