1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/ime/chromeos/ime_keymap.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <map>
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/lazy_instance.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui {
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace {
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const struct KeyCodeTable {
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  KeyboardCode keyboard_code;
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const char* dom_code;
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} kKeyCodeTable[] = {
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BACK, "Backspace"},
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_TAB, "Tab"},
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RETURN, "Enter"},
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MENU, "ContextMenu"},
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_PAUSE, "Pause"},
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_CAPITAL, "CapsLock"},
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_KANA, "KanaMode"},
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_HANGUL, "HangulMode"},
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_HANJA, "Hanja"},
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_KANJI, "Kanji"},
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_ESCAPE, "Escape"},
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_CONVERT, "Convert"},
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NONCONVERT, "NoConvert"},
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_SPACE, "Space"},
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_END, "End"},
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_HOME, "Home"},
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_LEFT, "ArrowLeft"},
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_UP, "ArrowUp"},
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RIGHT, "ArrowRight"},
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_DOWN, "ArrowDown"},
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_PRINT, "PrintScreen"},
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_INSERT, "Insert"},
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_DELETE, "Delete"},
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_HELP, "Help"},
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_0, "Digit0"},
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_1, "Digit1"},
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_2, "Digit2"},
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_3, "Digit3"},
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_4, "Digit4"},
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_5, "Digit5"},
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_6, "Digit6"},
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_7, "Digit7"},
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_8, "Digit8"},
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_9, "Digit9"},
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_A, "KeyA"},
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_B, "KeyB"},
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_C, "KeyC"},
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_D, "KeyD"},
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_E, "KeyE"},
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F, "KeyF"},
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_G, "KeyG"},
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_H, "KeyH"},
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_I, "KeyI"},
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_J, "KeyJ"},
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_K, "KeyK"},
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_L, "KeyL"},
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_M, "KeyM"},
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_N, "KeyN"},
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_O, "KeyO"},
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_P, "KeyP"},
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_Q, "KeyQ"},
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_R, "KeyR"},
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_S, "KeyS"},
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_T, "KeyT"},
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_U, "KeyU"},
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_V, "KeyV"},
75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_W, "KeyW"},
76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_X, "KeyX"},
77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_Y, "KeyY"},
78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_Z, "KeyZ"},
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_LWIN, "OSLeft"},
80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RWIN, "OSRight"},
81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD0, "Numpad0"},
82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD1, "Numpad1"},
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD2, "Numpad2"},
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD3, "Numpad3"},
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD4, "Numpad4"},
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD5, "Numpad5"},
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD6, "Numpad6"},
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD7, "Numpad7"},
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD8, "Numpad8"},
90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMPAD9, "Numpad9"},
91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MULTIPLY, "NumpadMultiply"},
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_ADD, "NumpadAdd"},
93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_SUBTRACT, "NumpadSubtract"},
94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_DECIMAL, "NumpadDecimal"},
95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_DIVIDE, "NumpadDivide"},
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F1, "F1"},
97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F2, "F2"},
98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F3, "F3"},
99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F4, "F4"},
100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F5, "F5"},
101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F6, "F6"},
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F7, "F7"},
103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F8, "F8"},
104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F9, "F9"},
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F10, "F10"},
106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F11, "F11"},
107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F12, "F12"},
108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F13, "F13"},
109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F14, "F14"},
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F15, "F15"},
111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F16, "F16"},
112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F17, "F17"},
113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F18, "F18"},
114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F19, "F19"},
115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F20, "F20"},
116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F21, "F21"},
117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F22, "F22"},
118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F23, "F23"},
119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_F24, "F24"},
120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_NUMLOCK, "NumLock"},
121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_SCROLL, "ScrollLock"},
122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_LSHIFT, "ShiftLeft"},
123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RSHIFT, "ShiftRight"},
124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_LCONTROL, "CtrlLeft"},
125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RCONTROL, "CtrlRight"},
126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_LMENU, "AltLeft"},
127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_RMENU, "AltRight"},
128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_BACK, "BrowserBack"},
129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_FORWARD, "BrowserForward"},
130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_REFRESH, "BrowserRefresh"},
131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_STOP, "BrowserStop"},
132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_SEARCH, "BrowserSearch"},
133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_BROWSER_HOME, "BrowserHome"},
134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_VOLUME_MUTE, "VolumeMute"},
135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_VOLUME_DOWN, "VolumeDown"},
136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_VOLUME_UP, "VolumeUp"},
137929504d64b38e05de7355e162311d6791ad6f54dBo Liu  {VKEY_BRIGHTNESS_DOWN, "BrightnessDown"},
138929504d64b38e05de7355e162311d6791ad6f54dBo Liu  {VKEY_BRIGHTNESS_UP, "BrightnessUp"},
139929504d64b38e05de7355e162311d6791ad6f54dBo Liu  {VKEY_MEDIA_LAUNCH_APP1, "ChromeOSSwitchWindow"},
140929504d64b38e05de7355e162311d6791ad6f54dBo Liu  {VKEY_MEDIA_LAUNCH_APP2, "ChromeOSFullscreen"},
141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MEDIA_NEXT_TRACK, "MediaTrackNext"},
142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MEDIA_PREV_TRACK, "MediaTrackPrevious"},
143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MEDIA_STOP, "MediaStop"},
144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MEDIA_PLAY_PAUSE, "MediaPlayPause"},
145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_MEDIA_LAUNCH_MAIL, "LaunchMail"},
146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_1, "Semicolon"},
147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_PLUS, "Equal"},
148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_COMMA, "Comma"},
149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_MINUS, "Minus"},
150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_PERIOD, "Period"},
151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_2, "Slash"},
152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_3, "Backquote"},
153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_4, "BracketLeft"},
154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_5, "Backslash"},
155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_6, "BracketRight"},
156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  {VKEY_OEM_7, "Quote"}};
157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class KeyCodeMap {
159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  KeyCodeMap() {
161929504d64b38e05de7355e162311d6791ad6f54dBo Liu    for (size_t i = 0; i < arraysize(kKeyCodeTable); ++i) {
162929504d64b38e05de7355e162311d6791ad6f54dBo Liu      map_dom_key_[kKeyCodeTable[i].dom_code] = kKeyCodeTable[i].keyboard_code;
163929504d64b38e05de7355e162311d6791ad6f54dBo Liu      map_key_dom_[kKeyCodeTable[i].keyboard_code] = kKeyCodeTable[i].dom_code;
164929504d64b38e05de7355e162311d6791ad6f54dBo Liu    }
165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  KeyboardCode GetKeyboardCode(const std::string& dom_code) const {
168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::map<std::string, KeyboardCode>::const_iterator it =
169929504d64b38e05de7355e162311d6791ad6f54dBo Liu        map_dom_key_.find(dom_code);
170929504d64b38e05de7355e162311d6791ad6f54dBo Liu    return (it == map_dom_key_.end()) ? VKEY_UNKNOWN : it->second;
171929504d64b38e05de7355e162311d6791ad6f54dBo Liu  }
172929504d64b38e05de7355e162311d6791ad6f54dBo Liu
173929504d64b38e05de7355e162311d6791ad6f54dBo Liu  std::string GetDomKeycode(KeyboardCode key_code) const {
174929504d64b38e05de7355e162311d6791ad6f54dBo Liu    std::map<KeyboardCode, std::string>::const_iterator it =
175929504d64b38e05de7355e162311d6791ad6f54dBo Liu        map_key_dom_.find(key_code);
176929504d64b38e05de7355e162311d6791ad6f54dBo Liu    return (it == map_key_dom_.end()) ? "" : it->second;
177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
180929504d64b38e05de7355e162311d6791ad6f54dBo Liu  std::map<std::string, KeyboardCode> map_dom_key_;
181929504d64b38e05de7355e162311d6791ad6f54dBo Liu  std::map<KeyboardCode, std::string> map_key_dom_;
182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)base::LazyInstance<KeyCodeMap>::Leaky g_keycode_map =
185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    LAZY_INSTANCE_INITIALIZER;
186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace
188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)KeyboardCode DomKeycodeToKeyboardCode(const std::string& code) {
190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return g_keycode_map.Get().GetKeyboardCode(code);
191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
193929504d64b38e05de7355e162311d6791ad6f54dBo Liustd::string KeyboardCodeToDomKeycode(KeyboardCode code) {
194929504d64b38e05de7355e162311d6791ad6f54dBo Liu  return g_keycode_map.Get().GetDomKeycode(code);
195929504d64b38e05de7355e162311d6791ad6f54dBo Liu}
196929504d64b38e05de7355e162311d6791ad6f54dBo Liu
197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace ui
198