diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2015-02-10 14:05:31 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2015-02-11 09:07:05 +1000 |
commit | 980b1efb72384f34e16191e37e9faa3142b0fb33 (patch) | |
tree | 7982e50aad5ef1651223a60bf5c9fddf9df12ea0 /components/script/script_task.rs | |
parent | d1c8ed4359c47cd047e5ca3edfa37e8692058644 (diff) | |
download | servo-980b1efb72384f34e16191e37e9faa3142b0fb33.tar.gz servo-980b1efb72384f34e16191e37e9faa3142b0fb33.zip |
Dispatch a load event at iframes. Fixes #4350.
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 0f3f5c1b564..ca9ed7fd9b3 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -31,7 +31,7 @@ use dom::htmlelement::HTMLElementTypeId; use dom::htmliframeelement::HTMLIFrameElement; use dom::keyboardevent::KeyboardEvent; use dom::mouseevent::MouseEvent; -use dom::node::{self, Node, NodeHelpers, NodeDamage, NodeTypeId}; +use dom::node::{self, Node, NodeHelpers, NodeDamage, NodeTypeId, window_from_node}; use dom::window::{Window, WindowHelpers, ScriptHelpers}; use dom::worker::{Worker, TrustedWorkerAddress}; use parse::html::{HTMLInput, parse_html}; @@ -1432,6 +1432,20 @@ impl DocumentProgressHandler { let doctarget: JSRef<EventTarget> = EventTargetCast::from_ref(document.r()); event.r().set_trusted(true); let _ = wintarget.dispatch_event_with_target(doctarget, event.r()); + + let window_ref = window.r(); + let browser_context = window_ref.browser_context(); + let browser_context = browser_context.as_ref().unwrap(); + + browser_context.frame_element().map(|frame_element| { + let frame_element = frame_element.root(); + let frame_window = window_from_node(frame_element.r()).root(); + let event = Event::new(GlobalRef::Window(frame_window.r()), "load".to_owned(), + EventBubbles::DoesNotBubble, + EventCancelable::NotCancelable).root(); + let target: JSRef<EventTarget> = EventTargetCast::from_ref(frame_element.r()); + event.r().fire(target); + }); } } |