Bug 768736 Define constants for system native virtual keys for nsIDOMWindowUtils::SendNativeKeyEvent() r=roc
authorMasayuki Nakano <masayuki@d-toybox.com>
Wed, 27 Jun 2012 11:26:38 +0900
changeset 97751 015b304bebd0332b71ecc595d5bbe8bdf29481ae
parent 97750 3ee5063de5d557a45678038cfc47aeffc7c23fb6
child 97752 8e830624d9ee91045b25b8c30e85b3a423bca819
push id22993
push useremorley@mozilla.com
push dateWed, 27 Jun 2012 10:31:27 +0000
treeherdermozilla-central@1a56f1f011c9 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersroc
bugs768736
milestone16.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 768736 Define constants for system native virtual keys for nsIDOMWindowUtils::SendNativeKeyEvent() r=roc
docshell/test/test_bug511449.html
dom/interfaces/base/nsIDOMWindowUtils.idl
testing/mochitest/jar.mn
testing/mochitest/tests/SimpleTest/Makefile.in
testing/mochitest/tests/SimpleTest/NativeKeyCodes.js
widget/tests/test_bug428405.xul
widget/tests/test_key_event_counts.xul
widget/tests/test_keycodes.xul
widget/tests/test_plugin_input_event.html
--- a/docshell/test/test_bug511449.html
+++ b/docshell/test/test_bug511449.html
@@ -2,16 +2,17 @@
 <html>
 <!--
 https://bugzilla.mozilla.org/show_bug.cgi?id=511449
 -->
 <head>
   <title>Test for Bug 511449</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/NativeKeyCodes.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=511449">Mozilla Bug 511449</a>
 <p id="display"></p>
 <div id="status"></div>
 <div id="content">
 </div>
@@ -35,17 +36,17 @@ function runTest() {
 function runNextTest() {
   var didClose = false;
   win.onunload = function() {
     didClose = true;
   }
   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
   var utils = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
                   getInterface(Components.interfaces.nsIDOMWindowUtils);
-  utils.sendNativeKeyEvent(0, 13 /* w */, 0x4000 /* cmd */, "w", "w");
+  utils.sendNativeKeyEvent(0, MAC_VK_ANSI_W, 0x4000 /* cmd */, "w", "w");
 
   setTimeout(function () {
     ok(didClose, "Cmd+W should have closed the tab");
     if (!didClose) {
       win.close();
     }
     SimpleTest.finish();
   }, 1000);
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -342,16 +342,18 @@ interface nsIDOMWindowUtils : nsISupport
                        [optional] in unsigned long aAdditionalFlags);
 
   /**
    * See nsIWidget::SynthesizeNativeKeyEvent
    *
    * Cannot be accessed from unprivileged context (not content-accessible)
    * Will throw a DOM security error if called without UniversalXPConnect
    * privileges.
+   *
+   * When you use this for tests, use the constants defined in NativeKeyCodes.js
    */
   void sendNativeKeyEvent(in long aNativeKeyboardLayout,
                           in long aNativeKeyCode,
                           in long aModifierFlags,
                           in AString aCharacters,
                           in AString aUnmodifiedCharacters);
 
   /**
--- a/testing/mochitest/jar.mn
+++ b/testing/mochitest/jar.mn
@@ -18,12 +18,13 @@ mochikit.jar:
   content/tests/SimpleTest/MozillaLogger.js (tests/SimpleTest/MozillaLogger.js)
   content/tests/SimpleTest/LogController.js (tests/SimpleTest/LogController.js)
   content/tests/SimpleTest/setup.js (tests/SimpleTest/setup.js)
   content/tests/SimpleTest/SimpleTest.js (tests/SimpleTest/SimpleTest.js)
   content/tests/SimpleTest/test.css (tests/SimpleTest/test.css)
   content/tests/SimpleTest/TestRunner.js (tests/SimpleTest/TestRunner.js)
   content/tests/SimpleTest/WindowSnapshot.js (tests/SimpleTest/WindowSnapshot.js)
   content/tests/SimpleTest/MockObjects.js (tests/SimpleTest/MockObjects.js)
+  content/tests/SimpleTest/NativeKeyCodes.js (tests/SimpleTest/NativeKeyCodes.js)
   content/tests/SimpleTest/docshell_helpers.js (../../docshell/test/chrome/docshell_helpers.js)
 
 % resource mochikit %modules/
   modules/MockFilePicker.jsm (MockFilePicker.jsm)
--- a/testing/mochitest/tests/SimpleTest/Makefile.in
+++ b/testing/mochitest/tests/SimpleTest/Makefile.in
@@ -17,14 +17,15 @@ include $(topsrcdir)/config/rules.mk
 			TestRunner.js \
 			setup.js \
 			EventUtils.js \
 			ChromeUtils.js \
 			WindowSnapshot.js \
 			specialpowersAPI.js \
 			SpecialPowersObserverAPI.js \
 			MockObjects.js \
+			NativeKeyCodes.js \
 			$(DEPTH)/docshell/test/chrome/docshell_helpers.js \
 			$(NULL)
 
 libs:: $(_SIMPLETEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/$(relativesrcdir)
 
new file mode 100644
--- /dev/null
+++ b/testing/mochitest/tests/SimpleTest/NativeKeyCodes.js
@@ -0,0 +1,343 @@
+/**
+ * This file defines all virtual keycodes for
+ * nsIDOMWindowUtils.sendNativeKeyEvent()
+ * These values are defined in each platform's SDK or documents.
+ */
+
+// Windows
+
+const WIN_VK_LBUTTON                    = 0x01;
+const WIN_VK_RBUTTON                    = 0x02;
+const WIN_VK_CANCEL                     = 0x03;
+const WIN_VK_MBUTTON                    = 0x04;
+const WIN_VK_XBUTTON1                   = 0x05;
+const WIN_VK_XBUTTON2                   = 0x06;
+const WIN_VK_BACK                       = 0x08;
+const WIN_VK_TAB                        = 0x09;
+const WIN_VK_CLEAR                      = 0x0C;
+const WIN_VK_RETURN                     = 0x0D;
+const WIN_VK_SHIFT                      = 0x10;
+const WIN_VK_CONTROL                    = 0x11;
+const WIN_VK_MENU                       = 0x12;
+const WIN_VK_PAUSE                      = 0x13;
+const WIN_VK_CAPITAL                    = 0x14;
+const WIN_VK_KANA                       = 0x15;
+const WIN_VK_HANGUEL                    = 0x15;
+const WIN_VK_HANGUL                     = 0x15;
+const WIN_VK_JUNJA                      = 0x17;
+const WIN_VK_FINAL                      = 0x18;
+const WIN_VK_HANJA                      = 0x19;
+const WIN_VK_KANJI                      = 0x19;
+const WIN_VK_ESCAPE                     = 0x1B;
+const WIN_VK_CONVERT                    = 0x1C;
+const WIN_VK_NONCONVERT                 = 0x1D;
+const WIN_VK_ACCEPT                     = 0x1E;
+const WIN_VK_MODECHANGE                 = 0x1F;
+const WIN_VK_SPACE                      = 0x20;
+const WIN_VK_PRIOR                      = 0x21;
+const WIN_VK_NEXT                       = 0x22;
+const WIN_VK_END                        = 0x23;
+const WIN_VK_HOME                       = 0x24;
+const WIN_VK_LEFT                       = 0x25;
+const WIN_VK_UP                         = 0x26;
+const WIN_VK_RIGHT                      = 0x27;
+const WIN_VK_DOWN                       = 0x28;
+const WIN_VK_SELECT                     = 0x29;
+const WIN_VK_PRINT                      = 0x2A;
+const WIN_VK_EXECUTE                    = 0x2B;
+const WIN_VK_SNAPSHOT                   = 0x2C;
+const WIN_VK_INSERT                     = 0x2D;
+const WIN_VK_DELETE                     = 0x2E;
+const WIN_VK_HELP                       = 0x2F;
+const WIN_VK_0                          = 0x30;
+const WIN_VK_1                          = 0x31;
+const WIN_VK_2                          = 0x32;
+const WIN_VK_3                          = 0x33;
+const WIN_VK_4                          = 0x34;
+const WIN_VK_5                          = 0x35;
+const WIN_VK_6                          = 0x36;
+const WIN_VK_7                          = 0x37;
+const WIN_VK_8                          = 0x38;
+const WIN_VK_9                          = 0x39;
+const WIN_VK_A                          = 0x41;
+const WIN_VK_B                          = 0x42;
+const WIN_VK_C                          = 0x43;
+const WIN_VK_D                          = 0x44;
+const WIN_VK_E                          = 0x45;
+const WIN_VK_F                          = 0x46;
+const WIN_VK_G                          = 0x47;
+const WIN_VK_H                          = 0x48;
+const WIN_VK_I                          = 0x49;
+const WIN_VK_J                          = 0x4A;
+const WIN_VK_K                          = 0x4B;
+const WIN_VK_L                          = 0x4C;
+const WIN_VK_M                          = 0x4D;
+const WIN_VK_N                          = 0x4E;
+const WIN_VK_O                          = 0x4F;
+const WIN_VK_P                          = 0x50;
+const WIN_VK_Q                          = 0x51;
+const WIN_VK_R                          = 0x52;
+const WIN_VK_S                          = 0x53;
+const WIN_VK_T                          = 0x54;
+const WIN_VK_U                          = 0x55;
+const WIN_VK_V                          = 0x56;
+const WIN_VK_W                          = 0x57;
+const WIN_VK_X                          = 0x58;
+const WIN_VK_Y                          = 0x59;
+const WIN_VK_Z                          = 0x5A;
+const WIN_VK_LWIN                       = 0x5B;
+const WIN_VK_RWIN                       = 0x5C;
+const WIN_VK_APPS                       = 0x5D;
+const WIN_VK_SLEEP                      = 0x5F;
+const WIN_VK_NUMPAD0                    = 0x60;
+const WIN_VK_NUMPAD1                    = 0x61;
+const WIN_VK_NUMPAD2                    = 0x62;
+const WIN_VK_NUMPAD3                    = 0x63;
+const WIN_VK_NUMPAD4                    = 0x64;
+const WIN_VK_NUMPAD5                    = 0x65;
+const WIN_VK_NUMPAD6                    = 0x66;
+const WIN_VK_NUMPAD7                    = 0x67;
+const WIN_VK_NUMPAD8                    = 0x68;
+const WIN_VK_NUMPAD9                    = 0x69;
+const WIN_VK_MULTIPLY                   = 0x6A;
+const WIN_VK_ADD                        = 0x6B;
+const WIN_VK_SEPARATOR                  = 0x6C;
+const WIN_VK_OEM_NEC_SEPARATE           = 0x6C;
+const WIN_VK_SUBTRACT                   = 0x6D;
+const WIN_VK_DECIMAL                    = 0x6E;
+const WIN_VK_DIVIDE                     = 0x6F;
+const WIN_VK_F1                         = 0x70;
+const WIN_VK_F2                         = 0x71;
+const WIN_VK_F3                         = 0x72;
+const WIN_VK_F4                         = 0x73;
+const WIN_VK_F5                         = 0x74;
+const WIN_VK_F6                         = 0x75;
+const WIN_VK_F7                         = 0x76;
+const WIN_VK_F8                         = 0x77;
+const WIN_VK_F9                         = 0x78;
+const WIN_VK_F10                        = 0x79;
+const WIN_VK_F11                        = 0x7A;
+const WIN_VK_F12                        = 0x7B;
+const WIN_VK_F13                        = 0x7C;
+const WIN_VK_F14                        = 0x7D;
+const WIN_VK_F15                        = 0x7E;
+const WIN_VK_F16                        = 0x7F;
+const WIN_VK_F17                        = 0x80;
+const WIN_VK_F18                        = 0x81;
+const WIN_VK_F19                        = 0x82;
+const WIN_VK_F20                        = 0x83;
+const WIN_VK_F21                        = 0x84;
+const WIN_VK_F22                        = 0x85;
+const WIN_VK_F23                        = 0x86;
+const WIN_VK_F24                        = 0x87;
+const WIN_VK_NUMLOCK                    = 0x90;
+const WIN_VK_SCROLL                     = 0x91;
+const WIN_VK_OEM_FJ_JISHO               = 0x92;
+const WIN_VK_OEM_NEC_EQUAL              = 0x92;
+const WIN_VK_OEM_FJ_MASSHOU             = 0x93;
+const WIN_VK_OEM_FJ_TOUROKU             = 0x94;
+const WIN_VK_OEM_FJ_LOYA                = 0x95;
+const WIN_VK_OEM_FJ_ROYA                = 0x96;
+const WIN_VK_LSHIFT                     = 0xA0;
+const WIN_VK_RSHIFT                     = 0xA1;
+const WIN_VK_LCONTROL                   = 0xA2;
+const WIN_VK_RCONTROL                   = 0xA3;
+const WIN_VK_LMENU                      = 0xA4;
+const WIN_VK_RMENU                      = 0xA5;
+const WIN_VK_BROWSER_BACK               = 0xA6;
+const WIN_VK_BROWSER_FORWARD            = 0xA7;
+const WIN_VK_BROWSER_REFRESH            = 0xA8;
+const WIN_VK_BROWSER_STOP               = 0xA9;
+const WIN_VK_BROWSER_SEARCH             = 0xAA;
+const WIN_VK_BROWSER_FAVORITES          = 0xAB;
+const WIN_VK_BROWSER_HOME               = 0xAC;
+const WIN_VK_VOLUME_MUTE                = 0xAD;
+const WIN_VK_VOLUME_DOWN                = 0xAE;
+const WIN_VK_VOLUME_UP                  = 0xAF;
+const WIN_VK_MEDIA_NEXT_TRACK           = 0xB0;
+const WIN_VK_OEM_FJ_000                 = 0xB0;
+const WIN_VK_MEDIA_PREV_TRACK           = 0xB1;
+const WIN_VK_OEM_FJ_EUQAL               = 0xB1;
+const WIN_VK_MEDIA_STOP                 = 0xB2;
+const WIN_VK_MEDIA_PLAY_PAUSE           = 0xB3;
+const WIN_VK_OEM_FJ_00                  = 0xB3;
+const WIN_VK_LAUNCH_MAIL                = 0xB4;
+const WIN_VK_LAUNCH_MEDIA_SELECT        = 0xB5;
+const WIN_VK_LAUNCH_APP1                = 0xB6;
+const WIN_VK_LAUNCH_APP2                = 0xB7;
+const WIN_VK_OEM_1                      = 0xBA;
+const WIN_VK_OEM_PLUS                   = 0xBB;
+const WIN_VK_OEM_COMMA                  = 0xBC;
+const WIN_VK_OEM_MINUS                  = 0xBD;
+const WIN_VK_OEM_PERIOD                 = 0xBE;
+const WIN_VK_OEM_2                      = 0xBF;
+const WIN_VK_OEM_3                      = 0xC0;
+const WIN_VK_OEM_4                      = 0xDB;
+const WIN_VK_OEM_5                      = 0xDC;
+const WIN_VK_OEM_6                      = 0xDD;
+const WIN_VK_OEM_7                      = 0xDE;
+const WIN_VK_OEM_8                      = 0xDF;
+const WIN_VK_OEM_NEC_DP1                = 0xE0;
+const WIN_VK_OEM_AX                     = 0xE1;
+const WIN_VK_OEM_NEC_DP2                = 0xE1;
+const WIN_VK_OEM_102                    = 0xE2;
+const WIN_VK_OEM_NEC_DP3                = 0xE2;
+const WIN_VK_ICO_HELP                   = 0xE3;
+const WIN_VK_OEM_NEC_DP4                = 0xE3;
+const WIN_VK_ICO_00                     = 0xE4;
+const WIN_VK_PROCESSKEY                 = 0xE5;
+const WIN_VK_ICO_CLEAR                  = 0xE6;
+const WIN_VK_PACKET                     = 0xE7;
+const WIN_VK_ERICSSON_BASE              = 0xE8;
+const WIN_VK_OEM_RESET                  = 0xE9;
+const WIN_VK_OEM_JUMP                   = 0xEA;
+const WIN_VK_OEM_PA1                    = 0xEB;
+const WIN_VK_OEM_PA2                    = 0xEC;
+const WIN_VK_OEM_PA3                    = 0xED;
+const WIN_VK_OEM_WSCTRL                 = 0xEE;
+const WIN_VK_OEM_CUSEL                  = 0xEF;
+const WIN_VK_OEM_ATTN                   = 0xF0;
+const WIN_VK_OEM_FINISH                 = 0xF1;
+const WIN_VK_OEM_COPY                   = 0xF2;
+const WIN_VK_OEM_AUTO                   = 0xF3;
+const WIN_VK_OEM_ENLW                   = 0xF4;
+const WIN_VK_OEM_BACKTAB                = 0xF5;
+const WIN_VK_ATTN                       = 0xF6;
+const WIN_VK_CRSEL                      = 0xF7;
+const WIN_VK_EXSEL                      = 0xF8;
+const WIN_VK_EREOF                      = 0xF9;
+const WIN_VK_PLAY                       = 0xFA;
+const WIN_VK_ZOOM                       = 0xFB;
+const WIN_VK_NONAME                     = 0xFC;
+const WIN_VK_PA1                        = 0xFD;
+const WIN_VK_OEM_CLEAR                  = 0xFE;
+
+// Mac
+
+const MAC_VK_ANSI_A                     = 0x00;
+const MAC_VK_ANSI_S                     = 0x01;
+const MAC_VK_ANSI_D                     = 0x02;
+const MAC_VK_ANSI_F                     = 0x03;
+const MAC_VK_ANSI_H                     = 0x04;
+const MAC_VK_ANSI_G                     = 0x05;
+const MAC_VK_ANSI_Z                     = 0x06;
+const MAC_VK_ANSI_X                     = 0x07;
+const MAC_VK_ANSI_C                     = 0x08;
+const MAC_VK_ANSI_V                     = 0x09;
+const MAC_VK_ISO_Section                = 0x0A;
+const MAC_VK_ANSI_B                     = 0x0B;
+const MAC_VK_ANSI_Q                     = 0x0C;
+const MAC_VK_ANSI_W                     = 0x0D;
+const MAC_VK_ANSI_E                     = 0x0E;
+const MAC_VK_ANSI_R                     = 0x0F;
+const MAC_VK_ANSI_Y                     = 0x10;
+const MAC_VK_ANSI_T                     = 0x11;
+const MAC_VK_ANSI_1                     = 0x12;
+const MAC_VK_ANSI_2                     = 0x13;
+const MAC_VK_ANSI_3                     = 0x14;
+const MAC_VK_ANSI_4                     = 0x15;
+const MAC_VK_ANSI_6                     = 0x16;
+const MAC_VK_ANSI_5                     = 0x17;
+const MAC_VK_ANSI_Equal                 = 0x18;
+const MAC_VK_ANSI_9                     = 0x19;
+const MAC_VK_ANSI_7                     = 0x1A;
+const MAC_VK_ANSI_Minus                 = 0x1B;
+const MAC_VK_ANSI_8                     = 0x1C;
+const MAC_VK_ANSI_0                     = 0x1D;
+const MAC_VK_ANSI_RightBracket          = 0x1E;
+const MAC_VK_ANSI_O                     = 0x1F;
+const MAC_VK_ANSI_U                     = 0x20;
+const MAC_VK_ANSI_LeftBracket           = 0x21;
+const MAC_VK_ANSI_I                     = 0x22;
+const MAC_VK_ANSI_P                     = 0x23;
+const MAC_VK_Return                     = 0x24;
+const MAC_VK_ANSI_L                     = 0x25;
+const MAC_VK_ANSI_J                     = 0x26;
+const MAC_VK_ANSI_Quote                 = 0x27;
+const MAC_VK_ANSI_K                     = 0x28;
+const MAC_VK_ANSI_Semicolon             = 0x29;
+const MAC_VK_ANSI_Backslash             = 0x2A;
+const MAC_VK_ANSI_Comma                 = 0x2B;
+const MAC_VK_ANSI_Slash                 = 0x2C;
+const MAC_VK_ANSI_N                     = 0x2D;
+const MAC_VK_ANSI_M                     = 0x2E;
+const MAC_VK_ANSI_Period                = 0x2F;
+const MAC_VK_Tab                        = 0x30;
+const MAC_VK_Space                      = 0x31;
+const MAC_VK_ANSI_Grave                 = 0x32;
+const MAC_VK_Delete                     = 0x33;
+const MAC_VK_PC_Backspace               = 0x33;
+const MAC_VK_Powerbook_KeypadEnter      = 0x34;
+const MAC_VK_Escape                     = 0x35;
+const MAC_VK_RightCommand               = 0x36;
+const MAC_VK_Command                    = 0x37;
+const MAC_VK_Shift                      = 0x38;
+const MAC_VK_CapsLock                   = 0x39;
+const MAC_VK_Option                     = 0x3A;
+const MAC_VK_Control                    = 0x3B;
+const MAC_VK_RightShift                 = 0x3C;
+const MAC_VK_RightOption                = 0x3D;
+const MAC_VK_RightControl               = 0x3E;
+const MAC_VK_Function                   = 0x3F;
+const MAC_VK_F17                        = 0x40;
+const MAC_VK_ANSI_KeypadDecimal         = 0x41;
+const MAC_VK_ANSI_KeypadMultiply        = 0x43;
+const MAC_VK_ANSI_KeypadPlus            = 0x45;
+const MAC_VK_ANSI_KeypadClear           = 0x47;
+const MAC_VK_VolumeUp                   = 0x48;
+const MAC_VK_VolumeDown                 = 0x49;
+const MAC_VK_Mute                       = 0x4A;
+const MAC_VK_ANSI_KeypadDivide          = 0x4B;
+const MAC_VK_ANSI_KeypadEnter           = 0x4C;
+const MAC_VK_ANSI_KeypadMinus           = 0x4E;
+const MAC_VK_F18                        = 0x4F;
+const MAC_VK_F19                        = 0x50;
+const MAC_VK_ANSI_KeypadEquals          = 0x51;
+const MAC_VK_ANSI_Keypad0               = 0x52;
+const MAC_VK_ANSI_Keypad1               = 0x53;
+const MAC_VK_ANSI_Keypad2               = 0x54;
+const MAC_VK_ANSI_Keypad3               = 0x55;
+const MAC_VK_ANSI_Keypad4               = 0x56;
+const MAC_VK_ANSI_Keypad5               = 0x57;
+const MAC_VK_ANSI_Keypad6               = 0x58;
+const MAC_VK_ANSI_Keypad7               = 0x59;
+const MAC_VK_F20                        = 0x5A;
+const MAC_VK_ANSI_Keypad8               = 0x5B;
+const MAC_VK_ANSI_Keypad9               = 0x5C;
+const MAC_VK_JIS_Yen                    = 0x5D;
+const MAC_VK_JIS_Underscore             = 0x5E;
+const MAC_VK_JIS_KeypadComma            = 0x5F;
+const MAC_VK_F5                         = 0x60;
+const MAC_VK_F6                         = 0x61;
+const MAC_VK_F7                         = 0x62;
+const MAC_VK_F3                         = 0x63;
+const MAC_VK_F8                         = 0x64;
+const MAC_VK_F9                         = 0x65;
+const MAC_VK_JIS_Eisu                   = 0x66;
+const MAC_VK_F11                        = 0x67;
+const MAC_VK_JIS_Kana                   = 0x68;
+const MAC_VK_F13                        = 0x69;
+const MAC_VK_PC_PrintScreen             = 0x69;
+const MAC_VK_F16                        = 0x6A;
+const MAC_VK_PC_ScrollLock              = 0x6A;
+const MAC_VK_F14                        = 0x6B;
+const MAC_VK_PC_Pause                   = 0x6B;
+const MAC_VK_F10                        = 0x6D;
+const MAC_VK_F12                        = 0x6F;
+const MAC_VK_F15                        = 0x71;
+const MAC_VK_Help                       = 0x72;
+const MAC_VK_PC_Insert                  = 0x72;
+const MAC_VK_Home                       = 0x73;
+const MAC_VK_PageUp                     = 0x74;
+const MAC_VK_ForwardDelete              = 0x75;
+const MAC_VK_PC_Delete                  = 0x75;
+const MAC_VK_F4                         = 0x76;
+const MAC_VK_End                        = 0x77;
+const MAC_VK_F2                         = 0x78;
+const MAC_VK_PageDown                   = 0x79;
+const MAC_VK_F1                         = 0x7A;
+const MAC_VK_LeftArrow                  = 0x7B;
+const MAC_VK_RightArrow                 = 0x7C;
+const MAC_VK_DownArrow                  = 0x7D;
+const MAC_VK_UpArrow                    = 0x7E;
+
--- a/widget/tests/test_bug428405.xul
+++ b/widget/tests/test_bug428405.xul
@@ -4,16 +4,17 @@
 
 <window id="window1" title="Test Bug 428405"
   onload="setGlobals(); loadFirstTab();"
   xmlns:html="http://www.w3.org/1999/xhtml"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
   <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
+  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js"/>
 
   <tabbox id="tabbox" flex="100%">
     <tabs>
       <tab label="Tab 1"/>
       <tab label="Tab 2"/>
     </tabs>
     <tabpanels flex="100%">
       <browser onload="configureFirstTab();" id="tab1browser" flex="100%"/>
@@ -141,21 +142,21 @@
     // latter make this test succeed when it should fail.
 
     // The 'aNativeKeyCode', 'aCharacters' and 'aUnmodifiedCharacters'
     // parameters used below (in synthesizeNativeReturnKey() and
     // synthesizeNativeCmdOptY()) were confirmed accurate using the
     // DebugEventsPlugin v1.01 from bmo bug 441880.
 
     function synthesizeNativeReturnKey() {
-      gUtils.sendNativeKeyEvent(0, 36, 0, "\u000a", "\u000a");
+      gUtils.sendNativeKeyEvent(0, MAC_VK_Return, 0, "\u000a", "\u000a");
     }
 
     function synthesizeNativeCmdOptY() {
-      gUtils.sendNativeKeyEvent(0, 16, 0x5000, "y", "y");
+      gUtils.sendNativeKeyEvent(0, MAC_VK_ANSI_Y, 0x5000, "y", "y");
     }
 
   ]]></script>
 
   <!-- test results are displayed in the html:body -->
   <body xmlns="http://www.w3.org/1999/xhtml">
     <p id="display"></p>
     <div id="content" style="display: none"></div>
--- a/widget/tests/test_key_event_counts.xul
+++ b/widget/tests/test_key_event_counts.xul
@@ -6,16 +6,17 @@
      or they get processed twice. This test tests some of those scenarios. -->
 
 <window id="window1" title="Test Key Event Counts" onload="runTest()"
   xmlns:html="http://www.w3.org/1999/xhtml"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
   <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
+  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js"/>
 
   <!-- test results are displayed in the html:body -->
   <body xmlns="http://www.w3.org/1999/xhtml">
     <p id="display"></p>
     <div id="content" style="display: none"></div>
     <pre id="test"></pre>
   </body>
 
@@ -34,26 +35,26 @@
 
       var domWindowUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
                              getInterface(Components.interfaces.nsIDOMWindowUtils);
 
       window.addEventListener("keypress", onKeyPress, false);
 
       // Test ctrl-tab
       gKeyPressEventCount = 0;
-      domWindowUtils.sendNativeKeyEvent(0, 48, 0x0400, "\t", "\t");
+      domWindowUtils.sendNativeKeyEvent(0, MAC_VK_Tab, 0x0400, "\t", "\t");
       is(gKeyPressEventCount, 1);
 
       // Test cmd+shift+a
       gKeyPressEventCount = 0;
-      domWindowUtils.sendNativeKeyEvent(0, 0, 0x4000 | 0x0100, "a", "A");
+      domWindowUtils.sendNativeKeyEvent(0, MAC_VK_ANSI_A, 0x4000 | 0x0100, "a", "A");
       is(gKeyPressEventCount, 1);
 
       // Test cmd-;
       gKeyPressEventCount = 0;
-      domWindowUtils.sendNativeKeyEvent(0, 41, 0x4000, ";", ";");
+      domWindowUtils.sendNativeKeyEvent(0, MAC_VK_ANSI_Semicolon, 0x4000, ";", ";");
       is(gKeyPressEventCount, 1);
 
       window.removeEventListener("keypress", onKeyPress, false);
     }
   ]]></script>
 
 </window>
--- a/widget/tests/test_keycodes.xul
+++ b/widget/tests/test_keycodes.xul
@@ -5,16 +5,18 @@
 <window title="Key event tests"
   onload="runTest()"
   xmlns:html="http://www.w3.org/1999/xhtml"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <title>Key event tests</title>
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js" />
 
 <keyset>
   <key id="unshiftedKey" key=";" modifiers="accel" oncommand="this.activeCount++"/>
   <key id="shiftedKey" key=":" modifiers="accel" oncommand="this.activeCount++"/>
   <key id="commandOptionF" key='f' modifiers="accel,alt" oncommand="this.activeCount++"/>
   <key id="question" key='?' modifiers="accel" oncommand="this.activeCount++"/>
   <key id="unshiftedX" key="x" modifiers="accel" oncommand="this.activeCount++"/>
   <key id="shiftedX" key="X" modifiers="accel,shift" oncommand="this.activeCount++"/>
@@ -358,1692 +360,1694 @@ function runKeyEventTests()
     // preferences widget to enable other keyboard layouts and select them from the
     // input menu to see what keyboard events they generate.
     // Note that it's possible to send bogus key events here, e.g.
     // {keyCode:0, chars:"z", unmodifiedChars:"P"} --- sendNativeKeyEvent
     // makes no attempt to verify that the keyCode matches the characters. So only
     // test key event records that you saw Cocoa send.
 
     // Ctrl keys
-    testKey({layout:"US", keyCode:0, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Alt keys
-    testKey({layout:"US", keyCode:0, alt:1, chars:"\u00e5", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, alt:1, chars:"\u00e5", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00e5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0, alt:1, shift:1, chars:"\u00c5", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, alt:1, shift:1, chars:"\u00c5", unmodifiedChars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00c5", SHOULD_DELIVER_ALL);
     
     // Command keys
-    testKey({layout:"US", keyCode:0, command:1, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, chars:"a", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Shift-cmd gives us the shifted character
-    testKey({layout:"US", keyCode:0, command:1, shift:1, chars:"a", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, shift:1, chars:"a", unmodifiedChars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Ctrl-cmd gives us the unshifted character
-    testKey({layout:"US", keyCode:0, command:1, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Alt-cmd gives us the shifted character
-    testKey({layout:"US", keyCode:0, command:1, alt:1, chars:"\u00e5", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, alt:1, chars:"\u00e5", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00e5", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0, command:1, alt:1, shift:1, chars:"\u00c5", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, alt:1, shift:1, chars:"\u00c5", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00c5", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // Greek ctrl keys produce Latin charcodes
-    testKey({layout:"Greek", keyCode:0, ctrl:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"Greek", keyCode:0, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"\u0391"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"\u0391"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Greek command keys
-    testKey({layout:"Greek", keyCode:0, command:1, chars:"a", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, command:1, chars:"a", unmodifiedChars:"\u03b1"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Shift-cmd gives us the shifted character
-    testKey({layout:"Greek", keyCode:0, command:1, shift:1, chars:"a", unmodifiedChars:"\u0391"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, command:1, shift:1, chars:"a", unmodifiedChars:"\u0391"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Ctrl-cmd gives us the unshifted character
-    testKey({layout:"Greek", keyCode:0, command:1, ctrl:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, command:1, ctrl:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
     // Alt-cmd gives us the shifted character
-    testKey({layout:"Greek", keyCode:0, command:1, alt:1, chars:"\u00a8", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, command:1, alt:1, chars:"\u00a8", unmodifiedChars:"\u03b1"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00a8", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"Greek", keyCode:0, command:1, alt:1, shift:1, chars:"\u00b9", unmodifiedChars:"\u0391"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, command:1, alt:1, shift:1, chars:"\u00b9", unmodifiedChars:"\u0391"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00b9", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // German
-    testKey({layout:"German", keyCode:0, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_A, chars:"a", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"German", keyCode:33, chars:"\u00fc", unmodifiedChars:"\u00fc"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_LeftBracket, chars:"\u00fc", unmodifiedChars:"\u00fc"},
             0, "\u00fc", SHOULD_DELIVER_ALL);
-    testKey({layout:"German", keyCode:27, chars:"\u00df", unmodifiedChars:"\u00df"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_Minus, chars:"\u00df", unmodifiedChars:"\u00df"},
             nsIDOMKeyEvent.DOM_VK_QUESTION_MARK, "\u00df", SHOULD_DELIVER_ALL);
-    testKey({layout:"German", keyCode:27, shift:1, chars:"?", unmodifiedChars:"?"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_Minus, shift:1, chars:"?", unmodifiedChars:"?"},
             nsIDOMKeyEvent.DOM_VK_QUESTION_MARK, "?", SHOULD_DELIVER_ALL);
     // Note that Shift+SS is '?' but Cmd+Shift+SS is '/' on German layout.
     // Therefore, when Cmd key is pressed, the SS key's keycode is changed.
-    testKey({layout:"German", keyCode:27, command:1, chars:"\u00df", unmodifiedChars:"\u00df"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_Minus, command:1, chars:"\u00df", unmodifiedChars:"\u00df"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "\u00df", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"German", keyCode:27, command:1, shift:1, chars:"/", unmodifiedChars:"?"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_Minus, command:1, shift:1, chars:"/", unmodifiedChars:"?"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "?", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // Caps Lock key event
     // XXX keyup event of Caps Lock key is not fired.
-    testKey({layout:"US", keyCode:57, capsLock:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_CapsLock, capsLock:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CAPS_LOCK, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:57, capsLock:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_CapsLock, capsLock:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CAPS_LOCK, "", SHOULD_DELIVER_KEYDOWN);
 
     // Shift/RightShift key event
-    testKey({layout:"US", keyCode:56, shift:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Shift, shift:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_SHIFT, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:56, shift:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Shift, shift:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_SHIFT, "", SHOULD_DELIVER_KEYUP);
-    testKey({layout:"US", keyCode:60, shiftRight:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightShift, shiftRight:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_SHIFT, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:60, shiftRight:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightShift, shiftRight:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_SHIFT, "", SHOULD_DELIVER_KEYUP);
 
     // Control/RightControl key event
-    testKey({layout:"US", keyCode:59, ctrl:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Control, ctrl:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CONTROL, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:59, ctrl:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Control, ctrl:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CONTROL, "", SHOULD_DELIVER_KEYUP);
-    testKey({layout:"US", keyCode:62, ctrlRight:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightControl, ctrlRight:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CONTROL, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:62, ctrlRight:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightControl, ctrlRight:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_CONTROL, "", SHOULD_DELIVER_KEYUP);
 
     // Option/RightOption key event
-    testKey({layout:"US", keyCode:58, alt:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Option, alt:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_ALT, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:58, alt:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Option, alt:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_ALT, "", SHOULD_DELIVER_KEYUP);
-    testKey({layout:"US", keyCode:61, altRight:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightOption, altRight:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_ALT, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:61, altRight:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightOption, altRight:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_ALT, "", SHOULD_DELIVER_KEYUP);
 
     // Command/RightCommand key event
-    testKey({layout:"US", keyCode:55, command:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Command, command:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_META, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:55, command:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_Command, command:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_META, "", SHOULD_DELIVER_KEYUP);
-    testKey({layout:"US", keyCode:54, commandRight:1, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightCommand, commandRight:1, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_META, "", SHOULD_DELIVER_KEYDOWN);
-    testKey({layout:"US", keyCode:54, commandRight:0, chars:"", unmodifiedChars:""},
+    testKey({layout:"US", keyCode:MAC_VK_RightCommand, commandRight:0, chars:"", unmodifiedChars:""},
             nsIDOMKeyEvent.DOM_VK_META, "", SHOULD_DELIVER_KEYUP);
 
     // all keys on keyboard (keyCode test)
-    testKey({layout:"US", keyCode:0x30, chars:"\t", unmodifiedChars:"\t"},
+    testKey({layout:"US", keyCode:MAC_VK_Tab, chars:"\t", unmodifiedChars:"\t"},
             nsIDOMKeyEvent.DOM_VK_TAB, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x47, chars:"\uF739", unmodifiedChars:"\uF739"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadClear, chars:"\uF739", unmodifiedChars:"\uF739"},
             nsIDOMKeyEvent.DOM_VK_CLEAR, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x24, chars:"\u000D", unmodifiedChars:"\u000D"},
+    testKey({layout:"US", keyCode:MAC_VK_Return, chars:"\u000D", unmodifiedChars:"\u000D"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x71, chars:"\uF712", unmodifiedChars:"\uF712"},
+    testKey({layout:"US", keyCode:MAC_VK_F15, chars:"\uF712", unmodifiedChars:"\uF712"},
             nsIDOMKeyEvent.DOM_VK_PAUSE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x35, chars:"\u001B", unmodifiedChars:"\u001B"},
+    testKey({layout:"US", keyCode:MAC_VK_Escape, chars:"\u001B", unmodifiedChars:"\u001B"},
             nsIDOMKeyEvent.DOM_VK_ESCAPE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x31, chars:" ", unmodifiedChars:" "},
+    testKey({layout:"US", keyCode:MAC_VK_Space, chars:" ", unmodifiedChars:" "},
             nsIDOMKeyEvent.DOM_VK_SPACE, " ", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x74, chars:"\uF72C", unmodifiedChars:"\uF72C"},
+    testKey({layout:"US", keyCode:MAC_VK_PageUp, chars:"\uF72C", unmodifiedChars:"\uF72C"},
             nsIDOMKeyEvent.DOM_VK_PAGE_UP, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x79, chars:"\uF72D", unmodifiedChars:"\uF72D"},
+    testKey({layout:"US", keyCode:MAC_VK_PageDown, chars:"\uF72D", unmodifiedChars:"\uF72D"},
             nsIDOMKeyEvent.DOM_VK_PAGE_DOWN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x77, chars:"\uF72B", unmodifiedChars:"\uF72B"},
+    testKey({layout:"US", keyCode:MAC_VK_End, chars:"\uF72B", unmodifiedChars:"\uF72B"},
             nsIDOMKeyEvent.DOM_VK_END, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x73, chars:"\uF729", unmodifiedChars:"\uF729"},
+    testKey({layout:"US", keyCode:MAC_VK_Home, chars:"\uF729", unmodifiedChars:"\uF729"},
             nsIDOMKeyEvent.DOM_VK_HOME, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x7B, chars:"\uF702", unmodifiedChars:"\uF702"},
+    testKey({layout:"US", keyCode:MAC_VK_LeftArrow, chars:"\uF702", unmodifiedChars:"\uF702"},
             nsIDOMKeyEvent.DOM_VK_LEFT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x7E, chars:"\uF700", unmodifiedChars:"\uF700"},
+    testKey({layout:"US", keyCode:MAC_VK_UpArrow, chars:"\uF700", unmodifiedChars:"\uF700"},
             nsIDOMKeyEvent.DOM_VK_UP, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x7C, chars:"\uF703", unmodifiedChars:"\uF703"},
+    testKey({layout:"US", keyCode:MAC_VK_RightArrow, chars:"\uF703", unmodifiedChars:"\uF703"},
             nsIDOMKeyEvent.DOM_VK_RIGHT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x7D, chars:"\uF701", unmodifiedChars:"\uF701"},
+    testKey({layout:"US", keyCode:MAC_VK_DownArrow, chars:"\uF701", unmodifiedChars:"\uF701"},
             nsIDOMKeyEvent.DOM_VK_DOWN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x69, chars:"\uF710", unmodifiedChars:"\uF710"},
+    testKey({layout:"US", keyCode:MAC_VK_PC_PrintScreen, chars:"\uF710", unmodifiedChars:"\uF710"},
             nsIDOMKeyEvent.DOM_VK_PRINTSCREEN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x75, chars:"\uF728", unmodifiedChars:"\uF728"},
+    testKey({layout:"US", keyCode:MAC_VK_PC_Delete, chars:"\uF728", unmodifiedChars:"\uF728"},
             nsIDOMKeyEvent.DOM_VK_DELETE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x6B, chars:"\uF711", unmodifiedChars:"\uF711"},
+    testKey({layout:"US", keyCode:MAC_VK_PC_Pause, chars:"\uF711", unmodifiedChars:"\uF711"},
             nsIDOMKeyEvent.DOM_VK_SCROLL_LOCK, "", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"US", keyCode:0x7A, function:1, chars:"\uF704", unmodifiedChars:"\uF704"},
+    testKey({layout:"US", keyCode:MAC_VK_F1, function:1, chars:"\uF704", unmodifiedChars:"\uF704"},
             nsIDOMKeyEvent.DOM_VK_F1, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x78, function:1, chars:"\uF705", unmodifiedChars:"\uF705"},
+    testKey({layout:"US", keyCode:MAC_VK_F2, function:1, chars:"\uF705", unmodifiedChars:"\uF705"},
             nsIDOMKeyEvent.DOM_VK_F2, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x63, function:1, chars:"\uF706", unmodifiedChars:"\uF706"},
+    testKey({layout:"US", keyCode:MAC_VK_F3, function:1, chars:"\uF706", unmodifiedChars:"\uF706"},
             nsIDOMKeyEvent.DOM_VK_F3, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x76, function:1, chars:"\uF707", unmodifiedChars:"\uF707"},
+    testKey({layout:"US", keyCode:MAC_VK_F4, function:1, chars:"\uF707", unmodifiedChars:"\uF707"},
             nsIDOMKeyEvent.DOM_VK_F4, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x60, function:1, chars:"\uF708", unmodifiedChars:"\uF708"},
+    testKey({layout:"US", keyCode:MAC_VK_F5, function:1, chars:"\uF708", unmodifiedChars:"\uF708"},
             nsIDOMKeyEvent.DOM_VK_F5, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x61, function:1, chars:"\uF709", unmodifiedChars:"\uF709"},
+    testKey({layout:"US", keyCode:MAC_VK_F6, function:1, chars:"\uF709", unmodifiedChars:"\uF709"},
             nsIDOMKeyEvent.DOM_VK_F6, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x62, function:1, chars:"\uF70A", unmodifiedChars:"\uF70A"},
+    testKey({layout:"US", keyCode:MAC_VK_F7, function:1, chars:"\uF70A", unmodifiedChars:"\uF70A"},
             nsIDOMKeyEvent.DOM_VK_F7, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x64, function:1, chars:"\uF70B", unmodifiedChars:"\uF70B"},
+    testKey({layout:"US", keyCode:MAC_VK_F8, function:1, chars:"\uF70B", unmodifiedChars:"\uF70B"},
             nsIDOMKeyEvent.DOM_VK_F8, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x65, function:1, chars:"\uF70C", unmodifiedChars:"\uF70C"},
+    testKey({layout:"US", keyCode:MAC_VK_F9, function:1, chars:"\uF70C", unmodifiedChars:"\uF70C"},
             nsIDOMKeyEvent.DOM_VK_F9, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x6D, function:1, chars:"\uF70D", unmodifiedChars:"\uF70D"},
+    testKey({layout:"US", keyCode:MAC_VK_F10, function:1, chars:"\uF70D", unmodifiedChars:"\uF70D"},
             nsIDOMKeyEvent.DOM_VK_F10, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x67, function:1, chars:"\uF70E", unmodifiedChars:"\uF70E"},
+    testKey({layout:"US", keyCode:MAC_VK_F11, function:1, chars:"\uF70E", unmodifiedChars:"\uF70E"},
             nsIDOMKeyEvent.DOM_VK_F11, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x6F, function:1, chars:"\uF70F", unmodifiedChars:"\uF70F"},
+    testKey({layout:"US", keyCode:MAC_VK_F12, function:1, chars:"\uF70F", unmodifiedChars:"\uF70F"},
             nsIDOMKeyEvent.DOM_VK_F12, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x6A, function:1, chars:"\uF713", unmodifiedChars:"\uF713"},
+    testKey({layout:"US", keyCode:MAC_VK_F16, function:1, chars:"\uF713", unmodifiedChars:"\uF713"},
             nsIDOMKeyEvent.DOM_VK_F16, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x40, function:1, chars:"\uF714", unmodifiedChars:"\uF714"},
+    testKey({layout:"US", keyCode:MAC_VK_F17, function:1, chars:"\uF714", unmodifiedChars:"\uF714"},
             nsIDOMKeyEvent.DOM_VK_F17, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4F, function:1, chars:"\uF715", unmodifiedChars:"\uF715"},
+    testKey({layout:"US", keyCode:MAC_VK_F18, function:1, chars:"\uF715", unmodifiedChars:"\uF715"},
             nsIDOMKeyEvent.DOM_VK_F18, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x50, function:1, chars:"\uF716", unmodifiedChars:"\uF716"},
+    testKey({layout:"US", keyCode:MAC_VK_F19, function:1, chars:"\uF716", unmodifiedChars:"\uF716"},
             nsIDOMKeyEvent.DOM_VK_F19, "", SHOULD_DELIVER_ALL);
 
     // US
     // Alphabet
-    testKey({layout:"US", keyCode:0x00, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, chars:"a", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x00, shift:1, chars:"A", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, shift:1, chars:"A", unmodifiedChars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x00, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x00, alt:1, chars:"\u00E5", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, alt:1, chars:"\u00E5", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x00, command:1, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, command:1, chars:"a", unmodifiedChars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x0B, chars:"b", unmodifiedChars:"b"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_B, chars:"b", unmodifiedChars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "b", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0B, shift:1, chars:"B", unmodifiedChars:"B"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_B, shift:1, chars:"B", unmodifiedChars:"B"},
             nsIDOMKeyEvent.DOM_VK_B, "B", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0B, ctrl:1, chars:"\u0002", unmodifiedChars:"b"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_B, ctrl:1, chars:"\u0002", unmodifiedChars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "b", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0B, alt:1, chars:"\u222B", unmodifiedChars:"b"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_B, alt:1, chars:"\u222B", unmodifiedChars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "\u222B", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0B, command:1, chars:"b", unmodifiedChars:"b"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_B, command:1, chars:"b", unmodifiedChars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "b", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x08, chars:"c", unmodifiedChars:"c"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_C, chars:"c", unmodifiedChars:"c"},
             nsIDOMKeyEvent.DOM_VK_C, "c", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x08, shift:1, chars:"C", unmodifiedChars:"C"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_C, shift:1, chars:"C", unmodifiedChars:"C"},
             nsIDOMKeyEvent.DOM_VK_C, "C", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x08, ctrl:1, chars:"\u0003", unmodifiedChars:"c"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_C, ctrl:1, chars:"\u0003", unmodifiedChars:"c"},
             nsIDOMKeyEvent.DOM_VK_C, "c", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x08, alt:1, chars:"\u00E7", unmodifiedChars:"c"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_C, alt:1, chars:"\u00E7", unmodifiedChars:"c"},
             nsIDOMKeyEvent.DOM_VK_C, "\u00E7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x08, command:1, chars:"c", unmodifiedChars:"c"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_C, command:1, chars:"c", unmodifiedChars:"c"},
             nsIDOMKeyEvent.DOM_VK_C, "c", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x02, chars:"d", unmodifiedChars:"d"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_D, chars:"d", unmodifiedChars:"d"},
             nsIDOMKeyEvent.DOM_VK_D, "d", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x02, shift:1, chars:"D", unmodifiedChars:"D"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_D, shift:1, chars:"D", unmodifiedChars:"D"},
             nsIDOMKeyEvent.DOM_VK_D, "D", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x02, ctrl:1, chars:"\u0004", unmodifiedChars:"d"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_D, ctrl:1, chars:"\u0004", unmodifiedChars:"d"},
             nsIDOMKeyEvent.DOM_VK_D, "d", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x02, alt:1, chars:"\u2202", unmodifiedChars:"d"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_D, alt:1, chars:"\u2202", unmodifiedChars:"d"},
             nsIDOMKeyEvent.DOM_VK_D, "\u2202", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x02, command:1, chars:"d", unmodifiedChars:"d"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_D, command:1, chars:"d", unmodifiedChars:"d"},
             nsIDOMKeyEvent.DOM_VK_D, "d", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x0E, chars:"e", unmodifiedChars:"e"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_E, chars:"e", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0E, shift:1, chars:"E", unmodifiedChars:"E"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_E, shift:1, chars:"E", unmodifiedChars:"E"},
             nsIDOMKeyEvent.DOM_VK_E, "E", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0E, ctrl:1, chars:"\u0005", unmodifiedChars:"e"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_E, ctrl:1, chars:"\u0005", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0E, alt:1, chars:"", unmodifiedChars:"e"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_E, alt:1, chars:"", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "", SHOULD_DELIVER_NONE); // dead key
-    testKey({layout:"US", keyCode:0x0E, command:1, chars:"e", unmodifiedChars:"e"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_E, command:1, chars:"e", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x03, chars:"f", unmodifiedChars:"f"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_F, chars:"f", unmodifiedChars:"f"},
             nsIDOMKeyEvent.DOM_VK_F, "f", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x03, shift:1, chars:"F", unmodifiedChars:"F"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_F, shift:1, chars:"F", unmodifiedChars:"F"},
             nsIDOMKeyEvent.DOM_VK_F, "F", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x03, ctrl:1, chars:"\u0006", unmodifiedChars:"f"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_F, ctrl:1, chars:"\u0006", unmodifiedChars:"f"},
             nsIDOMKeyEvent.DOM_VK_F, "f", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x03, alt:1, chars:"\u0192", unmodifiedChars:"f"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_F, alt:1, chars:"\u0192", unmodifiedChars:"f"},
             nsIDOMKeyEvent.DOM_VK_F, "\u0192", SHOULD_DELIVER_ALL);
     // XXX This test starts fullscreen mode.
-    // testKey({layout:"US", keyCode:0x03, command:1, chars:"f", unmodifiedChars:"f"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_F, command:1, chars:"f", unmodifiedChars:"f"},
     //         nsIDOMKeyEvent.DOM_VK_F, "f", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x05, chars:"g", unmodifiedChars:"g"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_G, chars:"g", unmodifiedChars:"g"},
             nsIDOMKeyEvent.DOM_VK_G, "g", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x05, shift:1, chars:"G", unmodifiedChars:"G"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_G, shift:1, chars:"G", unmodifiedChars:"G"},
             nsIDOMKeyEvent.DOM_VK_G, "G", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x05, ctrl:1, chars:"\u0007", unmodifiedChars:"g"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_G, ctrl:1, chars:"\u0007", unmodifiedChars:"g"},
             nsIDOMKeyEvent.DOM_VK_G, "g", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x05, alt:1, chars:"\u00A9", unmodifiedChars:"g"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_G, alt:1, chars:"\u00A9", unmodifiedChars:"g"},
             nsIDOMKeyEvent.DOM_VK_G, "\u00A9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x05, command:1, chars:"g", unmodifiedChars:"g"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_G, command:1, chars:"g", unmodifiedChars:"g"},
             nsIDOMKeyEvent.DOM_VK_G, "g", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x04, chars:"h", unmodifiedChars:"h"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_H, chars:"h", unmodifiedChars:"h"},
             nsIDOMKeyEvent.DOM_VK_H, "h", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x04, shift:1, chars:"H", unmodifiedChars:"H"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_H, shift:1, chars:"H", unmodifiedChars:"H"},
             nsIDOMKeyEvent.DOM_VK_H, "H", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x04, ctrl:1, chars:"\u0008", unmodifiedChars:"h"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_H, ctrl:1, chars:"\u0008", unmodifiedChars:"h"},
             nsIDOMKeyEvent.DOM_VK_H, "h", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x04, alt:1, chars:"\u02D9", unmodifiedChars:"h"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_H, alt:1, chars:"\u02D9", unmodifiedChars:"h"},
             nsIDOMKeyEvent.DOM_VK_H, "\u02D9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x04, command:1, chars:"h", unmodifiedChars:"h"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_H, command:1, chars:"h", unmodifiedChars:"h"},
             nsIDOMKeyEvent.DOM_VK_H, "h", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x22, chars:"i", unmodifiedChars:"i"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_I, chars:"i", unmodifiedChars:"i"},
             nsIDOMKeyEvent.DOM_VK_I, "i", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x22, shift:1, chars:"I", unmodifiedChars:"I"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_I, shift:1, chars:"I", unmodifiedChars:"I"},
             nsIDOMKeyEvent.DOM_VK_I, "I", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x22, ctrl:1, chars:"\u0009", unmodifiedChars:"i"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_I, ctrl:1, chars:"\u0009", unmodifiedChars:"i"},
             nsIDOMKeyEvent.DOM_VK_I, "i", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x22, alt:1, chars:"", unmodifiedChars:"i"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_I, alt:1, chars:"", unmodifiedChars:"i"},
             nsIDOMKeyEvent.DOM_VK_I, "", SHOULD_DELIVER_NONE); // dead key
     // XXX This test causes memory leak.
-    // testKey({layout:"US", keyCode:0x22, command:1, chars:"i", unmodifiedChars:"i"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_I, command:1, chars:"i", unmodifiedChars:"i"},
     //         nsIDOMKeyEvent.DOM_VK_I, "i", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x26, chars:"j", unmodifiedChars:"j"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_J, chars:"j", unmodifiedChars:"j"},
             nsIDOMKeyEvent.DOM_VK_J, "j", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x26, shift:1, chars:"J", unmodifiedChars:"J"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_J, shift:1, chars:"J", unmodifiedChars:"J"},
             nsIDOMKeyEvent.DOM_VK_J, "J", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x26, ctrl:1, chars:"\u000A", unmodifiedChars:"j"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_J, ctrl:1, chars:"\u000A", unmodifiedChars:"j"},
             nsIDOMKeyEvent.DOM_VK_J, "j", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x26, alt:1, chars:"\u2206", unmodifiedChars:"j"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_J, alt:1, chars:"\u2206", unmodifiedChars:"j"},
             nsIDOMKeyEvent.DOM_VK_J, "\u2206", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x26, command:1, chars:"j", unmodifiedChars:"j"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_J, command:1, chars:"j", unmodifiedChars:"j"},
             nsIDOMKeyEvent.DOM_VK_J, "j", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x28, chars:"k", unmodifiedChars:"k"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_K, chars:"k", unmodifiedChars:"k"},
             nsIDOMKeyEvent.DOM_VK_K, "k", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x28, shift:1, chars:"K", unmodifiedChars:"K"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_K, shift:1, chars:"K", unmodifiedChars:"K"},
             nsIDOMKeyEvent.DOM_VK_K, "K", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x28, ctrl:1, chars:"\u000B", unmodifiedChars:"k"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_K, ctrl:1, chars:"\u000B", unmodifiedChars:"k"},
             nsIDOMKeyEvent.DOM_VK_K, "k", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x28, alt:1, chars:"\u02DA", unmodifiedChars:"k"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_K, alt:1, chars:"\u02DA", unmodifiedChars:"k"},
             nsIDOMKeyEvent.DOM_VK_K, "\u02DA", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x28, command:1, chars:"k", unmodifiedChars:"k"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_K, command:1, chars:"k", unmodifiedChars:"k"},
             nsIDOMKeyEvent.DOM_VK_K, "k", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x25, chars:"l", unmodifiedChars:"l"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_L, chars:"l", unmodifiedChars:"l"},
             nsIDOMKeyEvent.DOM_VK_L, "l", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x25, shift:1, chars:"L", unmodifiedChars:"L"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_L, shift:1, chars:"L", unmodifiedChars:"L"},
             nsIDOMKeyEvent.DOM_VK_L, "L", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x25, ctrl:1, chars:"\u000C", unmodifiedChars:"l"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_L, ctrl:1, chars:"\u000C", unmodifiedChars:"l"},
             nsIDOMKeyEvent.DOM_VK_L, "l", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x25, alt:1, chars:"\u00AC", unmodifiedChars:"l"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_L, alt:1, chars:"\u00AC", unmodifiedChars:"l"},
             nsIDOMKeyEvent.DOM_VK_L, "\u00AC", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x25, command:1, chars:"l", unmodifiedChars:"l"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_L, command:1, chars:"l", unmodifiedChars:"l"},
             nsIDOMKeyEvent.DOM_VK_L, "l", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2E, chars:"m", unmodifiedChars:"m"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_M, chars:"m", unmodifiedChars:"m"},
             nsIDOMKeyEvent.DOM_VK_M, "m", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2E, shift:1, chars:"M", unmodifiedChars:"M"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_M, shift:1, chars:"M", unmodifiedChars:"M"},
             nsIDOMKeyEvent.DOM_VK_M, "M", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2E, ctrl:1, chars:"\u000D", unmodifiedChars:"m"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_M, ctrl:1, chars:"\u000D", unmodifiedChars:"m"},
             nsIDOMKeyEvent.DOM_VK_M, "m", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2E, alt:1, chars:"\u00B5", unmodifiedChars:"m"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_M, alt:1, chars:"\u00B5", unmodifiedChars:"m"},
             nsIDOMKeyEvent.DOM_VK_M, "\u00B5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2E, command:1, chars:"m", unmodifiedChars:"m"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_M, command:1, chars:"m", unmodifiedChars:"m"},
             nsIDOMKeyEvent.DOM_VK_M, "m", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2D, chars:"n", unmodifiedChars:"n"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_N, chars:"n", unmodifiedChars:"n"},
             nsIDOMKeyEvent.DOM_VK_N, "n", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2D, shift:1, chars:"N", unmodifiedChars:"N"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_N, shift:1, chars:"N", unmodifiedChars:"N"},
             nsIDOMKeyEvent.DOM_VK_N, "N", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2D, ctrl:1, chars:"\u000E", unmodifiedChars:"n"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_N, ctrl:1, chars:"\u000E", unmodifiedChars:"n"},
             nsIDOMKeyEvent.DOM_VK_N, "n", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2D, alt:1, chars:"", unmodifiedChars:"n"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_N, alt:1, chars:"", unmodifiedChars:"n"},
             nsIDOMKeyEvent.DOM_VK_N, "", SHOULD_DELIVER_NONE); // dead key
-    testKey({layout:"US", keyCode:0x2D, command:1, chars:"n", unmodifiedChars:"n"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_N, command:1, chars:"n", unmodifiedChars:"n"},
             nsIDOMKeyEvent.DOM_VK_N, "n", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1F, chars:"o", unmodifiedChars:"o"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_O, chars:"o", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1F, shift:1, chars:"O", unmodifiedChars:"O"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_O, shift:1, chars:"O", unmodifiedChars:"O"},
             nsIDOMKeyEvent.DOM_VK_O, "O", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1F, ctrl:1, chars:"\u000F", unmodifiedChars:"o"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_O, ctrl:1, chars:"\u000F", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1F, alt:1, chars:"\u00F8", unmodifiedChars:"o"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_O, alt:1, chars:"\u00F8", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "\u00F8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1F, command:1, chars:"o", unmodifiedChars:"o"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_O, command:1, chars:"o", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x23, chars:"p", unmodifiedChars:"p"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_P, chars:"p", unmodifiedChars:"p"},
             nsIDOMKeyEvent.DOM_VK_P, "p", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x23, shift:1, chars:"P", unmodifiedChars:"P"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_P, shift:1, chars:"P", unmodifiedChars:"P"},
             nsIDOMKeyEvent.DOM_VK_P, "P", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x23, ctrl:1, chars:"\u0010", unmodifiedChars:"p"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_P, ctrl:1, chars:"\u0010", unmodifiedChars:"p"},
             nsIDOMKeyEvent.DOM_VK_P, "p", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x23, alt:1, chars:"\u03C0", unmodifiedChars:"p"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_P, alt:1, chars:"\u03C0", unmodifiedChars:"p"},
             nsIDOMKeyEvent.DOM_VK_P, "\u03C0", SHOULD_DELIVER_ALL);
     // XXX This test starts private browsing mode (stopped at the confirmation dialog)
-    // testKey({layout:"US", keyCode:0x23, command:1, chars:"p", unmodifiedChars:"p"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_P, command:1, chars:"p", unmodifiedChars:"p"},
     //         nsIDOMKeyEvent.DOM_VK_P, "p", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x0C, chars:"q", unmodifiedChars:"q"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Q, chars:"q", unmodifiedChars:"q"},
             nsIDOMKeyEvent.DOM_VK_Q, "q", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0C, shift:1, chars:"Q", unmodifiedChars:"Q"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Q, shift:1, chars:"Q", unmodifiedChars:"Q"},
             nsIDOMKeyEvent.DOM_VK_Q, "Q", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0C, ctrl:1, chars:"\u0011", unmodifiedChars:"q"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Q, ctrl:1, chars:"\u0011", unmodifiedChars:"q"},
             nsIDOMKeyEvent.DOM_VK_Q, "q", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0C, alt:1, chars:"\u0153", unmodifiedChars:"q"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Q, alt:1, chars:"\u0153", unmodifiedChars:"q"},
             nsIDOMKeyEvent.DOM_VK_Q, "\u0153", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0C, command:1, chars:"q", unmodifiedChars:"q"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Q, command:1, chars:"q", unmodifiedChars:"q"},
             nsIDOMKeyEvent.DOM_VK_Q, "q", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x0F, chars:"r", unmodifiedChars:"r"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_R, chars:"r", unmodifiedChars:"r"},
             nsIDOMKeyEvent.DOM_VK_R, "r", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0F, shift:1, chars:"R", unmodifiedChars:"R"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_R, shift:1, chars:"R", unmodifiedChars:"R"},
             nsIDOMKeyEvent.DOM_VK_R, "R", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0F, ctrl:1, chars:"\u0012", unmodifiedChars:"r"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_R, ctrl:1, chars:"\u0012", unmodifiedChars:"r"},
             nsIDOMKeyEvent.DOM_VK_R, "r", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0F, alt:1, chars:"\u00AE", unmodifiedChars:"r"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_R, alt:1, chars:"\u00AE", unmodifiedChars:"r"},
             nsIDOMKeyEvent.DOM_VK_R, "\u00AE", SHOULD_DELIVER_ALL);
     // XXX This test makes some tabs and dialogs.
-    // testKey({layout:"US", keyCode:0x0F, command:1, chars:"r", unmodifiedChars:"r"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_R, command:1, chars:"r", unmodifiedChars:"r"},
     //         nsIDOMKeyEvent.DOM_VK_R, "r", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x01, chars:"s", unmodifiedChars:"s"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_S, chars:"s", unmodifiedChars:"s"},
             nsIDOMKeyEvent.DOM_VK_S, "s", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x01, shift:1, chars:"S", unmodifiedChars:"S"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_S, shift:1, chars:"S", unmodifiedChars:"S"},
             nsIDOMKeyEvent.DOM_VK_S, "S", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x01, ctrl:1, chars:"\u0013", unmodifiedChars:"s"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_S, ctrl:1, chars:"\u0013", unmodifiedChars:"s"},
             nsIDOMKeyEvent.DOM_VK_S, "s", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x01, alt:1, chars:"\u00DF", unmodifiedChars:"s"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_S, alt:1, chars:"\u00DF", unmodifiedChars:"s"},
             nsIDOMKeyEvent.DOM_VK_S, "\u00DF", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x01, command:1, chars:"s", unmodifiedChars:"s"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_S, command:1, chars:"s", unmodifiedChars:"s"},
             nsIDOMKeyEvent.DOM_VK_S, "s", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x11, chars:"t", unmodifiedChars:"t"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_T, chars:"t", unmodifiedChars:"t"},
             nsIDOMKeyEvent.DOM_VK_T, "t", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x11, shift:1, chars:"T", unmodifiedChars:"T"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_T, shift:1, chars:"T", unmodifiedChars:"T"},
             nsIDOMKeyEvent.DOM_VK_T, "T", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x11, ctrl:1, chars:"\u0014", unmodifiedChars:"t"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_T, ctrl:1, chars:"\u0014", unmodifiedChars:"t"},
             nsIDOMKeyEvent.DOM_VK_T, "t", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x11, alt:1, chars:"\u2020", unmodifiedChars:"t"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_T, alt:1, chars:"\u2020", unmodifiedChars:"t"},
             nsIDOMKeyEvent.DOM_VK_T, "\u2020", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x11, command:1, chars:"t", unmodifiedChars:"t"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_T, command:1, chars:"t", unmodifiedChars:"t"},
             nsIDOMKeyEvent.DOM_VK_T, "t", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x20, chars:"u", unmodifiedChars:"u"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_U, chars:"u", unmodifiedChars:"u"},
             nsIDOMKeyEvent.DOM_VK_U, "u", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x20, shift:1, chars:"U", unmodifiedChars:"U"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_U, shift:1, chars:"U", unmodifiedChars:"U"},
             nsIDOMKeyEvent.DOM_VK_U, "U", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x20, ctrl:1, chars:"\u0015", unmodifiedChars:"u"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_U, ctrl:1, chars:"\u0015", unmodifiedChars:"u"},
             nsIDOMKeyEvent.DOM_VK_U, "u", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x20, alt:1, chars:"", unmodifiedChars:"u"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_U, alt:1, chars:"", unmodifiedChars:"u"},
             nsIDOMKeyEvent.DOM_VK_U, "", SHOULD_DELIVER_NONE); // dead key
-    testKey({layout:"US", keyCode:0x20, command:1, chars:"u", unmodifiedChars:"u"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_U, command:1, chars:"u", unmodifiedChars:"u"},
             nsIDOMKeyEvent.DOM_VK_U, "u", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x09, chars:"v", unmodifiedChars:"v"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_V, chars:"v", unmodifiedChars:"v"},
             nsIDOMKeyEvent.DOM_VK_V, "v", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x09, shift:1, chars:"V", unmodifiedChars:"V"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_V, shift:1, chars:"V", unmodifiedChars:"V"},
             nsIDOMKeyEvent.DOM_VK_V, "V", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x09, ctrl:1, chars:"\u0016", unmodifiedChars:"v"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_V, ctrl:1, chars:"\u0016", unmodifiedChars:"v"},
             nsIDOMKeyEvent.DOM_VK_V, "v", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x09, alt:1, chars:"\u221A", unmodifiedChars:"v"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_V, alt:1, chars:"\u221A", unmodifiedChars:"v"},
             nsIDOMKeyEvent.DOM_VK_V, "\u221A", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x09, command:1, chars:"v", unmodifiedChars:"v"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_V, command:1, chars:"v", unmodifiedChars:"v"},
             nsIDOMKeyEvent.DOM_VK_V, "v", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x0D, chars:"w", unmodifiedChars:"w"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_W, chars:"w", unmodifiedChars:"w"},
             nsIDOMKeyEvent.DOM_VK_W, "w", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0D, shift:1, chars:"W", unmodifiedChars:"W"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_W, shift:1, chars:"W", unmodifiedChars:"W"},
             nsIDOMKeyEvent.DOM_VK_W, "W", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0D, ctrl:1, chars:"\u0017", unmodifiedChars:"w"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_W, ctrl:1, chars:"\u0017", unmodifiedChars:"w"},
             nsIDOMKeyEvent.DOM_VK_W, "w", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0D, alt:1, chars:"\u2211", unmodifiedChars:"w"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_W, alt:1, chars:"\u2211", unmodifiedChars:"w"},
             nsIDOMKeyEvent.DOM_VK_W, "\u2211", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x0D, command:1, chars:"w", unmodifiedChars:"w"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_W, command:1, chars:"w", unmodifiedChars:"w"},
             nsIDOMKeyEvent.DOM_VK_W, "w", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x07, chars:"x", unmodifiedChars:"x"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_X, chars:"x", unmodifiedChars:"x"},
             nsIDOMKeyEvent.DOM_VK_X, "x", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x07, shift:1, chars:"X", unmodifiedChars:"X"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_X, shift:1, chars:"X", unmodifiedChars:"X"},
             nsIDOMKeyEvent.DOM_VK_X, "X", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x07, ctrl:1, chars:"\u0018", unmodifiedChars:"x"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_X, ctrl:1, chars:"\u0018", unmodifiedChars:"x"},
             nsIDOMKeyEvent.DOM_VK_X, "x", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x07, alt:1, chars:"\u2248", unmodifiedChars:"x"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_X, alt:1, chars:"\u2248", unmodifiedChars:"x"},
             nsIDOMKeyEvent.DOM_VK_X, "\u2248", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x07, command:1, chars:"x", unmodifiedChars:"x"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_X, command:1, chars:"x", unmodifiedChars:"x"},
             nsIDOMKeyEvent.DOM_VK_X, "x", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x10, chars:"y", unmodifiedChars:"y"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Y, chars:"y", unmodifiedChars:"y"},
             nsIDOMKeyEvent.DOM_VK_Y, "y", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x10, shift:1, chars:"Y", unmodifiedChars:"Y"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Y, shift:1, chars:"Y", unmodifiedChars:"Y"},
             nsIDOMKeyEvent.DOM_VK_Y, "Y", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x10, ctrl:1, chars:"\u0019", unmodifiedChars:"y"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Y, ctrl:1, chars:"\u0019", unmodifiedChars:"y"},
             nsIDOMKeyEvent.DOM_VK_Y, "y", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x10, alt:1, chars:"\u00A5", unmodifiedChars:"y"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Y, alt:1, chars:"\u00A5", unmodifiedChars:"y"},
             nsIDOMKeyEvent.DOM_VK_Y, "\u00A5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x10, command:1, chars:"y", unmodifiedChars:"y"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Y, command:1, chars:"y", unmodifiedChars:"y"},
             nsIDOMKeyEvent.DOM_VK_Y, "y", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x06, chars:"z", unmodifiedChars:"z"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Z, chars:"z", unmodifiedChars:"z"},
             nsIDOMKeyEvent.DOM_VK_Z, "z", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x06, shift:1, chars:"Z", unmodifiedChars:"Z"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Z, shift:1, chars:"Z", unmodifiedChars:"Z"},
             nsIDOMKeyEvent.DOM_VK_Z, "Z", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x06, ctrl:1, chars:"\u001A", unmodifiedChars:"z"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Z, ctrl:1, chars:"\u001A", unmodifiedChars:"z"},
             nsIDOMKeyEvent.DOM_VK_Z, "z", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x06, alt:1, chars:"\u03A9", unmodifiedChars:"z"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Z, alt:1, chars:"\u03A9", unmodifiedChars:"z"},
             nsIDOMKeyEvent.DOM_VK_Z, "\u03A9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x06, command:1, chars:"z", unmodifiedChars:"z"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Z, command:1, chars:"z", unmodifiedChars:"z"},
             nsIDOMKeyEvent.DOM_VK_Z, "z", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // numeric
-    testKey({layout:"US", keyCode:0x12, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x12, shift:1, chars:"!", unmodifiedChars:"!"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_1, shift:1, chars:"!", unmodifiedChars:"!"},
             nsIDOMKeyEvent.DOM_VK_1, "!", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x12, ctrl:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_1, ctrl:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x12, alt:1, chars:"\u00A1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_1, alt:1, chars:"\u00A1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "\u00A1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x12, command:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_1, command:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x13, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_2, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x13, shift:1, chars:"@", unmodifiedChars:"@"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_2, shift:1, chars:"@", unmodifiedChars:"@"},
             nsIDOMKeyEvent.DOM_VK_2, "@", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x13, ctrl:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_2, ctrl:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x13, alt:1, chars:"\u00A1", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_2, alt:1, chars:"\u00A1", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "\u00A1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x13, command:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_2, command:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x14, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_3, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x14, shift:1, chars:"#", unmodifiedChars:"#"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_3, shift:1, chars:"#", unmodifiedChars:"#"},
             nsIDOMKeyEvent.DOM_VK_3, "#", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x14, ctrl:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_3, ctrl:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x14, alt:1, chars:"\u00A3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_3, alt:1, chars:"\u00A3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "\u00A3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x14, command:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_3, command:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x15, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_4, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x15, shift:1, chars:"$", unmodifiedChars:"$"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_4, shift:1, chars:"$", unmodifiedChars:"$"},
             nsIDOMKeyEvent.DOM_VK_4, "$", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x15, ctrl:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_4, ctrl:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x15, alt:1, chars:"\u00A2", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_4, alt:1, chars:"\u00A2", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "\u00A2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x15, command:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_4, command:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x17, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_5, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x17, shift:1, chars:"%", unmodifiedChars:"%"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_5, shift:1, chars:"%", unmodifiedChars:"%"},
             nsIDOMKeyEvent.DOM_VK_5, "%", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x17, ctrl:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_5, ctrl:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x17, alt:1, chars:"\u221E", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_5, alt:1, chars:"\u221E", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "\u221E", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x17, command:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_5, command:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x16, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_6, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x16, shift:1, chars:"^", unmodifiedChars:"^"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_6, shift:1, chars:"^", unmodifiedChars:"^"},
             nsIDOMKeyEvent.DOM_VK_6, "^", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x16, ctrl:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_6, ctrl:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x16, alt:1, chars:"\u00A7", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_6, alt:1, chars:"\u00A7", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "\u00A7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x16, command:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_6, command:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1A, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_7, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1A, shift:1, chars:"\u0026;", unmodifiedChars:"\u0026;"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_7, shift:1, chars:"\u0026;", unmodifiedChars:"\u0026;"},
             nsIDOMKeyEvent.DOM_VK_7, "\u0026", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1A, ctrl:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_7, ctrl:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1A, alt:1, chars:"\u00B6", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_7, alt:1, chars:"\u00B6", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "\u00B6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1A, command:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_7, command:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1C, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_8, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1C, shift:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_8, shift:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_8, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1C, ctrl:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_8, ctrl:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1C, alt:1, chars:"\u2022", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_8, alt:1, chars:"\u2022", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "\u2022", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1C, command:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_8, command:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x19, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_9, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x19, shift:1, chars:"(", unmodifiedChars:"("},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_9, shift:1, chars:"(", unmodifiedChars:"("},
             nsIDOMKeyEvent.DOM_VK_9, "(", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x19, ctrl:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_9, ctrl:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x19, alt:1, chars:"\u00AA", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_9, alt:1, chars:"\u00AA", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "\u00AA", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x19, command:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_9, command:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1D, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_0, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1D, shift:1, chars:")", unmodifiedChars:")"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_0, shift:1, chars:")", unmodifiedChars:")"},
             nsIDOMKeyEvent.DOM_VK_0, ")", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1D, ctrl:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_0, ctrl:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1D, alt:1, chars:"\u00BA", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_0, alt:1, chars:"\u00BA", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "\u00BA", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1D, command:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_0, command:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // other chracters
-    testKey({layout:"US", keyCode:0x32, chars:"`", unmodifiedChars:"`"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Grave, chars:"`", unmodifiedChars:"`"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "`", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x32, shift:1, chars:"~", unmodifiedChars:"~"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Grave, shift:1, chars:"~", unmodifiedChars:"~"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "~", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x32, ctrl:1, chars:"`", unmodifiedChars:"`"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Grave, ctrl:1, chars:"`", unmodifiedChars:"`"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "`", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x32, alt:1, chars:"", unmodifiedChars:"`"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Grave, alt:1, chars:"", unmodifiedChars:"`"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_NONE); // dead key
-    testKey({layout:"US", keyCode:0x32, command:1, chars:"`", unmodifiedChars:"`"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Grave, command:1, chars:"`", unmodifiedChars:"`"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "`", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1B, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Minus, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1B, shift:1, chars:"_", unmodifiedChars:"_"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Minus, shift:1, chars:"_", unmodifiedChars:"_"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "_", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"US", keyCode:0x1B, ctrl:1, chars:"\u001F", unmodifiedChars:"-"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_Minus, ctrl:1, chars:"\u001F", unmodifiedChars:"-"},
     //         nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1B, alt:1, chars:"\u2013", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Minus, alt:1, chars:"\u2013", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "\u2013", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1B, command:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Minus, command:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "-", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x18, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Equal, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x18, shift:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Equal, shift:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x18, ctrl:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Equal, ctrl:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x18, alt:1, chars:"\u2260", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Equal, alt:1, chars:"\u2260", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "\u2260", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x18, command:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Equal, command:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x21, chars:"[", unmodifiedChars:"["},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_LeftBracket, chars:"[", unmodifiedChars:"["},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "[", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x21, shift:1, chars:"{", unmodifiedChars:"{"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_LeftBracket, shift:1, chars:"{", unmodifiedChars:"{"},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "{", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"US", keyCode:0x21, ctrl:1, chars:"\u001B", unmodifiedChars:"["},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_LeftBracket, ctrl:1, chars:"\u001B", unmodifiedChars:"["},
     //         nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "[", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x21, alt:1, chars:"\u201C", unmodifiedChars:"["},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_LeftBracket, alt:1, chars:"\u201C", unmodifiedChars:"["},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "\u201C", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x21, command:1, chars:"[", unmodifiedChars:"["},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_LeftBracket, command:1, chars:"[", unmodifiedChars:"["},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "[", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x1E, chars:"]", unmodifiedChars:"]"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_RightBracket, chars:"]", unmodifiedChars:"]"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "]", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1E, shift:1, chars:"}", unmodifiedChars:"}"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_RightBracket, shift:1, chars:"}", unmodifiedChars:"}"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "}", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"US", keyCode:0x1E, ctrl:1, chars:"\u001D", unmodifiedChars:"]"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_RightBracket, ctrl:1, chars:"\u001D", unmodifiedChars:"]"},
     //         nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "]", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1E, alt:1, chars:"\u2018", unmodifiedChars:"]"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_RightBracket, alt:1, chars:"\u2018", unmodifiedChars:"]"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "\u2018", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x1E, command:1, chars:"]", unmodifiedChars:"]"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_RightBracket, command:1, chars:"]", unmodifiedChars:"]"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "]", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2A, chars:"\\", unmodifiedChars:"\\"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Backslash, chars:"\\", unmodifiedChars:"\\"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "\\", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2A, shift:1, chars:"|", unmodifiedChars:"|"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Backslash, shift:1, chars:"|", unmodifiedChars:"|"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "|", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"US", keyCode:0x2A, ctrl:1, chars:"\u001C", unmodifiedChars:"\\"},
+    // testKey({layout:"US", keyCode:MAC_VK_ANSI_Backslash, ctrl:1, chars:"\u001C", unmodifiedChars:"\\"},
     //         nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "\\", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2A, alt:1, chars:"\u00AB", unmodifiedChars:"\\"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Backslash, alt:1, chars:"\u00AB", unmodifiedChars:"\\"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "\u00AB", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2A, command:1, chars:"\\", unmodifiedChars:"\\"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Backslash, command:1, chars:"\\", unmodifiedChars:"\\"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "\\", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x29, chars:";", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, chars:";", unmodifiedChars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x29, shift:1, chars:":", unmodifiedChars:":"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, shift:1, chars:":", unmodifiedChars:":"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ":", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x29, ctrl:1, chars:";", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, ctrl:1, chars:";", unmodifiedChars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x29, alt:1, chars:"\u2026", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, alt:1, chars:"\u2026", unmodifiedChars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, "\u2026", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x29, command:1, chars:";", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, command:1, chars:";", unmodifiedChars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x27, chars:"'", unmodifiedChars:"'"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Quote, chars:"'", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x27, shift:1, chars:"\"", unmodifiedChars:"\""},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Quote, shift:1, chars:"\"", unmodifiedChars:"\""},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "\"", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x27, ctrl:1, chars:"'", unmodifiedChars:"'"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Quote, ctrl:1, chars:"'", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x27, alt:1, chars:"\u00E6", unmodifiedChars:"'"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Quote, alt:1, chars:"\u00E6", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "\u00E6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x27, command:1, chars:"'", unmodifiedChars:"'"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Quote, command:1, chars:"'", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "'", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2B, chars:",", unmodifiedChars:","},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Comma, chars:",", unmodifiedChars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2B, shift:1, chars:"\u003C", unmodifiedChars:"\u003C"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Comma, shift:1, chars:"\u003C", unmodifiedChars:"\u003C"},
             nsIDOMKeyEvent.DOM_VK_COMMA, "\u003C", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2B, ctrl:1, chars:",", unmodifiedChars:","},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Comma, ctrl:1, chars:",", unmodifiedChars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2B, alt:1, chars:"\u2264", unmodifiedChars:","},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Comma, alt:1, chars:"\u2264", unmodifiedChars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, "\u2264", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2B, command:1, chars:",", unmodifiedChars:","},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Comma, command:1, chars:",", unmodifiedChars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2F, chars:".", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, chars:".", unmodifiedChars:"."},
             nsIDOMKeyEvent.DOM_VK_PERIOD, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2F, shift:1, chars:"\u003E", unmodifiedChars:"\u003E"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, shift:1, chars:"\u003E", unmodifiedChars:"\u003E"},
             nsIDOMKeyEvent.DOM_VK_PERIOD, "\u003E", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2F, ctrl:1, chars:".", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, ctrl:1, chars:".", unmodifiedChars:"."},
             nsIDOMKeyEvent.DOM_VK_PERIOD, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2F, alt:1, chars:"\u2265", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, alt:1, chars:"\u2265", unmodifiedChars:"."},
             nsIDOMKeyEvent.DOM_VK_PERIOD, "\u2265", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2F, command:1, chars:".", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, command:1, chars:".", unmodifiedChars:"."},
             nsIDOMKeyEvent.DOM_VK_PERIOD, ".", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x2C, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Slash, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2C, shift:1, chars:"?", unmodifiedChars:"?"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Slash, shift:1, chars:"?", unmodifiedChars:"?"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "?", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2C, ctrl:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Slash, ctrl:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2C, alt:1, chars:"\u00F7", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Slash, alt:1, chars:"\u00F7", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "\u00F7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x2C, command:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Slash, command:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "/", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // numpad
-    testKey({layout:"US", keyCode:0x53, numLock:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad1, numLock:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x53, numLock:1, shift:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad1, numLock:1, shift:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x53, numLock:1, ctrl:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad1, numLock:1, ctrl:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x53, numLock:1, alt:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad1, numLock:1, alt:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x53, numLock:1, command:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad1, numLock:1, command:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x54, numLock:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad2, numLock:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x54, numLock:1, shift:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad2, numLock:1, shift:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x54, numLock:1, ctrl:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad2, numLock:1, ctrl:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x54, numLock:1, alt:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad2, numLock:1, alt:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x54, numLock:1, command:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad2, numLock:1, command:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x55, numLock:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad3, numLock:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x55, numLock:1, shift:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad3, numLock:1, shift:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x55, numLock:1, ctrl:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad3, numLock:1, ctrl:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x55, numLock:1, alt:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad3, numLock:1, alt:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x55, numLock:1, command:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad3, numLock:1, command:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x56, numLock:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad4, numLock:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x56, numLock:1, shift:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad4, numLock:1, shift:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x56, numLock:1, ctrl:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad4, numLock:1, ctrl:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x56, numLock:1, alt:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad4, numLock:1, alt:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x56, numLock:1, command:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad4, numLock:1, command:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x57, numLock:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad5, numLock:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x57, numLock:1, shift:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad5, numLock:1, shift:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x57, numLock:1, ctrl:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad5, numLock:1, ctrl:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x57, numLock:1, alt:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad5, numLock:1, alt:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x57, numLock:1, command:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad5, numLock:1, command:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x58, numLock:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad6, numLock:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x58, numLock:1, shift:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad6, numLock:1, shift:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x58, numLock:1, ctrl:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad6, numLock:1, ctrl:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x58, numLock:1, alt:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad6, numLock:1, alt:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x58, numLock:1, command:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad6, numLock:1, command:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x59, numLock:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad7, numLock:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x59, numLock:1, shift:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad7, numLock:1, shift:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x59, numLock:1, ctrl:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad7, numLock:1, ctrl:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x59, numLock:1, alt:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad7, numLock:1, alt:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x59, numLock:1, command:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad7, numLock:1, command:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x5B, numLock:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad8, numLock:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5B, numLock:1, shift:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad8, numLock:1, shift:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5B, numLock:1, ctrl:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad8, numLock:1, ctrl:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5B, numLock:1, alt:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad8, numLock:1, alt:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5B, numLock:1, command:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad8, numLock:1, command:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x5C, numLock:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad9, numLock:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5C, numLock:1, shift:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad9, numLock:1, shift:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5C, numLock:1, ctrl:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad9, numLock:1, ctrl:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5C, numLock:1, alt:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad9, numLock:1, alt:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x5C, numLock:1, command:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad9, numLock:1, command:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x52, numLock:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad0, numLock:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x52, numLock:1, shift:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad0, numLock:1, shift:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x52, numLock:1, ctrl:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad0, numLock:1, ctrl:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x52, numLock:1, alt:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad0, numLock:1, alt:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x52, numLock:1, command:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Keypad0, numLock:1, command:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x51, numLock:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEquals, numLock:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x51, numLock:1, shift:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEquals, numLock:1, shift:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x51, numLock:1, ctrl:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEquals, numLock:1, ctrl:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x51, numLock:1, alt:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEquals, numLock:1, alt:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x51, numLock:1, command:1, chars:"=", unmodifiedChars:"="},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEquals, numLock:1, command:1, chars:"=", unmodifiedChars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x4B, numLock:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadDivide, numLock:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4B, numLock:1, shift:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadDivide, numLock:1, shift:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4B, numLock:1, ctrl:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadDivide, numLock:1, ctrl:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4B, numLock:1, alt:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadDivide, numLock:1, alt:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4B, numLock:1, command:1, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadDivide, numLock:1, command:1, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x43, numLock:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMultiply, numLock:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x43, numLock:1, shift:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMultiply, numLock:1, shift:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x43, numLock:1, ctrl:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMultiply, numLock:1, ctrl:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x43, numLock:1, alt:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMultiply, numLock:1, alt:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x43, numLock:1, command:1, chars:"*", unmodifiedChars:"*"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMultiply, numLock:1, command:1, chars:"*", unmodifiedChars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x4E, numLock:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMinus, numLock:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4E, numLock:1, shift:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMinus, numLock:1, shift:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4E, numLock:1, ctrl:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMinus, numLock:1, ctrl:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4E, numLock:1, alt:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMinus, numLock:1, alt:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4E, numLock:1, command:1, chars:"-", unmodifiedChars:"-"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadMinus, numLock:1, command:1, chars:"-", unmodifiedChars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x45, numLock:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadPlus, numLock:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x45, numLock:1, shift:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadPlus, numLock:1, shift:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x45, numLock:1, ctrl:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadPlus, numLock:1, ctrl:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x45, numLock:1, alt:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadPlus, numLock:1, alt:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x45, numLock:1, command:1, chars:"+", unmodifiedChars:"+"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadPlus, numLock:1, command:1, chars:"+", unmodifiedChars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"US", keyCode:0x4C, numLock:1, chars:"\u0003", unmodifiedChars:"\u0003"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEnter, numLock:1, chars:"\u0003", unmodifiedChars:"\u0003"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4C, numLock:1, shift:1, chars:"\u0003", unmodifiedChars:"\u0003"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEnter, numLock:1, shift:1, chars:"\u0003", unmodifiedChars:"\u0003"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4C, numLock:1, ctrl:1, chars:"\u0003", unmodifiedChars:"\u0003"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEnter, numLock:1, ctrl:1, chars:"\u0003", unmodifiedChars:"\u0003"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4C, numLock:1, alt:1, chars:"\u0003", unmodifiedChars:"\u0003"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEnter, numLock:1, alt:1, chars:"\u0003", unmodifiedChars:"\u0003"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:0x4C, numLock:1, command:1, chars:"\u0003", unmodifiedChars:"\u0003"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_KeypadEnter, numLock:1, command:1, chars:"\u0003", unmodifiedChars:"\u0003"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // French, numeric
-    testKey({layout:"French", keyCode:0x12, chars:"\u0026", unmodifiedChars:"\u0026"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_1, chars:"\u0026", unmodifiedChars:"\u0026"},
             nsIDOMKeyEvent.DOM_VK_1, "\u0026", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x12, shift:1, chars:"1", unmodifiedChars:"1"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_1, shift:1, chars:"1", unmodifiedChars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x12, ctrl:1, chars:"1", unmodifiedChars:"\u0026"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_1, ctrl:1, chars:"1", unmodifiedChars:"\u0026"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x12, command:1, chars:"\u0026", unmodifiedChars:"\u0026"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_1, command:1, chars:"\u0026", unmodifiedChars:"\u0026"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x13, chars:"\u00E9", unmodifiedChars:"\u00E9"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_2, chars:"\u00E9", unmodifiedChars:"\u00E9"},
             nsIDOMKeyEvent.DOM_VK_2, "\u00E9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x13, shift:1, chars:"2", unmodifiedChars:"2"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_2, shift:1, chars:"2", unmodifiedChars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x13, ctrl:1, chars:"2", unmodifiedChars:"\u00E9"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_2, ctrl:1, chars:"2", unmodifiedChars:"\u00E9"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x13, command:1, chars:"\u00E9", unmodifiedChars:"\u00E9"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_2, command:1, chars:"\u00E9", unmodifiedChars:"\u00E9"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x14, chars:"\"", unmodifiedChars:"\""},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_3, chars:"\"", unmodifiedChars:"\""},
             nsIDOMKeyEvent.DOM_VK_3, "\"", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x14, shift:1, chars:"3", unmodifiedChars:"3"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_3, shift:1, chars:"3", unmodifiedChars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x14, ctrl:1, chars:"3", unmodifiedChars:"\""},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_3, ctrl:1, chars:"3", unmodifiedChars:"\""},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x14, command:1, chars:"\"", unmodifiedChars:"\""},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_3, command:1, chars:"\"", unmodifiedChars:"\""},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x15, chars:"'", unmodifiedChars:"'"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_4, chars:"'", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_4, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x15, shift:1, chars:"4", unmodifiedChars:"4"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_4, shift:1, chars:"4", unmodifiedChars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x15, ctrl:1, chars:"4", unmodifiedChars:"'"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_4, ctrl:1, chars:"4", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x15, command:1, chars:"'", unmodifiedChars:"'"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_4, command:1, chars:"'", unmodifiedChars:"'"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x17, chars:"(", unmodifiedChars:"("},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_5, chars:"(", unmodifiedChars:"("},
             nsIDOMKeyEvent.DOM_VK_5, "(", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x17, shift:1, chars:"5", unmodifiedChars:"5"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_5, shift:1, chars:"5", unmodifiedChars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x17, ctrl:1, chars:"5", unmodifiedChars:"("},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_5, ctrl:1, chars:"5", unmodifiedChars:"("},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x17, command:1, chars:"(", unmodifiedChars:"("},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_5, command:1, chars:"(", unmodifiedChars:"("},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x16, chars:"\u00A7", unmodifiedChars:"\u00A7"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_6, chars:"\u00A7", unmodifiedChars:"\u00A7"},
             nsIDOMKeyEvent.DOM_VK_6, "\u00A7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x16, shift:1, chars:"6", unmodifiedChars:"6"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_6, shift:1, chars:"6", unmodifiedChars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"French", keyCode:0x16, ctrl:1, chars:"\u001D", unmodifiedChars:"\u00A7"},
+    // testKey({layout:"French", keyCode:MAC_VK_ANSI_6, ctrl:1, chars:"\u001D", unmodifiedChars:"\u00A7"},
     //         nsIDOMKeyEvent.DOM_VK_6, "", SHOULD_DELIVER_ALL); // Ctrl+6 sets strange char
-    testKey({layout:"French", keyCode:0x16, command:1, chars:"\u00A7", unmodifiedChars:"\u00A7"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_6, command:1, chars:"\u00A7", unmodifiedChars:"\u00A7"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x1A, chars:"\u00E8", unmodifiedChars:"\u00E8"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_7, chars:"\u00E8", unmodifiedChars:"\u00E8"},
             nsIDOMKeyEvent.DOM_VK_7, "\u00E8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1A, shift:1, chars:"7", unmodifiedChars:"7"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_7, shift:1, chars:"7", unmodifiedChars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1A, ctrl:1, chars:"7", unmodifiedChars:"\u00E8"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_7, ctrl:1, chars:"7", unmodifiedChars:"\u00E8"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1A, command:1, chars:"\u00E8", unmodifiedChars:"\u00E8"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_7, command:1, chars:"\u00E8", unmodifiedChars:"\u00E8"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x1C, chars:"!", unmodifiedChars:"!"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_8, chars:"!", unmodifiedChars:"!"},
             nsIDOMKeyEvent.DOM_VK_8, "!", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1C, shift:1, chars:"8", unmodifiedChars:"8"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_8, shift:1, chars:"8", unmodifiedChars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1C, ctrl:1, chars:"8", unmodifiedChars:"!"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_8, ctrl:1, chars:"8", unmodifiedChars:"!"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1C, command:1, chars:"!", unmodifiedChars:"!"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_8, command:1, chars:"!", unmodifiedChars:"!"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x19, chars:"\u00E7", unmodifiedChars:"\u00E7"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_9, chars:"\u00E7", unmodifiedChars:"\u00E7"},
             nsIDOMKeyEvent.DOM_VK_9, "\u00E7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x19, shift:1, chars:"9", unmodifiedChars:"9"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_9, shift:1, chars:"9", unmodifiedChars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
     // TODO:
-    // testKey({layout:"French", keyCode:0x19, ctrl:1, chars:"\u001C", unmodifiedChars:"\u00E7"},
+    // testKey({layout:"French", keyCode:MAC_VK_ANSI_9, ctrl:1, chars:"\u001C", unmodifiedChars:"\u00E7"},
     //         nsIDOMKeyEvent.DOM_VK_9, "", SHOULD_DELIVER_ALL); // Ctrl+9 sets strange char
-    testKey({layout:"French", keyCode:0x19, command:1, chars:"\u00E7", unmodifiedChars:"\u00E7"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_9, command:1, chars:"\u00E7", unmodifiedChars:"\u00E7"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"French", keyCode:0x1D, chars:"\u00E0", unmodifiedChars:"\u00E0"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_0, chars:"\u00E0", unmodifiedChars:"\u00E0"},
             nsIDOMKeyEvent.DOM_VK_0, "\u00E0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1D, shift:1, chars:"0", unmodifiedChars:"0"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_0, shift:1, chars:"0", unmodifiedChars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
     // XXX No events fired, not sure the reason.
-    // testKey({layout:"French", keyCode:0x1D, ctrl:1, chars:"", unmodifiedChars:"\u00E0"},
+    // testKey({layout:"French", keyCode:MAC_VK_ANSI_0, ctrl:1, chars:"", unmodifiedChars:"\u00E0"},
     //         nsIDOMKeyEvent.DOM_VK_0, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:0x1D, command:1, chars:"\u00E0", unmodifiedChars:"\u00E0"},
+    testKey({layout:"French", keyCode:MAC_VK_ANSI_0, command:1, chars:"\u00E0", unmodifiedChars:"\u00E0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
 
     // Thai
     // keycode should be DOM_VK_[A-Z] of the key on the latest ASCII capable keyboard layout is for alphabet
-    testKey({layout:"Thai", keyCode:0x00, chars:"\u0E1F", unmodifiedChars:"\u0E1F"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_A, chars:"\u0E1F", unmodifiedChars:"\u0E1F"},
             nsIDOMKeyEvent.DOM_VK_A, "\u0E1F", SHOULD_DELIVER_ALL);
     // keycode should be shifted character if unshifted character isn't an ASCII character
-    testKey({layout:"Thai", keyCode:0x27, chars:"\u0E07", unmodifiedChars:"\u0E07"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_Quote, chars:"\u0E07", unmodifiedChars:"\u0E07"},
             nsIDOMKeyEvent.DOM_VK_PERIOD, "\u0E07", SHOULD_DELIVER_ALL);
     // keycode should be zero if the character of the key on the latest ASCII capable keyboard layout isn't for alphabet
-    testKey({layout:"Thai", keyCode:0x2F, chars:"\u0E43", unmodifiedChars:"\u0E43"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_Period, chars:"\u0E43", unmodifiedChars:"\u0E43"},
             0, "\u0E43", SHOULD_DELIVER_ALL);
     // keycode should be DOM_VK_[0-9] if the key on the latest ASCII capable keyboard layout is for numeric
-    testKey({layout:"Thai", keyCode:0x12, chars:"\u0E45", unmodifiedChars:"\u0E45"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_1, chars:"\u0E45", unmodifiedChars:"\u0E45"},
             nsIDOMKeyEvent.DOM_VK_1, "\u0E45", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x13, chars:"/", unmodifiedChars:"/"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_2, chars:"/", unmodifiedChars:"/"},
             nsIDOMKeyEvent.DOM_VK_2, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x14, chars:"_", unmodifiedChars:"_"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_3, chars:"_", unmodifiedChars:"_"},
             nsIDOMKeyEvent.DOM_VK_3, "_", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x15, chars:"\u0E20", unmodifiedChars:"\u0E20"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_4, chars:"\u0E20", unmodifiedChars:"\u0E20"},
             nsIDOMKeyEvent.DOM_VK_4, "\u0E20", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x17, chars:"\u0E16", unmodifiedChars:"\u0E16"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_5, chars:"\u0E16", unmodifiedChars:"\u0E16"},
             nsIDOMKeyEvent.DOM_VK_5, "\u0E16", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x16, chars:"\u0E38", unmodifiedChars:"\u0E38"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_6, chars:"\u0E38", unmodifiedChars:"\u0E38"},
             nsIDOMKeyEvent.DOM_VK_6, "\u0E38", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x1A, chars:"\u0E36", unmodifiedChars:"\u0E36"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_7, chars:"\u0E36", unmodifiedChars:"\u0E36"},
             nsIDOMKeyEvent.DOM_VK_7, "\u0E36", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x1C, chars:"\u0E04", unmodifiedChars:"\u0E04"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_8, chars:"\u0E04", unmodifiedChars:"\u0E04"},
             nsIDOMKeyEvent.DOM_VK_8, "\u0E04", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x19, chars:"\u0E15", unmodifiedChars:"\u0E15"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_9, chars:"\u0E15", unmodifiedChars:"\u0E15"},
             nsIDOMKeyEvent.DOM_VK_9, "\u0E15", SHOULD_DELIVER_ALL);
-    testKey({layout:"Thai", keyCode:0x1D, chars:"\u0E08", unmodifiedChars:"\u0E08"},
+    testKey({layout:"Thai", keyCode:MAC_VK_ANSI_0, chars:"\u0E08", unmodifiedChars:"\u0E08"},
             nsIDOMKeyEvent.DOM_VK_0, "\u0E08", SHOULD_DELIVER_ALL);
 
     // Dvorak-Qwerty, layout should be changed when Command key is pressed.
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x01, chars:"o", unmodifiedChars:"o"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_S, chars:"o", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x01, shift:1, chars:"O", unmodifiedChars:"O"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_S, shift:1, chars:"O", unmodifiedChars:"O"},
             nsIDOMKeyEvent.DOM_VK_O, "O", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x01, ctrl:1, chars:"\u000F", unmodifiedChars:"o"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_S, ctrl:1, chars:"\u000F", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x01, alt:1, chars:"\u00F8", unmodifiedChars:"o"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_S, alt:1, chars:"\u00F8", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "\u00F8", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x01, command:1, chars:"s", unmodifiedChars:"o"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_S, command:1, chars:"s", unmodifiedChars:"o"},
             nsIDOMKeyEvent.DOM_VK_S, "s", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x02, chars:"e", unmodifiedChars:"e"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_D, chars:"e", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x02, shift:1, chars:"E", unmodifiedChars:"E"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_D, shift:1, chars:"E", unmodifiedChars:"E"},
             nsIDOMKeyEvent.DOM_VK_E, "E", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x02, ctrl:1, chars:"\u0005", unmodifiedChars:"e"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_D, ctrl:1, chars:"\u0005", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_ALL);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x02, alt:1, chars:"", unmodifiedChars:"e"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_D, alt:1, chars:"", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "", SHOULD_DELIVER_NONE); // dead key
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x02, command:1, chars:"d", unmodifiedChars:"e"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_D, command:1, chars:"d", unmodifiedChars:"e"},
             nsIDOMKeyEvent.DOM_VK_D, "d", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x22, command:1, alt:1, chars:"^", unmodifiedChars:"c"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_I, command:1, alt:1, chars:"^", unmodifiedChars:"c"},
             nsIDOMKeyEvent.DOM_VK_I, "^", SHOULD_DELIVER_KEYDOWN_KEYPRESS);
-    testKey({layout:"Dvorak-Qwerty", keyCode:0x22, command:1, alt:1, shift:1, chars:"\u02C6", unmodifiedChars:"C"},
+    testKey({layout:"Dvorak-Qwerty", keyCode:MAC_VK_ANSI_I, command:1, alt:1, shift:1, chars:"\u02C6", unmodifiedChars:"C"},
             nsIDOMKeyEvent.DOM_VK_I, "\u02C6", SHOULD_DELIVER_KEYDOWN_KEYPRESS);  }
   else if (IS_WIN) {
     // On Windows, you can use Spy++ or Winspector (free) to watch window messages.
     // The keyCode is given by the wParam of the last WM_KEYDOWN message. The
     // chars string is given by the wParam of the WM_CHAR message. unmodifiedChars
     // is not needed on Windows.
 
     // Plain text input
-    testKey({layout:"US", keyCode:65, chars:"a"},
+    testKey({layout:"US", keyCode:WIN_VK_A, chars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:66, chars:"b"},
+    testKey({layout:"US", keyCode:WIN_VK_B, chars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "b", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:65, shift:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, shift:1, chars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Ctrl keys
-    testKey({layout:"US", keyCode:65, ctrl:1, chars:"\u0001"},
+    testKey({layout:"US", keyCode:WIN_VK_A, ctrl:1, chars:"\u0001"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:65, ctrl:1, shift:1, chars:"\u0001"},
+    testKey({layout:"US", keyCode:WIN_VK_A, ctrl:1, shift:1, chars:"\u0001"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Alt keys
-    testKey({layout:"US", keyCode:65, alt:1, chars:"a"},
+    testKey({layout:"US", keyCode:WIN_VK_A, alt:1, chars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:65, alt:1, shift:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, alt:1, shift:1, chars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Shift-ctrl-alt generates no WM_CHAR, but we still get a keypress
-    testKey({layout:"US", keyCode:65, alt:1, ctrl:1, shift:1, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_A, alt:1, ctrl:1, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Greek plain text
-    testKey({layout:"Greek", keyCode:65, chars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, chars:"\u03b1"},
             nsIDOMKeyEvent.DOM_VK_A, "\u03b1", SHOULD_DELIVER_ALL);
-    testKey({layout:"Greek", keyCode:65, shift:1, chars:"\u0391"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, shift:1, chars:"\u0391"},
             nsIDOMKeyEvent.DOM_VK_A, "\u0391", SHOULD_DELIVER_ALL);
 
     // Greek ctrl keys produce Latin charcodes
-    testKey({layout:"Greek", keyCode:65, ctrl:1, chars:"\u0001"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, ctrl:1, chars:"\u0001"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"Greek", keyCode:65, ctrl:1, shift:1, chars:"\u0001"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, ctrl:1, shift:1, chars:"\u0001"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
 
     // Caps Lock key event
-    testKey({layout:"US", keyCode:20, capsLock:1, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_CAPITAL, capsLock:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_CAPS_LOCK, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"US", keyCode:20, capsLock:0, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_CAPITAL, capsLock:0, chars:""},
             nsIDOMKeyEvent.DOM_VK_CAPS_LOCK, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
 
     // Win keys
-    testKey({layout:"US", keyCode:8, chars:"\u0008"},
+    testKey({layout:"US", keyCode:WIN_VK_BACK, chars:"\u0008"},
             nsIDOMKeyEvent.DOM_VK_BACK_SPACE, "", SHOULD_DELIVER_ALL);
 
     // all keys on keyboard (keyCode test)
-    testKey({layout:"US", keyCode:9, chars:"\t"},
+    testKey({layout:"US", keyCode:WIN_VK_TAB, chars:"\t"},
             nsIDOMKeyEvent.DOM_VK_TAB, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:12, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_CLEAR, chars:""},
             nsIDOMKeyEvent.DOM_VK_CLEAR, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:13, chars:"\r"},
+    testKey({layout:"US", keyCode:WIN_VK_RETURN, chars:"\r"},
             nsIDOMKeyEvent.DOM_VK_RETURN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:19, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_PAUSE, chars:""},
             nsIDOMKeyEvent.DOM_VK_PAUSE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:21, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_KANA, chars:""},
             nsIDOMKeyEvent.DOM_VK_KANA, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:23, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_JUNJA, chars:""},
             nsIDOMKeyEvent.DOM_VK_JUNJA, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:24, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_FINAL, chars:""},
             nsIDOMKeyEvent.DOM_VK_FINAL, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:25, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_KANJI, chars:""},
             nsIDOMKeyEvent.DOM_VK_KANJI, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:27, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_ESCAPE, chars:""},
             nsIDOMKeyEvent.DOM_VK_ESCAPE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:28, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_CONVERT, chars:""},
             nsIDOMKeyEvent.DOM_VK_CONVERT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:29, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_NONCONVERT, chars:""},
             nsIDOMKeyEvent.DOM_VK_NONCONVERT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:30, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_ACCEPT, chars:""},
             nsIDOMKeyEvent.DOM_VK_ACCEPT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:31, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_MODECHANGE, chars:""},
             nsIDOMKeyEvent.DOM_VK_MODECHANGE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:32, chars:" "},
+    testKey({layout:"US", keyCode:WIN_VK_SPACE, chars:" "},
             nsIDOMKeyEvent.DOM_VK_SPACE, " ", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:33, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_PRIOR, chars:""},
             nsIDOMKeyEvent.DOM_VK_PAGE_UP, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:34, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_NEXT, chars:""},
             nsIDOMKeyEvent.DOM_VK_PAGE_DOWN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:35, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_END, chars:""},
             nsIDOMKeyEvent.DOM_VK_END, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:36, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_HOME, chars:""},
             nsIDOMKeyEvent.DOM_VK_HOME, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:37, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_LEFT, chars:""},
             nsIDOMKeyEvent.DOM_VK_LEFT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:38, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_UP, chars:""},
             nsIDOMKeyEvent.DOM_VK_UP, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:39, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_RIGHT, chars:""},
             nsIDOMKeyEvent.DOM_VK_RIGHT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:40, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_DOWN, chars:""},
             nsIDOMKeyEvent.DOM_VK_DOWN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:41, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_SELECT, chars:""},
             nsIDOMKeyEvent.DOM_VK_SELECT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:42, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_PRINT, chars:""},
             nsIDOMKeyEvent.DOM_VK_PRINT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:43, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_EXECUTE, chars:""},
             nsIDOMKeyEvent.DOM_VK_EXECUTE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:44, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_SNAPSHOT, chars:""},
             nsIDOMKeyEvent.DOM_VK_PRINTSCREEN, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:45, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_INSERT, chars:""},
             nsIDOMKeyEvent.DOM_VK_INSERT, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:46, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_DELETE, chars:""},
             nsIDOMKeyEvent.DOM_VK_DELETE, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:47, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_HELP, chars:""},
             nsIDOMKeyEvent.DOM_VK_HELP, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:95, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_SLEEP, chars:""},
             nsIDOMKeyEvent.DOM_VK_SLEEP, "", SHOULD_DELIVER_ALL);
 
     // US
     // Alphabet
-    testKey({layout:"US", keyCode:65, chars:"a"},
+    testKey({layout:"US", keyCode:WIN_VK_A, chars:"a"},
             nsIDOMKeyEvent.DOM_VK_A, "a", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:65, shift:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, shift:1, chars:"A"},
             nsIDOMKeyEvent.DOM_VK_A, "A", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:66, chars:"b"},
+    testKey({layout:"US", keyCode:WIN_VK_B, chars:"b"},
             nsIDOMKeyEvent.DOM_VK_B, "b", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:66, shift:1, chars:"B"},
+    testKey({layout:"US", keyCode:WIN_VK_B, shift:1, chars:"B"},
             nsIDOMKeyEvent.DOM_VK_B, "B", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:67, chars:"c"},
+    testKey({layout:"US", keyCode:WIN_VK_C, chars:"c"},
             nsIDOMKeyEvent.DOM_VK_C, "c", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:67, shift:1, chars:"C"},
+    testKey({layout:"US", keyCode:WIN_VK_C, shift:1, chars:"C"},
             nsIDOMKeyEvent.DOM_VK_C, "C", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:68, chars:"d"},
+    testKey({layout:"US", keyCode:WIN_VK_D, chars:"d"},
             nsIDOMKeyEvent.DOM_VK_D, "d", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:68, shift:1, chars:"D"},
+    testKey({layout:"US", keyCode:WIN_VK_D, shift:1, chars:"D"},
             nsIDOMKeyEvent.DOM_VK_D, "D", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:69, chars:"e"},
+    testKey({layout:"US", keyCode:WIN_VK_E, chars:"e"},
             nsIDOMKeyEvent.DOM_VK_E, "e", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:69, shift:1, chars:"E"},
+    testKey({layout:"US", keyCode:WIN_VK_E, shift:1, chars:"E"},
             nsIDOMKeyEvent.DOM_VK_E, "E", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:70, chars:"f"},
+    testKey({layout:"US", keyCode:WIN_VK_F, chars:"f"},
             nsIDOMKeyEvent.DOM_VK_F, "f", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:70, shift:1, chars:"F"},
+    testKey({layout:"US", keyCode:WIN_VK_F, shift:1, chars:"F"},
             nsIDOMKeyEvent.DOM_VK_F, "F", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:71, chars:"g"},
+    testKey({layout:"US", keyCode:WIN_VK_G, chars:"g"},
             nsIDOMKeyEvent.DOM_VK_G, "g", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:71, shift:1, chars:"G"},
+    testKey({layout:"US", keyCode:WIN_VK_G, shift:1, chars:"G"},
             nsIDOMKeyEvent.DOM_VK_G, "G", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:72, chars:"h"},
+    testKey({layout:"US", keyCode:WIN_VK_H, chars:"h"},
             nsIDOMKeyEvent.DOM_VK_H, "h", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:72, shift:1, chars:"H"},
+    testKey({layout:"US", keyCode:WIN_VK_H, shift:1, chars:"H"},
             nsIDOMKeyEvent.DOM_VK_H, "H", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:73, chars:"i"},
+    testKey({layout:"US", keyCode:WIN_VK_I, chars:"i"},
             nsIDOMKeyEvent.DOM_VK_I, "i", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:73, shift:1, chars:"I"},
+    testKey({layout:"US", keyCode:WIN_VK_I, shift:1, chars:"I"},
             nsIDOMKeyEvent.DOM_VK_I, "I", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:74, chars:"j"},
+    testKey({layout:"US", keyCode:WIN_VK_J, chars:"j"},
             nsIDOMKeyEvent.DOM_VK_J, "j", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:74, shift:1, chars:"J"},
+    testKey({layout:"US", keyCode:WIN_VK_J, shift:1, chars:"J"},
             nsIDOMKeyEvent.DOM_VK_J, "J", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:75, chars:"k"},
+    testKey({layout:"US", keyCode:WIN_VK_K, chars:"k"},
             nsIDOMKeyEvent.DOM_VK_K, "k", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:75, shift:1, chars:"K"},
+    testKey({layout:"US", keyCode:WIN_VK_K, shift:1, chars:"K"},
             nsIDOMKeyEvent.DOM_VK_K, "K", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:76, chars:"l"},
+    testKey({layout:"US", keyCode:WIN_VK_L, chars:"l"},
             nsIDOMKeyEvent.DOM_VK_L, "l", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:76, shift:1, chars:"L"},
+    testKey({layout:"US", keyCode:WIN_VK_L, shift:1, chars:"L"},
             nsIDOMKeyEvent.DOM_VK_L, "L", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:77, chars:"m"},
+    testKey({layout:"US", keyCode:WIN_VK_M, chars:"m"},
             nsIDOMKeyEvent.DOM_VK_M, "m", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:77, shift:1, chars:"M"},
+    testKey({layout:"US", keyCode:WIN_VK_M, shift:1, chars:"M"},
             nsIDOMKeyEvent.DOM_VK_M, "M", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:78, chars:"n"},
+    testKey({layout:"US", keyCode:WIN_VK_N, chars:"n"},
             nsIDOMKeyEvent.DOM_VK_N, "n", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:78, shift:1, chars:"N"},
+    testKey({layout:"US", keyCode:WIN_VK_N, shift:1, chars:"N"},
             nsIDOMKeyEvent.DOM_VK_N, "N", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:79, chars:"o"},
+    testKey({layout:"US", keyCode:WIN_VK_O, chars:"o"},
             nsIDOMKeyEvent.DOM_VK_O, "o", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:79, shift:1, chars:"O"},
+    testKey({layout:"US", keyCode:WIN_VK_O, shift:1, chars:"O"},
             nsIDOMKeyEvent.DOM_VK_O, "O", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:80, chars:"p"},
+    testKey({layout:"US", keyCode:WIN_VK_P, chars:"p"},
             nsIDOMKeyEvent.DOM_VK_P, "p", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:80, shift:1, chars:"P"},
+    testKey({layout:"US", keyCode:WIN_VK_P, shift:1, chars:"P"},
             nsIDOMKeyEvent.DOM_VK_P, "P", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:81, chars:"q"},
+    testKey({layout:"US", keyCode:WIN_VK_Q, chars:"q"},
             nsIDOMKeyEvent.DOM_VK_Q, "q", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:81, shift:1, chars:"Q"},
+    testKey({layout:"US", keyCode:WIN_VK_Q, shift:1, chars:"Q"},
             nsIDOMKeyEvent.DOM_VK_Q, "Q", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:82, chars:"r"},
+    testKey({layout:"US", keyCode:WIN_VK_R, chars:"r"},
             nsIDOMKeyEvent.DOM_VK_R, "r", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:82, shift:1, chars:"R"},
+    testKey({layout:"US", keyCode:WIN_VK_R, shift:1, chars:"R"},
             nsIDOMKeyEvent.DOM_VK_R, "R", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:83, chars:"s"},
+    testKey({layout:"US", keyCode:WIN_VK_S, chars:"s"},
             nsIDOMKeyEvent.DOM_VK_S, "s", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:83, shift:1, chars:"S"},
+    testKey({layout:"US", keyCode:WIN_VK_S, shift:1, chars:"S"},
             nsIDOMKeyEvent.DOM_VK_S, "S", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:84, chars:"t"},
+    testKey({layout:"US", keyCode:WIN_VK_T, chars:"t"},
             nsIDOMKeyEvent.DOM_VK_T, "t", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:84, shift:1, chars:"T"},
+    testKey({layout:"US", keyCode:WIN_VK_T, shift:1, chars:"T"},
             nsIDOMKeyEvent.DOM_VK_T, "T", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:85, chars:"u"},
+    testKey({layout:"US", keyCode:WIN_VK_U, chars:"u"},
             nsIDOMKeyEvent.DOM_VK_U, "u", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:85, shift:1, chars:"U"},
+    testKey({layout:"US", keyCode:WIN_VK_U, shift:1, chars:"U"},
             nsIDOMKeyEvent.DOM_VK_U, "U", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:86, chars:"v"},
+    testKey({layout:"US", keyCode:WIN_VK_V, chars:"v"},
             nsIDOMKeyEvent.DOM_VK_V, "v", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:86, shift:1, chars:"V"},
+    testKey({layout:"US", keyCode:WIN_VK_V, shift:1, chars:"V"},
             nsIDOMKeyEvent.DOM_VK_V, "V", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:87, chars:"w"},
+    testKey({layout:"US", keyCode:WIN_VK_W, chars:"w"},
             nsIDOMKeyEvent.DOM_VK_W, "w", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:87, shift:1, chars:"W"},
+    testKey({layout:"US", keyCode:WIN_VK_W, shift:1, chars:"W"},
             nsIDOMKeyEvent.DOM_VK_W, "W", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:88, chars:"x"},
+    testKey({layout:"US", keyCode:WIN_VK_X, chars:"x"},
             nsIDOMKeyEvent.DOM_VK_X, "x", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:88, shift:1, chars:"X"},
+    testKey({layout:"US", keyCode:WIN_VK_X, shift:1, chars:"X"},
             nsIDOMKeyEvent.DOM_VK_X, "X", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:89, chars:"y"},
+    testKey({layout:"US", keyCode:WIN_VK_Y, chars:"y"},
             nsIDOMKeyEvent.DOM_VK_Y, "y", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:89, shift:1, chars:"Y"},
+    testKey({layout:"US", keyCode:WIN_VK_Y, shift:1, chars:"Y"},
             nsIDOMKeyEvent.DOM_VK_Y, "Y", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:90, chars:"z"},
+    testKey({layout:"US", keyCode:WIN_VK_Z, chars:"z"},
             nsIDOMKeyEvent.DOM_VK_Z, "z", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:90, shift:1, chars:"Z"},
+    testKey({layout:"US", keyCode:WIN_VK_Z, shift:1, chars:"Z"},
             nsIDOMKeyEvent.DOM_VK_Z, "Z", SHOULD_DELIVER_ALL);
 
     // Numeric
-    testKey({layout:"US", keyCode:48, chars:"0"},
+    testKey({layout:"US", keyCode:WIN_VK_0, chars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:48, shift:1, chars:")"},
+    testKey({layout:"US", keyCode:WIN_VK_0, shift:1, chars:")"},
             nsIDOMKeyEvent.DOM_VK_0, ")", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:49, chars:"1"},
+    testKey({layout:"US", keyCode:WIN_VK_1, chars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:49, shift:1, chars:"!"},
+    testKey({layout:"US", keyCode:WIN_VK_1, shift:1, chars:"!"},
             nsIDOMKeyEvent.DOM_VK_1, "!", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:50, chars:"2"},
+    testKey({layout:"US", keyCode:WIN_VK_2, chars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:50, shift:1, chars:"@"},
+    testKey({layout:"US", keyCode:WIN_VK_2, shift:1, chars:"@"},
             nsIDOMKeyEvent.DOM_VK_2, "@", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:51, chars:"3"},
+    testKey({layout:"US", keyCode:WIN_VK_3, chars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:51, shift:1, chars:"#"},
+    testKey({layout:"US", keyCode:WIN_VK_3, shift:1, chars:"#"},
             nsIDOMKeyEvent.DOM_VK_3, "#", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:52, chars:"4"},
+    testKey({layout:"US", keyCode:WIN_VK_4, chars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:52, shift:1, chars:"$"},
+    testKey({layout:"US", keyCode:WIN_VK_4, shift:1, chars:"$"},
             nsIDOMKeyEvent.DOM_VK_4, "$", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:53, chars:"5"},
+    testKey({layout:"US", keyCode:WIN_VK_5, chars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:53, shift:1, chars:"%"},
+    testKey({layout:"US", keyCode:WIN_VK_5, shift:1, chars:"%"},
             nsIDOMKeyEvent.DOM_VK_5, "%", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:54, chars:"6"},
+    testKey({layout:"US", keyCode:WIN_VK_6, chars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:54, shift:1, chars:"^"},
+    testKey({layout:"US", keyCode:WIN_VK_6, shift:1, chars:"^"},
             nsIDOMKeyEvent.DOM_VK_6, "^", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:55, chars:"7"},
+    testKey({layout:"US", keyCode:WIN_VK_7, chars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:55, shift:1, chars:"&"},
+    testKey({layout:"US", keyCode:WIN_VK_7, shift:1, chars:"&"},
             nsIDOMKeyEvent.DOM_VK_7, "&", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:56, chars:"8"},
+    testKey({layout:"US", keyCode:WIN_VK_8, chars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:56, shift:1, chars:"*"},
+    testKey({layout:"US", keyCode:WIN_VK_8, shift:1, chars:"*"},
             nsIDOMKeyEvent.DOM_VK_8, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:57, chars:"9"},
+    testKey({layout:"US", keyCode:WIN_VK_9, chars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:57, shift:1, chars:"("},
+    testKey({layout:"US", keyCode:WIN_VK_9, shift:1, chars:"("},
             nsIDOMKeyEvent.DOM_VK_9, "(", SHOULD_DELIVER_ALL);
 
     // OEM keys
-    testKey({layout:"US", keyCode:189, chars:"-"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_MINUS, chars:"-"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:189, shift:1, chars:"_"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_MINUS, shift:1, chars:"_"},
             nsIDOMKeyEvent.DOM_VK_HYPHEN_MINUS, "_", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:187, chars:"="},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_PLUS, chars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:187, shift:1, chars:"+"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_PLUS, shift:1, chars:"+"},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:219, chars:"["},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_4, chars:"["},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "[", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:219, shift:1, chars:"{"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_4, shift:1, chars:"{"},
             nsIDOMKeyEvent.DOM_VK_OPEN_BRACKET, "{", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:221, chars:"]"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_6, chars:"]"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "]", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:221, shift:1, chars:"}"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_6, shift:1, chars:"}"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_BRACKET, "}", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:186, chars:";"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, chars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:186, shift:1, chars:":"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, shift:1, chars:":"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ":", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:222, chars:"'"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_7, chars:"'"},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:222, shift:1, chars:"\""},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_7, shift:1, chars:"\""},
             nsIDOMKeyEvent.DOM_VK_QUOTE, "\"", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:220, chars:"\\"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_5, chars:"\\"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "\\", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:220, shift:1, chars:"|"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_5, shift:1, chars:"|"},
             nsIDOMKeyEvent.DOM_VK_BACK_SLASH, "|", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:188, chars:","},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_COMMA, chars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:188, shift:1, chars:"<"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_COMMA, shift:1, chars:"<"},
             nsIDOMKeyEvent.DOM_VK_COMMA, "<", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:190, chars:"."},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_PERIOD, chars:"."},
             nsIDOMKeyEvent.DOM_VK_PERIOD, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:190, shift:1, chars:">"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_PERIOD, shift:1, chars:">"},
             nsIDOMKeyEvent.DOM_VK_PERIOD, ">", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:191, chars:"/"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_2, chars:"/"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:191, shift:1, chars:"?"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_2, shift:1, chars:"?"},
             nsIDOMKeyEvent.DOM_VK_SLASH, "?", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:192, chars:"`"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_3, chars:"`"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "`", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:192, shift:1, chars:"~"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_3, shift:1, chars:"~"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "~", SHOULD_DELIVER_ALL);
 
     // Numpad
-    testKey({layout:"US", keyCode:96, numLock:1, chars:"0"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD0, numLock:1, chars:"0"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:97, numLock:1, chars:"1"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD1, numLock:1, chars:"1"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:98, numLock:1, chars:"2"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD2, numLock:1, chars:"2"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:99, numLock:1, chars:"3"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD3, numLock:1, chars:"3"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:100, numLock:1, chars:"4"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD4, numLock:1, chars:"4"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:101, numLock:1, chars:"5"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD5, numLock:1, chars:"5"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:102, numLock:1, chars:"6"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD6, numLock:1, chars:"6"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:103, numLock:1, chars:"7"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD7, numLock:1, chars:"7"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:104, numLock:1, chars:"8"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD8, numLock:1, chars:"8"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:105, numLock:1, chars:"9"},
+    testKey({layout:"US", keyCode:WIN_VK_NUMPAD9, numLock:1, chars:"9"},
             nsIDOMKeyEvent.DOM_VK_NUMPAD9, "9", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"US", keyCode:106, numLock:1, chars:"*"},
+    testKey({layout:"US", keyCode:WIN_VK_MULTIPLY, numLock:1, chars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:106, numLock:1, shift:1, chars:"*"},
+    testKey({layout:"US", keyCode:WIN_VK_MULTIPLY, numLock:1, shift:1, chars:"*"},
             nsIDOMKeyEvent.DOM_VK_MULTIPLY, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:107, numLock:1, chars:"+"},
+    testKey({layout:"US", keyCode:WIN_VK_ADD, numLock:1, chars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:107, numLock:1, shift:1, chars:"+"},
+    testKey({layout:"US", keyCode:WIN_VK_ADD, numLock:1, shift:1, chars:"+"},
             nsIDOMKeyEvent.DOM_VK_ADD, "+", SHOULD_DELIVER_ALL);
-    // XXX VK_SEPARATOR isn't used on Win7.  Even if we synthesize this,
-    //     keypress event isn't dispatched.
-    //testKey({layout:"US", keyCode:108, numLock:1, chars:""},
+    // VK_SEPARATOR is keycode for NEC's PC-98 series whose keyboard layout was
+    // different from current PC's keyboard layout and it cannot connect to
+    // current PC.  Note that even if we synthesize WM_KEYDOWN with
+    // VK_SEPARATOR, it doesn't work on Win7.
+    //testKey({layout:"US", keyCode:WIN_VK_SEPARATOR, numLock:1, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_SEPARATOR, "", SHOULD_DELIVER_ALL);
-    //testKey({layout:"US", keyCode:108, numLock:1, shift:1, chars:""},
+    //testKey({layout:"US", keyCode:WIN_VK_SEPARATOR, numLock:1, shift:1, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_SEPARATOR, "", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:109, numLock:1, chars:"-"},
+    testKey({layout:"US", keyCode:WIN_VK_SUBTRACT, numLock:1, chars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:109, numLock:1, shift:1, chars:"-"},
+    testKey({layout:"US", keyCode:WIN_VK_SUBTRACT, numLock:1, shift:1, chars:"-"},
             nsIDOMKeyEvent.DOM_VK_SUBTRACT, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:110, numLock:1, chars:"."},
+    testKey({layout:"US", keyCode:WIN_VK_DECIMAL, numLock:1, chars:"."},
             nsIDOMKeyEvent.DOM_VK_DECIMAL, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:110, numLock:1, shift:1, chars:"."},
+    testKey({layout:"US", keyCode:WIN_VK_DECIMAL, numLock:1, shift:1, chars:"."},
             nsIDOMKeyEvent.DOM_VK_DECIMAL, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:111, numLock:1, chars:"/"},
+    testKey({layout:"US", keyCode:WIN_VK_DIVIDE, numLock:1, chars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"US", keyCode:111, numLock:1, shift:1, chars:"/"},
+    testKey({layout:"US", keyCode:WIN_VK_DIVIDE, numLock:1, shift:1, chars:"/"},
             nsIDOMKeyEvent.DOM_VK_DIVIDE, "/", SHOULD_DELIVER_ALL);
     // XXX we cannot test numpad keys without NumLock becasue Windows
     // uses same keycode for Home, Up, PageUp, Left, Clear(5), Right,
     // End, Down, PageDown, Ins, Del of Numpad.
 
     // Even if widget receives unknown keycode, it should dispatch key events
     // whose keycode is 0 rather than native keycode.
-    testKey({layout:"US", keyCode:58, numLock:1, chars:""},
+    testKey({layout:"US", keyCode:0x3A, numLock:1, chars:""},
             0, "", SHOULD_DELIVER_ALL);
 
     // French
     // Numeric
-    testKey({layout:"French", keyCode:48, chars:"\u00E0"},
+    testKey({layout:"French", keyCode:WIN_VK_0, chars:"\u00E0"},
             nsIDOMKeyEvent.DOM_VK_0, "\u00E0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:48, shift:1, chars:"0"},
+    testKey({layout:"French", keyCode:WIN_VK_0, shift:1, chars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:49, chars:"&"},
+    testKey({layout:"French", keyCode:WIN_VK_1, chars:"&"},
             nsIDOMKeyEvent.DOM_VK_1, "&", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:49, shift:1, chars:"1"},
+    testKey({layout:"French", keyCode:WIN_VK_1, shift:1, chars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:50, chars:"\u00E9"},
+    testKey({layout:"French", keyCode:WIN_VK_2, chars:"\u00E9"},
             nsIDOMKeyEvent.DOM_VK_2, "\u00E9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:50, shift:1, chars:"2"},
+    testKey({layout:"French", keyCode:WIN_VK_2, shift:1, chars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:51, chars:"\""},
+    testKey({layout:"French", keyCode:WIN_VK_3, chars:"\""},
             nsIDOMKeyEvent.DOM_VK_3, "\"", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:51, shift:1, chars:"3"},
+    testKey({layout:"French", keyCode:WIN_VK_3, shift:1, chars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:52, chars:"'"},
+    testKey({layout:"French", keyCode:WIN_VK_4, chars:"'"},
             nsIDOMKeyEvent.DOM_VK_4, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:52, shift:1, chars:"4"},
+    testKey({layout:"French", keyCode:WIN_VK_4, shift:1, chars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:53, chars:"("},
+    testKey({layout:"French", keyCode:WIN_VK_5, chars:"("},
             nsIDOMKeyEvent.DOM_VK_5, "(", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:53, shift:1, chars:"5"},
+    testKey({layout:"French", keyCode:WIN_VK_5, shift:1, chars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:54, chars:"-"},
+    testKey({layout:"French", keyCode:WIN_VK_6, chars:"-"},
             nsIDOMKeyEvent.DOM_VK_6, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:54, shift:1, chars:"6"},
+    testKey({layout:"French", keyCode:WIN_VK_6, shift:1, chars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:55, chars:"\u00E8"},
+    testKey({layout:"French", keyCode:WIN_VK_7, chars:"\u00E8"},
             nsIDOMKeyEvent.DOM_VK_7, "\u00E8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:55, shift:1, chars:"7"},
+    testKey({layout:"French", keyCode:WIN_VK_7, shift:1, chars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:56, chars:"_"},
+    testKey({layout:"French", keyCode:WIN_VK_8, chars:"_"},
             nsIDOMKeyEvent.DOM_VK_8, "_", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:56, shift:1, chars:"8"},
+    testKey({layout:"French", keyCode:WIN_VK_8, shift:1, chars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:57, chars:"\u00E7"},
+    testKey({layout:"French", keyCode:WIN_VK_9, chars:"\u00E7"},
             nsIDOMKeyEvent.DOM_VK_9, "\u00E7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:57, shift:1, chars:"9"},
+    testKey({layout:"French", keyCode:WIN_VK_9, shift:1, chars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
 
     // Numeric with ShiftLock
-    testKey({layout:"French", keyCode:48, capsLock:1, chars:"0"},
+    testKey({layout:"French", keyCode:WIN_VK_0, capsLock:1, chars:"0"},
             nsIDOMKeyEvent.DOM_VK_0, "0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:48, capsLock:1, shift:1, chars:"\u00E0"},
+    testKey({layout:"French", keyCode:WIN_VK_0, capsLock:1, shift:1, chars:"\u00E0"},
             nsIDOMKeyEvent.DOM_VK_0, "\u00E0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:49, capsLock:1, chars:"1"},
+    testKey({layout:"French", keyCode:WIN_VK_1, capsLock:1, chars:"1"},
             nsIDOMKeyEvent.DOM_VK_1, "1", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:49, capsLock:1, shift:1, chars:"&"},
+    testKey({layout:"French", keyCode:WIN_VK_1, capsLock:1, shift:1, chars:"&"},
             nsIDOMKeyEvent.DOM_VK_1, "&", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:50, capsLock:1, chars:"2"},
+    testKey({layout:"French", keyCode:WIN_VK_2, capsLock:1, chars:"2"},
             nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:50, capsLock:1, shift:1, chars:"\u00E9"},
+    testKey({layout:"French", keyCode:WIN_VK_2, capsLock:1, shift:1, chars:"\u00E9"},
             nsIDOMKeyEvent.DOM_VK_2, "\u00E9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:51, capsLock:1, chars:"3"},
+    testKey({layout:"French", keyCode:WIN_VK_3, capsLock:1, chars:"3"},
             nsIDOMKeyEvent.DOM_VK_3, "3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:51, capsLock:1, shift:1, chars:"\""},
+    testKey({layout:"French", keyCode:WIN_VK_3, capsLock:1, shift:1, chars:"\""},
             nsIDOMKeyEvent.DOM_VK_3, "\"", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:52, capsLock:1, chars:"4"},
+    testKey({layout:"French", keyCode:WIN_VK_4, capsLock:1, chars:"4"},
             nsIDOMKeyEvent.DOM_VK_4, "4", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:52, capsLock:1, shift:1, chars:"'"},
+    testKey({layout:"French", keyCode:WIN_VK_4, capsLock:1, shift:1, chars:"'"},
             nsIDOMKeyEvent.DOM_VK_4, "'", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:53, capsLock:1, chars:"5"},
+    testKey({layout:"French", keyCode:WIN_VK_5, capsLock:1, chars:"5"},
             nsIDOMKeyEvent.DOM_VK_5, "5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:53, capsLock:1, shift:1, chars:"("},
+    testKey({layout:"French", keyCode:WIN_VK_5, capsLock:1, shift:1, chars:"("},
             nsIDOMKeyEvent.DOM_VK_5, "(", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:54, capsLock:1, chars:"6"},
+    testKey({layout:"French", keyCode:WIN_VK_6, capsLock:1, chars:"6"},
             nsIDOMKeyEvent.DOM_VK_6, "6", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:54, capsLock:1, shift:1, chars:"-"},
+    testKey({layout:"French", keyCode:WIN_VK_6, capsLock:1, shift:1, chars:"-"},
             nsIDOMKeyEvent.DOM_VK_6, "-", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:55, capsLock:1, chars:"7"},
+    testKey({layout:"French", keyCode:WIN_VK_7, capsLock:1, chars:"7"},
             nsIDOMKeyEvent.DOM_VK_7, "7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:55, capsLock:1, shift:1, chars:"\u00E8"},
+    testKey({layout:"French", keyCode:WIN_VK_7, capsLock:1, shift:1, chars:"\u00E8"},
             nsIDOMKeyEvent.DOM_VK_7, "\u00E8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:56, capsLock:1, chars:"8"},
+    testKey({layout:"French", keyCode:WIN_VK_8, capsLock:1, chars:"8"},
             nsIDOMKeyEvent.DOM_VK_8, "8", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:56, capsLock:1, shift:1, chars:"_"},
+    testKey({layout:"French", keyCode:WIN_VK_8, capsLock:1, shift:1, chars:"_"},
             nsIDOMKeyEvent.DOM_VK_8, "_", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:57, capsLock:1, chars:"9"},
+    testKey({layout:"French", keyCode:WIN_VK_9, capsLock:1, chars:"9"},
             nsIDOMKeyEvent.DOM_VK_9, "9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:57, capsLock:1, shift:1, chars:"\u00E7"},
+    testKey({layout:"French", keyCode:WIN_VK_9, capsLock:1, shift:1, chars:"\u00E7"},
             nsIDOMKeyEvent.DOM_VK_9, "\u00E7", SHOULD_DELIVER_ALL);
 
     // OEM keys
-    testKey({layout:"French", keyCode:222, chars:"\u00B2"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_7, chars:"\u00B2"},
             0, "\u00B2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:222, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_7, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:219, chars:")"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_4, chars:")"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, ")", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:219, shift:1, chars:"\u00B0"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_4, shift:1, chars:"\u00B0"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, "\u00B0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:187, chars:"="},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PLUS, chars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:187, shift:1, chars:"+"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PLUS, shift:1, chars:"+"},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "+", SHOULD_DELIVER_ALL);
-    //testKey({layout:"French", keyCode:221, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
-    //testKey({layout:"French", keyCode:221, shift:1, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_ALL); // Dead-key
-    testKey({layout:"French", keyCode:186, chars:"$"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_1, chars:"$"},
             nsIDOMKeyEvent.DOM_VK_DOLLAR, "$", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:186, shift:1, chars:"\u00A3"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_1, shift:1, chars:"\u00A3"},
             nsIDOMKeyEvent.DOM_VK_DOLLAR, "\u00A3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:192, chars:"\u00F9"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_3, chars:"\u00F9"},
             nsIDOMKeyEvent.DOM_VK_PERCENT, "\u00F9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:192, shift:1, chars:"%"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_3, shift:1, chars:"%"},
             nsIDOMKeyEvent.DOM_VK_PERCENT, "%", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:220, chars:"*"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_5, chars:"*"},
             nsIDOMKeyEvent.DOM_VK_ASTERISK, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:220, shift:1, chars:"\u00B5"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_5, shift:1, chars:"\u00B5"},
             nsIDOMKeyEvent.DOM_VK_ASTERISK, "\u00B5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:226, chars:"<"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_102, chars:"<"},
             nsIDOMKeyEvent.DOM_VK_LESS_THAN, "<", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:226, shift:1, chars:">"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_102, shift:1, chars:">"},
             nsIDOMKeyEvent.DOM_VK_LESS_THAN, ">", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:188, chars:","},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_COMMA, chars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:188, shift:1, chars:"?"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_COMMA, shift:1, chars:"?"},
             nsIDOMKeyEvent.DOM_VK_COMMA, "?", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:190, chars:";"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PERIOD, chars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:190, shift:1, chars:"."},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PERIOD, shift:1, chars:"."},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:191, chars:":"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_2, chars:":"},
             nsIDOMKeyEvent.DOM_VK_COLON, ":", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:191, shift:1, chars:"/"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_2, shift:1, chars:"/"},
             nsIDOMKeyEvent.DOM_VK_COLON, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:223, chars:"!"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_8, chars:"!"},
             nsIDOMKeyEvent.DOM_VK_EXCLAMATION, "!", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:223, shift:1, chars:"\u00A7"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_8, shift:1, chars:"\u00A7"},
             nsIDOMKeyEvent.DOM_VK_EXCLAMATION, "\u00A7", SHOULD_DELIVER_ALL);
 
     // OEM keys with ShiftLock
-    testKey({layout:"French", keyCode:222, capsLock:1, chars:"\u00B2"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_7, capsLock:1, chars:"\u00B2"},
             0, "\u00B2", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:222, capsLock:1, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_7, capsLock:1, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:219, capsLock:1, chars:"\u00B0"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_4, capsLock:1, chars:"\u00B0"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, "\u00B0", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:219, capsLock:1, shift:1, chars:")"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_4, capsLock:1, shift:1, chars:")"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, ")", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:187, capsLock:1, chars:"+"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PLUS, capsLock:1, chars:"+"},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "+", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:187, capsLock:1, shift:1, chars:"="},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PLUS, capsLock:1, shift:1, chars:"="},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
-    //testKey({layout:"French", keyCode:221, capsLock:1, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_OEM_6, capsLock:1, chars:""},
     //        0, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
-    //testKey({layout:"French", keyCode:221, capsLock:1, shift:1, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_OEM_6, capsLock:1, shift:1, chars:""},
     //        0, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
-    testKey({layout:"French", keyCode:186, capsLock:1, chars:"\u00A3"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_1, capsLock:1, chars:"\u00A3"},
             nsIDOMKeyEvent.DOM_VK_DOLLAR, "\u00A3", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:186, capsLock:1, shift:1, chars:"$"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_1, capsLock:1, shift:1, chars:"$"},
             nsIDOMKeyEvent.DOM_VK_DOLLAR, "$", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:192, capsLock:1, chars:"%"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_3, capsLock:1, chars:"%"},
             nsIDOMKeyEvent.DOM_VK_PERCENT, "%", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:192, capsLock:1, shift:1, chars:"\u00F9"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_3, capsLock:1, shift:1, chars:"\u00F9"},
             nsIDOMKeyEvent.DOM_VK_PERCENT, "\u00F9", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:220, capsLock:1, chars:"\u00B5"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_5, capsLock:1, chars:"\u00B5"},
             nsIDOMKeyEvent.DOM_VK_ASTERISK, "\u00B5", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:220, capsLock:1, shift:1, chars:"*"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_5, capsLock:1, shift:1, chars:"*"},
             nsIDOMKeyEvent.DOM_VK_ASTERISK, "*", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:226, capsLock:1, chars:"<"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_102, capsLock:1, chars:"<"},
             nsIDOMKeyEvent.DOM_VK_LESS_THAN, "<", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:226, capsLock:1, shift:1, chars:">"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_102, capsLock:1, shift:1, chars:">"},
             nsIDOMKeyEvent.DOM_VK_LESS_THAN, ">", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:188, capsLock:1, chars:"?"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_COMMA, capsLock:1, chars:"?"},
             nsIDOMKeyEvent.DOM_VK_COMMA, "?", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:188, capsLock:1, shift:1, chars:","},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_COMMA, capsLock:1, shift:1, chars:","},
             nsIDOMKeyEvent.DOM_VK_COMMA, ",", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:190, capsLock:1, chars:"."},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PERIOD, capsLock:1, chars:"."},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ".", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:190, capsLock:1, shift:1, chars:";"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PERIOD, capsLock:1, shift:1, chars:";"},
             nsIDOMKeyEvent.DOM_VK_SEMICOLON, ";", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:191, capsLock:1, chars:"/"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_2, capsLock:1, chars:"/"},
             nsIDOMKeyEvent.DOM_VK_COLON, "/", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:191, capsLock:1, shift:1, chars:":"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_2, capsLock:1, shift:1, chars:":"},
             nsIDOMKeyEvent.DOM_VK_COLON, ":", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:223, capsLock:1, chars:"\u00A7"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_8, capsLock:1, chars:"\u00A7"},
             nsIDOMKeyEvent.DOM_VK_EXCLAMATION, "\u00A7", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:223, capsLock:1, shift:1, chars:"!"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_8, capsLock:1, shift:1, chars:"!"},
             nsIDOMKeyEvent.DOM_VK_EXCLAMATION, "!", SHOULD_DELIVER_ALL);
 
     // AltGr
-    testKey({layout:"French", keyCode:48, altGr:1, chars:"@"},
+    testKey({layout:"French", keyCode:WIN_VK_0, altGr:1, chars:"@"},
             nsIDOMKeyEvent.DOM_VK_0, "@", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:49, altGr:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_1, altGr:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_1, "&", SHOULD_DELIVER_ALL_BUT_NOT_CAUSE_INPUT);
-    //testKey({layout:"French", keyCode:50, altGr:1, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_2, altGr:1, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_2, "2", SHOULD_DELIVER_ALL); // Dead-key
-    testKey({layout:"French", keyCode:51, altGr:1, chars:"#"},
+    testKey({layout:"French", keyCode:WIN_VK_3, altGr:1, chars:"#"},
             nsIDOMKeyEvent.DOM_VK_3, "#", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:52, altGr:1, chars:"{"},
+    testKey({layout:"French", keyCode:WIN_VK_4, altGr:1, chars:"{"},
             nsIDOMKeyEvent.DOM_VK_4, "{", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:53, altGr:1, chars:"["},
+    testKey({layout:"French", keyCode:WIN_VK_5, altGr:1, chars:"["},
             nsIDOMKeyEvent.DOM_VK_5, "[", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:54, altGr:1, chars:"|"},
+    testKey({layout:"French", keyCode:WIN_VK_6, altGr:1, chars:"|"},
             nsIDOMKeyEvent.DOM_VK_6, "|", SHOULD_DELIVER_ALL);
-    //testKey({layout:"French", keyCode:55, altGr:1, chars:""},
+    //testKey({layout:"French", keyCode:WIN_VK_7, altGr:1, chars:""},
     //        nsIDOMKeyEvent.DOM_VK_7, "", SHOULD_DELIVER_ALL); // Dead-key
-    testKey({layout:"French", keyCode:56, altGr:1, chars:"\\"},
+    testKey({layout:"French", keyCode:WIN_VK_8, altGr:1, chars:"\\"},
             nsIDOMKeyEvent.DOM_VK_8, "\\", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:57, altGr:1, chars:"^"},
+    testKey({layout:"French", keyCode:WIN_VK_9, altGr:1, chars:"^"},
             nsIDOMKeyEvent.DOM_VK_9, "^", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:219, altGr:1, chars:"]"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_4, altGr:1, chars:"]"},
             nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, "]", SHOULD_DELIVER_ALL);
-    testKey({layout:"French", keyCode:187, altGr:1, chars:"}"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_PLUS, altGr:1, chars:"}"},
             nsIDOMKeyEvent.DOM_VK_EQUALS, "}", SHOULD_DELIVER_ALL);
 
     // German
-    testKey({layout:"German", keyCode:191, chars:"#"},
+    testKey({layout:"German", keyCode:WIN_VK_OEM_2, chars:"#"},
             nsIDOMKeyEvent.DOM_VK_HASH, "#", SHOULD_DELIVER_ALL);
-    testKey({layout:"German", keyCode:191, shift:1, chars:"'"},
+    testKey({layout:"German", keyCode:WIN_VK_OEM_2, shift:1, chars:"'"},
             nsIDOMKeyEvent.DOM_VK_HASH, "'", SHOULD_DELIVER_ALL);
 
     // Norwegian
-    testKey({layout:"Norwegian", keyCode:220, chars:"|"},
+    testKey({layout:"Norwegian", keyCode:WIN_VK_OEM_5, chars:"|"},
             nsIDOMKeyEvent.DOM_VK_PIPE, "|", SHOULD_DELIVER_ALL);
-    testKey({layout:"Norwegian", keyCode:220, shift:1, chars:"\u00A7"},
+    testKey({layout:"Norwegian", keyCode:WIN_VK_OEM_5, shift:1, chars:"\u00A7"},
             nsIDOMKeyEvent.DOM_VK_PIPE, "\u00A7", SHOULD_DELIVER_ALL);
 
     // Dead keys on any layouts
-    testKey({layout:"French", keyCode:221, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:221, chars:"^^"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:"^^"},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "^^", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:65, chars:"\u00E2"},
+    testKey({layout:"French", keyCode:WIN_VK_A, chars:"\u00E2"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E2", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:65, shift:1, chars:"\u00C2"},
+    testKey({layout:"French", keyCode:WIN_VK_A, shift:1, chars:"\u00C2"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C2", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:81, chars:"^q"},
+    testKey({layout:"French", keyCode:WIN_VK_Q, chars:"^q"},
             nsIDOMKeyEvent.DOM_VK_Q, "^q", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:221, shift:1, chars:"\u00A8\u00A8"},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:"\u00A8\u00A8"},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "\u00A8\u00A8", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:65, shift:1, chars:"\u00C4"},
+    testKey({layout:"French", keyCode:WIN_VK_A, shift:1, chars:"\u00C4"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C4", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:65, chars:"\u00E4"},
+    testKey({layout:"French", keyCode:WIN_VK_A, chars:"\u00E4"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E4", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"French", keyCode:221, shift:1, chars:""},
+    testKey({layout:"French", keyCode:WIN_VK_OEM_6, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"French", keyCode:81, shift:1, chars:"\u00A8Q"},
+    testKey({layout:"French", keyCode:WIN_VK_Q, shift:1, chars:"\u00A8Q"},
             nsIDOMKeyEvent.DOM_VK_Q, "\u00A8Q", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:186, chars:"``"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, chars:"``"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "``", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, chars:"\u00E0"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, chars:"\u00E0"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E0", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C0"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, shift:1, chars:"\u00C0"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C0", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:81, chars:"`q"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_Q, chars:"`q"},
             nsIDOMKeyEvent.DOM_VK_Q, "`q", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:186, shift:1, chars:"^^"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, shift:1, chars:"^^"},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "^^", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C2"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, shift:1, chars:"\u00C2"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C2", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, chars:"\u00E2"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, chars:"\u00E2"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E2", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_1, shift:1, chars:""},
             nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:81, shift:1, chars:"^Q"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_Q, shift:1, chars:"^Q"},
             nsIDOMKeyEvent.DOM_VK_Q, "^Q", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:222, chars:"\u00B4\u00B4"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, chars:"\u00B4\u00B4"},
             0, "\u00B4\u00B4", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, chars:"\u00E1"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, chars:"\u00E1"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E1", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C1"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, shift:1, chars:"\u00C1"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C1", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:81, chars:"\u00B4q"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_Q, chars:"\u00B4q"},
             nsIDOMKeyEvent.DOM_VK_Q, "\u00B4q", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:222, shift:1, chars:"\u00A8\u00A8"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, shift:1, chars:"\u00A8\u00A8"},
             0, "\u00A8\u00A8", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C4"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, shift:1, chars:"\u00C4"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00C4", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:65, chars:"\u00E4"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_A, chars:"\u00E4"},
             nsIDOMKeyEvent.DOM_VK_A, "\u00E4", SHOULD_DELIVER_ALL);
 
-    testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+    testKey({layout:"Spanish", keyCode:WIN_VK_OEM_7, shift:1, chars:""},
             0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
-    testKey({layout:"Spanish", keyCode:81, shift:1, chars:"\u00A8Q"},
+    testKey({layout:"Spanish", keyCode:WIN_VK_Q, shift:1, chars:"\u00A8Q"},
             nsIDOMKeyEvent.DOM_VK_Q, "\u00A8Q", SHOULD_DELIVER_ALL);
   }
 
   document.removeEventListener("keydown",  onKeyEvent, false);
   document.removeEventListener("keypress", onKeyEvent, false);
   document.removeEventListener("keyup",    onKeyEvent, false);
 }
 
@@ -2072,87 +2076,87 @@ function runAccessKeyTests()
     is(activationCount, aShouldActivate ? 1 : 0, name + ", activating '" + aAccessKey + "'");
   }
 
   button.addEventListener("click", onClick, false);
   
   // These tests have to be per-plaform.
   if (IS_MAC) {
     // Basic sanity checks
-    testKey({layout:"US", keyCode:0, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, chars:"a", unmodifiedChars:"a"},
             "a", false);
-    testKey({layout:"US", keyCode:0, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
             "a", false);
-    testKey({layout:"US", keyCode:0, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, chars:"\u0001", unmodifiedChars:"a"},
             "A", false);
 
     // Shift-ctrl does not activate accesskeys
-    testKey({layout:"US", keyCode:0, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
             "a", false);
-    testKey({layout:"US", keyCode:0, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, shift:1, chars:"\u0001", unmodifiedChars:"A"},
             "A", false);
     // Alt-ctrl activate accesskeys
-    testKey({layout:"US", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"a"},
             "a", true);
-    testKey({layout:"US", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"a"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"a"},
             "A", true);
             
     // Greek layout can activate a Latin accesskey
-    testKey({layout:"Greek", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             "a", true);
-    testKey({layout:"Greek", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             "A", true);
     // ... and a Greek accesskey!
-    testKey({layout:"Greek", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             "\u03b1", true);
-    testKey({layout:"Greek", keyCode:0, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
+    testKey({layout:"Greek", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"\u0001", unmodifiedChars:"\u03b1"},
             "\u0391", true);
 
     // bug 359638
-    testKey({layout:"US", keyCode:47, ctrl:1, alt:1, chars:".", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Period, ctrl:1, alt:1, chars:".", unmodifiedChars:"."},
             ".", true);
 
     // German (KCHR/KeyTranslate case)
-    testKey({layout:"German", keyCode:0, ctrl:1, alt:1, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"a", unmodifiedChars:"a"},
             "a", true);
-    testKey({layout:"German", keyCode:0, ctrl:1, alt:1, chars:"a", unmodifiedChars:"a"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_A, ctrl:1, alt:1, chars:"a", unmodifiedChars:"a"},
             "A", true);
-    testKey({layout:"German", keyCode:33, ctrl:1, alt:1, chars:"\u00fc", unmodifiedChars:"\u00fc"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_LeftBracket, ctrl:1, alt:1, chars:"\u00fc", unmodifiedChars:"\u00fc"},
             "\u00fc", true);
-    testKey({layout:"German", keyCode:33, ctrl:1, alt:1, chars:"\u00fc", unmodifiedChars:"\u00fc"},
+    testKey({layout:"German", keyCode:MAC_VK_ANSI_LeftBracket, ctrl:1, alt:1, chars:"\u00fc", unmodifiedChars:"\u00fc"},
             "\u00dc", true);
   }
   else if (IS_WIN) {
     // Basic sanity checks
-    testKey({layout:"US", keyCode:65, chars:"a"},
+    testKey({layout:"US", keyCode:WIN_VK_A, chars:"a"},
             "a", false);
-    testKey({layout:"US", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "a", true);
-    testKey({layout:"US", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "A", true);
 
     // shift-alt-ctrl does not activate accesskeys
-    testKey({layout:"US", keyCode:65, ctrl:1, shift:1, alt:1, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_A, ctrl:1, shift:1, alt:1, chars:""},
             "a", false);
-    testKey({layout:"US", keyCode:65, ctrl:1, shift:1, alt:1, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_A, ctrl:1, shift:1, alt:1, chars:""},
             "A", false);
 
     // Greek layout can activate a Latin accesskey
-    testKey({layout:"Greek", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "a", true);
-    testKey({layout:"Greek", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "A", true);
     // ... and a Greek accesskey!
-    testKey({layout:"Greek", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "\u03b1", true);
-    testKey({layout:"Greek", keyCode:65, shift:1, alt:1, chars:"A"},
+    testKey({layout:"Greek", keyCode:WIN_VK_A, shift:1, alt:1, chars:"A"},
             "\u0391", true);
 
     // bug 359638
-    testKey({layout:"US", keyCode:190, shift:1, alt:1, chars:".", unmodifiedChars:"."},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_PERIOD, shift:1, alt:1, chars:".", unmodifiedChars:"."},
             ".", true);
   }
   
   button.removeEventListener("click", onClick, false);
 }
 
 function runXULKeyTests()
 {
@@ -2165,101 +2169,101 @@ function runXULKeyTests()
 
     var name = eventToString(aEvent);
 
     is(elem.activeCount, aShouldActivate ? 1 : 0,
        name + " activating " + aElem);
   }
 
   if (IS_MAC) {
-    testKey({layout:"US", keyCode:41, command:1, chars:";", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, command:1, chars:";", unmodifiedChars:";"},
             "unshiftedKey", true);
-    testKey({layout:"US", keyCode:41, command:1, chars:";", unmodifiedChars:";"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, command:1, chars:";", unmodifiedChars:";"},
             "shiftedKey", false);
-    testKey({layout:"US", keyCode:41, command:1, shift:1, chars:";", unmodifiedChars:":"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, command:1, shift:1, chars:";", unmodifiedChars:":"},
             "shiftedKey", true);
-    testKey({layout:"US", keyCode:41, command:1, shift:1, chars:";", unmodifiedChars:":"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_Semicolon, command:1, shift:1, chars:";", unmodifiedChars:":"},
             "unshiftedKey", false);
   }
   else if (IS_WIN) {
-    testKey({layout:"US", keyCode:186, ctrl:1, chars:";"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, ctrl:1, chars:";"},
             "unshiftedKey", true);
-    testKey({layout:"US", keyCode:186, ctrl:1, chars:";"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, ctrl:1, chars:";"},
             "shiftedKey", false);
-    testKey({layout:"US", keyCode:186, ctrl:1, shift:1, chars:";"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, ctrl:1, shift:1, chars:";"},
             "shiftedKey", true);
-    testKey({layout:"US", keyCode:186, ctrl:1, shift:1, chars:";"},
+    testKey({layout:"US", keyCode:WIN_VK_OEM_1, ctrl:1, shift:1, chars:";"},
             "unshiftedKey", false);
   }
 
   keyElems = ["commandOptionF"];
 
   // 429160
   if (IS_MAC) {
-    testKey({layout:"US", keyCode:3, command:1, alt:1, chars:"\u0192", unmodifiedChars:"f"},
+    testKey({layout:"US", keyCode:MAC_VK_ANSI_F, command:1, alt:1, chars:"\u0192", unmodifiedChars:"f"},
             "commandOptionF", true);
   }
   else if (IS_WIN) {
-    testKey({layout:"US", keyCode:70, ctrl:1, alt:1, chars:"\u0006"},
+    testKey({layout:"US", keyCode:WIN_VK_F, ctrl:1, alt:1, chars:"\u0006"},
             "commandOptionF", true);
   }
   
   // 432112
   if (IS_MAC) {
-    testKey({layout:"Swedish", keyCode:27, command:1, shift:1, chars:"+", unmodifiedChars:"?"},
+    testKey({layout:"Swedish", keyCode:MAC_VK_ANSI_Minus, command:1, shift:1, chars:"+", unmodifiedChars:"?"},
             "question", true);
   }
   else if (IS_WIN) {
-    testKey({layout:"Swedish", keyCode:187, ctrl:1, shift:1, chars:""},
+    testKey({layout:"Swedish", keyCode:WIN_VK_OEM_PLUS, ctrl:1, shift:1, chars:""},
             "question", true);
-    testKey({layout:"Swedish", keyCode:187, ctrl:1, chars:""},
+    testKey({layout:"Swedish", keyCode:WIN_VK_OEM_PLUS, ctrl:1, chars:""},
             "question", false);
   }
 
   // bug 433192
   if (IS_WIN) {
-    testKey({layout:"US", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"US", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "unshiftedX", true);
-    testKey({layout:"US", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"US", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "shiftedX", false);
-    testKey({layout:"US", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"US", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "unshiftedX", false);
-    testKey({layout:"US", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"US", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "shiftedX", true);
-    testKey({layout:"Arabic", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"Arabic", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "unshiftedX", true);
-    testKey({layout:"Arabic", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"Arabic", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "shiftedX", false);
-    testKey({layout:"Arabic", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"Arabic", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "unshiftedX", false);
-    testKey({layout:"Arabic", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"Arabic", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "shiftedX", true);
-    testKey({layout:"Hebrew", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"Hebrew", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "unshiftedX", true);
-    testKey({layout:"Hebrew", keyCode:88, ctrl:1, chars:"\u0018"},
+    testKey({layout:"Hebrew", keyCode:WIN_VK_X, ctrl:1, chars:"\u0018"},
             "shiftedX", false);
-    testKey({layout:"Hebrew", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"Hebrew", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "unshiftedX", false);
-    testKey({layout:"Hebrew", keyCode:88, ctrl:1, shift:1, chars:"\u0018"},
+    testKey({layout:"Hebrew", keyCode:WIN_VK_X, ctrl:1, shift:1, chars:"\u0018"},
             "shiftedX", true);
-    testKey({layout:"Japanese", keyCode:187, ctrl:1, chars:""},
+    testKey({layout:"Japanese", keyCode:WIN_VK_OEM_PLUS, ctrl:1, chars:""},
             "unshiftedPlus", false);
-    testKey({layout:"Japanese", keyCode:187, ctrl:1, shift:1, chars:""},
+    testKey({layout:"Japanese", keyCode:WIN_VK_OEM_PLUS, ctrl:1, shift:1, chars:""},
             "unshiftedPlus", true);
   }
 
   // bug 759346
   if (IS_WIN) {
-    testKey({layout:"Thai", keyCode:49, ctrl:1, chars:""},
+    testKey({layout:"Thai", keyCode:WIN_VK_1, ctrl:1, chars:""},
             "unshiftedPlus", false);
-    testKey({layout:"Thai", keyCode:49, ctrl:1, shift:1, chars:""},
+    testKey({layout:"Thai", keyCode:WIN_VK_1, ctrl:1, shift:1, chars:""},
             "unshiftedPlus", true);
-    testKey({layout:"Thai", keyCode:187, ctrl:1, chars:""},
+    testKey({layout:"Thai", keyCode:WIN_VK_OEM_PLUS, ctrl:1, chars:""},
             "unshiftedPlus", true);
-    testKey({layout:"Thai", keyCode:187, ctrl:1, shift:1, chars:""},
+    testKey({layout:"Thai", keyCode:WIN_VK_OEM_PLUS, ctrl:1, shift:1, chars:""},
             "unshiftedPlus", false);
   }
 }
 
 function runTextInputTests()
 {
   var textbox = document.getElementById("textbox");
 
@@ -2271,36 +2275,36 @@ function runTextInputTests()
 
     var name = eventToString(aEvent);
 
     is(textbox.value, aExpectText, name + " does not input correct text.");
   }
 
   if (IS_WIN) {
     // Basic sanity checks
-    testKey({layout:"US", keyCode:65, chars:"a"},
+    testKey({layout:"US", keyCode:WIN_VK_A, chars:"a"},
             "a");
-    testKey({layout:"US", keyCode:65, shift:1, chars:"A"},
+    testKey({layout:"US", keyCode:WIN_VK_A, shift:1, chars:"A"},
             "A");
     // When Ctrl+Alt are pressed, any text should not be inputted.
-    testKey({layout:"US", keyCode:65, ctrl:1, alt:1, chars:""},
+    testKey({layout:"US", keyCode:WIN_VK_A, ctrl:1, alt:1, chars:""},
             "");
 
     // Lithuanian AltGr should be consumed at 9/0 keys pressed
-    testKey({layout:"Lithuanian", keyCode:56, chars:"\u016B"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_8, chars:"\u016B"},
             "\u016B");
-    testKey({layout:"Lithuanian", keyCode:57, chars:"9"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_9, chars:"9"},
             "9");
-    testKey({layout:"Lithuanian", keyCode:48, chars:"0"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_0, chars:"0"},
             "0");
-    testKey({layout:"Lithuanian", keyCode:56, ctrl:1, alt:1, chars:"8"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_8, ctrl:1, alt:1, chars:"8"},
             "8");
-    testKey({layout:"Lithuanian", keyCode:57, ctrl:1, alt:1, chars:"9"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_9, ctrl:1, alt:1, chars:"9"},
             "9");
-    testKey({layout:"Lithuanian", keyCode:48, ctrl:1, alt:1, chars:"0"},
+    testKey({layout:"Lithuanian", keyCode:WIN_VK_0, ctrl:1, alt:1, chars:"0"},
             "0");
   }
   else
     todo(false, "runTextInputTests() checks Windows only");
 
   // XXX We need to move focus for canceling to search the autocomplete
   // result. If we don't do here, Fx will crash at end of this tests.
   document.getElementById("button").focus();
--- a/widget/tests/test_plugin_input_event.html
+++ b/widget/tests/test_plugin_input_event.html
@@ -1,16 +1,18 @@
 <!DOCTYPE HTML>
 <html>
 <head>
   <title>Test for plugin input event</title>
   <script type="text/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
   <script type="text/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+  <script type="text/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/NativeKeyCodes.js"></script>
   <link rel="stylesheet" type="text/css"
           href="chrome://mochikit/content/tests/SimpleTest/test.css" />
 </head>
 <body>
 <p id="display">
   <embed id="plugin" type="application/x-test" wmode="opaque">
 </p>
 <div id="content" style="display: none">
@@ -32,27 +34,27 @@ function doTest() {
   gPlugin.focus();
 
   is(gUtils.IMEStatus, gUtils.IME_STATUS_PLUGIN,
      "Plugin failed to get focus");
 
   is(gPlugin.getLastKeyText(), "", "Must be empty before first key test");
 
   gUtils.sendNativeKeyEvent(0x409 /* US */,
-                            0x41, 0,
+                            WIN_VK_A, 0,
                             "a", "a");
   is(gPlugin.getLastKeyText(), "a", "Invalid character was inputted");
 
   gUtils.sendNativeKeyEvent(0x407 /* German */,
-                            0xBB, 0,
+                            WIN_VK_OEM_PLUS, 0,
                             "+", "+");
   is(gPlugin.getLastKeyText(), "+", "Invalid character was inputted");
 
   gUtils.sendNativeKeyEvent(0x407 /* German */,
-                            0xBB, 0x1400 /* Ctrl + Alt (AltGr) */,
+                            WIN_VK_OEM_PLUS, 0x1400 /* Ctrl + Alt (AltGr) */,
                             "~", "+");
   is(gPlugin.getLastKeyText(), "~", "Invalid character was inputted");
 
   SimpleTest.finish();
 }
 
 SimpleTest.waitForFocus(doTest);