aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/http_loader.rs2
-rw-r--r--components/script/dom/servohtmlparser.rs17
-rw-r--r--resources/neterror.html8
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>