mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Errors only pass the special bonus arguments to globals
This commit is contained in:
parent
d0f64d9d56
commit
ee53e10f70
3 changed files with 24 additions and 31 deletions
|
@ -33,6 +33,7 @@ use crate::dom::htmlformelement::FormControlElementHelpers;
|
||||||
use crate::dom::node::document_from_node;
|
use crate::dom::node::document_from_node;
|
||||||
use crate::dom::virtualmethods::VirtualMethods;
|
use crate::dom::virtualmethods::VirtualMethods;
|
||||||
use crate::dom::window::Window;
|
use crate::dom::window::Window;
|
||||||
|
use crate::dom::workerglobalscope::WorkerGlobalScope;
|
||||||
use crate::realms::enter_realm;
|
use crate::realms::enter_realm;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use fnv::FnvHasher;
|
use fnv::FnvHasher;
|
||||||
|
@ -152,9 +153,9 @@ pub enum CompiledEventListener {
|
||||||
|
|
||||||
impl CompiledEventListener {
|
impl CompiledEventListener {
|
||||||
// https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm
|
// https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm
|
||||||
pub fn call_or_handle_event<T: DomObject>(
|
pub fn call_or_handle_event(
|
||||||
&self,
|
&self,
|
||||||
object: &T,
|
object: &EventTarget,
|
||||||
event: &Event,
|
event: &Event,
|
||||||
exception_handle: ExceptionHandling,
|
exception_handle: ExceptionHandling,
|
||||||
) {
|
) {
|
||||||
|
@ -167,27 +168,29 @@ impl CompiledEventListener {
|
||||||
match *handler {
|
match *handler {
|
||||||
CommonEventHandler::ErrorEventHandler(ref handler) => {
|
CommonEventHandler::ErrorEventHandler(ref handler) => {
|
||||||
if let Some(event) = event.downcast::<ErrorEvent>() {
|
if let Some(event) = event.downcast::<ErrorEvent>() {
|
||||||
let cx = object.global().get_cx();
|
if object.is::<Window>() || object.is::<WorkerGlobalScope>() {
|
||||||
rooted!(in(*cx) let error = event.Error(cx));
|
let cx = object.global().get_cx();
|
||||||
let return_value = handler.Call_(
|
rooted!(in(*cx) let error = event.Error(cx));
|
||||||
object,
|
let return_value = handler.Call_(
|
||||||
EventOrString::String(event.Message()),
|
object,
|
||||||
Some(event.Filename()),
|
EventOrString::String(event.Message()),
|
||||||
Some(event.Lineno()),
|
Some(event.Filename()),
|
||||||
Some(event.Colno()),
|
Some(event.Lineno()),
|
||||||
Some(error.handle()),
|
Some(event.Colno()),
|
||||||
exception_handle,
|
Some(error.handle()),
|
||||||
);
|
exception_handle,
|
||||||
// Step 4
|
);
|
||||||
if let Ok(return_value) = return_value {
|
// Step 4
|
||||||
rooted!(in(*cx) let return_value = return_value);
|
if let Ok(return_value) = return_value {
|
||||||
if return_value.handle().is_boolean() &&
|
rooted!(in(*cx) let return_value = return_value);
|
||||||
return_value.handle().to_boolean() == true
|
if return_value.handle().is_boolean() &&
|
||||||
{
|
return_value.handle().to_boolean() == true
|
||||||
event.upcast::<Event>().PreventDefault();
|
{
|
||||||
|
event.upcast::<Event>().PreventDefault();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = handler.Call_(
|
let _ = handler.Call_(
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[document-synthetic-errorevent.html]
|
|
||||||
type: testharness
|
|
||||||
[error event is normal (return true does not cancel; one arg) on Document, with a synthetic ErrorEvent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[script-element.html]
|
|
||||||
type: testharness
|
|
||||||
[error event behaves normally (return true does not cancel; one arg) on a script element, with a synthetic ErrorEvent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue