diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 9e4db68f7ac..b29c744a93a 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -48,8 +48,9 @@ use rand::{random, Rng, SeedableRng, StdRng}; use sandboxing; use script_traits::{AnimationState, CompositorEvent, ConstellationControlMsg}; use script_traits::{DocumentState, LayoutControlMsg}; -use script_traits::{IFrameLoadInfo, IFrameSandboxState, MozBrowserEvent, TimerEventRequest}; +use script_traits::{IFrameLoadInfo, IFrameSandboxState, TimerEventRequest}; use script_traits::{LayoutMsg as FromLayoutMsg, ScriptMsg as FromScriptMsg, ScriptThreadFactory}; +use script_traits::{MozBrowserEvent, MozBrowserErrorType}; use std::borrow::ToOwned; use std::collections::HashMap; use std::env; @@ -1967,7 +1968,7 @@ impl Constellation None => return warn!("Mozbrowsererror via closed pipeline {:?}.", ancestor_info.0), }; } - let event = MozBrowserEvent::Error; + let event = MozBrowserEvent::Error(MozBrowserErrorType::Fatal, None, None); ancestor.trigger_mozbrowser_event(ancestor_info.1, event); } } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index a9d5471d468..21ce9af3283 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -5,6 +5,7 @@ use document_loader::{LoadType, LoadBlocker}; use dom::attr::{Attr, AttrValue}; use dom::bindings::cell::DOMRefCell; +use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementErrorEventDetail; use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementIconChangeEventDetail; use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementLocationChangeEventDetail; use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementSecurityChangeDetail; @@ -307,11 +308,18 @@ impl MozBrowserEventDetailBuilder for HTMLIFrameElement { rval: MutableHandleValue) { match event { MozBrowserEvent::AsyncScroll | MozBrowserEvent::Close | MozBrowserEvent::ContextMenu | - MozBrowserEvent::Error | MozBrowserEvent::LoadEnd | MozBrowserEvent::LoadStart | + MozBrowserEvent::LoadEnd | MozBrowserEvent::LoadStart | MozBrowserEvent::Connected | MozBrowserEvent::OpenWindow | MozBrowserEvent::OpenSearch | MozBrowserEvent::UsernameAndPasswordRequired => { rval.set(NullValue()); } + MozBrowserEvent::Error(error_type, description, report) => { + BrowserElementErrorEventDetail { + type_: Some(DOMString::from(error_type.name())), + description: description.map(DOMString::from), + report: report.map(DOMString::from), + }.to_jsval(cx, rval); + }, MozBrowserEvent::SecurityChange(https_state) => { BrowserElementSecurityChangeDetail { // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsersecuritychange diff --git a/components/script/dom/webidls/BrowserElement.webidl b/components/script/dom/webidls/BrowserElement.webidl index a244f9575a7..90adfc0b654 100644 --- a/components/script/dom/webidls/BrowserElement.webidl +++ b/components/script/dom/webidls/BrowserElement.webidl @@ -53,6 +53,16 @@ dictionary BrowserElementSecurityChangeDetail { boolean mixedContent; }; +dictionary BrowserElementErrorEventDetail { + // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsererror + // just requires a "type" field, but we also provide + // an optional human-readable description, and + // an optional machine-readable report (e.g. a backtrace for panics) + DOMString type; + DOMString description; + DOMString report; +}; + dictionary BrowserElementLocationChangeEventDetail { DOMString uri; boolean canGoBack; diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 46c3e860643..5629587d354 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -433,7 +433,7 @@ pub enum MozBrowserEvent { /// handling `` element available within the browser `