From ffdc3f5b32a345b88eed774848924e862d47c093 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Fri, 28 Mar 2014 10:17:56 -0400 Subject: Turn on GC all the time. Fix rooting errors during parsing and storing timers. Fix borrow errors during tracing. --- src/components/script/dom/htmlselectelement.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 47353bd8eb5..53a738e1a97 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::BindingDeclarations::HTMLSelectElementBinding; use dom::bindings::codegen::InheritTypes::HTMLSelectElementDerived; use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, HTMLOptionElementOrHTMLOptGroupElement}; -use dom::bindings::js::JS; +use dom::bindings::js::{JS, JSRef, RootCollection}; use dom::bindings::error::ErrorResult; use dom::document::Document; use dom::element::{Element, HTMLSelectElementTypeId}; @@ -38,8 +38,8 @@ impl HTMLSelectElement { } } - pub fn new(localName: DOMString, document: &JS) -> JS { - let element = HTMLSelectElement::new_inherited(localName, document.clone()); + pub fn new(localName: DOMString, document: &JSRef) -> JS { + let element = HTMLSelectElement::new_inherited(localName, document.unrooted()); Node::reflect_node(~element, document, HTMLSelectElementBinding::Wrap) } } @@ -121,7 +121,7 @@ impl HTMLSelectElement { None } - pub fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult { + pub fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult { Ok(()) } @@ -154,9 +154,11 @@ impl HTMLSelectElement { } pub fn Validity(&self) -> JS { + let roots = RootCollection::new(); let doc = self.htmlelement.element.node.owner_doc(); let doc = doc.get(); - ValidityState::new(&doc.window) + let window = doc.window.root(&roots); + ValidityState::new(&window.root_ref()) } pub fn SetValidity(&mut self, _validity: JS) { -- cgit v1.2.3 From d7b96db33ca8f2b8a162df38e0f00e95f5ea6fa1 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 31 Mar 2014 18:41:28 -0400 Subject: Implement safe rooting strategy via Unrooted, Root, JSRef, and JS. --- src/components/script/dom/htmlselectelement.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 53a738e1a97..666cb529774 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::BindingDeclarations::HTMLSelectElementBinding; use dom::bindings::codegen::InheritTypes::HTMLSelectElementDerived; use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, HTMLOptionElementOrHTMLOptGroupElement}; -use dom::bindings::js::{JS, JSRef, RootCollection}; +use dom::bindings::js::{JS, JSRef, RootCollection, Unrooted}; use dom::bindings::error::ErrorResult; use dom::document::Document; use dom::element::{Element, HTMLSelectElementTypeId}; @@ -38,7 +38,7 @@ impl HTMLSelectElement { } } - pub fn new(localName: DOMString, document: &JSRef) -> JS { + pub fn new(localName: DOMString, document: &JSRef) -> Unrooted { let element = HTMLSelectElement::new_inherited(localName, document.unrooted()); Node::reflect_node(~element, document, HTMLSelectElementBinding::Wrap) } @@ -61,7 +61,7 @@ impl HTMLSelectElement { Ok(()) } - pub fn GetForm(&self) -> Option> { + pub fn GetForm(&self) -> Option> { None } @@ -109,15 +109,15 @@ impl HTMLSelectElement { Ok(()) } - pub fn Item(&self, _index: u32) -> Option> { + pub fn Item(&self, _index: u32) -> Option> { None } - pub fn NamedItem(&self, _name: DOMString) -> Option> { + pub fn NamedItem(&self, _name: DOMString) -> Option> { None } - pub fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { + pub fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { None } @@ -153,12 +153,11 @@ impl HTMLSelectElement { pub fn SetWillValidate(&mut self, _will_validate: bool) { } - pub fn Validity(&self) -> JS { + pub fn Validity(&self) -> Unrooted { let roots = RootCollection::new(); - let doc = self.htmlelement.element.node.owner_doc(); - let doc = doc.get(); - let window = doc.window.root(&roots); - ValidityState::new(&window.root_ref()) + let doc = self.htmlelement.element.node.owner_doc().root(&roots); + let window = doc.deref().window.root(&roots); + ValidityState::new(&*window) } pub fn SetValidity(&mut self, _validity: JS) { -- cgit v1.2.3 From 76783b029e5e10da7fd61ab356a8f80a1eaf32e0 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 10 Apr 2014 21:29:54 -0400 Subject: Move WebIDL methods to traits implemented by JSRef types. --- src/components/script/dom/htmlselectelement.rs | 111 +++++++++++++++++-------- 1 file changed, 75 insertions(+), 36 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 666cb529774..6aa15a1e982 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -44,141 +44,180 @@ impl HTMLSelectElement { } } -impl HTMLSelectElement { - pub fn Autofocus(&self) -> bool { +pub trait HTMLSelectElementMethods { + fn Autofocus(&self) -> bool; + fn SetAutofocus(&mut self, _autofocus: bool) -> ErrorResult; + fn Disabled(&self) -> bool; + fn SetDisabled(&mut self, _disabled: bool) -> ErrorResult; + fn GetForm(&self) -> Option>; + fn Multiple(&self) -> bool; + fn SetMultiple(&mut self, _multiple: bool) -> ErrorResult; + fn Name(&self) -> DOMString; + fn SetName(&mut self, _name: DOMString) -> ErrorResult; + fn Required(&self) -> bool; + fn SetRequired(&mut self, _multiple: bool) -> ErrorResult; + fn Size(&self) -> u32; + fn SetSize(&mut self, _size: u32) -> ErrorResult; + fn Type(&self) -> DOMString; + fn Length(&self) -> u32; + fn SetLength(&mut self, _length: u32) -> ErrorResult; + fn Item(&self, _index: u32) -> Option>; + fn NamedItem(&self, _name: DOMString) -> Option>; + fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option>; + fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult; + fn Remove_(&self); + fn Remove(&self, _index: i32); + fn SelectedIndex(&self) -> i32; + fn SetSelectedIndex(&mut self, _index: i32) -> ErrorResult; + fn Value(&self) -> DOMString; + fn SetValue(&mut self, _value: DOMString); + fn WillValidate(&self) -> bool; + fn SetWillValidate(&mut self, _will_validate: bool); + fn Validity(&self) -> Unrooted; + fn SetValidity(&mut self, _validity: JS); + fn ValidationMessage(&self) -> DOMString; + fn SetValidationMessage(&mut self, _message: DOMString) -> ErrorResult; + fn CheckValidity(&self) -> bool; + fn SetCustomValidity(&mut self, _error: DOMString); + fn Add(&self, _element: HTMLOptionElementOrHTMLOptGroupElement, _before: Option) -> ErrorResult; +} + +impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { + fn Autofocus(&self) -> bool { false } - pub fn SetAutofocus(&mut self, _autofocus: bool) -> ErrorResult { + fn SetAutofocus(&mut self, _autofocus: bool) -> ErrorResult { Ok(()) } - pub fn Disabled(&self) -> bool { + fn Disabled(&self) -> bool { false } - pub fn SetDisabled(&mut self, _disabled: bool) -> ErrorResult { + fn SetDisabled(&mut self, _disabled: bool) -> ErrorResult { Ok(()) } - pub fn GetForm(&self) -> Option> { + fn GetForm(&self) -> Option> { None } - pub fn Multiple(&self) -> bool { + fn Multiple(&self) -> bool { false } - pub fn SetMultiple(&mut self, _multiple: bool) -> ErrorResult { + fn SetMultiple(&mut self, _multiple: bool) -> ErrorResult { Ok(()) } - pub fn Name(&self) -> DOMString { + fn Name(&self) -> DOMString { ~"" } - pub fn SetName(&mut self, _name: DOMString) -> ErrorResult { + fn SetName(&mut self, _name: DOMString) -> ErrorResult { Ok(()) } - pub fn Required(&self) -> bool { + fn Required(&self) -> bool { false } - pub fn SetRequired(&mut self, _multiple: bool) -> ErrorResult { + fn SetRequired(&mut self, _multiple: bool) -> ErrorResult { Ok(()) } - pub fn Size(&self) -> u32 { + fn Size(&self) -> u32 { 0 } - pub fn SetSize(&mut self, _size: u32) -> ErrorResult { + fn SetSize(&mut self, _size: u32) -> ErrorResult { Ok(()) } - pub fn Type(&self) -> DOMString { + fn Type(&self) -> DOMString { ~"" } - pub fn Length(&self) -> u32 { + fn Length(&self) -> u32 { 0 } - pub fn SetLength(&mut self, _length: u32) -> ErrorResult { + fn SetLength(&mut self, _length: u32) -> ErrorResult { Ok(()) } - pub fn Item(&self, _index: u32) -> Option> { + fn Item(&self, _index: u32) -> Option> { None } - pub fn NamedItem(&self, _name: DOMString) -> Option> { + fn NamedItem(&self, _name: DOMString) -> Option> { None } - pub fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { + fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { None } - pub fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult { + fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult { Ok(()) } - pub fn Remove_(&self) { + fn Remove_(&self) { } - pub fn Remove(&self, _index: i32) { + fn Remove(&self, _index: i32) { } - pub fn SelectedIndex(&self) -> i32 { + fn SelectedIndex(&self) -> i32 { 0 } - pub fn SetSelectedIndex(&mut self, _index: i32) -> ErrorResult { + fn SetSelectedIndex(&mut self, _index: i32) -> ErrorResult { Ok(()) } - pub fn Value(&self) -> DOMString { + fn Value(&self) -> DOMString { ~"" } - pub fn SetValue(&mut self, _value: DOMString) { + fn SetValue(&mut self, _value: DOMString) { } - pub fn WillValidate(&self) -> bool { + fn WillValidate(&self) -> bool { false } - pub fn SetWillValidate(&mut self, _will_validate: bool) { + fn SetWillValidate(&mut self, _will_validate: bool) { } - pub fn Validity(&self) -> Unrooted { + fn Validity(&self) -> Unrooted { let roots = RootCollection::new(); let doc = self.htmlelement.element.node.owner_doc().root(&roots); let window = doc.deref().window.root(&roots); ValidityState::new(&*window) } - pub fn SetValidity(&mut self, _validity: JS) { + fn SetValidity(&mut self, _validity: JS) { } - pub fn ValidationMessage(&self) -> DOMString { + fn ValidationMessage(&self) -> DOMString { ~"" } - pub fn SetValidationMessage(&mut self, _message: DOMString) -> ErrorResult { + fn SetValidationMessage(&mut self, _message: DOMString) -> ErrorResult { Ok(()) } - pub fn CheckValidity(&self) -> bool { + fn CheckValidity(&self) -> bool { true } - pub fn SetCustomValidity(&mut self, _error: DOMString) { + fn SetCustomValidity(&mut self, _error: DOMString) { } - pub fn Add(&self, _element: HTMLOptionElementOrHTMLOptGroupElement, _before: Option) -> ErrorResult { + fn Add(&self, _element: HTMLOptionElementOrHTMLOptGroupElement, _before: Option) -> ErrorResult { Ok(()) } } + -- cgit v1.2.3 From 109410900c75721a77b970be3bdd830968e47151 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Fri, 11 Apr 2014 14:46:34 -0400 Subject: Move all methods on T to JSRef or JS as appropriate. --- src/components/script/dom/htmlselectelement.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 6aa15a1e982..ed99506f01d 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -12,7 +12,7 @@ use dom::element::{Element, HTMLSelectElementTypeId}; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::htmlformelement::HTMLFormElement; -use dom::node::{Node, ElementNodeTypeId}; +use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::htmloptionelement::HTMLOptionElement; use dom::validitystate::ValidityState; use servo_util::str::DOMString; @@ -193,8 +193,7 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { fn Validity(&self) -> Unrooted { let roots = RootCollection::new(); - let doc = self.htmlelement.element.node.owner_doc().root(&roots); - let window = doc.deref().window.root(&roots); + let window = window_from_node(self).root(&roots); ValidityState::new(&*window) } -- cgit v1.2.3 From 522d3f167b12fa79401eea5525c7b6133cae0f06 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 17 Apr 2014 17:08:00 -0400 Subject: s/Unrooted/Temporary/g --- src/components/script/dom/htmlselectelement.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index ed99506f01d..8c349315849 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::BindingDeclarations::HTMLSelectElementBinding; use dom::bindings::codegen::InheritTypes::HTMLSelectElementDerived; use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, HTMLOptionElementOrHTMLOptGroupElement}; -use dom::bindings::js::{JS, JSRef, RootCollection, Unrooted}; +use dom::bindings::js::{JS, JSRef, RootCollection, Temporary}; use dom::bindings::error::ErrorResult; use dom::document::Document; use dom::element::{Element, HTMLSelectElementTypeId}; @@ -38,7 +38,7 @@ impl HTMLSelectElement { } } - pub fn new(localName: DOMString, document: &JSRef) -> Unrooted { + pub fn new(localName: DOMString, document: &JSRef) -> Temporary { let element = HTMLSelectElement::new_inherited(localName, document.unrooted()); Node::reflect_node(~element, document, HTMLSelectElementBinding::Wrap) } @@ -49,7 +49,7 @@ pub trait HTMLSelectElementMethods { fn SetAutofocus(&mut self, _autofocus: bool) -> ErrorResult; fn Disabled(&self) -> bool; fn SetDisabled(&mut self, _disabled: bool) -> ErrorResult; - fn GetForm(&self) -> Option>; + fn GetForm(&self) -> Option>; fn Multiple(&self) -> bool; fn SetMultiple(&mut self, _multiple: bool) -> ErrorResult; fn Name(&self) -> DOMString; @@ -61,9 +61,9 @@ pub trait HTMLSelectElementMethods { fn Type(&self) -> DOMString; fn Length(&self) -> u32; fn SetLength(&mut self, _length: u32) -> ErrorResult; - fn Item(&self, _index: u32) -> Option>; - fn NamedItem(&self, _name: DOMString) -> Option>; - fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option>; + fn Item(&self, _index: u32) -> Option>; + fn NamedItem(&self, _name: DOMString) -> Option>; + fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option>; fn IndexedSetter(&mut self, _index: u32, _option: Option>) -> ErrorResult; fn Remove_(&self); fn Remove(&self, _index: i32); @@ -73,7 +73,7 @@ pub trait HTMLSelectElementMethods { fn SetValue(&mut self, _value: DOMString); fn WillValidate(&self) -> bool; fn SetWillValidate(&mut self, _will_validate: bool); - fn Validity(&self) -> Unrooted; + fn Validity(&self) -> Temporary; fn SetValidity(&mut self, _validity: JS); fn ValidationMessage(&self) -> DOMString; fn SetValidationMessage(&mut self, _message: DOMString) -> ErrorResult; @@ -99,7 +99,7 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { Ok(()) } - fn GetForm(&self) -> Option> { + fn GetForm(&self) -> Option> { None } @@ -147,15 +147,15 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { Ok(()) } - fn Item(&self, _index: u32) -> Option> { + fn Item(&self, _index: u32) -> Option> { None } - fn NamedItem(&self, _name: DOMString) -> Option> { + fn NamedItem(&self, _name: DOMString) -> Option> { None } - fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { + fn IndexedGetter(&self, _index: u32, _found: &mut bool) -> Option> { None } @@ -191,7 +191,7 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { fn SetWillValidate(&mut self, _will_validate: bool) { } - fn Validity(&self) -> Unrooted { + fn Validity(&self) -> Temporary { let roots = RootCollection::new(); let window = window_from_node(self).root(&roots); ValidityState::new(&*window) -- cgit v1.2.3 From 7b3e6d1f2125faf598919722b72cc56197d0102c Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 17 Apr 2014 23:26:42 -0400 Subject: Remove all root collections. --- src/components/script/dom/htmlselectelement.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 8c349315849..54d3c7cf86f 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::BindingDeclarations::HTMLSelectElementBinding; use dom::bindings::codegen::InheritTypes::HTMLSelectElementDerived; use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, HTMLOptionElementOrHTMLOptGroupElement}; -use dom::bindings::js::{JS, JSRef, RootCollection, Temporary}; +use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::error::ErrorResult; use dom::document::Document; use dom::element::{Element, HTMLSelectElementTypeId}; @@ -192,8 +192,7 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { } fn Validity(&self) -> Temporary { - let roots = RootCollection::new(); - let window = window_from_node(self).root(&roots); + let window = window_from_node(self).root(); ValidityState::new(&*window) } -- cgit v1.2.3 From 0f2d0b1dc3d98ef109627dda061c5a54ff06a91d Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Fri, 18 Apr 2014 00:12:52 -0400 Subject: Address review comments. --- src/components/script/dom/htmlselectelement.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 54d3c7cf86f..676e2266880 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::BindingDeclarations::HTMLSelectElementBinding; use dom::bindings::codegen::InheritTypes::HTMLSelectElementDerived; use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, HTMLOptionElementOrHTMLOptGroupElement}; -use dom::bindings::js::{JS, JSRef, Temporary}; +use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::error::ErrorResult; use dom::document::Document; use dom::element::{Element, HTMLSelectElementTypeId}; @@ -32,14 +32,14 @@ impl HTMLSelectElementDerived for EventTarget { } impl HTMLSelectElement { - pub fn new_inherited(localName: DOMString, document: JS) -> HTMLSelectElement { + pub fn new_inherited(localName: DOMString, document: &JSRef) -> HTMLSelectElement { HTMLSelectElement { htmlelement: HTMLElement::new_inherited(HTMLSelectElementTypeId, localName, document) } } pub fn new(localName: DOMString, document: &JSRef) -> Temporary { - let element = HTMLSelectElement::new_inherited(localName, document.unrooted()); + let element = HTMLSelectElement::new_inherited(localName, document); Node::reflect_node(~element, document, HTMLSelectElementBinding::Wrap) } } @@ -74,7 +74,6 @@ pub trait HTMLSelectElementMethods { fn WillValidate(&self) -> bool; fn SetWillValidate(&mut self, _will_validate: bool); fn Validity(&self) -> Temporary; - fn SetValidity(&mut self, _validity: JS); fn ValidationMessage(&self) -> DOMString; fn SetValidationMessage(&mut self, _message: DOMString) -> ErrorResult; fn CheckValidity(&self) -> bool; @@ -196,9 +195,6 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { ValidityState::new(&*window) } - fn SetValidity(&mut self, _validity: JS) { - } - fn ValidationMessage(&self) -> DOMString { ~"" } -- cgit v1.2.3 From 91278da9dd55582401154e07f9eea34425a332c2 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 24 Apr 2014 13:03:19 -0400 Subject: Address review comments. --- src/components/script/dom/htmlselectelement.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'src/components/script/dom/htmlselectelement.rs') diff --git a/src/components/script/dom/htmlselectelement.rs b/src/components/script/dom/htmlselectelement.rs index 676e2266880..cabeacbf47a 100644 --- a/src/components/script/dom/htmlselectelement.rs +++ b/src/components/script/dom/htmlselectelement.rs @@ -214,4 +214,3 @@ impl<'a> HTMLSelectElementMethods for JSRef<'a, HTMLSelectElement> { Ok(()) } } - -- cgit v1.2.3