1bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// found in the LICENSE file. 4bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_util.h" 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 7bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/strings/string_util.h" 8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "third_party/WebKit/public/web/WebInputEvent.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace { 11bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 12bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochconst char* GetKeyIdentifier(ui::KeyboardCode key_code) { 13bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch switch (key_code) { 14bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MENU: 15bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Alt"; 16bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CONTROL: 17bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Control"; 18bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SHIFT: 19bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Shift"; 20bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CAPITAL: 21bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "CapsLock"; 22bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LWIN: 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RWIN: 24bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Win"; 25bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CLEAR: 26bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Clear"; 27bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DOWN: 28bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Down"; 29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_END: 30bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "End"; 31bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RETURN: 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Enter"; 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_EXECUTE: 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Execute"; 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F1: 36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F1"; 37bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F2: 38bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F2"; 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F3: 40bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F3"; 41bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F4: 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F4"; 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F5: 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F5"; 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F6: 46bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F6"; 47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F7: 48bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F7"; 49bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F8: 50bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F8"; 51bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F9: 52bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F9"; 53bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F10: 54bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F10"; 55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F11: 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F11"; 57bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F12: 58bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F12"; 59bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F13: 60bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F13"; 61bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F14: 62bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F14"; 63bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F15: 64bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F15"; 65bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F16: 66bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F16"; 67bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F17: 68bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F17"; 69bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F18: 70bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F18"; 71bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F19: 72bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F19"; 73bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F20: 74bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F20"; 75bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F21: 76bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F21"; 77bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F22: 78bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F22"; 79bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F23: 80bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F23"; 81bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F24: 82bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F24"; 83bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HELP: 84bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Help"; 85bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HOME: 86bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Home"; 87bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_INSERT: 88bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Insert"; 89bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LEFT: 90bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Left"; 91bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_NEXT: 92bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageDown"; 93bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PRIOR: 94bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageUp"; 95bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PAUSE: 96bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Pause"; 97bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SNAPSHOT: 98bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PrintScreen"; 99bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RIGHT: 100bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Right"; 101bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SCROLL: 102bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Scroll"; 103bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SELECT: 104bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Select"; 105bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_UP: 106bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Up"; 107bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DELETE: 108bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "U+007F"; // Standard says that DEL becomes U+007F. 109bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_NEXT_TRACK: 110bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaNextTrack"; 111bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PREV_TRACK: 112bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPreviousTrack"; 113bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_STOP: 114bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaStop"; 115bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PLAY_PAUSE: 116bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPlayPause"; 117bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_MUTE: 118bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeMute"; 119bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_DOWN: 120bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeDown"; 121bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_UP: 122bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeUp"; 123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch default: 124bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return NULL; 125bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch }; 126bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 127bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 128bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace 129bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 130bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace content { 131bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UpdateWindowsKeyCodeAndKeyIdentifier(blink::WebKeyboardEvent* event, 133bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ui::KeyboardCode windows_key_code) { 134bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch event->windowsKeyCode = windows_key_code; 135bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 136bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const char* id = GetKeyIdentifier(windows_key_code); 137bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (id) { 138bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::strlcpy(event->keyIdentifier, id, sizeof(event->keyIdentifier) - 1); 139bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } else { 140bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::snprintf(event->keyIdentifier, sizeof(event->keyIdentifier), "U+%04X", 141bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::ToUpperASCII(static_cast<int>(windows_key_code))); 142bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 143bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 144bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 145bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace content 146