diff --git a/Cargo.lock b/Cargo.lock index b1e23405138c..35f998defa3d 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 ed991671c9f6..54b665ea0f16 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 1e57a10e6f28..9af85bd5939a 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 68f2917e2c2d..6d9fef7f8e06 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 252185fd0c66..2b62d7180eb2 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 8b5a03991414..a862caadc598 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 3b8430e4922c..3faaeec0de9c 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 d3ccfcc05dc0..b3b2c178812d 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 212a3b56815d..000000000000 --- 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 { - 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 7e9de23b66ce..347c53151008 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 35d55e2ebe73..faa4eded4d80 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 a59179ce3e5b..e772e776bc57 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"}