aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorSimon Wülker <simon.wuelker@arcor.de>2024-12-19 00:38:34 +0100
committerGitHub <noreply@github.com>2024-12-18 23:38:34 +0000
commitba56494eec49f6d1084e97137aa8be92f72bd65e (patch)
treefa06ec954747ecac971c7cd6fe9d62312f0819cf /components
parent2caee9ae42a2748e2887f66c3bebfaf176cca5aa (diff)
downloadservo-ba56494eec49f6d1084e97137aa8be92f72bd65e.tar.gz
servo-ba56494eec49f6d1084e97137aa8be92f72bd65e.zip
Save http response reason instead of inferring it from status code (#34694)
* Don't unnecessarily clone responses twice when sending them to devtools Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Store http response reason instead of inferring it later Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Update wpt expectations Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Diffstat (limited to 'components')
-rw-r--r--components/net/http_loader.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index d73076b21c7..d5541c99565 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -29,6 +29,7 @@ use http::header::{
CONTENT_TYPE,
};
use http::{HeaderMap, Method, Request as HyperRequest, StatusCode};
+use hyper::ext::ReasonPhrase;
use hyper::header::{HeaderName, TRANSFER_ENCODING};
use hyper::{Body, Client, Response as HyperResponse};
use hyper_serde::Serde;
@@ -584,7 +585,7 @@ async fn obtain_response(
},
};
- devtools_bytes.lock().unwrap().append(&mut bytes.clone());
+ devtools_bytes.lock().unwrap().extend_from_slice(&bytes);
// Step 5.1.2.2, transmit chunk over the network,
// currently implemented by sending the bytes to the fetch worker.
@@ -712,6 +713,7 @@ async fn obtain_response(
debug!("Not notifying devtools (no request_id)");
None
};
+
future::ready(Ok((Decoder::detect(res, is_secure_scheme), msg)))
})
.map_err(move |error| {
@@ -1864,14 +1866,15 @@ async fn http_network_fetch(
let timing = context.timing.lock().unwrap().clone();
let mut response = Response::new(url.clone(), timing);
- response.status = HttpStatus::new(
- res.status(),
- res.status()
- .canonical_reason()
- .unwrap_or("")
- .as_bytes()
- .to_vec(),
- );
+ let status_text = res
+ .extensions()
+ .get::<ReasonPhrase>()
+ .map(ReasonPhrase::as_bytes)
+ .or_else(|| res.status().canonical_reason().map(str::as_bytes))
+ .map(Vec::from)
+ .unwrap_or_default();
+ response.status = HttpStatus::new(res.status(), status_text);
+
info!("got {:?} response for {:?}", res.status(), request.url());
response.headers = res.headers().clone();
response.referrer = request.referrer.to_url().cloned();