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/script/dom/htmlscriptelement.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/script/dom/htmlscriptelement.rs')
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index e3120d0e570..87b8d8a384d 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -21,6 +21,7 @@ use ipc_channel::ipc; use ipc_channel::router::ROUTER; use js::jsval::UndefinedValue; use js::rust::{transform_str_to_source_text, CompileOptionsWrapper, HandleObject, Stencil}; +use net_traits::http_status::HttpStatus; use net_traits::request::{ CorsSettings, CredentialsMode, Destination, ParserMetadata, RequestBuilder, }; @@ -360,24 +361,25 @@ impl FetchResponseListener for ClassicContext { FetchMetadata::Filtered { unsafe_, .. } => unsafe_, }); - let status_code = self + let status = self .metadata .as_ref() - .and_then(|m| match m.status { - Some((c, _)) => Some(c), - _ => None, - }) - .unwrap_or(0); - - self.status = match status_code { - 0 => Err(NetworkError::Internal( - "No http status code received".to_owned(), - )), - 200..=299 => Ok(()), // HTTP ok status codes - _ => Err(NetworkError::Internal(format!( - "HTTP error code {}", - status_code - ))), + .map(|m| m.status.clone()) + .unwrap_or_else(HttpStatus::new_error); + + self.status = { + if status.is_error() { + Err(NetworkError::Internal( + "No http status code received".to_owned(), + )) + } else if status.is_success() { + Ok(()) + } else { + Err(NetworkError::Internal(format!( + "HTTP error code {}", + status.code() + ))) + } }; } |