From ba56494eec49f6d1084e97137aa8be92f72bd65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20W=C3=BClker?= Date: Thu, 19 Dec 2024 00:38:34 +0100 Subject: [PATCH] Save http response reason instead of inferring it from status code (#34694) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Don't unnecessarily clone responses twice when sending them to devtools Signed-off-by: Simon Wülker * Store http response reason instead of inferring it later Signed-off-by: Simon Wülker * Update wpt expectations Signed-off-by: Simon Wülker --------- Signed-off-by: Simon Wülker --- components/net/http_loader.rs | 21 ++--- tests/wpt/meta/cors/status-async.htm.ini | 36 --------- .../api-and-duplicate-headers.any.js.ini | 7 -- .../meta/xhr/send-conditional-cors.htm.ini | 3 - tests/wpt/meta/xhr/send-conditional.htm.ini | 6 -- .../xhr/send-data-unexpected-tostring.htm.ini | 3 - .../xhr/send-redirect-no-location.htm.ini | 12 --- tests/wpt/meta/xhr/status-async.htm.ini | 81 ------------------- tests/wpt/meta/xhr/status-basic.htm.ini | 81 ------------------- 9 files changed, 12 insertions(+), 238 deletions(-) delete mode 100644 tests/wpt/meta/cors/status-async.htm.ini delete mode 100644 tests/wpt/meta/xhr/send-conditional-cors.htm.ini delete mode 100644 tests/wpt/meta/xhr/send-conditional.htm.ini delete mode 100644 tests/wpt/meta/xhr/send-data-unexpected-tostring.htm.ini delete mode 100644 tests/wpt/meta/xhr/send-redirect-no-location.htm.ini delete mode 100644 tests/wpt/meta/xhr/status-async.htm.ini delete mode 100644 tests/wpt/meta/xhr/status-basic.htm.ini 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::() + .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(); diff --git a/tests/wpt/meta/cors/status-async.htm.ini b/tests/wpt/meta/cors/status-async.htm.ini deleted file mode 100644 index 3decd82af0e..00000000000 --- a/tests/wpt/meta/cors/status-async.htm.ini +++ /dev/null @@ -1,36 +0,0 @@ -[status-async.htm] - [Status on GET 201] - expected: FAIL - - [Status on GET 202] - expected: FAIL - - [Status on GET 203] - expected: FAIL - - [Status on GET 204] - expected: FAIL - - [Status on GET 205] - expected: FAIL - - [Status on GET 206] - expected: FAIL - - [Status on GET 209] - expected: FAIL - - [Status on GET 299] - expected: FAIL - - [Status on GET 400] - expected: FAIL - - [Status on HEAD 401] - expected: FAIL - - [Status on POST 404] - expected: FAIL - - [Status on POST 500] - expected: FAIL diff --git a/tests/wpt/meta/fetch/content-length/api-and-duplicate-headers.any.js.ini b/tests/wpt/meta/fetch/content-length/api-and-duplicate-headers.any.js.ini index d9c34cced72..446cc52f350 100644 --- a/tests/wpt/meta/fetch/content-length/api-and-duplicate-headers.any.js.ini +++ b/tests/wpt/meta/fetch/content-length/api-and-duplicate-headers.any.js.ini @@ -1,15 +1,8 @@ [api-and-duplicate-headers.any.html] - [fetch() and duplicate Content-Length/Content-Type headers] - expected: FAIL - [XMLHttpRequest and duplicate Content-Length/Content-Type headers] expected: FAIL [api-and-duplicate-headers.any.worker.html] - [fetch() and duplicate Content-Length/Content-Type headers] - expected: FAIL - [XMLHttpRequest and duplicate Content-Length/Content-Type headers] expected: FAIL - diff --git a/tests/wpt/meta/xhr/send-conditional-cors.htm.ini b/tests/wpt/meta/xhr/send-conditional-cors.htm.ini deleted file mode 100644 index 38097d7f5af..00000000000 --- a/tests/wpt/meta/xhr/send-conditional-cors.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[send-conditional-cors.htm] - [304 with appropriate CORS header] - expected: FAIL diff --git a/tests/wpt/meta/xhr/send-conditional.htm.ini b/tests/wpt/meta/xhr/send-conditional.htm.ini deleted file mode 100644 index 717024068cb..00000000000 --- a/tests/wpt/meta/xhr/send-conditional.htm.ini +++ /dev/null @@ -1,6 +0,0 @@ -[send-conditional.htm] - [XMLHttpRequest: send() - conditional requests (tag)] - expected: FAIL - - [XMLHttpRequest: send() - conditional requests (date)] - expected: FAIL diff --git a/tests/wpt/meta/xhr/send-data-unexpected-tostring.htm.ini b/tests/wpt/meta/xhr/send-data-unexpected-tostring.htm.ini deleted file mode 100644 index 1d1d9f07a95..00000000000 --- a/tests/wpt/meta/xhr/send-data-unexpected-tostring.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[send-data-unexpected-tostring.htm] - [open() called from data stringification] - expected: FAIL diff --git a/tests/wpt/meta/xhr/send-redirect-no-location.htm.ini b/tests/wpt/meta/xhr/send-redirect-no-location.htm.ini deleted file mode 100644 index 127d52b90d0..00000000000 --- a/tests/wpt/meta/xhr/send-redirect-no-location.htm.ini +++ /dev/null @@ -1,12 +0,0 @@ -[send-redirect-no-location.htm] - [XMLHttpRequest: send() - Redirects (no Location header) (301)] - expected: FAIL - - [XMLHttpRequest: send() - Redirects (no Location header) (302)] - expected: FAIL - - [XMLHttpRequest: send() - Redirects (no Location header) (303)] - expected: FAIL - - [XMLHttpRequest: send() - Redirects (no Location header) (307)] - expected: FAIL diff --git a/tests/wpt/meta/xhr/status-async.htm.ini b/tests/wpt/meta/xhr/status-async.htm.ini deleted file mode 100644 index 36df0756125..00000000000 --- a/tests/wpt/meta/xhr/status-async.htm.ini +++ /dev/null @@ -1,81 +0,0 @@ -[status-async.htm] - [XMLHttpRequest: status/statusText - various responses 1 (GET 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 2 (HEAD 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 4 (GET 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 5 (HEAD 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 7 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 8 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 10 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 11 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 13 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 14 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 16 (GET 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 17 (HEAD 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 19 (GET 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 20 (HEAD 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 22 (GET 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 23 (HEAD 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 25 (GET 699)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 26 (HEAD 699)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699)] - expected: FAIL diff --git a/tests/wpt/meta/xhr/status-basic.htm.ini b/tests/wpt/meta/xhr/status-basic.htm.ini deleted file mode 100644 index 8788fff20ff..00000000000 --- a/tests/wpt/meta/xhr/status-basic.htm.ini +++ /dev/null @@ -1,81 +0,0 @@ -[status-basic.htm] - [XMLHttpRequest: status/statusText - various responses 1 (GET 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 2 (HEAD 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 4 (GET 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 5 (HEAD 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 7 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 8 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 10 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 11 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 13 (GET 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 14 (HEAD 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 16 (GET 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 17 (HEAD 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 19 (GET 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 20 (HEAD 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 22 (GET 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 23 (HEAD 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 25 (GET 699)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 26 (HEAD 699)] - expected: FAIL - - [XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699)] - expected: FAIL