diff options
author | Arseniy Ivanov <freeatnet@freeatnet.com> | 2017-02-02 18:14:02 -0500 |
---|---|---|
committer | Arseniy Ivanov <freeatnet@freeatnet.com> | 2017-02-03 13:23:34 -0500 |
commit | d23b34e243506e3ffec4f98e1e221153e197e699 (patch) | |
tree | 912783af0b1accf5bbd59d83a51e2e8fb2ef3b78 /components/script/dom | |
parent | ca73b30fcfd0ffc18f1e834c4d3bf9760fc01e8f (diff) | |
download | servo-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.rs | 3 | ||||
-rw-r--r-- | components/script/dom/htmlframesetelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/macros.rs | 10 |
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) + } } ) ); |