aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPyfisch <pyfisch@gmail.com>2018-11-11 21:57:45 +0100
committerPyfisch <pyfisch@gmail.com>2018-11-11 21:57:45 +0100
commit2143657e0331df9ef8fdedd7b653aca763e0539c (patch)
tree6bdf25ddd274cd56c695168940dc3d30fa4ec206
parentb60006ae11485e432308cbecd310ff19119de5e3 (diff)
downloadservo-2143657e0331df9ef8fdedd7b653aca763e0539c.tar.gz
servo-2143657e0331df9ef8fdedd7b653aca763e0539c.zip
Use keyboard-types::webdriver::send_keys
This improves the quality of KeyboardEvents sent by WebDriver. Now key, code, location and modifiers are set according to spec. CompositionEvents are discarded as servo does not handle them at all.
-rw-r--r--Cargo.lock23
-rw-r--r--components/compositing/Cargo.toml2
-rw-r--r--components/constellation/Cargo.toml2
-rw-r--r--components/embedder_traits/Cargo.toml2
-rw-r--r--components/malloc_size_of/Cargo.toml2
-rw-r--r--components/script/Cargo.toml2
-rw-r--r--components/script_traits/Cargo.toml2
-rw-r--r--components/webdriver_server/Cargo.toml2
-rw-r--r--components/webdriver_server/keys.rs106
-rw-r--r--components/webdriver_server/lib.rs13
-rw-r--r--ports/servo/Cargo.toml2
-rw-r--r--tests/unit/script/Cargo.toml2
12 files changed, 30 insertions, 130 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b1e23405138..35f998defa3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -512,7 +512,7 @@ dependencies = [
"gleam 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
@@ -549,7 +549,7 @@ dependencies = [
"gfx_traits 0.0.1",
"http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"layout_traits 0.0.1",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"metrics 0.0.1",
@@ -943,7 +943,7 @@ name = "embedder_traits"
version = "0.0.1"
dependencies = [
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
@@ -1898,11 +1898,12 @@ dependencies = [
[[package]]
name = "keyboard-types"
-version = "0.4.2-servo"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2210,7 +2211,7 @@ dependencies = [
"hashglobe 0.1.0",
"hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"mozjs 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
"selectors 0.20.0",
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3200,7 +3201,7 @@ dependencies = [
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
"jstraceable_derive 0.0.1",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3304,7 +3305,7 @@ name = "script_tests"
version = "0.0.1"
dependencies = [
"euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"script 0.0.1",
"servo_url 0.0.1",
]
@@ -3324,7 +3325,7 @@ dependencies = [
"hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
"malloc_size_of 0.0.1",
"malloc_size_of_derive 0.0.1",
@@ -3408,7 +3409,7 @@ dependencies = [
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"glutin 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libservo 0.0.1",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -4457,7 +4458,7 @@ dependencies = [
"hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)",
+ "keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
"net_traits 0.0.1",
@@ -4902,7 +4903,7 @@ dependencies = [
"checksum jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
"checksum jpeg-decoder 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0dfe27a6c0dabd772d0f9b9f8701c4ca12c4d1eebcadf2be1f6f70396f6a1434"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-"checksum keyboard-types 0.4.2-servo (registry+https://github.com/rust-lang/crates.io-index)" = "75082c134a78e0fc2232d2f30bf3dfdea1cd28591846b85a73b4b46cd776b482"
+"checksum keyboard-types 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "823bf0e5ec01b80424a318e79a0d1375725281acf311c47543ab3413f704dc25"
"checksum khronos_api 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9ef23fcc4059260c5936f638c9805ebfc87cb172fa6661d130cba7f97d58f55"
"checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d"
"checksum lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d33a48d0365c96081958cc663eef834975cb1e8d8bea3378513fc72bdbf11e50"
diff --git a/components/compositing/Cargo.toml b/components/compositing/Cargo.toml
index ed991671c9f..54b665ea0f1 100644
--- a/components/compositing/Cargo.toml
+++ b/components/compositing/Cargo.toml
@@ -22,7 +22,7 @@ gleam = {version = "0.6", optional = true}
image = "0.19"
ipc-channel = "0.11"
libc = "0.2"
-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/constellation/Cargo.toml b/components/constellation/Cargo.toml
index 1e57a10e6f2..9af85bd5939 100644
--- a/components/constellation/Cargo.toml
+++ b/components/constellation/Cargo.toml
@@ -26,7 +26,7 @@ gfx_traits = {path = "../gfx_traits"}
http = "0.1"
ipc-channel = "0.11"
layout_traits = {path = "../layout_traits"}
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
log = "0.4"
metrics = {path = "../metrics"}
msg = {path = "../msg"}
diff --git a/components/embedder_traits/Cargo.toml b/components/embedder_traits/Cargo.toml
index 68f2917e2c2..6d9fef7f8e0 100644
--- a/components/embedder_traits/Cargo.toml
+++ b/components/embedder_traits/Cargo.toml
@@ -12,7 +12,7 @@ path = "lib.rs"
[dependencies]
ipc-channel = "0.11"
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
lazy_static = "1"
log = "0.4"
msg = {path = "../msg"}
diff --git a/components/malloc_size_of/Cargo.toml b/components/malloc_size_of/Cargo.toml
index 252185fd0c6..2b62d7180eb 100644
--- a/components/malloc_size_of/Cargo.toml
+++ b/components/malloc_size_of/Cargo.toml
@@ -31,7 +31,7 @@ euclid = "0.19"
hashglobe = { path = "../hashglobe" }
hyper = { version = "0.12", optional = true }
hyper_serde = { version = "0.9", optional = true }
-keyboard-types = {version = "0.4.2-servo", features = ["serde"], optional = true}
+keyboard-types = {version = "0.4.3", optional = true}
mozjs = { version = "0.9.3", optional = true }
selectors = { path = "../selectors" }
serde = { version = "1.0.27", optional = true }
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index 8b5a0399141..a862caadc59 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -65,7 +65,7 @@ ipc-channel = "0.11"
itertools = "0.7.6"
js = {package = "mozjs", version = "0.9.3"}
jstraceable_derive = {path = "../jstraceable_derive"}
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
lazy_static = "1"
libc = "0.2"
log = "0.4"
diff --git a/components/script_traits/Cargo.toml b/components/script_traits/Cargo.toml
index 3b8430e4922..3faaeec0de9 100644
--- a/components/script_traits/Cargo.toml
+++ b/components/script_traits/Cargo.toml
@@ -22,7 +22,7 @@ http = "0.1"
hyper = "0.12"
hyper_serde = "0.9"
ipc-channel = "0.11"
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
libc = "0.2"
malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
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,
diff --git a/ports/servo/Cargo.toml b/ports/servo/Cargo.toml
index 35d55e2ebe7..faa4eded4d8 100644
--- a/ports/servo/Cargo.toml
+++ b/ports/servo/Cargo.toml
@@ -45,7 +45,7 @@ crossbeam-channel = "0.2"
euclid = "0.19"
gleam = "0.6"
glutin = "0.18"
-keyboard-types = {version = "0.4.2-servo", features = ["serde"]}
+keyboard-types = "0.4.3"
lazy_static = "1"
libservo = {path = "../../components/servo"}
log = "0.4"
diff --git a/tests/unit/script/Cargo.toml b/tests/unit/script/Cargo.toml
index a59179ce3e5..e772e776bc5 100644
--- a/tests/unit/script/Cargo.toml
+++ b/tests/unit/script/Cargo.toml
@@ -11,6 +11,6 @@ path = "lib.rs"
[dependencies]
euclid = "0.19"
-keyboard-types = "0.4.2-servo"
+keyboard-types = "0.4.3"
script = {path = "../../../components/script"}
servo_url = {path = "../../../components/url"}