aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlscriptelement.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/script/dom/htmlscriptelement.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/script/dom/htmlscriptelement.rs')
-rw-r--r--components/script/dom/htmlscriptelement.rs34
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()
+ )))
+ }
};
}