From 8cb497613699c42d1ea938f2e71e9a5f44f86047 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 23 Oct 2013 20:59:14 +0200 Subject: [PATCH] Cleanup HTMLCollection binding. --- src/components/script/dom/document.rs | 9 ++--- src/components/script/dom/element.rs | 9 ++--- src/components/script/dom/htmlcollection.rs | 37 +++++++++---------- .../script/dom/htmldatalistelement.rs | 4 +- .../script/dom/htmlfieldsetelement.rs | 4 +- src/components/script/dom/htmlformelement.rs | 4 +- src/components/script/dom/htmlmapelement.rs | 4 +- 7 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 510fdcb1235..32c73a7fea9 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -241,13 +241,11 @@ impl Document { } pub fn GetElementsByTagNameNS(&self, _ns: &DOMString, _tag: &DOMString) -> @mut HTMLCollection { - let (scope, cx) = self.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + HTMLCollection::new(self.window, ~[]) } pub fn GetElementsByClassName(&self, _class: &DOMString) -> @mut HTMLCollection { - let (scope, cx) = self.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + HTMLCollection::new(self.window, ~[]) } pub fn GetElementById(&self, id: &DOMString) -> Option> { @@ -495,8 +493,7 @@ impl Document { } } } - let (scope, cx) = self.get_scope_and_cx(); - HTMLCollection::new(elements, cx, scope) + HTMLCollection::new(self.window, elements) } pub fn content_changed(&self) { diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 0a2442d6aa2..fa662467b20 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -252,18 +252,15 @@ impl Element { } pub fn GetElementsByTagName(&self, _localname: &DOMString) -> @mut HTMLCollection { - let (scope, cx) = self.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + HTMLCollection::new(self.node.owner_doc().document().window, ~[]) } pub fn GetElementsByTagNameNS(&self, _namespace: &DOMString, _localname: &DOMString) -> Fallible<@mut HTMLCollection> { - let (scope, cx) = self.node.get_scope_and_cx(); - Ok(HTMLCollection::new(~[], cx, scope)) + Ok(HTMLCollection::new(self.node.owner_doc().document().window, ~[])) } pub fn GetElementsByClassName(&self, _names: &DOMString) -> @mut HTMLCollection { - let (scope, cx) = self.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + HTMLCollection::new(self.node.owner_doc().document().window, ~[]) } pub fn MozMatchesSelector(&self, _selector: &DOMString) -> Fallible { diff --git a/src/components/script/dom/htmlcollection.rs b/src/components/script/dom/htmlcollection.rs index 1f26eaaff95..b40057b6780 100644 --- a/src/components/script/dom/htmlcollection.rs +++ b/src/components/script/dom/htmlcollection.rs @@ -3,10 +3,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::HTMLCollectionBinding; -use dom::bindings::utils::{Reflectable, Reflector}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::{DOMString, Fallible}; use dom::node::{AbstractNode, ScriptView}; -use script_task::page_from_context; +use dom::window::Window; use js::jsapi::{JSObject, JSContext}; @@ -14,21 +14,24 @@ use std::ptr; pub struct HTMLCollection { elements: ~[AbstractNode], - reflector_: Reflector + reflector_: Reflector, + window: @mut Window, } impl HTMLCollection { - pub fn new(elements: ~[AbstractNode], cx: *JSContext, scope: *JSObject) -> @mut HTMLCollection { - let collection = @mut HTMLCollection { + pub fn new_inherited(window: @mut Window, + elements: ~[AbstractNode]) -> HTMLCollection { + HTMLCollection { elements: elements, - reflector_: Reflector::new() - }; - collection.init_wrapper(cx, scope); - collection + reflector_: Reflector::new(), + window: window, + } } - pub fn init_wrapper(@mut self, cx: *JSContext, scope: *JSObject) { - self.wrap_object_shared(cx, scope); + pub fn new(window: @mut Window, + elements: ~[AbstractNode]) -> @mut HTMLCollection { + reflect_dom_object(@mut HTMLCollection::new_inherited(window, elements), + window, HTMLCollectionBinding::Wrap) } pub fn Length(&self) -> u32 { @@ -66,15 +69,11 @@ impl Reflectable for HTMLCollection { &mut self.reflector_ } - fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject { - HTMLCollectionBinding::Wrap(cx, scope, self) + fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject { + unreachable!(); } - fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> { - let page = page_from_context(cx); - // TODO(tkuehn): This only handles the top-level frame. Need to grab subframes. - unsafe { - Some((*page).frame.get_ref().window as @mut Reflectable) - } + fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> { + Some(self.window as @mut Reflectable) } } diff --git a/src/components/script/dom/htmldatalistelement.rs b/src/components/script/dom/htmldatalistelement.rs index 91203657312..df0fe2939ed 100644 --- a/src/components/script/dom/htmldatalistelement.rs +++ b/src/components/script/dom/htmldatalistelement.rs @@ -11,7 +11,7 @@ pub struct HTMLDataListElement { impl HTMLDataListElement { pub fn Options(&self) -> @mut HTMLCollection { - let (scope, cx) = self.htmlelement.element.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + let window = self.htmlelement.element.node.owner_doc().document().window; + HTMLCollection::new(window, ~[]) } } diff --git a/src/components/script/dom/htmlfieldsetelement.rs b/src/components/script/dom/htmlfieldsetelement.rs index 643ada80058..a0a1ff2a4ca 100644 --- a/src/components/script/dom/htmlfieldsetelement.rs +++ b/src/components/script/dom/htmlfieldsetelement.rs @@ -38,8 +38,8 @@ impl HTMLFieldSetElement { } pub fn Elements(&self) -> @mut HTMLCollection { - let (scope, cx) = self.htmlelement.element.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + let window = self.htmlelement.element.node.owner_doc().document().window; + HTMLCollection::new(window, ~[]) } pub fn WillValidate(&self) -> bool { diff --git a/src/components/script/dom/htmlformelement.rs b/src/components/script/dom/htmlformelement.rs index fe2aa34accb..c6fbac85cb9 100644 --- a/src/components/script/dom/htmlformelement.rs +++ b/src/components/script/dom/htmlformelement.rs @@ -85,8 +85,8 @@ impl HTMLFormElement { } pub fn Elements(&self) -> @mut HTMLCollection { - let (scope, cx) = self.htmlelement.element.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + let window = self.htmlelement.element.node.owner_doc().document().window; + HTMLCollection::new(window, ~[]) } pub fn Length(&self) -> i32 { diff --git a/src/components/script/dom/htmlmapelement.rs b/src/components/script/dom/htmlmapelement.rs index 124cafc98fb..35883929be3 100644 --- a/src/components/script/dom/htmlmapelement.rs +++ b/src/components/script/dom/htmlmapelement.rs @@ -20,7 +20,7 @@ impl HTMLMapElement { } pub fn Areas(&self) -> @mut HTMLCollection { - let (scope, cx) = self.htmlelement.element.node.get_scope_and_cx(); - HTMLCollection::new(~[], cx, scope) + let window = self.htmlelement.element.node.owner_doc().document().window; + HTMLCollection::new(window, ~[]) } }