aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/net/response.rs
diff options
context:
space:
mode:
authorwebbeef <me@webbeef.org>2024-09-29 11:23:48 -0700
committerGitHub <noreply@github.com>2024-09-29 18:23:48 +0000
commit58f34ad7a3db8c633871d568bfcef8b094217e3e (patch)
tree43c3f128c54f5da5d80d5feeaca495950e2de144 /components/shared/net/response.rs
parent013473f1d5a18f7d99183593ef370045dc58c978 (diff)
downloadservo-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.rs24
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;