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