diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 8fb0f2c4be5..e38ab5ff523 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -94,7 +94,8 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> { let win = window_from_node(self).root(); win.GetOnload() } else { - None + let target: JSRef = EventTargetCast::from_ref(self); + target.get_event_handler_common("load") } } @@ -102,6 +103,9 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> { if self.is_body_or_frameset() { let win = window_from_node(self).root(); win.SetOnload(listener) + } else { + let target: JSRef = EventTargetCast::from_ref(self); + target.set_event_handler_common("load", listener) } } diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 9432768e816..3883d83f562 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -12,11 +12,14 @@ use dom::bindings::codegen::Bindings::HTMLScriptElementBinding::HTMLScriptElemen use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::InheritTypes::{HTMLScriptElementDerived, HTMLScriptElementCast}; use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; +use dom::bindings::codegen::InheritTypes::EventTargetCast; +use dom::bindings::global::GlobalRef; use dom::bindings::js::{JSRef, Temporary, OptionalRootable}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::document::Document; use dom::element::{ElementTypeId, Element, AttributeHandlers, ElementCreator}; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::{EventTarget, EventTargetTypeId, EventTargetHelpers}; +use dom::event::{Event, EventBubbles, EventCancelable, EventHelpers}; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, NodeTypeId, window_from_node, CloneChildrenFlag}; use dom::virtualmethods::VirtualMethods; @@ -206,6 +209,14 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> { }; window.evaluate_script_with_result(source.as_slice(), url.serialize().as_slice()); + + let event = Event::new(GlobalRef::Window(*window), + "load".to_string(), + EventBubbles::DoesNotBubble, + EventCancelable::NotCancelable).root(); + event.set_trusted(true); + let target: JSRef = EventTargetCast::from_ref(self); + target.dispatch_event(*event); } fn is_javascript(self) -> bool { diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini deleted file mode 100644 index 27864dc14bd..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[script-onload-string.html] - type: testharness - [Setting onload to a string should convert to null.] - expected: FAIL -