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