Simplify handling of the referrer policy header in ScriptThread::load().

This commit is contained in:
Ms2ger 2017-01-26 14:37:11 +01:00
parent e4a1cb6f87
commit 5b97632132
2 changed files with 31 additions and 24 deletions

View file

@ -35,7 +35,7 @@ extern crate websocket;
use cookie_rs::Cookie; use cookie_rs::Cookie;
use filemanager_thread::FileManagerThreadMsg; use filemanager_thread::FileManagerThreadMsg;
use heapsize::HeapSizeOf; use heapsize::HeapSizeOf;
use hyper::header::{ContentType, Headers}; use hyper::header::{ContentType, Headers, ReferrerPolicy as ReferrerPolicyHeader};
use hyper::http::RawStatus; use hyper::http::RawStatus;
use hyper::mime::{Attr, Mime}; use hyper::mime::{Attr, Mime};
use hyper_serde::Serde; use hyper_serde::Serde;
@ -133,6 +133,29 @@ pub enum ReferrerPolicy {
StrictOriginWhenCrossOrigin, StrictOriginWhenCrossOrigin,
} }
impl<'a> From<&'a ReferrerPolicyHeader> for ReferrerPolicy {
fn from(policy: &'a ReferrerPolicyHeader) -> Self {
match *policy {
ReferrerPolicyHeader::NoReferrer =>
ReferrerPolicy::NoReferrer,
ReferrerPolicyHeader::NoReferrerWhenDowngrade =>
ReferrerPolicy::NoReferrerWhenDowngrade,
ReferrerPolicyHeader::SameOrigin =>
ReferrerPolicy::SameOrigin,
ReferrerPolicyHeader::Origin =>
ReferrerPolicy::Origin,
ReferrerPolicyHeader::OriginWhenCrossOrigin =>
ReferrerPolicy::OriginWhenCrossOrigin,
ReferrerPolicyHeader::UnsafeUrl =>
ReferrerPolicy::UnsafeUrl,
ReferrerPolicyHeader::StrictOrigin =>
ReferrerPolicy::StrictOrigin,
ReferrerPolicyHeader::StrictOriginWhenCrossOrigin =>
ReferrerPolicy::StrictOriginWhenCrossOrigin,
}
}
}
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]
pub enum FetchResponseMsg { pub enum FetchResponseMsg {
// todo: should have fields for transmitted/total bytes // todo: should have fields for transmitted/total bytes

View file

@ -57,7 +57,7 @@ use dom::window::{ReflowReason, Window};
use dom::worker::TrustedWorkerAddress; use dom::worker::TrustedWorkerAddress;
use euclid::Rect; use euclid::Rect;
use euclid::point::Point2D; use euclid::point::Point2D;
use hyper::header::{ContentType, HttpDate, LastModified}; use hyper::header::{ContentType, HttpDate, LastModified, Headers};
use hyper::header::ReferrerPolicy as ReferrerPolicyHeader; use hyper::header::ReferrerPolicy as ReferrerPolicyHeader;
use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::mime::{Mime, SubLevel, TopLevel};
use hyper_serde::Serde; use hyper_serde::Serde;
@ -97,6 +97,7 @@ use servo_config::opts;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use std::cell::Cell; use std::cell::Cell;
use std::collections::{hash_map, HashMap, HashSet}; use std::collections::{hash_map, HashMap, HashSet};
use std::ops::Deref;
use std::option::Option; use std::option::Option;
use std::ptr; use std::ptr;
use std::rc::Rc; use std::rc::Rc;
@ -1761,28 +1762,11 @@ impl ScriptThread {
None => None, None => None,
}; };
let referrer_policy = if let Some(headers) = metadata.headers { let referrer_policy = metadata.headers
headers.get::<ReferrerPolicyHeader>().map(|h| match *h { .as_ref()
ReferrerPolicyHeader::NoReferrer => .map(Serde::deref)
ReferrerPolicy::NoReferrer, .and_then(Headers::get::<ReferrerPolicyHeader>)
ReferrerPolicyHeader::NoReferrerWhenDowngrade => .map(ReferrerPolicy::from);
ReferrerPolicy::NoReferrerWhenDowngrade,
ReferrerPolicyHeader::SameOrigin =>
ReferrerPolicy::SameOrigin,
ReferrerPolicyHeader::Origin =>
ReferrerPolicy::Origin,
ReferrerPolicyHeader::OriginWhenCrossOrigin =>
ReferrerPolicy::OriginWhenCrossOrigin,
ReferrerPolicyHeader::UnsafeUrl =>
ReferrerPolicy::UnsafeUrl,
ReferrerPolicyHeader::StrictOrigin =>
ReferrerPolicy::StrictOrigin,
ReferrerPolicyHeader::StrictOriginWhenCrossOrigin =>
ReferrerPolicy::StrictOriginWhenCrossOrigin,
})
} else {
None
};
let document = Document::new(&window, let document = Document::new(&window,
Some(&browsing_context), Some(&browsing_context),