diff --git a/components/net/hsts.rs b/components/net/hsts.rs index f7c7e995a17..2945ce0dbe5 100644 --- a/components/net/hsts.rs +++ b/components/net/hsts.rs @@ -5,6 +5,7 @@ use rustc_serialize::json::{decode}; use time; use url::Url; +use net_traits::IncludeSubdomains; use resource_task::{IPV4_REGEX, IPV6_REGEX}; use std::str::{from_utf8}; @@ -19,20 +20,14 @@ pub struct HSTSEntry { pub timestamp: Option } -#[derive(PartialEq, Copy, Clone)] -pub enum Subdomains { - Included, - NotIncluded -} - impl HSTSEntry { - pub fn new(host: String, subdomains: Subdomains, max_age: Option) -> Option { + pub fn new(host: String, subdomains: IncludeSubdomains, max_age: Option) -> Option { if IPV4_REGEX.is_match(&host) || IPV6_REGEX.is_match(&host) { None } else { Some(HSTSEntry { host: host, - include_subdomains: (subdomains == Subdomains::Included), + include_subdomains: (subdomains == IncludeSubdomains::Included), max_age: max_age, timestamp: Some(time::get_time().sec as u64) }) diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index f221b77e51d..1e857102e33 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -19,7 +19,7 @@ use util::opts; use util::task::spawn_named; use url::Url; -use hsts::{HSTSList, HSTSEntry, Subdomains, preload_hsts_domains}; +use hsts::{HSTSList, HSTSEntry, preload_hsts_domains}; use devtools_traits::{DevtoolsControlMsg}; use hyper::header::{ContentType, Header, SetCookie, UserAgent}; @@ -236,13 +236,7 @@ impl ResourceChannelManager { consumer.send(self.resource_manager.cookie_storage.cookies_for_url(&url, source)).unwrap(); } ControlMsg::SetHSTSEntryForHost(host, include_subdomains, max_age) => { - let subdomains = if include_subdomains { - Subdomains::Included - } else { - Subdomains::NotIncluded - }; - - if let Some(entry) = HSTSEntry::new(host, subdomains, max_age) { + if let Some(entry) = HSTSEntry::new(host, include_subdomains, max_age) { self.resource_manager.add_hsts_entry(entry) } } diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 5da6357d333..0ceb00939f8 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -119,6 +119,12 @@ pub enum LoadConsumer { /// Handle to a resource task pub type ResourceTask = Sender; +#[derive(PartialEq, Copy, Clone)] +pub enum IncludeSubdomains { + Included, + NotIncluded +} + pub enum ControlMsg { /// Request the data associated with a particular URL Load(LoadData, LoadConsumer), @@ -127,7 +133,7 @@ pub enum ControlMsg { /// Retrieve the stored cookies for a given URL GetCookiesForUrl(Url, Sender>, CookieSource), /// Store a domain's STS information - SetHSTSEntryForHost(String, bool, Option), + SetHSTSEntryForHost(String, IncludeSubdomains, Option), Exit } diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 3c87137b941..b1d022693f0 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -875,8 +875,8 @@ dependencies = [ "hyper 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "net 0.0.1", "net_traits 0.0.1", - "url 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "url 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] diff --git a/tests/unit/net/hsts.rs b/tests/unit/net/hsts.rs index bdefa6b4645..23d455c5aae 100644 --- a/tests/unit/net/hsts.rs +++ b/tests/unit/net/hsts.rs @@ -4,7 +4,7 @@ use net::hsts::HSTSList; use net::hsts::HSTSEntry; -use net::hsts::Subdomains; +use net_traits::IncludeSubdomains; use net::hsts::secure_url; use net::resource_task::ResourceManager; use std::sync::mpsc::channel; @@ -21,7 +21,7 @@ fn test_add_hsts_entry_to_resource_manager_adds_an_hsts_entry() { let mut manager = ResourceManager::new(None, tx, list, None); let entry = HSTSEntry::new( - "mozilla.org".to_string(), Subdomains::NotIncluded, None + "mozilla.org".to_string(), IncludeSubdomains::NotIncluded, None ); assert!(!manager.is_host_sts("mozilla.org")); @@ -70,7 +70,7 @@ fn test_hsts_entry_is_expired_when_it_has_reached_its_max_age() { #[test] fn test_hsts_entry_cant_be_created_with_ipv6_address_as_host() { let entry = HSTSEntry::new( - "2001:0db8:0000:0000:0000:ff00:0042:8329".to_string(), Subdomains::NotIncluded, None + "2001:0db8:0000:0000:0000:ff00:0042:8329".to_string(), IncludeSubdomains::NotIncluded, None ); assert!(entry.is_none(), "able to create HSTSEntry with IPv6 host"); @@ -79,7 +79,7 @@ fn test_hsts_entry_cant_be_created_with_ipv6_address_as_host() { #[test] fn test_hsts_entry_cant_be_created_with_ipv4_address_as_host() { let entry = HSTSEntry::new( - "4.4.4.4".to_string(), Subdomains::NotIncluded, None + "4.4.4.4".to_string(), IncludeSubdomains::NotIncluded, None ); assert!(entry.is_none(), "able to create HSTSEntry with IPv4 host"); @@ -88,10 +88,12 @@ fn test_hsts_entry_cant_be_created_with_ipv4_address_as_host() { #[test] fn test_push_entry_with_0_max_age_evicts_entry_from_list() { let mut list = HSTSList { - entries: vec!(HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, Some(500000u64)).unwrap()) + entries: vec!(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, Some(500000u64)).unwrap()) }; - list.push(HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, Some(0)).unwrap()); + list.push(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, Some(0)).unwrap()); assert!(list.is_host_secure("mozilla.org") == false) } @@ -99,10 +101,12 @@ fn test_push_entry_with_0_max_age_evicts_entry_from_list() { #[test] fn test_push_entry_to_hsts_list_should_not_add_subdomains_whose_superdomain_is_already_matched() { let mut list = HSTSList { - entries: vec!(HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()) + entries: vec!(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()) }; - list.push(HSTSEntry::new("servo.mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()); + list.push(HSTSEntry::new("servo.mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()); assert!(list.entries.len() == 1) } @@ -110,12 +114,14 @@ fn test_push_entry_to_hsts_list_should_not_add_subdomains_whose_superdomain_is_a #[test] fn test_push_entry_to_hsts_list_should_update_existing_domain_entrys_include_subdomains() { let mut list = HSTSList { - entries: vec!(HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()) + entries: vec!(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()) }; assert!(list.is_host_secure("servo.mozilla.org")); - list.push(HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()); + list.push(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()); assert!(!list.is_host_secure("servo.mozilla.org")) } @@ -123,10 +129,12 @@ fn test_push_entry_to_hsts_list_should_update_existing_domain_entrys_include_sub #[test] fn test_push_entry_to_hsts_list_should_not_create_duplicate_entry() { let mut list = HSTSList { - entries: vec!(HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()) + entries: vec!(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()) }; - list.push(HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()); + list.push(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()); assert!(list.entries.len() == 1) } @@ -140,8 +148,10 @@ fn test_push_multiple_entrie_to_hsts_list_should_add_them_all() { assert!(!list.is_host_secure("mozilla.org")); assert!(!list.is_host_secure("bugzilla.org")); - list.push(HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()); - list.push(HSTSEntry::new("bugzilla.org".to_string(), Subdomains::Included, None).unwrap()); + list.push(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()); + list.push(HSTSEntry::new("bugzilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()); assert!(list.is_host_secure("mozilla.org")); assert!(list.is_host_secure("bugzilla.org")); @@ -155,7 +165,8 @@ fn test_push_entry_to_hsts_list_should_add_an_entry() { assert!(!list.is_host_secure("mozilla.org")); - list.push(HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()); + list.push(HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()); assert!(list.is_host_secure("mozilla.org")); } @@ -199,7 +210,8 @@ fn test_hsts_list_with_no_entries_does_not_is_host_secure() { #[test] fn test_hsts_list_with_exact_domain_entry_is_is_host_secure() { let hsts_list = HSTSList { - entries: vec![HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()] + entries: vec![HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()] }; assert!(hsts_list.is_host_secure("mozilla.org")); @@ -208,7 +220,8 @@ fn test_hsts_list_with_exact_domain_entry_is_is_host_secure() { #[test] fn test_hsts_list_with_subdomain_when_include_subdomains_is_true_is_is_host_secure() { let hsts_list = HSTSList { - entries: vec![HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()] + entries: vec![HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()] }; assert!(hsts_list.is_host_secure("servo.mozilla.org")); @@ -217,7 +230,8 @@ fn test_hsts_list_with_subdomain_when_include_subdomains_is_true_is_is_host_secu #[test] fn test_hsts_list_with_subdomain_when_include_subdomains_is_false_is_not_is_host_secure() { let hsts_list = HSTSList { - entries: vec![HSTSEntry::new("mozilla.org".to_string(), Subdomains::NotIncluded, None).unwrap()] + entries: vec![HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::NotIncluded, None).unwrap()] }; assert!(!hsts_list.is_host_secure("servo.mozilla.org")); @@ -226,7 +240,8 @@ fn test_hsts_list_with_subdomain_when_include_subdomains_is_false_is_not_is_host #[test] fn test_hsts_list_with_subdomain_when_host_is_not_a_subdomain_is_not_is_host_secure() { let hsts_list = HSTSList { - entries: vec![HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()] + entries: vec![HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()] }; assert!(!hsts_list.is_host_secure("servo-mozilla.org")); @@ -235,7 +250,8 @@ fn test_hsts_list_with_subdomain_when_host_is_not_a_subdomain_is_not_is_host_sec #[test] fn test_hsts_list_with_subdomain_when_host_is_exact_match_is_is_host_secure() { let hsts_list = HSTSList { - entries: vec![HSTSEntry::new("mozilla.org".to_string(), Subdomains::Included, None).unwrap()] + entries: vec![HSTSEntry::new("mozilla.org".to_string(), + IncludeSubdomains::Included, None).unwrap()] }; assert!(hsts_list.is_host_secure("mozilla.org"));