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

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

Issue 165463002: event-rewrite: Clean up how events are rewritten. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 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/ui/ash/event_rewriter.h" 5 #include "chrome/browser/chromeos/event_rewriter.h"
6 6
7 #include <X11/keysym.h>
8 #include <X11/XF86keysym.h>
9 #include <X11/Xlib.h>
10 #undef Bool
11 #undef None
12 #undef RootWindow
13
14 #include "ash/test/ash_test_base.h"
15 #include "ash/wm/window_state.h"
7 #include "base/basictypes.h" 16 #include "base/basictypes.h"
8 #include "base/command_line.h" 17 #include "base/command_line.h"
9 #include "base/prefs/pref_member.h" 18 #include "base/prefs/pref_member.h"
10 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
11 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/testing_pref_service_syncable.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/events/event.h"
15
16 #if defined(OS_CHROMEOS)
17 #include <X11/keysym.h>
18 #include <X11/XF86keysym.h>
19 #include <X11/Xlib.h>
20
21 #include "ash/test/ash_test_base.h"
22 #include "ash/wm/window_state.h"
23 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" 20 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
24 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 21 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
25 #include "chrome/browser/chromeos/login/mock_user_manager.h" 22 #include "chrome/browser/chromeos/login/mock_user_manager.h"
26 #include "chrome/browser/chromeos/login/user_manager.h" 23 #include "chrome/browser/chromeos/login/user_manager.h"
27 #include "chrome/browser/chromeos/preferences.h" 24 #include "chrome/browser/chromeos/preferences.h"
25 #include "chrome/common/pref_names.h"
26 #include "chrome/test/base/testing_pref_service_syncable.h"
28 #include "chromeos/chromeos_switches.h" 27 #include "chromeos/chromeos_switches.h"
29 #include "chromeos/ime/fake_xkeyboard.h" 28 #include "chromeos/ime/fake_xkeyboard.h"
29 #include "testing/gtest/include/gtest/gtest.h"
30 #include "ui/aura/window.h" 30 #include "ui/aura/window.h"
31 #include "ui/events/event.h"
31 #include "ui/events/test/events_test_utils_x11.h" 32 #include "ui/events/test/events_test_utils_x11.h"
32 #include "ui/events/x/touch_factory_x11.h" 33 #include "ui/events/x/touch_factory_x11.h"
33 #include "ui/gfx/x/x11_types.h" 34 #include "ui/gfx/x/x11_types.h"
34 35
35 namespace { 36 namespace {
36 37
37 std::string GetRewrittenEventAsString(EventRewriter* rewriter, 38 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
38 ui::KeyboardCode ui_keycode, 39 ui::KeyboardCode ui_keycode,
39 int ui_flags, 40 int ui_flags,
40 ui::EventType ui_type, 41 ui::EventType ui_type,
41 KeyCode x_keycode, 42 KeyCode x_keycode,
42 unsigned int x_state) { 43 unsigned int x_state) {
43 ui::ScopedXI2Event xev; 44 ui::ScopedXI2Event xev;
44 xev.InitKeyEvent(ui_type, ui_keycode, ui_flags); 45 xev.InitKeyEvent(ui_type, ui_keycode, ui_flags);
45 XEvent* xevent = xev; 46 XEvent* xevent = xev;
46 xevent->xkey.keycode = x_keycode; 47 xevent->xkey.keycode = x_keycode;
47 xevent->xkey.state = x_state; 48 xevent->xkey.state = x_state;
48 ui::KeyEvent keyevent(xev, false /* is_char */); 49 rewriter->RewriteForTesting(xevent);
49 rewriter->RewriteForTesting(&keyevent); 50 ui::KeyEvent keyevent(xevent, false /* is_char */);
50 return base::StringPrintf( 51 return base::StringPrintf(
51 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", 52 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d",
52 keyevent.key_code(), keyevent.flags(), keyevent.type(), 53 keyevent.key_code(), keyevent.flags(), keyevent.type(),
53 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); 54 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type);
54 } 55 }
55 56
56 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, 57 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
57 int ui_flags, 58 int ui_flags,
58 ui::EventType ui_type, 59 ui::EventType ui_type,
59 KeyCode x_keycode, 60 KeyCode x_keycode,
60 unsigned int x_state, 61 unsigned int x_state,
61 int x_type) { 62 int x_type) {
62 return base::StringPrintf( 63 return base::StringPrintf(
63 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", 64 "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d",
64 ui_keycode, ui_flags, ui_type, x_keycode, x_state, x_type); 65 ui_keycode, ui_flags, ui_type, x_keycode, x_state, x_type);
65 } 66 }
66 67
67 } // namespace 68 } // namespace
68 69
69 class EventRewriterTest : public testing::Test { 70 namespace chromeos {
71
72 class EventRewriterTest : public ash::test::AshTestBase {
70 public: 73 public:
71 EventRewriterTest() 74 EventRewriterTest()
72 : display_(gfx::GetXDisplay()), 75 : display_(gfx::GetXDisplay()),
73 keycode_a_(XKeysymToKeycode(display_, XK_a)), 76 keycode_a_(XKeysymToKeycode(display_, XK_a)),
74 keycode_alt_l_(XKeysymToKeycode(display_, XK_Alt_L)), 77 keycode_alt_l_(XKeysymToKeycode(display_, XK_Alt_L)),
75 keycode_alt_r_(XKeysymToKeycode(display_, XK_Alt_R)), 78 keycode_alt_r_(XKeysymToKeycode(display_, XK_Alt_R)),
76 keycode_b_(XKeysymToKeycode(display_, XK_B)), 79 keycode_b_(XKeysymToKeycode(display_, XK_B)),
77 keycode_caps_lock_(XKeysymToKeycode(display_, XK_Caps_Lock)), 80 keycode_caps_lock_(XKeysymToKeycode(display_, XK_Caps_Lock)),
78 keycode_control_l_(XKeysymToKeycode(display_, XK_Control_L)), 81 keycode_control_l_(XKeysymToKeycode(display_, XK_Control_L)),
79 keycode_control_r_(XKeysymToKeycode(display_, XK_Control_R)), 82 keycode_control_r_(XKeysymToKeycode(display_, XK_Control_R)),
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 virtual ~EventRewriterTest() {} 168 virtual ~EventRewriterTest() {}
166 169
167 virtual void SetUp() { 170 virtual void SetUp() {
168 // Mocking user manager because the real one needs to be called on UI thread 171 // Mocking user manager because the real one needs to be called on UI thread
169 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) 172 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest())
170 .WillRepeatedly(testing::Return(false)); 173 .WillRepeatedly(testing::Return(false));
171 input_method_manager_mock_ = 174 input_method_manager_mock_ =
172 new chromeos::input_method::MockInputMethodManager; 175 new chromeos::input_method::MockInputMethodManager;
173 chromeos::input_method::InitializeForTesting( 176 chromeos::input_method::InitializeForTesting(
174 input_method_manager_mock_); // pass ownership 177 input_method_manager_mock_); // pass ownership
178
179 AshTestBase::SetUp();
175 } 180 }
176 181
177 virtual void TearDown() { 182 virtual void TearDown() {
183 AshTestBase::TearDown();
178 // Shutdown() deletes the IME mock object. 184 // Shutdown() deletes the IME mock object.
179 chromeos::input_method::Shutdown(); 185 chromeos::input_method::Shutdown();
180 } 186 }
181 187
182 protected: 188 protected:
183 void TestRewriteNumPadKeys(); 189 void TestRewriteNumPadKeys();
184 void TestRewriteNumPadKeysOnAppleKeyboard(); 190 void TestRewriteNumPadKeysOnAppleKeyboard();
185 191
186 void RewriteLocatedEvent(EventRewriter* rewriter, 192 void RewriteLocatedEvent(EventRewriter* rewriter,
Daniel Erat 2014/02/14 15:56:29 rename this to RewriteMouseEvent() and make it tak
sadrul 2014/02/14 17:23:14 Done.
187 ui::LocatedEvent* event) { 193 ui::LocatedEvent* event) {
188 rewriter->RewriteLocatedEvent(event); 194 XEvent* xevent = event->native_event();
195 rewriter->RewriteLocatedEvent(xevent);
196 *event = ui::MouseEvent(xevent);
189 } 197 }
190 198
191 Display* display_; 199 Display* display_;
192 const KeyCode keycode_a_; 200 const KeyCode keycode_a_;
193 const KeyCode keycode_alt_l_; 201 const KeyCode keycode_alt_l_;
194 const KeyCode keycode_alt_r_; 202 const KeyCode keycode_alt_r_;
195 const KeyCode keycode_b_; 203 const KeyCode keycode_b_;
196 const KeyCode keycode_caps_lock_; 204 const KeyCode keycode_caps_lock_;
197 const KeyCode keycode_control_l_; 205 const KeyCode keycode_control_l_;
198 const KeyCode keycode_control_r_; 206 const KeyCode keycode_control_r_;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 const KeyCode keycode_0_; 279 const KeyCode keycode_0_;
272 const KeyCode keycode_minus_; 280 const KeyCode keycode_minus_;
273 const KeyCode keycode_equal_; 281 const KeyCode keycode_equal_;
274 const KeyCode keycode_period_; 282 const KeyCode keycode_period_;
275 const KeyCode keycode_insert_; 283 const KeyCode keycode_insert_;
276 chromeos::MockUserManager* mock_user_manager_; // Not owned. 284 chromeos::MockUserManager* mock_user_manager_; // Not owned.
277 chromeos::ScopedUserManagerEnabler user_manager_enabler_; 285 chromeos::ScopedUserManagerEnabler user_manager_enabler_;
278 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; 286 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
279 }; 287 };
280 288
281 #else
282 class EventRewriterTest : public testing::Test {
283 public:
284 EventRewriterTest() {}
285 virtual ~EventRewriterTest() {}
286 };
287 #endif
288
289 TEST_F(EventRewriterTest, TestGetDeviceType) { 289 TEST_F(EventRewriterTest, TestGetDeviceType) {
290 // This is the typical string which an Apple keyboard sends. 290 // This is the typical string which an Apple keyboard sends.
291 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 291 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard,
292 EventRewriter::GetDeviceType("Apple Inc. Apple Keyboard")); 292 EventRewriter::GetDeviceType("Apple Inc. Apple Keyboard"));
293 293
294 // Other cases we accept. 294 // Other cases we accept.
295 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 295 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard,
296 EventRewriter::GetDeviceType("Apple Keyboard")); 296 EventRewriter::GetDeviceType("Apple Keyboard"));
297 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 297 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard,
298 EventRewriter::GetDeviceType("apple keyboard")); 298 EventRewriter::GetDeviceType("apple keyboard"));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 EXPECT_EQ(1U, rewriter.device_id_to_type_for_testing().size()); 332 EXPECT_EQ(1U, rewriter.device_id_to_type_for_testing().size());
333 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 333 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard,
334 rewriter.DeviceAddedForTesting(1, "Apple Keyboard")); 334 rewriter.DeviceAddedForTesting(1, "Apple Keyboard"));
335 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); 335 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size());
336 // Try to reuse the first ID. 336 // Try to reuse the first ID.
337 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 337 EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard,
338 rewriter.DeviceAddedForTesting(0, "Apple Keyboard")); 338 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"));
339 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); 339 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size());
340 } 340 }
341 341
342 #if defined(OS_CHROMEOS)
343 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { 342 TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
344 // First, test with a PC keyboard. 343 // First, test with a PC keyboard.
345 TestingPrefServiceSyncable prefs; 344 TestingPrefServiceSyncable prefs;
346 EventRewriter rewriter; 345 EventRewriter rewriter;
347 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 346 rewriter.DeviceAddedForTesting(0, "PC Keyboard");
348 rewriter.set_last_device_id_for_testing(0); 347 rewriter.set_last_device_id_for_testing(0);
349 rewriter.set_pref_service_for_testing(&prefs); 348 rewriter.set_pref_service_for_testing(&prefs);
350 349
351 // XK_a, Alt modifier. 350 // XK_a, Alt modifier.
352 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 351 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
(...skipping 1865 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 ui::VKEY_F9, keycode_f9_, 0, 0 }, 2217 ui::VKEY_F9, keycode_f9_, 0, 0 },
2219 { ui::VKEY_F10, keycode_f10_, Mod4Mask, 0, 2218 { ui::VKEY_F10, keycode_f10_, Mod4Mask, 0,
2220 ui::VKEY_F10, keycode_f10_, 0, 0 }, 2219 ui::VKEY_F10, keycode_f10_, 0, 0 },
2221 { ui::VKEY_F11, keycode_f11_, Mod4Mask, 0, 2220 { ui::VKEY_F11, keycode_f11_, Mod4Mask, 0,
2222 ui::VKEY_F11, keycode_f11_, 0, 0 }, 2221 ui::VKEY_F11, keycode_f11_, 0, 0 },
2223 { ui::VKEY_F12, keycode_f12_, Mod4Mask, 0, 2222 { ui::VKEY_F12, keycode_f12_, Mod4Mask, 0,
2224 ui::VKEY_F12, keycode_f12_, 0, 0 }, 2223 ui::VKEY_F12, keycode_f12_, 0, 0 },
2225 }; 2224 };
2226 2225
2227 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 2226 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
2227 // XKeysymToKeycode returns zero for unknown keys. So ignore those.
2228 if (tests[i].output_native == 0)
2229 continue;
2228 EXPECT_EQ(GetExpectedResultAsString(tests[i].output, 2230 EXPECT_EQ(GetExpectedResultAsString(tests[i].output,
2229 tests[i].output_mods, 2231 tests[i].output_mods,
2230 ui::ET_KEY_PRESSED, 2232 ui::ET_KEY_PRESSED,
2231 tests[i].output_native, 2233 tests[i].output_native,
2232 tests[i].output_native_mods, 2234 tests[i].output_native_mods,
2233 KeyPress), 2235 KeyPress),
2234 GetRewrittenEventAsString(&rewriter, 2236 GetRewrittenEventAsString(&rewriter,
2235 tests[i].input, 2237 tests[i].input,
2236 tests[i].input_mods, 2238 tests[i].input_mods,
2237 ui::ET_KEY_PRESSED, 2239 ui::ET_KEY_PRESSED,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 rewriter.set_pref_service_for_testing(&prefs); 2301 rewriter.set_pref_service_for_testing(&prefs);
2300 2302
2301 // Send left control press. 2303 // Send left control press.
2302 std::string rewritten_event; 2304 std::string rewritten_event;
2303 { 2305 {
2304 ui::ScopedXI2Event xev; 2306 ui::ScopedXI2Event xev;
2305 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); 2307 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0);
2306 XEvent* xevent = xev; 2308 XEvent* xevent = xev;
2307 xevent->xkey.keycode = keycode_control_l_; 2309 xevent->xkey.keycode = keycode_control_l_;
2308 xevent->xkey.send_event = True; // XSendEvent() always does this. 2310 xevent->xkey.send_event = True; // XSendEvent() always does this.
2311 rewriter.RewriteForTesting(xevent);
2309 ui::KeyEvent keyevent(xev, false /* is_char */); 2312 ui::KeyEvent keyevent(xev, false /* is_char */);
2310 rewriter.RewriteForTesting(&keyevent);
2311 rewritten_event = base::StringPrintf( 2313 rewritten_event = base::StringPrintf(
2312 "ui_keycode=%d ui_flags=%d ui_type=%d " 2314 "ui_keycode=%d ui_flags=%d ui_type=%d "
2313 "x_keycode=%u x_state=%u x_type=%d", 2315 "x_keycode=%u x_state=%u x_type=%d",
2314 keyevent.key_code(), keyevent.flags(), keyevent.type(), 2316 keyevent.key_code(), keyevent.flags(), keyevent.type(),
2315 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); 2317 xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type);
2316 } 2318 }
2317 2319
2318 // XK_Control_L (left Control key) should NOT be remapped to Alt if send_event 2320 // XK_Control_L (left Control key) should NOT be remapped to Alt if send_event
2319 // flag in the event is True. 2321 // flag in the event is True.
2320 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 2322 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL,
2321 ui::EF_CONTROL_DOWN, 2323 ui::EF_CONTROL_DOWN,
2322 ui::ET_KEY_PRESSED, 2324 ui::ET_KEY_PRESSED,
2323 keycode_control_l_, 2325 keycode_control_l_,
2324 0U, 2326 0U,
2325 KeyPress), 2327 KeyPress),
2326 rewritten_event); 2328 rewritten_event);
2327 } 2329 }
2328 2330
2329 // Tests of event rewriting that depend on the Ash window manager. 2331 // Tests of event rewriting that depend on the Ash window manager.
2330 class EventRewriterAshTest : public ash::test::AshTestBase { 2332 class EventRewriterAshTest : public ash::test::AshTestBase {
2331 public: 2333 public:
2332 EventRewriterAshTest() { 2334 EventRewriterAshTest() {
2333 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); 2335 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
2334 rewriter_.set_pref_service_for_testing(&prefs_); 2336 rewriter_.set_pref_service_for_testing(&prefs_);
2335 } 2337 }
2336 virtual ~EventRewriterAshTest() {} 2338 virtual ~EventRewriterAshTest() {}
2337 2339
2338 bool RewriteFunctionKeys(ui::KeyEvent* event) { 2340 bool RewriteFunctionKeys(XEvent* event) {
2339 return rewriter_.RewriteFunctionKeys(event); 2341 return rewriter_.RewriteFunctionKeys(event);
2340 } 2342 }
2341 2343
2342 protected: 2344 protected:
2343 TestingPrefServiceSyncable prefs_; 2345 TestingPrefServiceSyncable prefs_;
2344 2346
2345 private: 2347 private:
2346 EventRewriter rewriter_; 2348 EventRewriter rewriter_;
2347 2349
2348 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); 2350 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
2349 }; 2351 };
2350 2352
2351 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { 2353 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
2352 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); 2354 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1));
2353 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); 2355 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get());
2354 window_state->Activate(); 2356 window_state->Activate();
2355 2357
2356 // Create a simulated keypress of F1 targetted at the window. 2358 // Create a simulated keypress of F1 targetted at the window.
2357 ui::ScopedXI2Event xev_f1; 2359 ui::ScopedXI2Event xev_f1;
2358 KeyCode keycode_f1 = XKeysymToKeycode(gfx::GetXDisplay(), XK_F1); 2360 KeyCode keycode_f1 = XKeysymToKeycode(gfx::GetXDisplay(), XK_F1);
2359 xev_f1.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0); 2361 xev_f1.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0);
2360 XEvent* xevent = xev_f1; 2362 XEvent* xevent = xev_f1;
2361 xevent->xkey.keycode = keycode_f1; 2363 xevent->xkey.keycode = keycode_f1;
2362 ui::KeyEvent press_f1(xev_f1, false);
2363 ui::Event::DispatcherApi dispatch_helper(&press_f1);
2364 dispatch_helper.set_target(window.get());
2365 2364
2366 // Simulate an apps v2 window that has requested top row keys as function 2365 // Simulate an apps v2 window that has requested top row keys as function
2367 // keys. The event should not be rewritten. 2366 // keys. The event should not be rewritten.
2368 window_state->set_top_row_keys_are_function_keys(true); 2367 window_state->set_top_row_keys_are_function_keys(true);
2369 ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 2368 ASSERT_FALSE(RewriteFunctionKeys(xevent));
2369 ui::KeyEvent press_f1(xev_f1, false);
2370 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 2370 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code());
2371 2371
2372 // The event should also not be rewritten if the send-function-keys pref is 2372 // The event should also not be rewritten if the send-function-keys pref is
2373 // additionally set, for both apps v2 and regular windows. 2373 // additionally set, for both apps v2 and regular windows.
2374 BooleanPrefMember send_function_keys_pref; 2374 BooleanPrefMember send_function_keys_pref;
2375 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_); 2375 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_);
2376 send_function_keys_pref.SetValue(true); 2376 send_function_keys_pref.SetValue(true);
2377 ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 2377 ASSERT_FALSE(RewriteFunctionKeys(xevent));
2378 press_f1 = ui::KeyEvent(xev_f1, false);
2378 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 2379 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code());
2379 window_state->set_top_row_keys_are_function_keys(false); 2380 window_state->set_top_row_keys_are_function_keys(false);
2380 ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 2381 ASSERT_FALSE(RewriteFunctionKeys(xevent));
2382 press_f1 = ui::KeyEvent(xev_f1, false);
2381 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 2383 ASSERT_EQ(ui::VKEY_F1, press_f1.key_code());
2382 2384
2383 // If the pref isn't set when an event is sent to a regular window, F1 is 2385 // If the pref isn't set when an event is sent to a regular window, F1 is
2384 // rewritten to the back key. 2386 // rewritten to the back key.
2385 send_function_keys_pref.SetValue(false); 2387 send_function_keys_pref.SetValue(false);
2386 ASSERT_TRUE(RewriteFunctionKeys(&press_f1)); 2388 ASSERT_TRUE(RewriteFunctionKeys(xevent));
2389 press_f1 = ui::KeyEvent(xev_f1, false);
2387 ASSERT_EQ(ui::VKEY_BROWSER_BACK, press_f1.key_code()); 2390 ASSERT_EQ(ui::VKEY_BROWSER_BACK, press_f1.key_code());
2388 } 2391 }
2389 2392
2390 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { 2393 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
2391 std::vector<unsigned int> device_list; 2394 std::vector<unsigned int> device_list;
2392 device_list.push_back(10); 2395 device_list.push_back(10);
2393 device_list.push_back(11); 2396 device_list.push_back(11);
2394 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 2397 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
2395 TestingPrefServiceSyncable prefs; 2398 TestingPrefServiceSyncable prefs;
2396 EventRewriter rewriter; 2399 EventRewriter rewriter;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2452 } 2455 }
2453 { 2456 {
2454 ui::ScopedXI2Event xev; 2457 ui::ScopedXI2Event xev;
2455 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, kLeftAndAltFlag); 2458 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, kLeftAndAltFlag);
2456 ui::MouseEvent release(xev); 2459 ui::MouseEvent release(xev);
2457 RewriteLocatedEvent(&rewriter, &release); 2460 RewriteLocatedEvent(&rewriter, &release);
2458 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags()); 2461 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags());
2459 } 2462 }
2460 } 2463 }
2461 2464
2462 #endif // OS_CHROMEOS 2465 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698