From ca73b30fcfd0ffc18f1e834c4d3bf9760fc01e8f Mon Sep 17 00:00:00 2001 From: Arseniy Ivanov Date: Thu, 2 Feb 2017 17:51:54 -0500 Subject: [PATCH 1/5] Add tests for windowless element's event handler behaviour --- tests/wpt/metadata/MANIFEST.json | 6 +++ .../body-exposed-window-event-handlers.html | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 51d045d6c52..26692c67f87 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -45890,6 +45890,12 @@ "path": "html/semantics/embedded-content/the-img-element/not-rendered-dimension-getter.html", "url": "/html/semantics/embedded-content/the-img-element/not-rendered-dimension-getter.html" } + ], + "html/webappapis/scripting/events/body-exposed-window-event-handlers.html": [ + { + "path": "html/webappapis/scripting/events/body-exposed-window-event-handlers.html", + "url": "/html/webappapis/scripting/events/body-exposed-window-event-handlers.html" + } ] } }, diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html new file mode 100644 index 00000000000..e771b64a27e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html @@ -0,0 +1,48 @@ + + + + + + + + From d23b34e243506e3ffec4f98e1e221153e197e699 Mon Sep 17 00:00:00 2001 From: Arseniy Ivanov Date: Thu, 2 Feb 2017 18:14:02 -0500 Subject: [PATCH 2/5] Check for the presence of a window when working with event handlers forwarded to the window --- components/script/dom/document.rs | 3 +++ components/script/dom/htmlframesetelement.rs | 2 +- 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> { 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) + } } ) ); From 60679d9b6d2d3787468c7dd0c271ab357ed8baee Mon Sep 17 00:00:00 2001 From: Arseniy Ivanov Date: Fri, 3 Feb 2017 13:04:18 -0500 Subject: [PATCH 3/5] Extend tests for windowless element's event handler behaviour to non-native handlers --- .../scripting/events/body-exposed-window-event-handlers.html | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html index e771b64a27e..0bd26dc7576 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html +++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers.html @@ -8,6 +8,7 @@