aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmliframeelement.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2015-11-17 01:01:40 -0500
committerJosh Matthews <josh@joshmatthews.net>2015-11-30 17:37:16 -0500
commitc23cbd4163ad3adbc983e4915b3656e0f37af623 (patch)
treee30b07aa51b6fee09a97a5dd87d6b9c3a12c36f9 /components/script/dom/htmliframeelement.rs
parent2a125b56135cdaa86b49783e8a52e9f1e9c7c126 (diff)
downloadservo-c23cbd4163ad3adbc983e4915b3656e0f37af623.tar.gz
servo-c23cbd4163ad3adbc983e4915b3656e0f37af623.zip
Dispatch load events for cross origin iframes. Resolves #6672.
Diffstat (limited to 'components/script/dom/htmliframeelement.rs')
-rw-r--r--components/script/dom/htmliframeelement.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 66bade67a7d..78400b6d49a 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -16,7 +16,7 @@ use dom::bindings::reflector::Reflectable;
use dom::customevent::CustomEvent;
use dom::document::Document;
use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
-use dom::event::Event;
+use dom::event::{Event, EventBubbles, EventCancelable};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, window_from_node};
use dom::urlhelper::UrlHelper;
@@ -189,6 +189,29 @@ impl HTMLIFrameElement {
pub fn subpage_id(&self) -> Option<SubpageId> {
self.subpage_id.get()
}
+
+ pub fn pipeline(&self) -> Option<PipelineId> {
+ self.pipeline_id.get()
+ }
+
+ /// https://html.spec.whatwg.org/multipage/#iframe-load-event-steps steps 1-4
+ pub fn iframe_load_event_steps(&self) {
+ // TODO A cross-origin child document would not be easily accessible
+ // from this script thread. It's unclear how to implement
+ // steps 2, 3, and 5 efficiently in this case.
+ // TODO Step 2 - check child document `mute iframe load` flag
+ // TODO Step 3 - set child document `mut iframe load` flag
+
+ // Step 4
+ let window = window_from_node(self);
+ let event = Event::new(GlobalRef::Window(window.r()),
+ DOMString::from("load".to_owned()),
+ EventBubbles::DoesNotBubble,
+ EventCancelable::NotCancelable);
+ event.fire(self.upcast());
+
+ // TODO Step 5 - unset child document `mut iframe load` flag
+ }
}
pub trait HTMLIFrameElementLayoutMethods {