diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index aac309b5ecf..2e7ce27f54a 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -1024,7 +1024,8 @@ fn http_network_fetch(request: Rc, response.status = Some(res.response.status); response.raw_status = Some((res.response.status_raw().0, res.response.status_raw().1.as_bytes().to_vec())); - response.headers = res.response.headers.clone(); + response.headers = res.response.headers.clone(); + response.referrer = request.referrer.borrow().to_url().cloned(); let res_body = response.body.clone(); diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs index 154e689bcef..e9de8d83a58 100644 --- a/components/net_traits/response.rs +++ b/components/net_traits/response.rs @@ -91,6 +91,7 @@ pub struct Response { pub body: Arc>, pub cache_state: CacheState, pub https_state: HttpsState, + pub referrer: Option, /// [Internal response](https://fetch.spec.whatwg.org/#concept-internal-response), only used if the Response /// is a filtered response pub internal_response: Option>, @@ -111,6 +112,7 @@ impl Response { body: Arc::new(Mutex::new(ResponseBody::Empty)), cache_state: CacheState::None, https_state: HttpsState::None, + referrer: None, internal_response: None, return_internal: Cell::new(true) } @@ -128,6 +130,7 @@ impl Response { body: Arc::new(Mutex::new(ResponseBody::Empty)), cache_state: CacheState::None, https_state: HttpsState::None, + referrer: None, internal_response: None, return_internal: Cell::new(true) } @@ -244,6 +247,7 @@ impl Response { metadata.headers = Some(Serde(response.headers.clone())); metadata.status = response.raw_status.clone(); metadata.https_state = response.https_state; + metadata.referrer = response.referrer.clone(); metadata };