diff --git a/Cargo.lock b/Cargo.lock index 45ce84d2f707..cdec7ba310b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1687,6 +1687,7 @@ dependencies = [ "hyper_serde 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "immeta 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1694,6 +1695,7 @@ dependencies = [ "msg 0.0.1", "net_traits 0.0.1", "openssl 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)", + "parse-hosts 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "profile_traits 0.0.1", "serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1760,7 +1762,6 @@ dependencies = [ "log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "parse-hosts 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "servo_config 0.0.1", diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index baea03a2ad28..47f412f28fab 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -20,6 +20,7 @@ hyper_serde = "0.6" hyper-openssl = "0.2.2" immeta = "0.3.1" ipc-channel = "0.7" +lazy_static = "0.2" log = "0.3.5" matches = "0.1" mime = "0.2.1" @@ -27,6 +28,7 @@ mime_guess = "1.8.0" msg = {path = "../msg"} net_traits = {path = "../net_traits"} openssl = "0.9" +parse-hosts = "0.3.0" profile_traits = {path = "../profile_traits"} serde = "0.9" serde_derive = "0.9" diff --git a/components/net/connector.rs b/components/net/connector.rs index a4b34605fd13..79bb2282ea0c 100644 --- a/components/net/connector.rs +++ b/components/net/connector.rs @@ -2,11 +2,11 @@ * 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 hosts::replace_host; use hyper::client::Pool; use hyper::error::{Result as HyperResult, Error as HyperError}; use hyper::net::{NetworkConnector, HttpsStream, HttpStream, SslClient}; use hyper_openssl::OpensslClient; -use net_traits::hosts::replace_host; use openssl::ssl::{SSL_OP_NO_COMPRESSION, SSL_OP_NO_SSLV2, SSL_OP_NO_SSLV3}; use openssl::ssl::{SslConnectorBuilder, SslMethod}; use std::io; diff --git a/components/net_traits/hosts.rs b/components/net/hosts.rs similarity index 78% rename from components/net_traits/hosts.rs rename to components/net/hosts.rs index 741d9734df49..adc46e870ea7 100644 --- a/components/net_traits/hosts.rs +++ b/components/net/hosts.rs @@ -3,7 +3,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use parse_hosts::HostsFile; -use servo_url::ServoUrl; use std::borrow::Cow; use std::collections::HashMap; use std::env; @@ -62,19 +61,3 @@ pub fn replace_host(host: &str) -> Cow { .and_then(|table| table.get(host)) .map_or(host.into(), |replaced_host| replaced_host.to_string().into()) } - -pub fn replace_host_in_url(url: ServoUrl) -> ServoUrl { - if let Some(table) = HOST_TABLE.lock().unwrap().as_ref() { - host_replacement(table, url) - } else { - url - } -} - -pub fn host_replacement(host_table: &HashMap, mut url: ServoUrl) -> ServoUrl { - let replacement = url.domain().and_then(|domain| host_table.get(domain)); - if let Some(ip) = replacement { - url.set_ip_host(*ip).unwrap(); - } - url -} diff --git a/components/net/lib.rs b/components/net/lib.rs index 34018dc6a655..1aa9e632c324 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -16,6 +16,8 @@ extern crate hyper_openssl; extern crate hyper_serde; extern crate immeta; extern crate ipc_channel; +#[macro_use] +extern crate lazy_static; #[macro_use] extern crate log; #[macro_use] #[no_link] extern crate matches; #[macro_use] @@ -24,6 +26,7 @@ extern crate mime_guess; extern crate msg; extern crate net_traits; extern crate openssl; +extern crate parse_hosts; extern crate profile_traits; extern crate serde; #[macro_use] @@ -47,6 +50,7 @@ pub mod cookie; pub mod cookie_storage; mod data_loader; pub mod filemanager_thread; +mod hosts; pub mod hsts; mod http_loader; pub mod image_cache; @@ -65,4 +69,5 @@ pub mod fetch { pub mod test { pub use chrome_loader::resolve_chrome_url; pub use http_loader::HttpState; + pub use hosts::{replace_host_table, parse_hostsfile}; } diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs index 8a66024f249b..71178bbc7d93 100644 --- a/components/net/websocket_loader.rs +++ b/components/net/websocket_loader.rs @@ -4,6 +4,7 @@ use cookie::Cookie; use fetch::methods::{should_be_blocked_due_to_bad_port, should_be_blocked_due_to_nosniff}; +use hosts::replace_host; use http_loader::{HttpState, is_redirect_status, set_default_accept}; use http_loader::{set_default_accept_language, set_request_cookies}; use hyper::buffer::BufReader; @@ -16,7 +17,6 @@ use hyper::status::StatusCode; use hyper::version::HttpVersion; use net_traits::{CookieSource, MessageData, NetworkError, WebSocketCommunicate, WebSocketConnectData}; use net_traits::{WebSocketDomAction, WebSocketNetworkEvent}; -use net_traits::hosts::replace_host; use net_traits::request::{Destination, Type}; use servo_url::ServoUrl; use std::ascii::AsciiExt; diff --git a/components/net_traits/Cargo.toml b/components/net_traits/Cargo.toml index 2d824212d6cf..96c3739b77d7 100644 --- a/components/net_traits/Cargo.toml +++ b/components/net_traits/Cargo.toml @@ -22,7 +22,6 @@ lazy_static = "0.2" log = "0.3.5" msg = {path = "../msg"} num-traits = "0.1.32" -parse-hosts = "0.3.0" serde = "0.9" serde_derive = "0.9" servo_config = {path = "../config", features = ["servo"]} diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 8966a7ce2763..7f6df9eb9ffb 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -22,7 +22,6 @@ extern crate lazy_static; extern crate log; extern crate msg; extern crate num_traits; -extern crate parse_hosts; extern crate serde; #[macro_use] extern crate serde_derive; @@ -51,7 +50,6 @@ use storage_thread::StorageThreadMsg; pub mod blob_url_store; pub mod filemanager_thread; -pub mod hosts; pub mod image_cache; pub mod net_error_list; pub mod pub_domains; diff --git a/tests/unit/net/hsts.rs b/tests/unit/net/hsts.rs index 34913354ac17..eca9d2a8d270 100644 --- a/tests/unit/net/hsts.rs +++ b/tests/unit/net/hsts.rs @@ -6,7 +6,6 @@ use net::hsts::{HstsEntry, HstsList}; use net_traits::IncludeSubdomains; use std::collections::HashMap; use time; -use url::Url; #[test] fn test_hsts_entry_is_not_expired_when_it_has_no_timestamp() { diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 30da574875e1..e08ac0b90128 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -25,8 +25,8 @@ use msg::constellation_msg::TEST_PIPELINE_ID; use net::cookie::Cookie; use net::cookie_storage::CookieStorage; use net::resource_thread::AuthCacheEntry; +use net::test::replace_host_table; use net_traits::{CookieSource, NetworkError}; -use net_traits::hosts::replace_host_table; use net_traits::request::{Request, RequestInit, RequestMode, CredentialsMode, Destination}; use net_traits::response::ResponseBody; use new_fetch_context; diff --git a/tests/unit/net/resource_thread.rs b/tests/unit/net/resource_thread.rs index 5062917b8dc9..8ad3081c2241 100644 --- a/tests/unit/net/resource_thread.rs +++ b/tests/unit/net/resource_thread.rs @@ -4,12 +4,9 @@ use ipc_channel::ipc; use net::resource_thread::new_core_resource_thread; +use net::test::parse_hostsfile; use net_traits::CoreResourceMsg; -use net_traits::hosts::{host_replacement, parse_hostsfile}; use profile_traits::time::ProfilerChan; -use servo_url::ServoUrl; -use std::borrow::ToOwned; -use std::collections::HashMap; use std::net::IpAddr; fn ip(s: &str) -> IpAddr { @@ -143,19 +140,3 @@ fn test_parse_hostsfile_with_end_of_line_whitespace() assert_eq!(ip("2001:db8:0:0:0:ff00:42:8329"), *hosts_table.get("moz.foo.com").unwrap()); assert_eq!(ip("127.0.0.2"), *hosts_table.get("servo.test.server").unwrap()); } - -#[test] -fn test_replace_hosts() { - let mut host_table = HashMap::new(); - host_table.insert("foo.bar.com".to_owned(), ip("127.0.0.1")); - host_table.insert("servo.test.server".to_owned(), ip("127.0.0.2")); - - let url = ServoUrl::parse("http://foo.bar.com:8000/foo").unwrap(); - assert_eq!(host_replacement(&host_table, url).host_str().unwrap(), "127.0.0.1"); - - let url = ServoUrl::parse("http://servo.test.server").unwrap(); - assert_eq!(host_replacement(&host_table, url).host_str().unwrap(), "127.0.0.2"); - - let url = ServoUrl::parse("http://a.foo.bar.com").unwrap(); - assert_eq!(host_replacement(&host_table, url).host_str().unwrap(), "a.foo.bar.com"); -}