| Index: tools/dom/src/KeyCode.dart | 
| diff --git a/tools/dom/src/KeyCode.dart b/tools/dom/src/KeyCode.dart | 
| index 417ee820296d8c4abd65ae9c0a9c7022fe5581ab..3fa6b7ce559de2d5f0d95e026fd9b3374f4299d4 100644 | 
| --- a/tools/dom/src/KeyCode.dart | 
| +++ b/tools/dom/src/KeyCode.dart | 
| @@ -225,4 +225,59 @@ abstract class KeyCode { | 
| keyCode == OPEN_SQUARE_BRACKET || keyCode == BACKSLASH || | 
| keyCode == CLOSE_SQUARE_BRACKET); | 
| } | 
| + | 
| +  /** | 
| +   * Experimental helper function for converting keyCodes to keyNames for the | 
| +   * keyIdentifier attribute still used in browsers not updated with current | 
| +   * spec. This is an imperfect conversion! It will need to be refined, but | 
| +   * hopefully it can just completely go away once all the browsers update to | 
| +   * follow the DOM3 spec. | 
| +   */ | 
| +  static String _convertKeyCodeToKeyName(int keyCode) { | 
| +    switch(keyCode) { | 
| +      case KeyCode.ALT: return _KeyName.ALT; | 
| +      case KeyCode.BACKSPACE: return _KeyName.BACKSPACE; | 
| +      case KeyCode.CAPS_LOCK: return _KeyName.CAPS_LOCK; | 
| +      case KeyCode.CTRL: return _KeyName.CONTROL; | 
| +      case KeyCode.DELETE: return _KeyName.DEL; | 
| +      case KeyCode.DOWN: return _KeyName.DOWN; | 
| +      case KeyCode.END: return _KeyName.END; | 
| +      case KeyCode.ENTER: return _KeyName.ENTER; | 
| +      case KeyCode.ESC: return _KeyName.ESC; | 
| +      case KeyCode.F1: return _KeyName.F1; | 
| +      case KeyCode.F2: return _KeyName.F2; | 
| +      case KeyCode.F3: return _KeyName.F3; | 
| +      case KeyCode.F4: return _KeyName.F4; | 
| +      case KeyCode.F5: return _KeyName.F5; | 
| +      case KeyCode.F6: return _KeyName.F6; | 
| +      case KeyCode.F7: return _KeyName.F7; | 
| +      case KeyCode.F8: return _KeyName.F8; | 
| +      case KeyCode.F9: return _KeyName.F9; | 
| +      case KeyCode.F10: return _KeyName.F10; | 
| +      case KeyCode.F11: return _KeyName.F11; | 
| +      case KeyCode.F12: return _KeyName.F12; | 
| +      case KeyCode.HOME: return _KeyName.HOME; | 
| +      case KeyCode.INSERT: return _KeyName.INSERT; | 
| +      case KeyCode.LEFT: return _KeyName.LEFT; | 
| +      case KeyCode.META: return _KeyName.META; | 
| +      case KeyCode.NUMLOCK: return _KeyName.NUM_LOCK; | 
| +      case KeyCode.PAGE_DOWN: return _KeyName.PAGE_DOWN; | 
| +      case KeyCode.PAGE_UP: return _KeyName.PAGE_UP; | 
| +      case KeyCode.PAUSE: return _KeyName.PAUSE; | 
| +      case KeyCode.PRINT_SCREEN: return _KeyName.PRINT_SCREEN; | 
| +      case KeyCode.RIGHT: return _KeyName.RIGHT; | 
| +      case KeyCode.SCROLL_LOCK: return _KeyName.SCROLL; | 
| +      case KeyCode.SHIFT: return _KeyName.SHIFT; | 
| +      case KeyCode.SPACE: return _KeyName.SPACEBAR; | 
| +      case KeyCode.TAB: return _KeyName.TAB; | 
| +      case KeyCode.UP: return _KeyName.UP; | 
| +      case KeyCode.WIN_IME: | 
| +      case KeyCode.WIN_KEY: | 
| +      case KeyCode.WIN_KEY_LEFT: | 
| +      case KeyCode.WIN_KEY_RIGHT: | 
| +        return _KeyName.WIN; | 
| +      default: return _KeyName.UNIDENTIFIED; | 
| +    } | 
| +    return _KeyName.UNIDENTIFIED; | 
| +  } | 
| } | 
|  |