diff options
author | webbeef <me@webbeef.org> | 2024-09-29 11:23:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-29 18:23:48 +0000 |
commit | 58f34ad7a3db8c633871d568bfcef8b094217e3e (patch) | |
tree | 43c3f128c54f5da5d80d5feeaca495950e2de144 /components/shared/net/response.rs | |
parent | 013473f1d5a18f7d99183593ef370045dc58c978 (diff) | |
download | servo-58f34ad7a3db8c633871d568bfcef8b094217e3e.tar.gz servo-58f34ad7a3db8c633871d568bfcef8b094217e3e.zip |
Create HttpStatus to safely deal with HTTP responses status. (#33581)
Signed-off-by: webbeef <me@webbeef.org>
Diffstat (limited to 'components/shared/net/response.rs')
-rw-r--r-- | components/shared/net/response.rs | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/components/shared/net/response.rs b/components/shared/net/response.rs index c4b009db72a..5e80b0cabea 100644 --- a/components/shared/net/response.rs +++ b/components/shared/net/response.rs @@ -8,13 +8,14 @@ use std::sync::atomic::AtomicBool; use std::sync::Mutex; use headers::{ContentType, HeaderMapExt}; -use http::{HeaderMap, StatusCode}; +use http::HeaderMap; use hyper_serde::Serde; use malloc_size_of_derive::MallocSizeOf; use serde::{Deserialize, Serialize}; use servo_arc::Arc; use servo_url::ServoUrl; +use crate::http_status::HttpStatus; use crate::{ FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType, @@ -95,10 +96,7 @@ pub struct Response { pub termination_reason: Option<TerminationReason>, url: Option<ServoUrl>, pub url_list: Vec<ServoUrl>, - /// `None` can be considered a StatusCode of `0`. - #[ignore_malloc_size_of = "Defined in hyper"] - pub status: Option<(StatusCode, String)>, - pub raw_status: Option<(u16, Vec<u8>)>, + pub status: HttpStatus, #[ignore_malloc_size_of = "Defined in hyper"] pub headers: HeaderMap, #[ignore_malloc_size_of = "Mutex heap size undefined"] @@ -131,8 +129,7 @@ impl Response { termination_reason: None, url: Some(url), url_list: vec![], - status: Some((StatusCode::OK, "".to_string())), - raw_status: Some((200, b"".to_vec())), + status: HttpStatus::default(), headers: HeaderMap::new(), body: Arc::new(Mutex::new(ResponseBody::Empty)), cache_state: CacheState::None, @@ -153,9 +150,7 @@ impl Response { res.location_url = init.location_url; res.headers = init.headers; res.referrer = init.referrer; - res.status = StatusCode::from_u16(init.status_code) - .map(|s| (s, s.to_string())) - .ok(); + res.status = HttpStatus::new_raw(init.status_code, vec![]); res } @@ -165,8 +160,7 @@ impl Response { termination_reason: None, url: None, url_list: vec![], - status: None, - raw_status: None, + status: HttpStatus::new_error(), headers: HeaderMap::new(), body: Arc::new(Mutex::new(ResponseBody::Empty)), cache_state: CacheState::None, @@ -282,14 +276,14 @@ impl Response { response.url_list = vec![]; response.url = None; response.headers = HeaderMap::new(); - response.status = None; + response.status = HttpStatus::new_error(); response.body = Arc::new(Mutex::new(ResponseBody::Empty)); response.cache_state = CacheState::None; }, ResponseType::OpaqueRedirect => { response.headers = HeaderMap::new(); - response.status = None; + response.status = HttpStatus::new_error(); response.body = Arc::new(Mutex::new(ResponseBody::Empty)); response.cache_state = CacheState::None; }, @@ -310,7 +304,7 @@ impl Response { ); metadata.location_url.clone_from(&response.location_url); metadata.headers = Some(Serde(response.headers.clone())); - metadata.status.clone_from(&response.raw_status); + metadata.status.clone_from(&response.status); metadata.https_state = response.https_state; metadata.referrer.clone_from(&response.referrer); metadata.referrer_policy = response.referrer_policy; |