aboutsummaryrefslogtreecommitdiffstats
path: root/components/net_traits/request.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net_traits/request.rs')
-rw-r--r--components/net_traits/request.rs13
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
}