constellation: crash to a new “sad tab” error page (#30290)

* constellation: crash to a new “sad tab” page

* check in resources/crash.html

* use a separate enum variant instead of keying on reason

* fmt + tidy

* rename Resource::Crash to Resource::CrashHTML

* clean up crash page and add details (reason + backtrace)

* avoid repeating crash errors in script::script_thread warn log

* make new LoadData init more idiomatic

* clarify comments and new fields

* fix doc comment style
This commit is contained in:
Delan Azabani 2023-09-06 17:52:37 +08:00 committed by GitHub
parent 1b6351486c
commit c3c6c95a9b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 102 additions and 46 deletions

View file

@ -758,8 +758,10 @@ pub enum NetworkError {
/// Could be any of the internal errors, like unsupported scheme, connection errors, etc.
Internal(String),
LoadCancelled,
/// SSL validation error that has to be handled in the HTML parser
/// SSL validation error, to be converted to Resource::BadCertHTML in the HTML parser.
SslValidation(String, Vec<u8>),
/// Crash error, to be converted to Resource::Crash in the HTML parser.
Crash(String),
}
impl NetworkError {

View file

@ -254,6 +254,8 @@ pub struct RequestBuilder {
pub initiator: Initiator,
pub https_state: HttpsState,
pub response_tainting: ResponseTainting,
/// Servo internal: if crash details are present, trigger a crash error page with these details.
pub crash: Option<String>,
}
impl RequestBuilder {
@ -284,6 +286,7 @@ impl RequestBuilder {
csp_list: None,
https_state: HttpsState::None,
response_tainting: ResponseTainting::Basic,
crash: None,
}
}
@ -382,6 +385,11 @@ impl RequestBuilder {
self
}
pub fn crash(mut self, crash: Option<String>) -> Self {
self.crash = crash;
self
}
pub fn build(self) -> Request {
let mut request = Request::new(
self.url.clone(),
@ -415,6 +423,7 @@ impl RequestBuilder {
request.parser_metadata = self.parser_metadata;
request.csp_list = self.csp_list;
request.response_tainting = self.response_tainting;
request.crash = self.crash;
request
}
}
@ -488,6 +497,8 @@ pub struct Request {
#[ignore_malloc_size_of = "Defined in rust-content-security-policy"]
pub csp_list: Option<CspList>,
pub https_state: HttpsState,
/// Servo internal: if crash details are present, trigger a crash error page with these details.
pub crash: Option<String>,
}
impl Request {
@ -528,6 +539,7 @@ impl Request {
response_tainting: ResponseTainting::Basic,
csp_list: None,
https_state: https_state,
crash: None,
}
}