Do not root NamedNodeMap::owner

This commit is contained in:
Anthony Ramine 2015-10-17 15:20:51 +02:00
parent 5889a75b10
commit 6849510526

View file

@ -37,57 +37,38 @@ impl NamedNodeMap {
impl NamedNodeMapMethods for NamedNodeMap { impl NamedNodeMapMethods for NamedNodeMap {
// https://dom.spec.whatwg.org/#dom-namednodemap-length // https://dom.spec.whatwg.org/#dom-namednodemap-length
fn Length(&self) -> u32 { fn Length(&self) -> u32 {
let owner = self.owner.root(); self.owner.attrs().len() as u32
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let owner = owner.r();
let attrs = owner.attrs();
attrs.len() as u32
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-item // https://dom.spec.whatwg.org/#dom-namednodemap-item
fn Item(&self, index: u32) -> Option<Root<Attr>> { fn Item(&self, index: u32) -> Option<Root<Attr>> {
let owner = self.owner.root(); self.owner.attrs().get(index as usize).map(JS::root)
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let owner = owner.r();
let attrs = owner.attrs();
attrs.get(index as usize).map(|t| t.root())
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem // https://dom.spec.whatwg.org/#dom-namednodemap-getnameditem
fn GetNamedItem(&self, name: DOMString) -> Option<Root<Attr>> { fn GetNamedItem(&self, name: DOMString) -> Option<Root<Attr>> {
let owner = self.owner.root(); self.owner.get_attribute_by_name(name)
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let owner = owner.r();
owner.get_attribute_by_name(name)
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns // https://dom.spec.whatwg.org/#dom-namednodemap-getnameditemns
fn GetNamedItemNS(&self, namespace: Option<DOMString>, local_name: DOMString) fn GetNamedItemNS(&self, namespace: Option<DOMString>, local_name: DOMString)
-> Option<Root<Attr>> { -> Option<Root<Attr>> {
let owner = self.owner.root();
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let owner = owner.r();
let ns = namespace_from_domstring(namespace); let ns = namespace_from_domstring(namespace);
owner.get_attribute(&ns, &Atom::from_slice(&local_name)) self.owner.get_attribute(&ns, &Atom::from_slice(&local_name))
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem // https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem
fn RemoveNamedItem(&self, name: DOMString) -> Fallible<Root<Attr>> { fn RemoveNamedItem(&self, name: DOMString) -> Fallible<Root<Attr>> {
let owner = self.owner.root(); let name = self.owner.parsed_name(name);
// FIXME(https://github.com/rust-lang/rust/issues/23338) self.owner.remove_attribute_by_name(&name).ok_or(Error::NotFound)
let owner = owner.r();
let name = owner.parsed_name(name);
owner.remove_attribute_by_name(&name).ok_or(Error::NotFound)
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns // https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns
fn RemoveNamedItemNS(&self, namespace: Option<DOMString>, local_name: DOMString) fn RemoveNamedItemNS(&self, namespace: Option<DOMString>, local_name: DOMString)
-> Fallible<Root<Attr>> { -> Fallible<Root<Attr>> {
let owner = self.owner.root();
// FIXME(https://github.com/rust-lang/rust/issues/23338)
let owner = owner.r();
let ns = namespace_from_domstring(namespace); let ns = namespace_from_domstring(namespace);
owner.remove_attribute(&ns, &Atom::from_slice(&local_name)).ok_or(Error::NotFound) self.owner.remove_attribute(&ns, &Atom::from_slice(&local_name))
.ok_or(Error::NotFound)
} }
// https://dom.spec.whatwg.org/#dom-namednodemap-item // https://dom.spec.whatwg.org/#dom-namednodemap-item