diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 97c6fc1d871..994f3d36702 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -150,9 +150,8 @@ pub fn main_fetch(request: Rc, // currently the clients themselves set referrer policy in RequestInit // Step 7 - if request.referrer_policy.get().is_none() { - request.referrer_policy.set(Some(ReferrerPolicy::NoReferrerWhenDowngrade)); - } + let referrer_policy = request.referrer_policy.get().unwrap_or(ReferrerPolicy::NoReferrerWhenDowngrade); + request.referrer_policy.set(Some(referrer_policy)); // Step 8 if *request.referrer.borrow() != Referrer::NoReferrer { @@ -160,7 +159,7 @@ pub fn main_fetch(request: Rc, // this stops the assertion in determine_request_referrer from failing request.headers.borrow_mut().remove::(); let referrer_url = determine_request_referrer(&mut *request.headers.borrow_mut(), - request.referrer_policy.get(), + referrer_policy, request.referrer.borrow_mut().take(), request.current_url().clone()); *request.referrer.borrow_mut() = Referrer::from_url(referrer_url); diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 88d37877f54..ddcdef9a439 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -277,7 +277,7 @@ fn strip_url(mut referrer_url: ServoUrl, origin_only: bool) -> Option /// https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer pub fn determine_request_referrer(headers: &mut Headers, - referrer_policy: Option, + referrer_policy: ReferrerPolicy, referrer_url: Option, url: ServoUrl) -> Option { //TODO - algorithm step 2 not addressed @@ -285,14 +285,14 @@ pub fn determine_request_referrer(headers: &mut Headers, if let Some(ref_url) = referrer_url { let cross_origin = ref_url.origin() != url.origin(); return match referrer_policy { - Some(ReferrerPolicy::NoReferrer) => None, - Some(ReferrerPolicy::Origin) => strip_url(ref_url, true), - Some(ReferrerPolicy::SameOrigin) => if cross_origin { None } else { strip_url(ref_url, false) }, - Some(ReferrerPolicy::UnsafeUrl) => strip_url(ref_url, false), - Some(ReferrerPolicy::OriginWhenCrossOrigin) => strip_url(ref_url, cross_origin), - Some(ReferrerPolicy::StrictOrigin) => strict_origin(ref_url, url), - Some(ReferrerPolicy::StrictOriginWhenCrossOrigin) => strict_origin_when_cross_origin(ref_url, url), - Some(ReferrerPolicy::NoReferrerWhenDowngrade) | None => + ReferrerPolicy::NoReferrer => None, + ReferrerPolicy::Origin => strip_url(ref_url, true), + ReferrerPolicy::SameOrigin => if cross_origin { None } else { strip_url(ref_url, false) }, + ReferrerPolicy::UnsafeUrl => strip_url(ref_url, false), + ReferrerPolicy::OriginWhenCrossOrigin => strip_url(ref_url, cross_origin), + ReferrerPolicy::StrictOrigin => strict_origin(ref_url, url), + ReferrerPolicy::StrictOriginWhenCrossOrigin => strict_origin_when_cross_origin(ref_url, url), + ReferrerPolicy::NoReferrerWhenDowngrade => no_referrer_when_downgrade_header(ref_url, url), }; }