mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Issue #15017: Properly handle and report network errors on page loads.
This commit is contained in:
parent
a1187c12ee
commit
abc9f785e8
3 changed files with 36 additions and 10 deletions
|
@ -431,6 +431,7 @@ impl FetchResponseListener for ParserContext {
|
|||
|
||||
fn process_response(&mut self, meta_result: Result<FetchMetadata, NetworkError>) {
|
||||
let mut ssl_error = None;
|
||||
let mut network_error = None;
|
||||
let metadata = match meta_result {
|
||||
Ok(meta) => {
|
||||
Some(match meta {
|
||||
|
@ -445,6 +446,13 @@ impl FetchResponseListener for ParserContext {
|
|||
meta.set_content_type(mime.as_ref());
|
||||
Some(meta)
|
||||
},
|
||||
Err(NetworkError::Internal(reason)) => {
|
||||
network_error = Some(reason);
|
||||
let mut meta = Metadata::default(self.url.clone());
|
||||
let mime: Option<Mime> = "text/html".parse().ok();
|
||||
meta.set_content_type(mime.as_ref());
|
||||
Some(meta)
|
||||
},
|
||||
Err(_) => None,
|
||||
};
|
||||
let content_type = metadata.clone().and_then(|meta| meta.content_type).map(Serde::into_inner);
|
||||
|
@ -486,6 +494,14 @@ impl FetchResponseListener for ParserContext {
|
|||
parser.push_input_chunk(page);
|
||||
parser.parse_sync();
|
||||
}
|
||||
if let Some(reason) = network_error {
|
||||
self.is_synthesized_document = true;
|
||||
let page_bytes = read_resource_file("neterror.html").unwrap();
|
||||
let page = String::from_utf8(page_bytes).unwrap();
|
||||
let page = page.replace("${reason}", &reason);
|
||||
parser.push_input_chunk(page);
|
||||
parser.parse_sync();
|
||||
}
|
||||
},
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {}, // Handle text/xml
|
||||
Some(ContentType(Mime(toplevel, sublevel, _))) => {
|
||||
|
@ -527,16 +543,7 @@ impl FetchResponseListener for ParserContext {
|
|||
None => return,
|
||||
};
|
||||
|
||||
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 page_bytes = read_resource_file("neterror.html").unwrap();
|
||||
let page = String::from_utf8(page_bytes).unwrap();
|
||||
let page = page.replace("${reason}", reason);
|
||||
parser.push_input_chunk(page);
|
||||
parser.parse_sync();
|
||||
} else if let Err(err) = status {
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue