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

Unified Diff: chrome/test/webdriver/webdriver_key_converter.cc

Issue 23526047: Delete old chromedriver code, and remove mongoose webserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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: chrome/test/webdriver/webdriver_key_converter.cc
diff --git a/chrome/test/webdriver/webdriver_key_converter.cc b/chrome/test/webdriver/webdriver_key_converter.cc
deleted file mode 100644
index 57a45991d9a7fae6248fc83c2b8143d6afa6778d..0000000000000000000000000000000000000000
--- a/chrome/test/webdriver/webdriver_key_converter.cc
+++ /dev/null
@@ -1,335 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "chrome/test/webdriver/webdriver_key_converter.h"
-
-#include "base/format_macros.h"
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/common/automation_constants.h"
-#include "chrome/test/automation/automation_json_requests.h"
-#include "chrome/test/webdriver/keycode_text_conversion.h"
-#include "chrome/test/webdriver/webdriver_logging.h"
-
-namespace {
-
-struct ModifierMaskAndKeyCode {
- int mask;
- ui::KeyboardCode key_code;
-};
-
-const ModifierMaskAndKeyCode kModifiers[] = {
- { automation::kShiftKeyMask, ui::VKEY_SHIFT },
- { automation::kControlKeyMask, ui::VKEY_CONTROL },
- { automation::kAltKeyMask, ui::VKEY_MENU }
-};
-
-// TODO(kkania): Use this in KeyMap.
-// Ordered list of all the key codes corresponding to special WebDriver keys.
-// These WebDriver keys are defined in the Unicode Private Use Area.
-// http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/value
-const ui::KeyboardCode kSpecialWebDriverKeys[] = {
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_HELP,
- ui::VKEY_BACK,
- ui::VKEY_TAB,
- ui::VKEY_CLEAR,
- ui::VKEY_RETURN,
- ui::VKEY_RETURN,
- ui::VKEY_SHIFT,
- ui::VKEY_CONTROL,
- ui::VKEY_MENU,
- ui::VKEY_PAUSE,
- ui::VKEY_ESCAPE,
- ui::VKEY_SPACE,
- ui::VKEY_PRIOR, // page up
- ui::VKEY_NEXT, // page down
- ui::VKEY_END,
- ui::VKEY_HOME,
- ui::VKEY_LEFT,
- ui::VKEY_UP,
- ui::VKEY_RIGHT,
- ui::VKEY_DOWN,
- ui::VKEY_INSERT,
- ui::VKEY_DELETE,
- ui::VKEY_OEM_1, // semicolon
- ui::VKEY_OEM_PLUS, // equals
- ui::VKEY_NUMPAD0,
- ui::VKEY_NUMPAD1,
- ui::VKEY_NUMPAD2,
- ui::VKEY_NUMPAD3,
- ui::VKEY_NUMPAD4,
- ui::VKEY_NUMPAD5,
- ui::VKEY_NUMPAD6,
- ui::VKEY_NUMPAD7,
- ui::VKEY_NUMPAD8,
- ui::VKEY_NUMPAD9,
- ui::VKEY_MULTIPLY,
- ui::VKEY_ADD,
- ui::VKEY_OEM_COMMA,
- ui::VKEY_SUBTRACT,
- ui::VKEY_DECIMAL,
- ui::VKEY_DIVIDE,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_UNKNOWN,
- ui::VKEY_F1,
- ui::VKEY_F2,
- ui::VKEY_F3,
- ui::VKEY_F4,
- ui::VKEY_F5,
- ui::VKEY_F6,
- ui::VKEY_F7,
- ui::VKEY_F8,
- ui::VKEY_F9,
- ui::VKEY_F10,
- ui::VKEY_F11,
- ui::VKEY_F12};
-
-const char16 kWebDriverNullKey = 0xE000U;
-const char16 kWebDriverShiftKey = 0xE008U;
-const char16 kWebDriverControlKey = 0xE009U;
-const char16 kWebDriverAltKey = 0xE00AU;
-const char16 kWebDriverCommandKey = 0xE03DU;
-
-// Returns whether the given key is a WebDriver key modifier.
-bool IsModifierKey(char16 key) {
- switch (key) {
- case kWebDriverShiftKey:
- case kWebDriverControlKey:
- case kWebDriverAltKey:
- case kWebDriverCommandKey:
- return true;
- default:
- return false;
- }
-}
-
-// Gets the key code associated with |key|, if it is a special WebDriver key.
-// Returns whether |key| is a special WebDriver key. If true, |key_code| will
-// be set.
-bool KeyCodeFromSpecialWebDriverKey(char16 key, ui::KeyboardCode* key_code) {
- int index = static_cast<int>(key) - 0xE000U;
- bool is_special_key = index >= 0 &&
- index < static_cast<int>(arraysize(kSpecialWebDriverKeys));
- if (is_special_key)
- *key_code = kSpecialWebDriverKeys[index];
- return is_special_key;
-}
-
-// Gets the key code associated with |key|, if it is a special shorthand key.
-// Shorthand keys are common text equivalents for keys, such as the newline
-// character, which is shorthand for the return key. Returns whether |key| is
-// a shorthand key. If true, |key_code| will be set and |client_should_skip|
-// will be set to whether the key should be skipped.
-bool KeyCodeFromShorthandKey(char16 key_utf16,
- ui::KeyboardCode* key_code,
- bool* client_should_skip) {
- string16 key_str_utf16;
- key_str_utf16.push_back(key_utf16);
- std::string key_str_utf8 = UTF16ToUTF8(key_str_utf16);
- if (key_str_utf8.length() != 1)
- return false;
- bool should_skip = false;
- char key = key_str_utf8[0];
- if (key == '\n') {
- *key_code = ui::VKEY_RETURN;
- } else if (key == '\t') {
- *key_code = ui::VKEY_TAB;
- } else if (key == '\b') {
- *key_code = ui::VKEY_BACK;
- } else if (key == ' ') {
- *key_code = ui::VKEY_SPACE;
- } else if (key == '\r') {
- *key_code = ui::VKEY_UNKNOWN;
- should_skip = true;
- } else {
- return false;
- }
- *client_should_skip = should_skip;
- return true;
-}
-
-} // namespace
-
-namespace webdriver {
-
-WebKeyEvent CreateKeyDownEvent(ui::KeyboardCode key_code, int modifiers) {
- return WebKeyEvent(automation::kRawKeyDownType,
- key_code,
- std::string(),
- std::string(),
- modifiers);
-}
-
-WebKeyEvent CreateKeyUpEvent(ui::KeyboardCode key_code, int modifiers) {
- return WebKeyEvent(automation::kKeyUpType,
- key_code,
- std::string(),
- std::string(),
- modifiers);
-}
-
-WebKeyEvent CreateCharEvent(const std::string& unmodified_text,
- const std::string& modified_text,
- int modifiers) {
- return WebKeyEvent(automation::kCharType,
- ui::VKEY_UNKNOWN,
- unmodified_text,
- modified_text,
- modifiers);
-}
-
-bool ConvertKeysToWebKeyEvents(const string16& client_keys,
- const Logger& logger,
- bool release_modifiers,
- int* modifiers,
- std::vector<WebKeyEvent>* client_key_events,
- std::string* error_msg) {
- std::vector<WebKeyEvent> key_events;
-
- string16 keys = client_keys;
- // Add an implicit NULL character to the end of the input to depress all
- // modifiers.
- if (release_modifiers)
- keys.push_back(kWebDriverNullKey);
-
- int sticky_modifiers = *modifiers;
- for (size_t i = 0; i < keys.size(); ++i) {
- char16 key = keys[i];
-
- if (key == kWebDriverNullKey) {
- // Release all modifier keys and clear |stick_modifiers|.
- if (sticky_modifiers & automation::kShiftKeyMask)
- key_events.push_back(CreateKeyUpEvent(ui::VKEY_SHIFT, 0));
- if (sticky_modifiers & automation::kControlKeyMask)
- key_events.push_back(CreateKeyUpEvent(ui::VKEY_CONTROL, 0));
- if (sticky_modifiers & automation::kAltKeyMask)
- key_events.push_back(CreateKeyUpEvent(ui::VKEY_MENU, 0));
- if (sticky_modifiers & automation::kMetaKeyMask)
- key_events.push_back(CreateKeyUpEvent(ui::VKEY_COMMAND, 0));
- sticky_modifiers = 0;
- continue;
- }
- if (IsModifierKey(key)) {
- // Press or release the modifier, and adjust |sticky_modifiers|.
- bool modifier_down = false;
- ui::KeyboardCode key_code = ui::VKEY_UNKNOWN;
- if (key == kWebDriverShiftKey) {
- sticky_modifiers ^= automation::kShiftKeyMask;
- modifier_down = sticky_modifiers & automation::kShiftKeyMask;
- key_code = ui::VKEY_SHIFT;
- } else if (key == kWebDriverControlKey) {
- sticky_modifiers ^= automation::kControlKeyMask;
- modifier_down = sticky_modifiers & automation::kControlKeyMask;
- key_code = ui::VKEY_CONTROL;
- } else if (key == kWebDriverAltKey) {
- sticky_modifiers ^= automation::kAltKeyMask;
- modifier_down = sticky_modifiers & automation::kAltKeyMask;
- key_code = ui::VKEY_MENU;
- } else if (key == kWebDriverCommandKey) {
- sticky_modifiers ^= automation::kMetaKeyMask;
- modifier_down = sticky_modifiers & automation::kMetaKeyMask;
- key_code = ui::VKEY_COMMAND;
- } else {
- NOTREACHED();
- }
- if (modifier_down)
- key_events.push_back(CreateKeyDownEvent(key_code, sticky_modifiers));
- else
- key_events.push_back(CreateKeyUpEvent(key_code, sticky_modifiers));
- continue;
- }
-
- ui::KeyboardCode key_code = ui::VKEY_UNKNOWN;
- std::string unmodified_text, modified_text;
- int all_modifiers = sticky_modifiers;
-
- // Get the key code, text, and modifiers for the given key.
- bool should_skip = false;
- if (KeyCodeFromSpecialWebDriverKey(key, &key_code) ||
- KeyCodeFromShorthandKey(key, &key_code, &should_skip)) {
- if (should_skip)
- continue;
- if (key_code == ui::VKEY_UNKNOWN) {
- *error_msg = base::StringPrintf(
- "Unknown WebDriver key(%d) at string index (%" PRIuS ")",
- static_cast<int>(key),
- i);
- return false;
- }
- if (key_code == ui::VKEY_RETURN) {
- // For some reason Chrome expects a carriage return for the return key.
- modified_text = unmodified_text = "\r";
- } else {
- // WebDriver assumes a numpad key should translate to the number,
- // which requires NumLock to be on with some platforms. This isn't
- // formally in the spec, but is expected by their tests.
- int webdriver_modifiers = 0;
- if (key_code >= ui::VKEY_NUMPAD0 && key_code <= ui::VKEY_NUMPAD9)
- webdriver_modifiers = automation::kNumLockKeyMask;
- unmodified_text = ConvertKeyCodeToText(key_code, webdriver_modifiers);
- modified_text = ConvertKeyCodeToText(
- key_code,
- all_modifiers | webdriver_modifiers);
- }
- } else {
- int necessary_modifiers = 0;
- ConvertCharToKeyCode(key, &key_code, &necessary_modifiers);
- all_modifiers |= necessary_modifiers;
- if (key_code != ui::VKEY_UNKNOWN) {
- unmodified_text = ConvertKeyCodeToText(key_code, 0);
- modified_text = ConvertKeyCodeToText(key_code, all_modifiers);
- }
- if (unmodified_text.empty() || modified_text.empty()) {
- // Do a best effort and use the raw key we were given.
- logger.Log(
- kWarningLogLevel,
- base::StringPrintf("No translation for key code. Code point: %d",
- static_cast<int>(key)));
- if (unmodified_text.empty())
- unmodified_text = UTF16ToUTF8(keys.substr(i, 1));
- if (modified_text.empty())
- modified_text = UTF16ToUTF8(keys.substr(i, 1));
- }
- }
-
- // Create the key events.
- bool necessary_modifiers[3];
- for (int i = 0; i < 3; ++i) {
- necessary_modifiers[i] =
- all_modifiers & kModifiers[i].mask &&
- !(sticky_modifiers & kModifiers[i].mask);
- if (necessary_modifiers[i]) {
- key_events.push_back(
- CreateKeyDownEvent(kModifiers[i].key_code, sticky_modifiers));
- }
- }
-
- key_events.push_back(CreateKeyDownEvent(key_code, all_modifiers));
- if (unmodified_text.length() || modified_text.length()) {
- key_events.push_back(
- CreateCharEvent(unmodified_text, modified_text, all_modifiers));
- }
- key_events.push_back(CreateKeyUpEvent(key_code, all_modifiers));
-
- for (int i = 2; i > -1; --i) {
- if (necessary_modifiers[i]) {
- key_events.push_back(
- CreateKeyUpEvent(kModifiers[i].key_code, sticky_modifiers));
- }
- }
- }
- client_key_events->swap(key_events);
- *modifiers = sticky_modifiers;
- return true;
-}
-
-} // namespace webdriver
« no previous file with comments | « chrome/test/webdriver/webdriver_key_converter.h ('k') | chrome/test/webdriver/webdriver_key_converter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698