aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorArseniy Ivanov <freeatnet@freeatnet.com>2017-02-02 18:14:02 -0500
committerArseniy Ivanov <freeatnet@freeatnet.com>2017-02-03 13:23:34 -0500
commitd23b34e243506e3ffec4f98e1e221153e197e699 (patch)
tree912783af0b1accf5bbd59d83a51e2e8fb2ef3b78 /components/script/dom
parentca73b30fcfd0ffc18f1e834c4d3bf9760fc01e8f (diff)
downloadservo-d23b34e243506e3ffec4f98e1e221153e197e699.tar.gz
servo-d23b34e243506e3ffec4f98e1e221153e197e699.zip
Check for the presence of a window when working with event handlers forwarded to the window
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/document.rs3
-rw-r--r--components/script/dom/htmlframesetelement.rs2
-rw-r--r--components/script/dom/macros.rs10
3 files changed, 12 insertions, 3 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index b2e93325236..8e5aff79a9f 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -366,6 +366,9 @@ impl Document {
self.loader.borrow_mut()
}
+ #[inline]
+ pub fn has_browsing_context(&self) -> bool { self.has_browsing_context }
+
/// https://html.spec.whatwg.org/multipage/#concept-document-bc
#[inline]
pub fn browsing_context(&self) -> Option<Root<BrowsingContext>> {
diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs
index b238692dc11..de7aca6be02 100644
--- a/components/script/dom/htmlframesetelement.rs
+++ b/components/script/dom/htmlframesetelement.rs
@@ -10,7 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
-use dom::node::{Node, window_from_node};
+use dom::node::{Node, document_from_node, window_from_node};
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs
index f2174bdd552..04dd205ed91 100644
--- a/components/script/dom/macros.rs
+++ b/components/script/dom/macros.rs
@@ -354,11 +354,17 @@ macro_rules! define_event_handler(
macro_rules! define_window_owned_event_handler(
($handler: ident, $event_type: ident, $getter: ident, $setter: ident) => (
fn $getter(&self) -> Option<::std::rc::Rc<$handler>> {
- window_from_node(self).$getter()
+ if document_from_node(self).has_browsing_context() {
+ window_from_node(self).$getter()
+ } else {
+ None
+ }
}
fn $setter(&self, listener: Option<::std::rc::Rc<$handler>>) {
- window_from_node(self).$setter(listener)
+ if document_from_node(self).has_browsing_context() {
+ window_from_node(self).$setter(listener)
+ }
}
)
);