diff options
-rw-r--r-- | components/net/http_loader.rs | 2 | ||||
-rw-r--r-- | components/script/dom/servohtmlparser.rs | 17 | ||||
-rw-r--r-- | resources/neterror.html | 8 |
3 files changed, 23 insertions, 4 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 80a7b91e335..a39d284a486 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -1143,7 +1143,7 @@ fn is_cert_verify_error(error: &OpensslError) -> bool { match error { &OpensslError::UnknownError { ref library, ref function, ref reason } => { library == "SSL routines" && - function == "SSL3_GET_SERVER_CERTIFICATE" && + function.to_uppercase() == "SSL3_GET_SERVER_CERTIFICATE" && reason == "certificate verify failed" } } diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs index 884ac6c8653..a28612416fc 100644 --- a/components/script/dom/servohtmlparser.rs +++ b/components/script/dom/servohtmlparser.rs @@ -171,13 +171,24 @@ impl AsyncResponseListener for ParserContext { Some(parser) => parser.root(), None => return, }; - parser.r().document().finish_load(LoadType::PageSource(self.url.clone())); - if let Err(err) = status { - debug!("Failed to load page URL {}, error: {:?}", self.url, err); + if let Err(NetworkError::Internal(ref reason)) = status { + // Show an error page for network errors, + // certificate errors are handled earlier. + self.is_synthesized_document = true; + let parser = parser.r(); + let page_bytes = read_resource_file("neterror.html").unwrap(); + let page = String::from_utf8(page_bytes).unwrap(); + let page = page.replace("${reason}", reason); + parser.pending_input().borrow_mut().push(page); + parser.parse_sync(); + } else if let Err(err) = status { // TODO(Savago): we should send a notification to callers #5463. + debug!("Failed to load page URL {}, error: {:?}", self.url, err); } + parser.r().document().finish_load(LoadType::PageSource(self.url.clone())); + parser.r().last_chunk_received().set(true); if !parser.r().is_suspended() { parser.r().parse_sync(); diff --git a/resources/neterror.html b/resources/neterror.html new file mode 100644 index 00000000000..8af6cbb2d08 --- /dev/null +++ b/resources/neterror.html @@ -0,0 +1,8 @@ +<html> +<head> + <title>Error loading page</title> +</head> +<body> + <p>Could not load the requested page: ${reason}</p> +</body> +</html> |