aboutsummaryrefslogtreecommitdiffstats
path: root/components/webdriver_server
diff options
context:
space:
mode:
Diffstat (limited to 'components/webdriver_server')
-rw-r--r--components/webdriver_server/Cargo.toml2
-rw-r--r--components/webdriver_server/keys.rs106
-rw-r--r--components/webdriver_server/lib.rs13
3 files changed, 10 insertions, 111 deletions
diff --git a/components/webdriver_server/Cargo.toml b/components/webdriver_server/Cargo.toml
index d3ccfcc05dc..b3b2c178812 100644
--- a/components/webdriver_server/Cargo.toml
+++ b/components/webdriver_server/Cargo.toml
@@ -17,7 +17,7 @@ euclid = "0.19"
hyper = "0.12"
image = "0.19"
ipc-channel = "0.11"
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
log = "0.4"
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
diff --git a/components/webdriver_server/keys.rs b/components/webdriver_server/keys.rs
deleted file mode 100644
index 212a3b56815..00000000000
--- a/components/webdriver_server/keys.rs
+++ /dev/null
@@ -1,106 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use keyboard_types::{Key, KeyboardEvent};
-
-// spec: https://w3c.github.io/webdriver/#keyboard-actions
-// normalised (sic) as in british spelling
-fn get_normalised_key_value(key: char) -> Key {
- match key {
- '\u{E000}' => Key::Unidentified,
- '\u{E001}' => Key::Cancel,
- '\u{E002}' => Key::Help,
- '\u{E003}' => Key::Backspace,
- '\u{E004}' => Key::Tab,
- '\u{E005}' => Key::Clear,
- // FIXME(pyfisch): spec says "Return"
- '\u{E006}' => Key::Enter,
- '\u{E007}' => Key::Enter,
- '\u{E008}' => Key::Shift,
- '\u{E009}' => Key::Control,
- '\u{E00A}' => Key::Alt,
- '\u{E00B}' => Key::Pause,
- '\u{E00C}' => Key::Escape,
- '\u{E00D}' => Key::Character(" ".to_string()),
- '\u{E00E}' => Key::PageUp,
- '\u{E00F}' => Key::PageDown,
- '\u{E010}' => Key::End,
- '\u{E011}' => Key::Home,
- '\u{E012}' => Key::ArrowLeft,
- '\u{E013}' => Key::ArrowUp,
- '\u{E014}' => Key::ArrowRight,
- '\u{E015}' => Key::ArrowDown,
- '\u{E016}' => Key::Insert,
- '\u{E017}' => Key::Delete,
- '\u{E018}' => Key::Character(";".to_string()),
- '\u{E019}' => Key::Character("=".to_string()),
- '\u{E01A}' => Key::Character("0".to_string()),
- '\u{E01B}' => Key::Character("1".to_string()),
- '\u{E01C}' => Key::Character("2".to_string()),
- '\u{E01D}' => Key::Character("3".to_string()),
- '\u{E01E}' => Key::Character("4".to_string()),
- '\u{E01F}' => Key::Character("5".to_string()),
- '\u{E020}' => Key::Character("6".to_string()),
- '\u{E021}' => Key::Character("7".to_string()),
- '\u{E022}' => Key::Character("8".to_string()),
- '\u{E023}' => Key::Character("9".to_string()),
- '\u{E024}' => Key::Character("*".to_string()),
- '\u{E025}' => Key::Character("+".to_string()),
- '\u{E026}' => Key::Character(",".to_string()),
- '\u{E027}' => Key::Character("-".to_string()),
- '\u{E028}' => Key::Character(".".to_string()),
- '\u{E029}' => Key::Character("/".to_string()),
- '\u{E031}' => Key::F1,
- '\u{E032}' => Key::F2,
- '\u{E033}' => Key::F3,
- '\u{E034}' => Key::F4,
- '\u{E035}' => Key::F5,
- '\u{E036}' => Key::F6,
- '\u{E037}' => Key::F7,
- '\u{E038}' => Key::F8,
- '\u{E039}' => Key::F9,
- '\u{E03A}' => Key::F10,
- '\u{E03B}' => Key::F11,
- '\u{E03C}' => Key::F12,
- '\u{E03D}' => Key::Meta,
- '\u{E040}' => Key::ZenkakuHankaku,
- '\u{E050}' => Key::Shift,
- '\u{E051}' => Key::Control,
- '\u{E052}' => Key::Alt,
- '\u{E053}' => Key::Meta,
- '\u{E054}' => Key::PageUp,
- '\u{E055}' => Key::PageDown,
- '\u{E056}' => Key::End,
- '\u{E057}' => Key::Home,
- '\u{E058}' => Key::ArrowLeft,
- '\u{E059}' => Key::ArrowUp,
- '\u{E05A}' => Key::ArrowRight,
- '\u{E05B}' => Key::ArrowDown,
- '\u{E05C}' => Key::Insert,
- '\u{E05D}' => Key::Delete,
- _ => Key::Character(key.to_string()),
- }
-}
-
-pub fn keycodes_to_keys(key_codes: &str) -> Vec<KeyboardEvent> {
- let mut rv = vec![];
-
- for char_code in key_codes.chars() {
- // TODO(pyfisch): compute code, location, modifiers according to spec
- let key = get_normalised_key_value(char_code);
- let mut event = KeyboardEvent {
- state: ::keyboard_types::KeyState::Down,
- key,
- code: ::keyboard_types::Code::Unidentified,
- location: ::keyboard_types::Location::Standard,
- modifiers: ::keyboard_types::Modifiers::empty(),
- repeat: false,
- is_composing: false,
- };
- rv.push(event.clone());
- event.state = ::keyboard_types::KeyState::Up;
- rv.push(event);
- }
- rv
-}
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index 7e9de23b66c..347c5315100 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -11,14 +11,12 @@ extern crate log;
#[macro_use]
extern crate serde;
-mod keys;
-
use base64;
-use crate::keys::keycodes_to_keys;
use euclid::TypedSize2D;
use hyper::Method;
use image::{DynamicImage, ImageFormat, RgbImage};
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
+use keyboard_types::webdriver::{send_keys, Event as KeyEvent};
use msg::constellation_msg::{BrowsingContextId, TopLevelBrowsingContextId, TraversalDirection};
use net_traits::image::base::PixelFormat;
use regex::Captures;
@@ -1038,7 +1036,14 @@ impl Handler {
))
})?;
- let keys = keycodes_to_keys(&keys.text);
+ // FIXME: Don't discard composition events.
+ let keys = send_keys(&keys.text)
+ .drain(..)
+ .filter_map(|event| match event {
+ KeyEvent::Keyboard(v) => Some(v),
+ _ => None,
+ })
+ .collect();
// TODO: there's a race condition caused by the focus command and the
// send keys command being two separate messages,