mirror of
https://github.com/servo/servo.git
synced 2025-08-11 16:35:33 +01:00
Auto merge of #10696 - rebstar6:referrerPolicy, r=jdm
Referer header PR1 for https://github.com/servo/servo/issues/10311 This puts the code and data structures in place to set the Referer header based on the Referrer Policy for a given document. Note that document:: get_referrer_policy() always returns the 'No Referrer' option, so for now, this should have no impact on production code, and that policy requires that the Referer header is not added. Later PRs will determine the policy and edit that get_referrer_policy() accordingly. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10696) <!-- Reviewable:end -->
This commit is contained in:
commit
34900814fc
19 changed files with 369 additions and 68 deletions
|
@ -24,7 +24,7 @@ fn assert_parse(url: &'static str,
|
|||
|
||||
let (start_chan, start_port) = ipc::channel().unwrap();
|
||||
let classifier = Arc::new(MIMEClassifier::new());
|
||||
load(LoadData::new(LoadContext::Browsing, Url::parse(url).unwrap(), None),
|
||||
load(LoadData::new(LoadContext::Browsing, Url::parse(url).unwrap(), None, None, None),
|
||||
Channel(start_chan),
|
||||
classifier, CancellationListener::new(None));
|
||||
|
||||
|
|
|
@ -10,13 +10,13 @@ use flate2::Compression;
|
|||
use flate2::write::{GzEncoder, DeflateEncoder};
|
||||
use hyper::header::{Accept, AcceptEncoding, ContentEncoding, ContentLength, Cookie as CookieHeader};
|
||||
use hyper::header::{Authorization, Basic};
|
||||
use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, qitem, SetCookie};
|
||||
use hyper::header::{Encoding, Headers, Host, Location, Quality, QualityItem, qitem, Referer, SetCookie};
|
||||
use hyper::header::{StrictTransportSecurity, UserAgent};
|
||||
use hyper::http::RawStatus;
|
||||
use hyper::method::Method;
|
||||
use hyper::mime::{Mime, SubLevel, TopLevel};
|
||||
use hyper::status::StatusCode;
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use msg::constellation_msg::{PipelineId, ReferrerPolicy};
|
||||
use net::cookie::Cookie;
|
||||
use net::cookie_storage::CookieStorage;
|
||||
use net::hsts::HstsEntry;
|
||||
|
@ -328,7 +328,7 @@ fn test_check_default_headers_loaded_in_every_request() {
|
|||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
load_data.data = None;
|
||||
load_data.method = Method::Get;
|
||||
|
||||
|
@ -372,7 +372,7 @@ fn test_load_when_request_is_not_get_or_head_and_there_is_no_body_content_length
|
|||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
load_data.data = None;
|
||||
load_data.method = Method::Post;
|
||||
|
||||
|
@ -410,7 +410,7 @@ fn test_request_and_response_data_with_network_messages() {
|
|||
let (devtools_chan, devtools_port) = mpsc::channel::<DevtoolsControlMsg>();
|
||||
// This will probably have to be changed as it uses fake_root_pipeline_id which is marked for removal.
|
||||
let pipeline_id = PipelineId::fake_root_pipeline_id();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), Some(pipeline_id));
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), Some(pipeline_id), None, None);
|
||||
let mut request_headers = Headers::new();
|
||||
request_headers.set(Host { hostname: "bar.foo".to_owned(), port: None });
|
||||
load_data.headers = request_headers.clone();
|
||||
|
@ -483,7 +483,7 @@ fn test_request_and_response_message_from_devtool_without_pipeline_id() {
|
|||
|
||||
let url = Url::parse("https://mozilla.com").unwrap();
|
||||
let (devtools_chan, devtools_port) = mpsc::channel::<DevtoolsControlMsg>();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
let _ = load(&load_data, &ui_provider, &http_state, Some(devtools_chan), &Factory,
|
||||
DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None));
|
||||
|
||||
|
@ -512,7 +512,8 @@ fn test_load_when_redirecting_from_a_post_should_rewrite_next_request_as_get() {
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
load_data.method = Method::Post;
|
||||
|
||||
let http_state = HttpState::new();
|
||||
|
@ -541,7 +542,7 @@ fn test_load_should_decode_the_response_as_deflate_when_response_headers_have_co
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -575,7 +576,8 @@ fn test_load_should_decode_the_response_as_gzip_when_response_headers_have_conte
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
|
@ -617,7 +619,8 @@ fn test_load_doesnt_send_request_body_on_any_redirect() {
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
load_data.data = Some(<[_]>::to_vec("Body on POST!".as_bytes()));
|
||||
|
||||
let http_state = HttpState::new();
|
||||
|
@ -648,7 +651,7 @@ fn test_load_doesnt_add_host_to_sts_list_when_url_is_http_even_if_sts_headers_ar
|
|||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -680,7 +683,7 @@ fn test_load_adds_host_to_sts_list_when_url_is_https_and_sts_headers_are_present
|
|||
|
||||
let url = Url::parse("https://mozilla.com").unwrap();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -717,7 +720,7 @@ fn test_load_sets_cookies_in_the_resource_manager_when_it_get_set_cookie_header_
|
|||
|
||||
assert_cookie_for_domain(http_state.cookie_jar.clone(), "http://mozilla.com", "");
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let _ = load(&load_data,
|
||||
&ui_provider, &http_state,
|
||||
|
@ -733,7 +736,7 @@ fn test_load_sets_cookies_in_the_resource_manager_when_it_get_set_cookie_header_
|
|||
fn test_load_sets_requests_cookies_header_for_url_by_getting_cookies_from_the_resource_manager() {
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
let http_state = HttpState::new();
|
||||
|
@ -789,7 +792,7 @@ fn test_load_sends_secure_cookie_if_http_changed_to_https_due_to_entry_in_hsts_s
|
|||
cookie_jar.push(cookie, CookieSource::HTTP);
|
||||
}
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
let mut headers = Headers::new();
|
||||
|
@ -821,7 +824,7 @@ fn test_load_sends_cookie_if_nonhttp() {
|
|||
cookie_jar.push(cookie, CookieSource::HTTP);
|
||||
}
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
let mut headers = Headers::new();
|
||||
|
@ -855,7 +858,7 @@ fn test_cookie_set_with_httponly_should_not_be_available_using_getcookiesforurl(
|
|||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
let _ = load(&load_data,
|
||||
&ui_provider, &http_state,
|
||||
None,
|
||||
|
@ -885,7 +888,7 @@ fn test_when_cookie_received_marked_secure_is_ignored_for_http() {
|
|||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, Url::parse("http://mozilla.com").unwrap(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, Url::parse("http://mozilla.com").unwrap(), None, None, None);
|
||||
let _ = load(&load_data,
|
||||
&ui_provider, &http_state,
|
||||
None,
|
||||
|
@ -916,7 +919,7 @@ fn test_when_cookie_set_marked_httpsonly_secure_isnt_sent_on_http_request() {
|
|||
cookie_jar.push(cookie, CookieSource::HTTP);
|
||||
}
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
assert_cookie_for_domain(http_state.cookie_jar.clone(), "https://mozilla.com", "mozillaIs=theBest");
|
||||
|
@ -934,7 +937,8 @@ fn test_load_sets_content_length_to_length_of_request_body() {
|
|||
let content = "This is a request body";
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
load_data.data = Some(<[_]>::to_vec(content.as_bytes()));
|
||||
|
||||
let mut content_len_headers = Headers::new();
|
||||
|
@ -959,7 +963,8 @@ fn test_load_uses_explicit_accept_from_headers_in_load_data() {
|
|||
accept_headers.set(Accept(vec![text_html.clone()]));
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
load_data.headers.set(Accept(vec![text_html.clone()]));
|
||||
|
||||
|
@ -987,7 +992,8 @@ fn test_load_sets_default_accept_to_html_xhtml_xml_and_then_anything_else() {
|
|||
]));
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
let http_state = HttpState::new();
|
||||
|
@ -1009,7 +1015,7 @@ fn test_load_uses_explicit_accept_encoding_from_load_data_headers() {
|
|||
accept_encoding_headers.set(AcceptEncoding(vec![qitem(Encoding::Chunked)]));
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
load_data.headers.set(AcceptEncoding(vec![qitem(Encoding::Chunked)]));
|
||||
|
||||
|
@ -1034,7 +1040,7 @@ fn test_load_sets_default_accept_encoding_to_gzip_and_deflate() {
|
|||
qitem(Encoding::EncodingExt("br".to_owned()))]));
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
load_data.data = Some(<[_]>::to_vec("Yay!".as_bytes()));
|
||||
|
||||
let http_state = HttpState::new();
|
||||
|
@ -1069,7 +1075,7 @@ fn test_load_errors_when_there_a_redirect_loop() {
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1099,7 +1105,7 @@ fn test_load_errors_when_there_is_too_many_redirects() {
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1146,8 +1152,7 @@ fn test_load_follows_a_redirect() {
|
|||
}
|
||||
|
||||
let url = Url::parse("http://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
|
@ -1174,7 +1179,7 @@ impl HttpRequestFactory for DontConnectFactory {
|
|||
#[test]
|
||||
fn test_load_errors_when_scheme_is_not_http_or_https() {
|
||||
let url = Url::parse("ftp://not-supported").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1193,7 +1198,7 @@ fn test_load_errors_when_scheme_is_not_http_or_https() {
|
|||
#[test]
|
||||
fn test_load_errors_when_viewing_source_and_inner_url_scheme_is_not_http_or_https() {
|
||||
let url = Url::parse("view-source:ftp://not-supported").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1236,7 +1241,7 @@ fn test_load_errors_when_cancelled() {
|
|||
cancel_sender.send(()).unwrap();
|
||||
|
||||
let url = Url::parse("https://mozilla.com").unwrap();
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
|
@ -1285,7 +1290,7 @@ fn test_redirect_from_x_to_y_provides_y_cookies_from_y() {
|
|||
}
|
||||
}
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url_x.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url_x.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1351,7 +1356,7 @@ fn test_redirect_from_x_to_x_provides_x_with_cookie_from_first_response() {
|
|||
}
|
||||
}
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), None, None, None);
|
||||
|
||||
let http_state = HttpState::new();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
@ -1384,7 +1389,7 @@ fn test_if_auth_creds_not_in_url_but_in_cache_it_sets_it() {
|
|||
|
||||
http_state.auth_cache.write().unwrap().entries.insert(url.clone(), auth_entry);
|
||||
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None);
|
||||
let mut load_data = LoadData::new(LoadContext::Browsing, url, None, None, None);
|
||||
load_data.credentials_flag = true;
|
||||
|
||||
let mut auth_header = Headers::new();
|
||||
|
@ -1423,7 +1428,7 @@ fn test_auth_ui_sets_header_on_401() {
|
|||
)
|
||||
);
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url, None);
|
||||
let load_data = LoadData::new(LoadContext::Browsing, url, None, None, None);
|
||||
|
||||
match load(
|
||||
&load_data, &ui_provider, &http_state,
|
||||
|
@ -1437,3 +1442,188 @@ fn test_auth_ui_sets_header_on_401() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn assert_referer_header_matches(request_url: &str,
|
||||
referrer_url: &str,
|
||||
referrer_policy: Option<ReferrerPolicy>,
|
||||
expected_referrer: &str) {
|
||||
let ref_url = Url::parse(referrer_url).unwrap();
|
||||
let url = Url::parse(request_url).unwrap();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing,
|
||||
url.clone(),
|
||||
None,
|
||||
referrer_policy,
|
||||
Some(ref_url));
|
||||
|
||||
let mut referer_headers = Headers::new();
|
||||
referer_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: referer_headers,
|
||||
body: <[_]>::to_vec(&[])
|
||||
}, DEFAULT_USER_AGENT.to_owned(),
|
||||
&CancellationListener::new(None));
|
||||
}
|
||||
|
||||
fn assert_referer_header_not_included(request_url: &str, referrer_url: &str, referrer_policy: Option<ReferrerPolicy>) {
|
||||
let ref_url = Url::parse(referrer_url).unwrap();
|
||||
let url = Url::parse(request_url).unwrap();
|
||||
let ui_provider = TestProvider::new();
|
||||
|
||||
let load_data = LoadData::new(LoadContext::Browsing,
|
||||
url.clone(),
|
||||
None,
|
||||
referrer_policy,
|
||||
Some(ref_url));
|
||||
|
||||
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.to_owned(), &CancellationListener::new(None));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_set_to_origin_with_originonly_policy() {
|
||||
let request_url = "http://mozilla.com";
|
||||
let referrer_url = "http://username:password@someurl.com/some/path#fragment";
|
||||
let referrer_policy = Some(ReferrerPolicy::OriginOnly);
|
||||
let expected_referrer = "http://someurl.com/";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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/";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_http_to_https_considered_cross_origin_for_referer_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/";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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::NoRefWhenDowngrade);
|
||||
let expected_referrer = "https://mozilla.com/some/path";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_no_referer_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::NoRefWhenDowngrade);
|
||||
|
||||
assert_referer_header_not_included(request_url, referrer_url, referrer_policy)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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::NoRefWhenDowngrade);
|
||||
let expected_referrer = "http://mozilla.com/some/path";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_referer_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::NoRefWhenDowngrade);
|
||||
let expected_referrer = "http://mozilla.com/some/path";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, 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";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, 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;
|
||||
|
||||
assert_referer_header_not_included(request_url, referrer_url, referrer_policy);
|
||||
}
|
||||
|
||||
#[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";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, 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";
|
||||
|
||||
assert_referer_header_matches(request_url, referrer_url, referrer_policy, expected_referrer);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_no_referer_set_with_noreferrer_policy() {
|
||||
let request_url = "http://mozilla.com";
|
||||
let referrer_url = "http://someurl.com";
|
||||
let referrer_policy = Some(ReferrerPolicy::NoReferrer);
|
||||
|
||||
assert_referer_header_not_included(request_url, referrer_url, referrer_policy)
|
||||
}
|
||||
|
|
|
@ -27,8 +27,9 @@ fn test_bad_scheme() {
|
|||
let resource_thread = new_resource_thread("".to_owned(), None);
|
||||
let (start_chan, start) = ipc::channel().unwrap();
|
||||
let url = Url::parse("bogus://whatever").unwrap();
|
||||
resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None),
|
||||
LoadConsumer::Channel(start_chan), None)).unwrap();
|
||||
resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None, None, None),
|
||||
|
||||
LoadConsumer::Channel(start_chan), None)).unwrap();
|
||||
let response = start.recv().unwrap();
|
||||
match response.progress_port.recv().unwrap() {
|
||||
ProgressMsg::Done(result) => { assert!(result.is_err()) }
|
||||
|
@ -205,7 +206,7 @@ fn test_cancelled_listener() {
|
|||
let (sync_sender, sync_receiver) = ipc::channel().unwrap();
|
||||
let url = Url::parse(&format!("http://127.0.0.1:{}", port)).unwrap();
|
||||
|
||||
resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None),
|
||||
resource_thread.send(ControlMsg::Load(LoadData::new(LoadContext::Browsing, url, None, None, None),
|
||||
LoadConsumer::Channel(sender),
|
||||
Some(id_sender))).unwrap();
|
||||
// get the `ResourceId` and send a cancel message, which should stop the loading loop
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue