15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/event_rewriter.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/keysym.h> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/XF86keysym.h> 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/Xlib.h> 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/test/ash_test_base.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_state.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_configuration.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/mock_user_manager.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/preferences.h" 28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/mock_xkeyboard.h" 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/window.h" 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/test/events_test_utils_x11.h" 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/gfx/x/x11_types.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetRewrittenEventAsString(EventRewriter* rewriter, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode ui_keycode, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ui_flags, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EventType ui_type, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyCode x_keycode, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int x_state) { 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ScopedXI2Event xev; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xev.InitKeyEvent(ui_type, ui_keycode, ui_flags); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) XEvent* xevent = xev; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.keycode = x_keycode; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.state = x_state; 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::KeyEvent keyevent(xev, false /* is_char */); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter->RewriteForTesting(&keyevent); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::StringPrintf( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyevent.key_code(), keyevent.flags(), keyevent.type(), 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ui_flags, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EventType ui_type, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyCode x_keycode, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int x_state, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int x_type) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::StringPrintf( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ui_keycode=%d ui_flags=%d ui_type=%d x_keycode=%u x_state=%u x_type=%d", 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_keycode, ui_flags, ui_type, x_keycode, x_state, x_type); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventRewriterTest : public testing::Test { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriterTest() 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) : display_(gfx::GetXDisplay()), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_(XKeysymToKeycode(display_, XK_a)), 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_(XKeysymToKeycode(display_, XK_Alt_L)), 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_r_(XKeysymToKeycode(display_, XK_Alt_R)), 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_(XKeysymToKeycode(display_, XK_B)), 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_(XKeysymToKeycode(display_, XK_Caps_Lock)), 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_(XKeysymToKeycode(display_, XK_Control_L)), 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_(XKeysymToKeycode(display_, XK_Control_R)), 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_l_(XKeysymToKeycode(display_, XK_Meta_L)), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_r_(XKeysymToKeycode(display_, XK_Meta_R)), 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_0_(XKeysymToKeycode(display_, XK_KP_0)), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_(XKeysymToKeycode(display_, XK_KP_1)), 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_2_(XKeysymToKeycode(display_, XK_KP_2)), 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_3_(XKeysymToKeycode(display_, XK_KP_3)), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_4_(XKeysymToKeycode(display_, XK_KP_4)), 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_5_(XKeysymToKeycode(display_, XK_KP_5)), 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_6_(XKeysymToKeycode(display_, XK_KP_6)), 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_7_(XKeysymToKeycode(display_, XK_KP_7)), 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_8_(XKeysymToKeycode(display_, XK_KP_8)), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_9_(XKeysymToKeycode(display_, XK_KP_9)), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_begin_(XKeysymToKeycode(display_, XK_KP_Begin)), 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_decimal_(XKeysymToKeycode(display_, XK_KP_Decimal)), 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_delete_(XKeysymToKeycode(display_, XK_KP_Delete)), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_down_(XKeysymToKeycode(display_, XK_KP_Down)), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_end_(XKeysymToKeycode(display_, XK_KP_End)), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_home_(XKeysymToKeycode(display_, XK_KP_Home)), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_insert_(XKeysymToKeycode(display_, XK_KP_Insert)), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_left_(XKeysymToKeycode(display_, XK_KP_Left)), 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_next_(XKeysymToKeycode(display_, XK_KP_Next)), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_prior_(XKeysymToKeycode(display_, XK_KP_Prior)), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_right_(XKeysymToKeycode(display_, XK_KP_Right)), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_up_(XKeysymToKeycode(display_, XK_KP_Up)), 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_(XKeysymToKeycode(display_, XK_Super_L)), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_r_(XKeysymToKeycode(display_, XK_Super_R)), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_void_symbol_(XKeysymToKeycode(display_, XK_VoidSymbol)), 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_delete_(XKeysymToKeycode(display_, XK_Delete)), 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_backspace_(XKeysymToKeycode(display_, XK_BackSpace)), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_up_(XKeysymToKeycode(display_, XK_Up)), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_down_(XKeysymToKeycode(display_, XK_Down)), 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_left_(XKeysymToKeycode(display_, XK_Left)), 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_right_(XKeysymToKeycode(display_, XK_Right)), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_prior_(XKeysymToKeycode(display_, XK_Prior)), 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_next_(XKeysymToKeycode(display_, XK_Next)), 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_home_(XKeysymToKeycode(display_, XK_Home)), 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_end_(XKeysymToKeycode(display_, XK_End)), 114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) keycode_escape_(XKeysymToKeycode(display_, XK_Escape)), 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_(XKeysymToKeycode(display_, XF86XK_Launch6)), 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_launch7_(XKeysymToKeycode(display_, XF86XK_Launch7)), 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f1_(XKeysymToKeycode(display_, XK_F1)), 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f2_(XKeysymToKeycode(display_, XK_F2)), 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f3_(XKeysymToKeycode(display_, XK_F3)), 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f4_(XKeysymToKeycode(display_, XK_F4)), 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f5_(XKeysymToKeycode(display_, XK_F5)), 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f6_(XKeysymToKeycode(display_, XK_F6)), 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f7_(XKeysymToKeycode(display_, XK_F7)), 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f8_(XKeysymToKeycode(display_, XK_F8)), 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f9_(XKeysymToKeycode(display_, XK_F9)), 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f10_(XKeysymToKeycode(display_, XK_F10)), 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f11_(XKeysymToKeycode(display_, XK_F11)), 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_f12_(XKeysymToKeycode(display_, XK_F12)), 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_browser_back_(XKeysymToKeycode(display_, XF86XK_Back)), 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_browser_forward_(XKeysymToKeycode(display_, XF86XK_Forward)), 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_browser_refresh_(XKeysymToKeycode(display_, XF86XK_Reload)), 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_media_launch_app1_(XKeysymToKeycode(display_, XF86XK_LaunchA)), 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_media_launch_app2_(XKeysymToKeycode(display_, XF86XK_LaunchB)), 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_brightness_down_(XKeysymToKeycode( 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_, XF86XK_MonBrightnessDown)), 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_brightness_up_(XKeysymToKeycode( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_, XF86XK_MonBrightnessUp)), 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_volume_mute_(XKeysymToKeycode(display_, XF86XK_AudioMute)), 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_volume_down_(XKeysymToKeycode( 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_, XF86XK_AudioLowerVolume)), 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_volume_up_(XKeysymToKeycode( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_, XF86XK_AudioRaiseVolume)), 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_power_(XKeysymToKeycode(display_, XF86XK_PowerOff)), 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_1_(XKeysymToKeycode(display_, XK_1)), 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_2_(XKeysymToKeycode(display_, XK_2)), 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_3_(XKeysymToKeycode(display_, XK_3)), 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_4_(XKeysymToKeycode(display_, XK_4)), 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_5_(XKeysymToKeycode(display_, XK_5)), 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_6_(XKeysymToKeycode(display_, XK_6)), 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_7_(XKeysymToKeycode(display_, XK_7)), 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_8_(XKeysymToKeycode(display_, XK_8)), 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_9_(XKeysymToKeycode(display_, XK_9)), 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_0_(XKeysymToKeycode(display_, XK_0)), 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_minus_(XKeysymToKeycode(display_, XK_minus)), 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_equal_(XKeysymToKeycode(display_, XK_equal)), 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_period_(XKeysymToKeycode(display_, XK_period)), 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_insert_(XKeysymToKeycode(display_, XK_Insert)), 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager_(new chromeos::MockUserManager), 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_manager_enabler_(mock_user_manager_), 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method_manager_mock_(NULL) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~EventRewriterTest() {} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mocking user manager because the real one needs to be called on UI thread 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(testing::Return(false)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method_manager_mock_ = 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new chromeos::input_method::MockInputMethodManager; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::input_method::InitializeForTesting( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method_manager_mock_); // pass ownership 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown() deletes the IME mock object. 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::input_method::Shutdown(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestRewriteNumPadKeys(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestRewriteNumPadKeysOnAppleKeyboard(); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display* display_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_a_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_alt_l_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_alt_r_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_b_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_caps_lock_; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_control_l_; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_control_r_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_meta_l_; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_meta_r_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_0_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_1_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_2_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_3_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_4_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_5_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_6_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_7_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_8_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_9_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_begin_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_decimal_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_delete_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_down_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_end_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_home_; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_insert_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_left_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_next_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_prior_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_right_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_num_pad_up_; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_super_l_; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_super_r_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_void_symbol_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_delete_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_backspace_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_up_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_down_; 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_left_; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_right_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_prior_; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_next_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_home_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_end_; 228d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const KeyCode keycode_escape_; 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_launch6_; // F15 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const KeyCode keycode_launch7_; // F16 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f1_; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f2_; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f3_; 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f4_; 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f5_; 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f6_; 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f7_; 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f8_; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f9_; 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f10_; 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f11_; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_f12_; 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_browser_back_; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_browser_forward_; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_browser_refresh_; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_media_launch_app1_; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_media_launch_app2_; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_brightness_down_; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_brightness_up_; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_volume_mute_; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_volume_down_; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_volume_up_; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_power_; 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_1_; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_2_; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_3_; 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_4_; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_5_; 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_6_; 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_7_; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_8_; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_9_; 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_0_; 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_minus_; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_equal_; 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_period_; 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const KeyCode keycode_insert_; 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::MockUserManager* mock_user_manager_; // Not owned. 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedUserManagerEnabler user_manager_enabler_; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventRewriterTest : public testing::Test { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriterTest() {} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~EventRewriterTest() {} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestGetDeviceType) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the typical string which an Apple keyboard sends. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("Apple Inc. Apple Keyboard")); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Other cases we accept. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("Apple Keyboard")); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("apple keyboard")); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("apple keyboard.")); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("apple.keyboard.")); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType(".apple.keyboard.")); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dell, Microsoft, Logitech, ... should be recognized as a kDeviceUnknown. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("Dell Dell USB Entry Keyboard")); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Microsoft Natural Ergonomic Keyboard")); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("CHESEN USB Keyboard")); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some corner cases. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, EventRewriter::GetDeviceType("")); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType(".")); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType(". ")); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType(" .")); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter::GetDeviceType("not-an-apple keyboard")); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestDeviceAddedOrRemoved) { 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rewriter.device_id_to_type_for_testing().empty()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceUnknown, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "PC Keyboard")); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, rewriter.device_id_to_type_for_testing().size()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(1, "Apple Keyboard")); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to reuse the first ID. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(EventRewriter::kDeviceAppleKeyboard, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "Apple Keyboard")); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteCommandToControl) { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First, test with a PC keyboard. 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_last_device_id_for_testing(0); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Alt modifier. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Win modifier. 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Alt+Win modifier. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod4Mask, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod4Mask)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_L (left Windows key), Alt modifier. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_R (right Windows key), Alt modifier. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_r_, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RWIN, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_r_, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An Apple keyboard reusing the ID, zero. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_last_device_id_for_testing(0); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Alt modifier. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Win modifier. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_a, Alt+Win modifier. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | ControlMask, 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod4Mask)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_L (left Windows key), Alt modifier. 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_R (right Windows key), Alt modifier. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RWIN, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_r_, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For crbug.com/133896. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Control to Alt. 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kAltKey); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_last_device_id_for_testing(0); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Control_L (left Control key) should be remapped to Alt. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CONTROL, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An Apple keyboard reusing the ID, zero. 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_last_device_id_for_testing(0); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_L (left Command key) with Alt modifier. The remapped Command key 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should never be re-remapped to Alt. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Super_R (right Command key) with Alt modifier. The remapped Command key 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should never be re-remapped to Alt. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RWIN, 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_r_, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EventRewriterTest::TestRewriteNumPadKeys() { 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_0_, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, // Num Lock 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_INSERT, 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_insert_, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0)); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_0_, 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_INSERT, 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_insert_, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_decimal_, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_DELETE, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_delete_, 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_END, 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_end_, 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_2_, 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_DOWN, 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_down_, 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_3_, 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NEXT, 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_next_, 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_4_, 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LEFT, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_left_, 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_5_, 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CLEAR, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_begin_, 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_6_, 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RIGHT, 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_right_, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_7_, 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_HOME, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_home_, 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_8_, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_UP, 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_up_, 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_9_, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod2Mask, 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_PRIOR, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_prior_, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_0_, 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD0, 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_0_, 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_decimal_, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_DECIMAL, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_decimal_, 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_, 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD1, 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_, 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_2_, 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD2, 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_2_, 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_3_, 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD3, 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_3_, 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_4_, 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD4, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_4_, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_5_, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD5, 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_5_, 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_6_, 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD6, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_6_, 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_7_, 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD7, 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_7_, 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_8_, 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD8, 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_8_, 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_9_, 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask, 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD9, 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_9_, 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod2Mask)); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRewriteNumPadKeys(); 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the num lock works correctly even when Diamond key exists. 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 888b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::switches::kHasChromeOSDiamondKey, ""); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRewriteNumPadKeys(); 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *CommandLine::ForCurrentProcess() = original_cl; 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if the rewriter can handle a Command + Num Pad event. 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_last_device_id_for_testing(0); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The result should be "Num Pad 1 with Control + Num Lock modifiers". 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_, 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod2Mask, 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_END, 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_end_, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_KP_1 (= NumPad 1 without Num Lock), Win modifier. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The result should also be "Num Pad 1 with Control + Num Lock modifiers". 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_1_, 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod2Mask, 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_NUMPAD1, 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_num_pad_end_, 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRewriteNumPadKeysOnAppleKeyboard(); 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Makes sure the num lock works correctly even when Diamond key exists. 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 942b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::switches::kHasChromeOSDiamondKey, ""); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRewriteNumPadKeysOnAppleKeyboard(); 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *CommandLine::ForCurrentProcess() = original_cl; 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. Confirm the event is not rewritten. 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Control. Confirm the event is not rewritten. 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CONTROL, 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press right Control. Confirm the event is not rewritten. 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_, 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CONTROL, 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_, 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt. Confirm the event is not rewritten. 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press right Alt. Confirm the event is not rewritten. 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_r_, 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_r_, 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test KeyRelease event, just in case. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Release Search. Confirm the release event is not rewritten. 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask, 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyRelease), 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt with Shift. Confirm the event is not rewritten. 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_l_, 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask, 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN, 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_l_, 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask)); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press right Alt with Shift. Confirm the event is not rewritten. 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_r_, 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask, 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN, 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_r_, 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask)); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search with Caps Lock mask. Confirm the event is not rewritten. 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask, 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask)); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Release Search with Caps Lock mask. Confirm the event is not rewritten. 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask | Mod4Mask, 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyRelease), 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask | Mod4Mask)); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask | 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask, 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_B, 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask | 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable Search and Control keys. 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 11227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember search; 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search.SetValue(chromeos::input_method::kVoidKey); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kVoidKey); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt with Shift. This key press shouldn't be affected by the 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pref. Confirm the event is not rewritten. 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_l_, 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask, 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN, 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_meta_l_, 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask)); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. Confirm the event is now VKEY_UNKNOWN + XK_VoidSymbol. 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_void_symbol_, 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control. Confirm the event is now VKEY_UNKNOWN + XK_VoidSymbol. 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_void_symbol_, 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CONTROL, 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control+Search. Confirm the event is now VKEY_UNKNOWN + 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_VoidSymbol without any modifiers. 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_void_symbol_, 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask)); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control+Search+a. Confirm the event is now VKEY_A without any 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modifiers. 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod4Mask)); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the Alt modifier. 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask, 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod1Mask | Mod4Mask)); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Alt to Control. 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember alt; 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt.SetValue(chromeos::input_method::kControlKey); 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // even though the Control key itself is disabled. 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Alt+a. Confirm the event is now Control+a even though the Control 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // key itself is disabled. 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Search to Control. 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 12607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember search; 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search.SetValue(chromeos::input_method::kControlKey); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. Confirm the event is now VKEY_CONTROL + XK_Control_L. 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Alt to Control too. 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember alt; 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt.SetValue(chromeos::input_method::kControlKey); 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L. 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press right Alt. Confirm the event is now VKEY_CONTROL + XK_Control_R. 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_r_, 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_r_, 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Alt+Search. Confirm the event is now VKEY_CONTROL + XK_Control_L. 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask)); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL + 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Control_L. 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod1Mask)); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Shift+Control+Alt+Search. Confirm the event is now Control with 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shift and Control modifiers. 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask, 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask)); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and Control modifiers. 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask, 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_B, 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask)); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { 1378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Remap Search to ESC. 1379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestingPrefServiceSyncable prefs; 1380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) IntegerPrefMember search; 1382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) search.SetValue(chromeos::input_method::kEscapeKey); 1384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EventRewriter rewriter; 1386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 1387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Press Search. Confirm the event is now VKEY_ESCAPE. 1389d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_ESCAPE, 1390d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::EF_NONE, 1391d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::ET_KEY_PRESSED, 1392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) keycode_escape_, 1393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 0U, 1394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) KeyPress), 1395d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 1396d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::VKEY_LWIN, 1397d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 0, 1398d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::ET_KEY_PRESSED, 1399d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) keycode_super_l_, 1400d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 0U)); 1401d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 1402d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Search to Alt. 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 14067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember search; 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search.SetValue(chromeos::input_method::kAltKey); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. Confirm the event is now VKEY_MENU + XK_Alt_L. 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Alt to Control. 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember alt; 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alt.SetValue(chromeos::input_method::kControlKey); 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Alt. Confirm the event is now VKEY_CONTROL + XK_Control_L. 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_MENU, 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Control to Search. 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kSearchKey); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press left Control. Confirm the event is now VKEY_LWIN. 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CONTROL, 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then, press all of the three, Control+Alt+Search. 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod4Mask, 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask | Mod1Mask)); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Shift+Control+Alt+Search. 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN), 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_alt_l_, 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod4Mask, 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask)); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Shift+Control+Alt+Search+B 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask | 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask, 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_B, 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_b_, 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | ControlMask | Mod1Mask | 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask)); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Search to Caps Lock. 15172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 15187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember search; 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search.SetValue(chromeos::input_method::kCapsLockKey); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::input_method::MockXKeyboard xkeyboard; 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_xkeyboard_for_testing(&xkeyboard); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that the Caps Lock status is changed. 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Release Search. 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_NONE, 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask, 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyRelease), 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask | LockMask)); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that the Caps Lock status is not changed. 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Search. 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask, 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask)); 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that the Caps Lock status is changed. 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Release Search. 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_NONE, 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask, 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyRelease), 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_LWIN, 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_super_l_, 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod4Mask | LockMask)); 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that the Caps Lock status is not changed. 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Caps Lock (on an external keyboard). 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CAPITAL, 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_NONE, 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that calling RewriteForTesting() does not change the state of 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |xkeyboard|. In this case, X Window system itself should change the 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caps Lock state, not ash::EventRewriter. 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1612b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Release Caps Lock (on an external keyboard). 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_NONE, 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask, 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyRelease), 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_CAPITAL, 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_RELEASED, 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockMask)); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, DISABLED_TestRewriteCapsLock) { 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It seems that the X server running on build servers is too old and does not 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // support F16 (i.e. 'XKeysymToKeycode(display_, XF86XK_Launch7)' call). 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(yusukes): Reenable the test once build servers are upgraded. 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 16347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::input_method::MockXKeyboard xkeyboard; 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_xkeyboard_for_testing(&xkeyboard); 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_caps_lock_, 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_F16, 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_launch7_, 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U)); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKey) { 16592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(yusukes): Reenable the test once build servers are upgraded. 16602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 16627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::input_method::MockXKeyboard xkeyboard; 16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EventRewriter rewriter; 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 16672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewriter.set_xkeyboard_for_testing(&xkeyboard); 16682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. 16702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 16712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, 16722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 16732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_control_l_, 16742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U, 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 16772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 16792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 16802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 16812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 16822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // However, Mod2Mask should not be rewritten to CtrlMask when 16842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // --has-chromeos-diamond-key is not specified. 16852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 16862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 16872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 16882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_a_, 16892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod2Mask, 16902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 16912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 16922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_A, 16932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 16942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 16952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_a_, 16962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod2Mask)); 16972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKeyWithFlag) { 17002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(yusukes): Reenable the test once build servers are upgraded. 17012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 17032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1704b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::switches::kHasChromeOSDiamondKey, ""); 17052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 17077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 17082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::input_method::MockXKeyboard xkeyboard; 17102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EventRewriter rewriter; 17112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 17122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewriter.set_xkeyboard_for_testing(&xkeyboard); 17132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // By default, F15 should work as Control. 17152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 17162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, 17172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_control_l_, 17192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U, 17202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 17212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 17222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 17262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 17272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IntegerPrefMember diamond; 17292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); 17302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diamond.SetValue(chromeos::input_method::kVoidKey); 17312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_UNKNOWN, 17332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_void_symbol_, 17362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U, 17372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 17382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 17392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 17402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 17432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 17442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diamond.SetValue(chromeos::input_method::kControlKey); 17462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 17482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, 17492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_control_l_, 17512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U, 17522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 17542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 17552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 17592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diamond.SetValue(chromeos::input_method::kAltKey); 17612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, 17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_alt_l_, 17662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 17682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 17692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 17702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 17732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 17742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diamond.SetValue(chromeos::input_method::kCapsLockKey); 17762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CAPS_LOCK_DOWN, 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_caps_lock_, 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U, 17822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 17842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F15, 17852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 17862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 17872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keycode_launch6_, 17882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0U)); 17892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *CommandLine::ForCurrentProcess() = original_cl; 17912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 17922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { 17942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 17957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 17972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kControlKey); 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Chrome OS, CapsLock works as a Mod3 modifier. 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod3Mask)); 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ControlMask, 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod3Mask | ControlMask)); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | ControlMask, 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod3Mask)); 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap CapsLock to Control. 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 18507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kControlKey); 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method_manager_mock_->SetCurrentInputMethodId("xkb:de:neo:ger"); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when Mod3Mask is already in use by the current XKB layout. 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod3Mask, 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_A, 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_a_, 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod3Mask)); 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method_manager_mock_->SetCurrentInputMethodId("xkb:us::eng"); 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { 18782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 18797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct { 18842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::KeyboardCode input; 18852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyCode input_native; 18862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int input_mods; 18872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int input_native_mods; 18882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::KeyboardCode output; 18892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyCode output_native; 18902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int output_mods; 18912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int output_native_mods; 18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } chromeos_tests[] = { 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Alt+Backspace -> Delete 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_BACK, keycode_backspace_, 18952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask, 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_DELETE, keycode_delete_, 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Control+Alt+Backspace -> Control+Delete 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_BACK, keycode_backspace_, 19002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, 19012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_DELETE, keycode_delete_, 19022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, ControlMask, }, 19032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Alt+Backspace -> Alt+Backspace 19042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_BACK, keycode_backspace_, 19052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, 19062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BACK, keycode_backspace_, 19072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask, }, 19082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Control+Alt+Backspace -> Control+Alt+Backspace 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_BACK, keycode_backspace_, 19102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BACK, keycode_backspace_, 19122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, }, 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Alt+Up -> Prior 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_UP, keycode_up_, 19152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask, 19162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_PRIOR, keycode_prior_, 19172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Alt+Down -> Next 19192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_DOWN, keycode_down_, 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask, 19212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_NEXT, keycode_next_, 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ctrl+Alt+Up -> Home 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_UP, keycode_up_, 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_HOME, keycode_home_, 19272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ctrl+Alt+Down -> End 19292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_DOWN, keycode_down_, 19302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, 19312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_END, keycode_end_, 19322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Alt+Up -> Alt+Up 19352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_UP, keycode_up_, 19362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, 19372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_UP, keycode_up_, 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask }, 19392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Alt+Down -> Alt+Down 19402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_DOWN, keycode_down_, 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask, 19422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_DOWN, keycode_down_, 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN, Mod1Mask }, 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_UP, keycode_up_, 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, 19472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_UP, keycode_up_, 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask }, 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_DOWN, keycode_down_, 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask | Mod4Mask, 19522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_DOWN, keycode_down_, 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask }, 19542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Period -> Period 19562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_PERIOD, keycode_period_, 0, 0, 19572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_OEM_PERIOD, keycode_period_, 0, 0 }, 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Backspace -> Delete 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_BACK, keycode_backspace_, 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, Mod4Mask, 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_DELETE, keycode_delete_, 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Up -> Prior 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_UP, keycode_up_, 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, Mod4Mask, 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_PRIOR, keycode_prior_, 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Down -> Next 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_DOWN, keycode_down_, 19712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, Mod4Mask, 19722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_NEXT, keycode_next_, 19732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Left -> Home 19752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_LEFT, keycode_left_, 19762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, Mod4Mask, 19772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_HOME, keycode_home_, 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Control+Search+Left -> Home 19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_LEFT, keycode_left_, 19812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, 19822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_HOME, keycode_home_, 19832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, ControlMask }, 19842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Right -> End 19852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_RIGHT, keycode_right_, 19862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, Mod4Mask, 19872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_END, keycode_end_, 19882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 0, }, 19892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Control+Search+Right -> End 19902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_RIGHT, keycode_right_, 19912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, 19922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_END, keycode_end_, 19932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, ControlMask }, 19942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Search+Period -> Insert 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_PERIOD, keycode_period_, 0, Mod4Mask, 19962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_INSERT, keycode_insert_, 0, 0 }, 19972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Control+Search+Period -> Control+Insert 19982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_PERIOD, keycode_period_, 19992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, Mod4Mask | ControlMask, 20002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_INSERT, keycode_insert_, 20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_CONTROL_DOWN, ControlMask } 20022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 20032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(chromeos_tests); ++i) { 20052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(chromeos_tests[i].output, 20062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].output_mods, 20072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 20082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].output_native, 20092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].output_native_mods, 20102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 20112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 20122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].input, 20132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].input_mods, 20142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 20152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].input_native, 20162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos_tests[i].input_native_mods)); 20172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 20182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { 20212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 20227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 20232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EventRewriter rewriter; 20242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct { 20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::KeyboardCode input; 20282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyCode input_native; 20292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int input_native_mods; 20302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int input_mods; 20312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::KeyboardCode output; 20322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyCode output_native; 20332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int output_native_mods; 20342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned int output_mods; 20352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } tests[] = { 20362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F1 -> Back 20372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F1, keycode_f1_, 0, 0, 20382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_BACK, keycode_browser_back_, 0, 0 }, 20392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F1, keycode_f1_, ControlMask, ui::EF_CONTROL_DOWN, 20402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_BACK, keycode_browser_back_, 20412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F1, keycode_f1_, Mod1Mask, ui::EF_ALT_DOWN, 20432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_BACK, keycode_browser_back_, 20442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F2 -> Forward 20462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F2, keycode_f2_, 0, 0, 20472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, 0, 0 }, 20482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F2, keycode_f2_, ControlMask, ui::EF_CONTROL_DOWN, 20492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, 20502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F2, keycode_f2_, Mod1Mask, ui::EF_ALT_DOWN, 20522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_FORWARD, keycode_browser_forward_, 20532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F3 -> Refresh 20552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, keycode_f3_, 0, 0, 20562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, 0, 0 }, 20572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, keycode_f3_, ControlMask, ui::EF_CONTROL_DOWN, 20582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, 20592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, keycode_f3_, Mod1Mask, ui::EF_ALT_DOWN, 20612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BROWSER_REFRESH, keycode_browser_refresh_, 20622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F4 -> Launch App 2 20642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, keycode_f4_, 0, 0, 20652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, 0, 0 }, 20662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, keycode_f4_, ControlMask, ui::EF_CONTROL_DOWN, 20672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, 20682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, keycode_f4_, Mod1Mask, ui::EF_ALT_DOWN, 20702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP2, keycode_media_launch_app2_, 20712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F5 -> Launch App 1 20732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, keycode_f5_, 0, 0, 20742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, 0, 0 }, 20752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, keycode_f5_, ControlMask, ui::EF_CONTROL_DOWN, 20762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, 20772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, keycode_f5_, Mod1Mask, ui::EF_ALT_DOWN, 20792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, keycode_media_launch_app1_, 20802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F6 -> Brightness down 20822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, keycode_f6_, 0, 0, 20832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, 0, 0 }, 20842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, keycode_f6_, ControlMask, ui::EF_CONTROL_DOWN, 20852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, 20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, keycode_f6_, Mod1Mask, ui::EF_ALT_DOWN, 20882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_DOWN, keycode_brightness_down_, 20892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F7 -> Brightness up 20912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F7, keycode_f7_, 0, 0, 20922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, 0, 0 }, 20932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F7, keycode_f7_, ControlMask, ui::EF_CONTROL_DOWN, 20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, 20952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 20962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F7, keycode_f7_, Mod1Mask, ui::EF_ALT_DOWN, 20972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_BRIGHTNESS_UP, keycode_brightness_up_, 20982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 20992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F8 -> Volume Mute 21002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F8, keycode_f8_, 0, 0, 21012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, 0, 0 }, 21022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F8, keycode_f8_, ControlMask, ui::EF_CONTROL_DOWN, 21032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, 21042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 21052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F8, keycode_f8_, Mod1Mask, ui::EF_ALT_DOWN, 21062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_MUTE, keycode_volume_mute_, 21072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 21082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F9 -> Volume Down 21092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F9, keycode_f9_, 0, 0, 21102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_DOWN, keycode_volume_down_, 0, 0 }, 21112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F9, keycode_f9_, ControlMask, ui::EF_CONTROL_DOWN, 21122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_DOWN, keycode_volume_down_, 21132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 21142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F9, keycode_f9_, Mod1Mask, ui::EF_ALT_DOWN, 21152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_DOWN, keycode_volume_down_, 21162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 21172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F10 -> Volume Up 21182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F10, keycode_f10_, 0, 0, 21192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_UP, keycode_volume_up_, 0, 0 }, 21202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F10, keycode_f10_, ControlMask, ui::EF_CONTROL_DOWN, 21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_UP, keycode_volume_up_, 21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlMask, ui::EF_CONTROL_DOWN }, 21232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F10, keycode_f10_, Mod1Mask, ui::EF_ALT_DOWN, 21242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_VOLUME_UP, keycode_volume_up_, 21252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mod1Mask, ui::EF_ALT_DOWN }, 21262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F11 -> F11 21272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F11, keycode_f11_, 0, 0, 21282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F11, keycode_f11_, 0, 0 }, 21292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F11, keycode_f11_, ControlMask, ui::EF_CONTROL_DOWN, 21302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F11, keycode_f11_, ControlMask, ui::EF_CONTROL_DOWN }, 21312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F11, keycode_f11_, Mod1Mask, ui::EF_ALT_DOWN, 21322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F11, keycode_f11_, Mod1Mask, ui::EF_ALT_DOWN }, 21332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // F12 -> F12 21342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F12, keycode_f12_, 0, 0, 21352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F12, keycode_f12_, 0, 0 }, 21362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F12, keycode_f12_, ControlMask, ui::EF_CONTROL_DOWN, 21372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F12, keycode_f12_, ControlMask, ui::EF_CONTROL_DOWN }, 21382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F12, keycode_f12_, Mod1Mask, ui::EF_ALT_DOWN, 21392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F12, keycode_f12_, Mod1Mask, ui::EF_ALT_DOWN }, 21402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The number row should not be rewritten without Search key. 21422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_1, keycode_1_, 0, 0, 21432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_1, keycode_1_, 0, 0 }, 21442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_2, keycode_2_, 0, 0, 21452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_2, keycode_2_, 0, 0 }, 21462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_3, keycode_3_, 0, 0, 21472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_3, keycode_3_, 0, 0 }, 21482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_4, keycode_4_, 0, 0, 21492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_4, keycode_4_, 0, 0 }, 21502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_5, keycode_5_, 0, 0, 21512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_5, keycode_5_, 0, 0 }, 21522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_6, keycode_6_, 0, 0, 21532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_6, keycode_6_, 0, 0 }, 21542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_7, keycode_7_, 0, 0, 21552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_7, keycode_7_, 0, 0 }, 21562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_8, keycode_8_, 0, 0, 21572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_8, keycode_8_, 0, 0 }, 21582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_9, keycode_9_, 0, 0, 21592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_9, keycode_9_, 0, 0 }, 21602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_0, keycode_0_, 0, 0, 21612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_0, keycode_0_, 0, 0 }, 21622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_MINUS, keycode_minus_, 0, 0, 21632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_OEM_MINUS, keycode_minus_, 0, 0 }, 21642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_PLUS, keycode_equal_, 0, 0, 21652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_OEM_PLUS, keycode_equal_, 0, 0 }, 21662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The number row should be rewritten as the F<number> row with Search key. 21682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_1, keycode_1_, Mod4Mask, 0, 21692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F1, keycode_f1_, 0, 0 }, 21702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_2, keycode_2_, Mod4Mask, 0, 21712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F2, keycode_f2_, 0, 0 }, 21722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_3, keycode_3_, Mod4Mask, 0, 21732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F3, keycode_f3_, 0, 0 }, 21742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_4, keycode_4_, Mod4Mask, 0, 21752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F4, keycode_f4_, 0, 0 }, 21762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_5, keycode_5_, Mod4Mask, 0, 21772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F5, keycode_f5_, 0, 0 }, 21782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_6, keycode_6_, Mod4Mask, 0, 21792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F6, keycode_f6_, 0, 0 }, 21802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_7, keycode_7_, Mod4Mask, 0, 21812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F7, keycode_f7_, 0, 0 }, 21822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_8, keycode_8_, Mod4Mask, 0, 21832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F8, keycode_f8_, 0, 0 }, 21842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_9, keycode_9_, Mod4Mask, 0, 21852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F9, keycode_f9_, 0, 0 }, 21862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_0, keycode_0_, Mod4Mask, 0, 21872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F10, keycode_f10_, 0, 0 }, 21882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_MINUS, keycode_minus_, Mod4Mask, 0, 21892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F11, keycode_f11_, 0, 0 }, 21902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_OEM_PLUS, keycode_equal_, Mod4Mask, 0, 21912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F12, keycode_f12_, 0, 0 }, 21922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The function keys should not be rewritten with Search key pressed. 21942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F1, keycode_f1_, Mod4Mask, 0, 21952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F1, keycode_f1_, 0, 0 }, 21962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F2, keycode_f2_, Mod4Mask, 0, 21972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F2, keycode_f2_, 0, 0 }, 21982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, keycode_f3_, Mod4Mask, 0, 21992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F3, keycode_f3_, 0, 0 }, 22002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, keycode_f4_, Mod4Mask, 0, 22012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F4, keycode_f4_, 0, 0 }, 22022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, keycode_f5_, Mod4Mask, 0, 22032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F5, keycode_f5_, 0, 0 }, 22042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, keycode_f6_, Mod4Mask, 0, 22052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F6, keycode_f6_, 0, 0 }, 22062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F7, keycode_f7_, Mod4Mask, 0, 22072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F7, keycode_f7_, 0, 0 }, 22082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F8, keycode_f8_, Mod4Mask, 0, 22092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F8, keycode_f8_, 0, 0 }, 22102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F9, keycode_f9_, Mod4Mask, 0, 22112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F9, keycode_f9_, 0, 0 }, 22122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F10, keycode_f10_, Mod4Mask, 0, 22132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F10, keycode_f10_, 0, 0 }, 22142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F11, keycode_f11_, Mod4Mask, 0, 22152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F11, keycode_f11_, 0, 0 }, 22162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F12, keycode_f12_, Mod4Mask, 0, 22172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::VKEY_F12, keycode_f12_, 0, 0 }, 22182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 22192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 22212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(tests[i].output, 22222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].output_mods, 22232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 22242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].output_native, 22252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].output_native_mods, 22262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyPress), 22272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRewrittenEventAsString(&rewriter, 22282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].input, 22292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].input_mods, 22302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ET_KEY_PRESSED, 22312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].input_native, 22322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].input_native_mods)); 22332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { 22372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 22382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Search to Control. 22402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 22417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember search; 22432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search.SetValue(chromeos::input_method::kControlKey); 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 2250b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::switches::kHasChromeOSKeyboard, ""); 22512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alt+Search+Down -> End 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_END, 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_end_, 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_DOWN, 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_ALT_DOWN, 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_down_, 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mod1Mask | Mod4Mask)); 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shift+Alt+Search+Down -> Shift+End 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_END, 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN, 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_end_, 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask, 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRewrittenEventAsString(&rewriter, 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_DOWN, 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_down_, 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShiftMask | Mod1Mask | Mod4Mask)); 22792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *CommandLine::ForCurrentProcess() = original_cl; 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remap Control to Alt. 22852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable prefs; 22867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IntegerPrefMember control; 22882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.SetValue(chromeos::input_method::kAltKey); 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventRewriter rewriter; 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.set_pref_service_for_testing(&prefs); 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send left control press. 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string rewritten_event; 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ScopedXI2Event xev; 2298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); 2299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) XEvent* xevent = xev; 2300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.keycode = keycode_control_l_; 2301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.send_event = True; // XSendEvent() always does this. 2302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::KeyEvent keyevent(xev, false /* is_char */); 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewriter.RewriteForTesting(&keyevent); 23042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rewritten_event = base::StringPrintf( 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ui_keycode=%d ui_flags=%d ui_type=%d " 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "x_keycode=%u x_state=%u x_type=%d", 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyevent.key_code(), keyevent.flags(), keyevent.type(), 2308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.keycode, xevent->xkey.state, xevent->xkey.type); 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XK_Control_L (left Control key) should NOT be remapped to Alt if send_event 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // flag in the event is True. 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_CONTROL_DOWN, 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_KEY_PRESSED, 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keycode_control_l_, 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0U, 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeyPress), 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rewritten_event); 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Tests of event rewriting that depend on the Ash window manager. 23234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class EventRewriterAshTest : public ash::test::AshTestBase { 23244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 23251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EventRewriterAshTest() { 23261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); 23271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rewriter_.set_pref_service_for_testing(&prefs_); 23281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 23294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~EventRewriterAshTest() {} 23304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool RewriteFunctionKeys(ui::KeyEvent* event) { 23324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return rewriter_.RewriteFunctionKeys(event); 23334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 23344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected: 23361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestingPrefServiceSyncable prefs_; 23371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 23384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 23394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EventRewriter rewriter_; 23404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); 23424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 23434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { 23454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); 23464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); 23474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_state->Activate(); 23484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Create a simulated keypress of F1 targetted at the window. 2350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ScopedXI2Event xev_f1; 23514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) KeyCode keycode_f1 = XKeysymToKeycode(gfx::GetXDisplay(), XK_F1); 2352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xev_f1.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_F1, 0); 2353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) XEvent* xevent = xev_f1; 2354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xevent->xkey.keycode = keycode_f1; 2355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::KeyEvent press_f1(xev_f1, false); 23564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Event::DispatcherApi dispatch_helper(&press_f1); 23574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) dispatch_helper.set_target(window.get()); 23584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Simulate an apps v2 window that has requested top row keys as function 23604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // keys. The event should not be rewritten. 23614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_state->set_top_row_keys_are_function_keys(true); 23621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 23631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 23641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 23651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The event should also not be rewritten if the send-function-keys pref is 23661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // additionally set, for both apps v2 and regular windows. 23671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BooleanPrefMember send_function_keys_pref; 23681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, &prefs_); 23691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) send_function_keys_pref.SetValue(true); 23701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 23711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 23724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_state->set_top_row_keys_are_function_keys(false); 23731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(RewriteFunctionKeys(&press_f1)); 23741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(ui::VKEY_F1, press_f1.key_code()); 23751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 23761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If the pref isn't set when an event is sent to a regular window, F1 is 23771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // rewritten to the back key. 23781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) send_function_keys_pref.SetValue(false); 23791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(RewriteFunctionKeys(&press_f1)); 23801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_EQ(ui::VKEY_BROWSER_BACK, press_f1.key_code()); 23814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 23824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_CHROMEOS 2384