From 3b1bfa3942f4e9c9b3649871ecd1655a1fc77736 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 13 Oct 2018 00:14:56 +0000 Subject: [PATCH] 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. --- components/constellation/network_listener.rs | 3 +++ components/net_traits/response.rs | 2 ++ 2 files changed, 5 insertions(+) diff --git a/components/constellation/network_listener.rs b/components/constellation/network_listener.rs index 461be7990da4..3f58d029acf8 100644 --- a/components/constellation/network_listener.rs +++ b/components/constellation/network_listener.rs @@ -113,6 +113,9 @@ impl NetworkListener { location_url: metadata.location_url.clone(), headers: headers.clone().into_inner(), 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 diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs index 3e2b7d0ad33e..76278db19c75 100644 --- a/components/net_traits/response.rs +++ b/components/net_traits/response.rs @@ -82,6 +82,7 @@ pub struct ResponseInit { serialize_with = "::hyper_serde::serialize")] #[ignore_malloc_size_of = "Defined in hyper"] pub headers: Headers, + pub status_code: u16, pub referrer: Option, pub location_url: Option>, } @@ -147,6 +148,7 @@ impl Response { res.location_url = init.location_url; res.headers = init.headers; res.referrer = init.referrer; + res.status = Some(StatusCode::from_u16(init.status_code)); res }