Thread the status through navigation redirects

This is necessary because status codes affect whether the redirect is
done with the same HTTP method or a different one.

This is part of #21886, but there's also a flaw in how iframes are handled
that is causing the redirect to take over the entire window, so this
commit doesn't entirely fix slither.io.
This commit is contained in:
Michael Howell 2018-10-13 00:14:56 +00:00
parent bf192caf4b
commit 3b1bfa3942
2 changed files with 5 additions and 0 deletions

View file

@ -113,6 +113,9 @@ impl NetworkListener {
location_url: metadata.location_url.clone(), location_url: metadata.location_url.clone(),
headers: headers.clone().into_inner(), headers: headers.clone().into_inner(),
referrer: metadata.referrer.clone(), referrer: metadata.referrer.clone(),
status_code: metadata.status.as_ref()
.map(|&(code, _)| code)
.unwrap_or(200),
}); });
// XXXManishearth we don't have the cancel_chan anymore and // XXXManishearth we don't have the cancel_chan anymore and

View file

@ -82,6 +82,7 @@ pub struct ResponseInit {
serialize_with = "::hyper_serde::serialize")] serialize_with = "::hyper_serde::serialize")]
#[ignore_malloc_size_of = "Defined in hyper"] #[ignore_malloc_size_of = "Defined in hyper"]
pub headers: Headers, pub headers: Headers,
pub status_code: u16,
pub referrer: Option<ServoUrl>, pub referrer: Option<ServoUrl>,
pub location_url: Option<Result<ServoUrl, String>>, pub location_url: Option<Result<ServoUrl, String>>,
} }
@ -147,6 +148,7 @@ impl Response {
res.location_url = init.location_url; res.location_url = init.location_url;
res.headers = init.headers; res.headers = init.headers;
res.referrer = init.referrer; res.referrer = init.referrer;
res.status = Some(StatusCode::from_u16(init.status_code));
res res
} }