diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index c7582ba6b4d..1afb5a1aa1f 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -13,7 +13,7 @@ use flate2::write::{DeflateEncoder, GzEncoder}; use hyper::LanguageTag; use hyper::header::{Accept, AcceptEncoding, ContentEncoding, ContentLength, Cookie as CookieHeader}; use hyper::header::{AcceptLanguage, Authorization, Basic, Date}; -use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, Referer, SetCookie, qitem}; +use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, SetCookie, qitem}; use hyper::header::{StrictTransportSecurity, UserAgent}; use hyper::http::RawStatus; use hyper::method::Method; @@ -62,23 +62,6 @@ impl LoadOrigin for HttpTest { } } -struct LoadOriginInfo<'a> { - referrer_url: &'a str, - referrer_policy: Option, -} - -impl<'a> LoadOrigin for LoadOriginInfo<'a> { - fn referrer_url(&self) -> Option { - Some(ServoUrl::parse(self.referrer_url).unwrap()) - } - fn referrer_policy(&self) -> Option { - self.referrer_policy.clone() - } - fn pipeline_id(&self) -> Option { - None - } -} - fn respond_with(body: Vec) -> MockResponse { let headers = Headers::new(); respond_with_headers(body, headers) @@ -1520,431 +1503,6 @@ fn test_auth_ui_needs_www_auth() { assert_eq!(response.status.unwrap(), StatusCode::Unauthorized); } -fn assert_referrer_header_matches(origin_info: &LoadOrigin, - request_url: &str, - expected_referrer: &str) { - let url = ServoUrl::parse(request_url).unwrap(); - let ui_provider = TestProvider::new(); - - let load_data = LoadData::new(LoadContext::Browsing, - url.clone(), - origin_info); - - let mut referrer_headers = Headers::new(); - referrer_headers.set(Referer(expected_referrer.to_owned())); - - let http_state = HttpState::new(); - - let _ = load(&load_data.clone(), &ui_provider, &http_state, None, - &AssertMustIncludeHeadersRequestFactory { - expected_headers: referrer_headers, - body: <[_]>::to_vec(&[]) - }, DEFAULT_USER_AGENT.into(), - &CancellationListener::new(None), None); -} - -fn assert_referrer_header_not_included(origin_info: &LoadOrigin, request_url: &str) { - let url = ServoUrl::parse(request_url).unwrap(); - let ui_provider = TestProvider::new(); - - let load_data = LoadData::new(LoadContext::Browsing, - url.clone(), - origin_info); - - let http_state = HttpState::new(); - - let _ = load( - &load_data.clone(), &ui_provider, &http_state, None, - &AssertMustNotIncludeHeadersRequestFactory { - headers_not_expected: vec!["Referer".to_owned()], - body: <[_]>::to_vec(&[]) - }, DEFAULT_USER_AGENT.into(), &CancellationListener::new(None), None); -} - -#[test] -fn test_referrer_set_to_origin_with_origin_policy() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@someurl.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::Origin); - let expected_referrer = "http://someurl.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_to_ref_url_with_sameorigin_policy_same_orig() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::SameOrigin); - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_set_with_sameorigin_policy_cross_orig() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@someurl.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::SameOrigin); - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_not_included(&origin_info, request_url); -} - -#[test] -fn test_referrer_set_to_stripped_url_with_unsafeurl_policy() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@someurl.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::UnsafeUrl); - let expected_referrer = "http://someurl.com/some/path"; - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_originwhencrossorigin_policy_cross_orig() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@someurl.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); - let expected_referrer = "http://someurl.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_originwhencrossorigin_policy_same_orig() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_http_to_https_considered_cross_origin_for_referrer_header_logic() { - let request_url = "https://mozilla.com"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::OriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_strictorigin_policy_http_to_https() { - let request_url = "https://mozilla.com"; - let referrer_url = "http://mozilla.com"; - let referrer_policy = Some(ReferrerPolicy::StrictOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_with_strictorigin_policy_https_to_http() { - let request_url = "http://mozilla.com"; - let referrer_url = "https://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOrigin); - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_not_included(&origin_info, request_url); -} - -#[test] -fn test_referrer_with_strictorigin_policy_http_to_http() { - let request_url = "http://mozilla.com/"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_strictorigin_policy_https_to_https() { - let request_url = "https://mozilla.com/"; - let referrer_url = "https://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOrigin); - let expected_referrer = "https://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_strictoriginwhencrossorigin_policy_https_to_https_same_origin() { - let request_url = "https://mozilla.com"; - let referrer_url = "https://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "https://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_with_strictoriginwhencrossorigin_policy_https_to_https_cross_origin() { - let request_url = "https://servo.mozilla.com"; - let referrer_url = "https://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "https://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_with_strictoriginwhencrossorigin_policy_http_to_http_cross_orig() { - let request_url = "http://servo.mozilla.com"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_with_strictoriginwhencrossorigin_policy_http_to_http_same_orig() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_with_strictoriginwhencrossorigin_policy_http_to_https_cross_orig() { - let request_url = "https://servo.mozilla.com"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_with_strictoriginwhencrossorigin_policy_http_to_https_same_orig() { - let request_url = "https://mozilla.com"; - let referrer_url = "http://mozilla.com/some/path"; - let referrer_policy = Some(ReferrerPolicy::StrictOriginWhenCrossOrigin); - let expected_referrer = "http://mozilla.com/"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_to_ref_url_with_noreferrerwhendowngrade_policy_https_to_https() { - let request_url = "https://mozilla.com"; - let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::NoReferrerWhenDowngrade); - let expected_referrer = "https://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy, - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_set_with_noreferrerwhendowngrade_policy_https_to_http() { - let request_url = "http://mozilla.com"; - let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::NoReferrerWhenDowngrade); - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_not_included(&origin_info, request_url) -} - -#[test] -fn test_referrer_set_to_ref_url_with_noreferrerwhendowngrade_policy_http_to_https() { - let request_url = "https://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::NoReferrerWhenDowngrade); - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_referrer_set_to_ref_url_with_noreferrerwhendowngrade_policy_http_to_http() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = Some(ReferrerPolicy::NoReferrerWhenDowngrade); - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_policy_follows_noreferrerwhendowngrade_https_to_https() { - let request_url = "https://mozilla.com"; - let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = None; - let expected_referrer = "https://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_policy_follows_noreferrerwhendowngrade_https_to_http() { - let request_url = "http://mozilla.com"; - let referrer_url = "https://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = None; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_not_included(&origin_info, request_url); -} - -#[test] -fn test_no_referrer_policy_follows_noreferrerwhendowngrade_http_to_https() { - let request_url = "https://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = None; - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_policy_follows_noreferrerwhendowngrade_http_to_http() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://username:password@mozilla.com/some/path#fragment"; - let referrer_policy = None; - let expected_referrer = "http://mozilla.com/some/path"; - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy - }; - - assert_referrer_header_matches(&origin_info, request_url, expected_referrer); -} - -#[test] -fn test_no_referrer_set_with_noreferrer_policy() { - let request_url = "http://mozilla.com"; - let referrer_url = "http://someurl.com"; - let referrer_policy = Some(ReferrerPolicy::NoReferrer); - - let origin_info = LoadOriginInfo { - referrer_url: referrer_url, - referrer_policy: referrer_policy, - }; - - assert_referrer_header_not_included(&origin_info, request_url) -} - fn load_request_for_custom_response(expected_body: Vec) -> (Metadata, String) { use ipc_channel::ipc; let (sender, receiver) = ipc::channel().unwrap();