Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(802)

Unified Diff: telemetry/telemetry/internal/actions/key_event.py

Issue 2162963002: [polymer] Merge of master into polymer10-migration (Closed) Base URL: git@github.com:catapult-project/catapult.git@polymer10-migration
Patch Set: Merge polymer10-migration int polymer10-merge Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: telemetry/telemetry/internal/actions/key_event.py
diff --git a/telemetry/telemetry/internal/actions/key_event.py b/telemetry/telemetry/internal/actions/key_event.py
new file mode 100644
index 0000000000000000000000000000000000000000..1558607f0e3d5df23e7e3a0fb0d81cdacfe098bc
--- /dev/null
+++ b/telemetry/telemetry/internal/actions/key_event.py
@@ -0,0 +1,96 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import string
+
+from telemetry.internal.actions import page_action
+
+
+# Map from DOM key values
+# (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) to
+# Windows virtual key codes
+# (https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/WindowsKeyboardCodes.h)
+# and their printed representations (if available).
+_KEY_MAP = {}
+
+def _AddSpecialKey(key, windows_virtual_key_code, text=None):
+ assert key not in _KEY_MAP, 'Duplicate key: %s' % key
+ _KEY_MAP[key] = (windows_virtual_key_code, text)
+
+def _AddRegularKey(keys, windows_virtual_key_code):
+ for k in keys:
+ assert k not in _KEY_MAP, 'Duplicate key: %s' % k
+ _KEY_MAP[k] = (windows_virtual_key_code, k)
+
+_AddSpecialKey('PageUp', 0x21)
+_AddSpecialKey('PageDown', 0x22)
+_AddSpecialKey('End', 0x23)
+_AddSpecialKey('Home', 0x24)
+_AddSpecialKey('ArrowLeft', 0x25)
+_AddSpecialKey('ArrowUp', 0x26)
+_AddSpecialKey('ArrowRight', 0x27)
+_AddSpecialKey('ArrowDown', 0x28)
+
+_AddSpecialKey('Return', 0x0D, text='\x0D')
+_AddSpecialKey('Delete', 0x2E, text='\x7F')
+_AddSpecialKey('Backspace', 0x08, text='\x08')
+
+# Letter keys.
+for c in string.ascii_uppercase:
+ _AddRegularKey([c, c.lower()], ord(c))
+
+# Symbol keys.
+_AddRegularKey(';:', 0xBA)
+_AddRegularKey('=+', 0xBB)
+_AddRegularKey(',<', 0xBC)
+_AddRegularKey('-_', 0xBD)
+_AddRegularKey('.>', 0xBE)
+_AddRegularKey('/?', 0xBF)
+_AddRegularKey('`~', 0xC0)
+_AddRegularKey('[{', 0xDB)
+_AddRegularKey('\\|', 0xDC)
+_AddRegularKey(']}', 0xDD)
+_AddRegularKey('\'"', 0xDE)
+
+# Numeric keys.
+_AddRegularKey('0)', 0x30)
+_AddRegularKey('1!', 0x31)
+_AddRegularKey('2@', 0x32)
+_AddRegularKey('3#', 0x33)
+_AddRegularKey('4$', 0x34)
+_AddRegularKey('5%', 0x35)
+_AddRegularKey('6^', 0x36)
+_AddRegularKey('7&', 0x37)
+_AddRegularKey('8*', 0x38)
+_AddRegularKey('9(', 0x39)
+
+# Space.
+_AddRegularKey(' ', 0x20)
+
+
+class KeyPressAction(page_action.PageAction):
+
+ def __init__(self, dom_key, timeout=60):
+ super(KeyPressAction, self).__init__()
+ self._dom_key = dom_key
+ if dom_key not in _KEY_MAP:
+ raise ValueError('No mapping for key: %s' % dom_key)
+ self._windows_virtual_key_code, self._text = _KEY_MAP[dom_key]
+ self._timeout = timeout
+
+ def RunAction(self, tab):
+ tab.DispatchKeyEvent(keyEventType='rawKeyDown',
+ domKey=self._dom_key,
+ windowsVirtualKeyCode=self._windows_virtual_key_code,
+ timeout=self._timeout)
+ if self._text:
+ tab.DispatchKeyEvent(keyEventType='char',
+ text=self._text,
+ domKey=self._dom_key,
+ windowsVirtualKeyCode=ord(self._text),
+ timeout=self._timeout)
+ tab.DispatchKeyEvent(keyEventType='keyUp',
+ domKey=self._dom_key,
+ windowsVirtualKeyCode=self._windows_virtual_key_code,
+ timeout=self._timeout)
« no previous file with comments | « telemetry/telemetry/internal/actions/gesture_common.js ('k') | telemetry/telemetry/internal/actions/key_event_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698