diff options
Diffstat (limited to 'components/net_traits/request.rs')
-rw-r--r-- | components/net_traits/request.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs index a882ce424ba..74f58d6f0c1 100644 --- a/components/net_traits/request.rs +++ b/components/net_traits/request.rs @@ -60,7 +60,7 @@ pub enum Origin { } /// A [referer](https://fetch.spec.whatwg.org/#concept-request-referrer) -#[derive(Clone, PartialEq, HeapSizeOf)] +#[derive(Clone, PartialEq, Serialize, Deserialize, HeapSizeOf)] pub enum Referrer { NoReferrer, /// Default referrer if nothing is specified @@ -158,6 +158,8 @@ pub struct RequestInit { pub pipeline_id: Option<PipelineId>, pub redirect_mode: RedirectMode, pub integrity_metadata: String, + // to keep track of redirects + pub url_list: Vec<ServoUrl>, } impl Default for RequestInit { @@ -182,6 +184,7 @@ impl Default for RequestInit { pipeline_id: None, redirect_mode: RedirectMode::Follow, integrity_metadata: "".to_owned(), + url_list: vec![], } } } @@ -290,7 +293,7 @@ impl Request { } pub fn from_init(init: RequestInit) -> Request { - let mut req = Request::new(init.url, + let mut req = Request::new(init.url.clone(), Some(Origin::Origin(init.origin.origin())), false, init.pipeline_id); @@ -314,6 +317,12 @@ impl Request { req.referrer_policy = init.referrer_policy; req.pipeline_id = init.pipeline_id; req.redirect_mode = init.redirect_mode; + let mut url_list = init.url_list; + if url_list.is_empty() { + url_list.push(init.url); + } + req.redirect_count = url_list.len() as u32 - 1; + req.url_list = url_list; req.integrity_metadata = init.integrity_metadata; req } |