diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-09-12 17:17:22 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-09-13 23:40:24 +0200 |
commit | 650afc9d3e0d351df493e11831b1c072f79e8889 (patch) | |
tree | 5331507cce86913a1f77d331a45e515ae85ca58d /components/script | |
parent | d5ee58caf269779e86b2efc50ddf37d3e4eba9b9 (diff) | |
download | servo-650afc9d3e0d351df493e11831b1c072f79e8889.tar.gz servo-650afc9d3e0d351df493e11831b1c072f79e8889.zip |
Fix cloning of Element's attributes
No virtual method was invoked when copies of attributes were appended to
newly-cloned elements.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/element.rs | 6 | ||||
-rw-r--r-- | components/script/dom/node.rs | 15 |
2 files changed, 7 insertions, 14 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index bd522dccf0a..87804d373fd 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -83,7 +83,7 @@ use url::UrlParser; use std::ascii::AsciiExt; use std::borrow::{Cow, ToOwned}; -use std::cell::{Ref, RefMut}; +use std::cell::Ref; use std::default::Default; use std::mem; use std::sync::Arc; @@ -597,10 +597,6 @@ impl Element { self.attrs.borrow() } - pub fn attrs_mut(&self) -> RefMut<Vec<JS<Attr>>> { - self.attrs.borrow_mut() - } - pub fn style_attribute(&self) -> &DOMRefCell<Option<PropertyDeclarationBlock>> { &self.style_attribute } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index ae725d3d856..c9e78200c99 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1768,15 +1768,12 @@ impl Node { let node_elem = ElementCast::to_ref(node).unwrap(); let copy_elem = ElementCast::to_ref(copy.r()).unwrap(); - let window = document.r().window(); - for ref attr in &*node_elem.attrs() { - let attr = attr.root(); - let newattr = - Attr::new(window.r(), - attr.r().local_name().clone(), attr.r().value().clone(), - attr.r().name().clone(), attr.r().namespace().clone(), - attr.r().prefix().clone(), Some(copy_elem)); - copy_elem.attrs_mut().push(JS::from_rooted(&newattr)); + for attr in node_elem.attrs().iter().map(JS::root) { + copy_elem.push_new_attribute(attr.local_name().clone(), + attr.value().clone(), + attr.name().clone(), + attr.namespace().clone(), + attr.prefix().clone()); } }, _ => () |