Home | History | Annotate | Download | only in input
      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