diff --git a/Cargo.lock b/Cargo.lock index a36afea94e28..45e65cd494f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -372,6 +372,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" +[[package]] +name = "bumpalo" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad807f2fc2bf185eeb98ff3a901bd46dc5ad58163d0fa4577ba0d25674d71708" + [[package]] name = "byte-slice-cast" version = "0.2.0" @@ -940,6 +946,15 @@ dependencies = [ "syn 1.0.3", ] +[[package]] +name = "ct-logs" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" +dependencies = [ + "sct", +] + [[package]] name = "darling" version = "0.10.1" @@ -1325,6 +1340,28 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "failure" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" +dependencies = [ + "backtrace", + "failure_derive", +] + +[[package]] +name = "failure_derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" +dependencies = [ + "proc-macro2 1.0.1", + "quote 1.0.2", + "syn 1.0.3", + "synstructure 0.12.1", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -2117,6 +2154,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hex" version = "0.3.2" @@ -2229,6 +2275,21 @@ dependencies = [ "tokio-openssl", ] +[[package]] +name = "hyper-rustls" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719d85c7df4a7f309a77d145340a063ea929dcb2e025bae46a80345cffec2952" +dependencies = [ + "bytes", + "futures", + "hyper", + "rustls", + "tokio-io", + "tokio-rustls", + "webpki", +] + [[package]] name = "hyper_serde" version = "0.11.0" @@ -2427,6 +2488,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "js-sys" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3ea71161651a4cd97d999b2da139109c537b15ab33abc8ae4ead38deac8a03" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "jstraceable_derive" version = "0.0.1" @@ -3199,6 +3269,7 @@ dependencies = [ "content-security-policy", "cookie", "crossbeam-channel", + "ct-logs", "devtools_traits", "embedder_traits", "flate2", @@ -3207,6 +3278,7 @@ dependencies = [ "http", "hyper", "hyper-openssl", + "hyper-rustls", "hyper_serde", "immeta", "ipc-channel", @@ -3225,6 +3297,7 @@ dependencies = [ "pixels", "profile_traits", "rayon", + "rustls", "serde", "serde_json", "servo_allocator", @@ -3988,6 +4061,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "ring" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6747f8da1f2b1fabbee1aaa4eb8a11abf9adef0bf58a41cee45db5d59cecdfac" +dependencies = [ + "cc", + "lazy_static", + "libc", + "spin", + "untrusted", + "web-sys", + "winapi", +] + [[package]] name = "rle-decode-fast" version = "1.0.1" @@ -4061,6 +4149,19 @@ dependencies = [ "semver", ] +[[package]] +name = "rustls" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + [[package]] name = "rusttype" version = "0.7.2" @@ -4286,6 +4387,16 @@ dependencies = [ "webxr-api", ] +[[package]] +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "selectors" version = "0.21.0" @@ -4884,6 +4995,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "sourcefile" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" + [[package]] name = "sparkle" version = "0.1.10" @@ -4893,6 +5010,12 @@ dependencies = [ "gl_generator 0.13.1", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "stable_deref_trait" version = "1.0.0" @@ -5440,6 +5563,20 @@ dependencies = [ "tokio-io", ] +[[package]] +name = "tokio-rustls" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2fa53ac211c136832f530ccb081af9af891af22d685a9493e232c7a359bc2" +dependencies = [ + "bytes", + "futures", + "iovec", + "rustls", + "tokio-io", + "webpki", +] + [[package]] name = "tokio-sync" version = "0.1.6" @@ -5648,6 +5785,12 @@ dependencies = [ "void", ] +[[package]] +name = "untrusted" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" + [[package]] name = "unwind-sys" version = "0.1.1" @@ -5774,6 +5917,75 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" +[[package]] +name = "wasm-bindgen" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4de97fa1806bb1a99904216f6ac5e0c050dc4f8c676dc98775047c38e5c01b55" +dependencies = [ + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d82c170ef9f5b2c63ad4460dfcee93f3ec04a9a36a4cc20bc973c39e59ab8e3" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2 0.4.26", + "quote 0.6.12", + "syn 0.15.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f07d50f74bf7a738304f6b8157f4a581e1512cd9e9cdb5baad8c31bbe8ffd81d" +dependencies = [ + "quote 0.6.12", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95cf8fe77e45ba5f91bc8f3da0c3aa5d464b3d8ed85d84f4d4c7cc106436b1d7" +dependencies = [ + "proc-macro2 0.4.26", + "quote 0.6.12", + "syn 0.15.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c2d4d4756b2e46d3a5422e06277d02e4d3e1d62d138b76a4c681e925743623" + +[[package]] +name = "wasm-bindgen-webidl" +version = "0.2.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e47859b4eba3d3b9a5c2c299f9d6f8d0b613671315f6f0c5c7f835e524b36a" +dependencies = [ + "failure", + "heck", + "log", + "proc-macro2 0.4.26", + "quote 0.6.12", + "syn 0.15.39", + "wasm-bindgen-backend", + "weedle", +] + [[package]] name = "wayland-client" version = "0.21.13" @@ -5843,6 +6055,19 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "web-sys" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d515d2f713d3a6ab198031d2181b7540f8e319e4637ec2d4a41a208335ef29" +dependencies = [ + "failure", + "js-sys", + "sourcefile", + "wasm-bindgen", + "wasm-bindgen-webidl", +] + [[package]] name = "webdriver" version = "0.40.1" @@ -5890,6 +6115,16 @@ dependencies = [ "webdriver", ] +[[package]] +name = "webpki" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7e664e770ac0110e2384769bcc59ed19e329d81f555916a6e072714957b81b4" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "webrender" version = "0.60.0" @@ -6031,6 +6266,15 @@ dependencies = [ "winit", ] +[[package]] +name = "weedle" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164" +dependencies = [ + "nom", +] + [[package]] name = "which" version = "3.0.0" diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index aac0b32aaeb5..e1b07eeb564e 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -13,6 +13,9 @@ path = "lib.rs" test = false doctest = false +[features] +rust-tls = ["ct-logs", "hyper-rustls", "rustls"] + [dependencies] base64 = "0.10.1" brotli = "3" @@ -20,6 +23,7 @@ bytes = "0.4" content-security-policy = {version = "0.3.0", features = ["serde"]} cookie_rs = {package = "cookie", version = "0.11"} crossbeam-channel = "0.3" +ct-logs = { version = "0.6.0", optional = true } devtools_traits = {path = "../devtools_traits"} embedder_traits = { path = "../embedder_traits" } flate2 = "1" @@ -29,6 +33,7 @@ http = "0.1" hyper = "0.12" hyper_serde = "0.11" hyper-openssl = "0.7" +hyper-rustls = { version = "0.17.1", default-features = false, optional = true } immeta = "0.4" ipc-channel = "0.12" lazy_static = "1" @@ -46,6 +51,7 @@ percent-encoding = "2.0" pixels = {path = "../pixels"} profile_traits = {path = "../profile_traits"} rayon = "1" +rustls = { version = "0.16.0", optional = true } serde = "1.0" serde_json = "1.0" servo_allocator = {path = "../allocator"} diff --git a/components/net/connector.rs b/components/net/connector.rs index 45eda71bd6ea..653c5de87955 100644 --- a/components/net/connector.rs +++ b/components/net/connector.rs @@ -7,9 +7,14 @@ use hyper::client::connect::{Connect, Destination}; use hyper::client::HttpConnector as HyperHttpConnector; use hyper::rt::Future; use hyper::{Body, Client}; +#[cfg(not(feature = "rust-tls"))] use hyper_openssl::HttpsConnector; +#[cfg(feature = "rust-tls")] +use hyper_rustls::HttpsConnector; use openssl::ssl::{SslConnector, SslConnectorBuilder, SslMethod, SslOptions}; use openssl::x509; +#[cfg(feature = "rust-tls")] +use rustls::{ClientConfig, ClientSessionMemoryCache}; use tokio::prelude::future::Executor; pub const BUF_SIZE: usize = 32768; @@ -43,6 +48,29 @@ impl Connect for HttpConnector { pub type Connector = HttpsConnector; +#[cfg(feature = "rust-tls")] +pub type TlsConfig = ClientConfig; +#[cfg(not(feature = "rust-tls"))] +pub type TlsConfig = SslConnectorBuilder; + +#[cfg(feature = "rust-tls")] +pub fn create_tls_config(certs: &str) -> TlsConfig { + let mut cfg = ClientConfig::new(); + cfg.alpn_protocols = vec![b"h2".to_vec(), b"http/1.1".to_vec()]; + cfg.ct_logs = Some(&ct_logs::LOGS); + cfg.set_persistence(ClientSessionMemoryCache::new(128)); + + let mut b = certs.as_bytes(); + let _ = cfg.root_store.add_pem_file(&mut b); + + cfg +} +#[cfg(not(feature = "rust-tls"))] +pub fn create_tls_config(certs: &str) -> TlsConfig { + create_ssl_connector_builder(certs) +} + +// This can be merged into create_tls_config() once the ws crate supports rustls. pub fn create_ssl_connector_builder(certs: &str) -> SslConnectorBuilder { // certs include multiple certificates. We could add all of them at once, // but if any of them were already added, openssl would fail to insert all @@ -87,15 +115,15 @@ pub fn create_ssl_connector_builder(certs: &str) -> SslConnectorBuilder { ssl_connector_builder } -pub fn create_http_client( - ssl_connector_builder: SslConnectorBuilder, - executor: E, -) -> Client +pub fn create_http_client(tls_config: TlsConfig, executor: E) -> Client where E: Executor + Send + 'static>> + Sync + Send + 'static, { - let connector = - HttpsConnector::with_connector(HttpConnector::new(), ssl_connector_builder).unwrap(); + #[cfg(feature = "rust-tls")] + let connector = HttpsConnector::from((HttpConnector::new(), tls_config)); + #[cfg(not(feature = "rust-tls"))] + let connector = HttpsConnector::with_connector(HttpConnector::new(), tls_config).unwrap(); + Client::builder() .http1_title_case_headers(true) .executor(executor) diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 3ed842417361..efffa93b05ec 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use crate::connector::{create_http_client, Connector}; +use crate::connector::{create_http_client, Connector, TlsConfig}; use crate::cookie; use crate::cookie_storage::CookieStorage; use crate::decoder::Decoder; @@ -46,7 +46,6 @@ use net_traits::{CookieSource, FetchMetadata, NetworkError, ReferrerPolicy}; use net_traits::{ RedirectEndValue, RedirectStartValue, ResourceAttribute, ResourceFetchTiming, ResourceTimeValue, }; -use openssl::ssl::SslConnectorBuilder; use servo_arc::Arc; use servo_url::{ImmutableOrigin, ServoUrl}; use std::collections::{HashMap, HashSet}; @@ -90,7 +89,7 @@ pub struct HttpState { } impl HttpState { - pub fn new(ssl_connector_builder: SslConnectorBuilder) -> HttpState { + pub fn new(tls_config: TlsConfig) -> HttpState { HttpState { hsts_list: RwLock::new(HstsList::new()), cookie_jar: RwLock::new(CookieStorage::new(150)), @@ -98,7 +97,7 @@ impl HttpState { history_states: RwLock::new(HashMap::new()), http_cache: RwLock::new(HttpCache::new()), http_cache_state: Mutex::new(HashMap::new()), - client: create_http_client(ssl_connector_builder, HANDLE.lock().unwrap().executor()), + client: create_http_client(tls_config, HANDLE.lock().unwrap().executor()), } } } diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index 4be209f9d6d4..e9480f92fa22 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -4,7 +4,7 @@ //! A thread that takes a URL and streams back the binary data. -use crate::connector::{create_http_client, create_ssl_connector_builder}; +use crate::connector::{create_http_client, create_tls_config}; use crate::cookie; use crate::cookie_storage::CookieStorage; use crate::fetch::cors_cache::CorsCache; @@ -148,10 +148,7 @@ fn create_http_states( history_states: RwLock::new(HashMap::new()), http_cache: RwLock::new(http_cache), http_cache_state: Mutex::new(HashMap::new()), - client: create_http_client( - create_ssl_connector_builder(&certs), - HANDLE.lock().unwrap().executor(), - ), + client: create_http_client(create_tls_config(&certs), HANDLE.lock().unwrap().executor()), }; let private_http_state = HttpState { @@ -161,10 +158,7 @@ fn create_http_states( history_states: RwLock::new(HashMap::new()), http_cache: RwLock::new(HttpCache::new()), http_cache_state: Mutex::new(HashMap::new()), - client: create_http_client( - create_ssl_connector_builder(&certs), - HANDLE.lock().unwrap().executor(), - ), + client: create_http_client(create_tls_config(&certs), HANDLE.lock().unwrap().executor()), }; (Arc::new(http_state), Arc::new(private_http_state)) diff --git a/components/net/tests/fetch.rs b/components/net/tests/fetch.rs index 328ca7345764..0faaa83cdf14 100644 --- a/components/net/tests/fetch.rs +++ b/components/net/tests/fetch.rs @@ -24,7 +24,7 @@ use hyper::body::Body; use hyper::{Request as HyperRequest, Response as HyperResponse}; use mime::{self, Mime}; use msg::constellation_msg::TEST_PIPELINE_ID; -use net::connector::create_ssl_connector_builder; +use net::connector::create_tls_config; use net::fetch::cors_cache::CorsCache; use net::fetch::methods::{self, CancellationListener, FetchContext}; use net::filemanager_thread::FileManager; @@ -38,7 +38,7 @@ use net_traits::{ }; use servo_arc::Arc as ServoArc; use servo_url::{ImmutableOrigin, ServoUrl}; -use std::fs::File; +use std::fs::{self, File}; use std::io::Read; use std::iter::FromIterator; use std::path::Path; @@ -653,15 +653,11 @@ fn test_fetch_with_hsts() { .unwrap(); let (server, url) = make_ssl_server(handler, cert_path.clone(), key_path.clone()); - let mut ca_content = String::new(); - File::open(cert_path) - .unwrap() - .read_to_string(&mut ca_content) - .unwrap(); - let ssl_client = create_ssl_connector_builder(&ca_content); + let certs = fs::read_to_string(cert_path).expect("Couldn't find certificate file"); + let tls_config = create_tls_config(&certs); let mut context = FetchContext { - state: Arc::new(HttpState::new(ssl_client)), + state: Arc::new(HttpState::new(tls_config)), user_agent: DEFAULT_USER_AGENT.into(), devtools_chan: None, filemanager: FileManager::new(create_embedder_proxy()), diff --git a/components/net/tests/main.rs b/components/net/tests/main.rs index e68cc293fa60..fd93fa392bcd 100644 --- a/components/net/tests/main.rs +++ b/components/net/tests/main.rs @@ -29,7 +29,7 @@ use hyper::server::conn::Http; use hyper::server::Server as HyperServer; use hyper::service::service_fn_ok; use hyper::{Body, Request as HyperRequest, Response as HyperResponse}; -use net::connector::create_ssl_connector_builder; +use net::connector::create_tls_config; use net::fetch::cors_cache::CorsCache; use net::fetch::methods::{self, CancellationListener, FetchContext}; use net::filemanager_thread::FileManager; @@ -87,11 +87,10 @@ fn new_fetch_context( dc: Option>, fc: Option, ) -> FetchContext { - let ssl_connector = - create_ssl_connector_builder(&resources::read_string(Resource::SSLCertificates)); + let tls_config = create_tls_config(&resources::read_string(Resource::SSLCertificates)); let sender = fc.unwrap_or_else(|| create_embedder_proxy()); FetchContext { - state: Arc::new(HttpState::new(ssl_connector)), + state: Arc::new(HttpState::new(tls_config)), user_agent: DEFAULT_USER_AGENT.into(), devtools_chan: dc, filemanager: FileManager::new(sender), diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index 8b56bfbc8d98..8478eb6e839e 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -25,6 +25,7 @@ layout-2020 = ["layout_thread_2020"] max_log_level = ["log/release_max_level_info"] native-bluetooth = ["bluetooth/native-bluetooth"] no-wgl = ["canvas/no-wgl"] +rust-tls = ["net/rust-tls"] uwp = ["servo_config/uwp", "script/uwp"] webrender_debugger = ["webrender/debugger"] no_static_freetype = ["webrender/no_static_freetype"] diff --git a/ports/glutin/Cargo.toml b/ports/glutin/Cargo.toml index d4ad9f3a2990..e48d8fb799b2 100644 --- a/ports/glutin/Cargo.toml +++ b/ports/glutin/Cargo.toml @@ -40,6 +40,7 @@ max_log_level = ["log/release_max_level_info"] native-bluetooth = ["libservo/native-bluetooth"] no-wgl = ["libservo/no-wgl"] profilemozjs = ["libservo/profilemozjs"] +rust-tls = ["libservo/rust-tls"] webdriver = ["libservo/webdriver"] webgl_backtrace = ["libservo/webgl_backtrace"] webrender_debugger = ["libservo/webrender_debugger"] diff --git a/ports/libmlservo/Cargo.toml b/ports/libmlservo/Cargo.toml index 4c4ef0e8b1b2..6f0ff40ba635 100644 --- a/ports/libmlservo/Cargo.toml +++ b/ports/libmlservo/Cargo.toml @@ -18,6 +18,7 @@ canvas2d-raqote = ["simpleservo/canvas2d-raqote"] egl = ["simpleservo/egl"] layout-2013 = ["simpleservo/layout-2013"] layout-2020 = ["simpleservo/layout-2020"] +rust-tls = ["simpleservo/rust-tls"] [dependencies] libservo = { path = "../../components/servo", features = ["no_static_freetype"] } diff --git a/ports/libsimpleservo/api/Cargo.toml b/ports/libsimpleservo/api/Cargo.toml index 083012403bbc..0d294c899003 100644 --- a/ports/libsimpleservo/api/Cargo.toml +++ b/ports/libsimpleservo/api/Cargo.toml @@ -46,6 +46,7 @@ native-bluetooth = ["libservo/native-bluetooth"] no_static_freetype = ["libservo/no_static_freetype"] no-wgl = ["libservo/no-wgl"] oculusvr = ["libservo/oculusvr"] +rust-tls = ["libservo/rust-tls"] webdriver = ["libservo/webdriver"] uwp = ["libservo/uwp", "webxr", "webxr/openxr-api"] webgl_backtrace = ["libservo/webgl_backtrace"] diff --git a/ports/libsimpleservo/capi/Cargo.toml b/ports/libsimpleservo/capi/Cargo.toml index 62c8b31632e5..ccd0455df276 100644 --- a/ports/libsimpleservo/capi/Cargo.toml +++ b/ports/libsimpleservo/capi/Cargo.toml @@ -41,6 +41,7 @@ max_log_level = ["simpleservo/max_log_level"] native-bluetooth = ["simpleservo/native-bluetooth"] no-wgl = ["simpleservo/no-wgl"] oculusvr = ["simpleservo/oculusvr"] +rust-tls = ["simpleservo/rust-tls"] uwp = ["simpleservo/uwp"] webdriver = ["simpleservo/webdriver"] webgl_backtrace = ["simpleservo/webgl_backtrace"] diff --git a/ports/libsimpleservo/jniapi/Cargo.toml b/ports/libsimpleservo/jniapi/Cargo.toml index d0e61568e606..082bb5e6ba58 100644 --- a/ports/libsimpleservo/jniapi/Cargo.toml +++ b/ports/libsimpleservo/jniapi/Cargo.toml @@ -40,5 +40,6 @@ layout-2020 = ["simpleservo/layout-2020"] max_log_level = ["simpleservo/max_log_level"] native-bluetooth = ["simpleservo/native-bluetooth"] oculusvr = ["simpleservo/oculusvr"] +rust-tls = ["simpleservo/rust-tls"] webdriver = ["simpleservo/webdriver"] webgl_backtrace = ["simpleservo/webgl_backtrace"] diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 2a82ec516123..91cb2f92a193 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -833,6 +833,7 @@ def build_like_command_arguments(decorated_function): help='Build with frame pointer enabled, used by the background hang monitor.', ), CommandArgument('--with-raqote', default=None, action='store_true'), + CommandArgument('--with-rustls', default=None, action='store_true'), CommandArgument('--with-layout-2020', default=None, action='store_true'), CommandArgument('--without-wgl', default=None, action='store_true'), ] @@ -859,8 +860,8 @@ def run_cargo_build_like_command( env=None, verbose=False, target=None, android=False, magicleap=False, libsimpleservo=False, features=None, debug_mozjs=False, with_debug_assertions=False, - with_frame_pointer=False, with_raqote=False, with_layout_2020=False, without_wgl=False, - uwp=False, + with_frame_pointer=False, with_raqote=False, with_rustls=False, with_layout_2020=False, + without_wgl=False, uwp=False, ): env = env or self.build_env() target, android = self.pick_target_triple(target, android, magicleap) @@ -899,6 +900,8 @@ def run_cargo_build_like_command( features.append("canvas2d-raqote") elif "canvas2d-raqote" not in features: features.append("canvas2d-azure") + if with_rustls: + features.append("rust-tls") if with_layout_2020 and "layout-2013" not in features: features.append("layout-2020") elif "layout-2020" not in features: