diff --git a/components/script/fetch.rs b/components/script/fetch.rs index 9192a030b66..a2fbaead338 100644 --- a/components/script/fetch.rs +++ b/components/script/fetch.rs @@ -227,7 +227,7 @@ impl FetchResponseListener for FetchContext { // Step 4.1 Err(_) => { promise.reject_error( - Error::Type("Network error occurred".to_string()), + Error::Type(format!("Network error: {:?}", error)), CanGc::note(), ); self.fetch_promise = Some(TrustedPromise::new(promise)); diff --git a/components/shared/net/lib.rs b/components/shared/net/lib.rs index fc6d111ccb6..8c9ea8496e4 100644 --- a/components/shared/net/lib.rs +++ b/components/shared/net/lib.rs @@ -5,7 +5,7 @@ #![deny(unsafe_code)] use std::collections::HashMap; -use std::fmt::Display; +use std::fmt::{Debug, Display, Formatter}; use std::sync::{LazyLock, OnceLock}; use std::thread; @@ -956,6 +956,39 @@ pub enum NetworkError { LocalDirectoryError, } +impl fmt::Debug for NetworkError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + NetworkError::UnsupportedScheme => write!(f, "Unsupported scheme"), + NetworkError::CorsGeneral => write!(f, "CORS check failed"), + NetworkError::CrossOriginResponse => write!(f, "Cross-origin response"), + NetworkError::CorsCredentials => write!(f, "Cross-origin credentials check failed"), + NetworkError::CorsAllowMethods => write!(f, "CORS ACAM check failed"), + NetworkError::CorsAllowHeaders => write!(f, "CORS ACAH check failed"), + NetworkError::CorsMethod => write!(f, "CORS method check failed"), + NetworkError::CorsAuthorization => write!(f, "CORS authorization check failed"), + NetworkError::CorsHeaders => write!(f, "CORS headers check failed"), + NetworkError::ConnectionFailure => write!(f, "Request failed"), + NetworkError::RedirectError => write!(f, "Too many redirects"), + NetworkError::InvalidMethod => write!(f, "Unexpected method"), + NetworkError::ResourceError => write!(f, "Resource access failed"), + NetworkError::ContentSecurityPolicy => write!(f, "Blocked by Content-Security-Policy"), + NetworkError::Nosniff => write!(f, "Blocked by nosniff"), + NetworkError::MimeType => write!(f, "Blocked by mime type"), + NetworkError::SubresourceIntegrity => { + write!(f, "Subresource integrity validation failed") + }, + NetworkError::MixedContent => write!(f, "Blocked as mixed content"), + NetworkError::CacheError => write!(f, "Cache error"), + NetworkError::InvalidPort => write!(f, "Request attempted on bad port"), + NetworkError::LocalDirectoryError => write!(f, "Local directory access failed"), + NetworkError::LoadCancelled => write!(f, "Load cancelled"), + NetworkError::SslValidation(s, _) => write!(f, "SSL validation error: {}", s), + NetworkError::Crash(s) => write!(f, "Crash: {}", s), + } + } +} + impl NetworkError { pub fn from_hyper_error(error: &HyperError, certificate: Option) -> Self { let error_string = error.to_string();