diff --git a/servo/src/components/script/dom/attr.rs b/servo/src/components/script/dom/attr.rs index dce5df0f009b..b5f2717697dd 100644 --- a/servo/src/components/script/dom/attr.rs +++ b/servo/src/components/script/dom/attr.rs @@ -69,7 +69,7 @@ impl AttrValue { #[deriving(Encodable)] pub struct Attr { reflector_: Reflector, - pub local_name: DOMString, + local_name: Atom, value: Traceable>, pub name: Atom, pub namespace: Namespace, @@ -86,7 +86,7 @@ impl Reflectable for Attr { } impl Attr { - fn new_inherited(local_name: DOMString, value: AttrValue, + fn new_inherited(local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, owner: &JSRef) -> Attr { Attr { @@ -100,7 +100,7 @@ impl Attr { } } - pub fn new(window: &JSRef, local_name: DOMString, value: AttrValue, + pub fn new(window: &JSRef, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, owner: &JSRef) -> Temporary { let attr = Attr::new_inherited(local_name, value, name, namespace, prefix, owner); @@ -115,7 +115,9 @@ impl Attr { match set_type { ReplacedAttr => { if namespace_is_null { - vtable_for(node).before_remove_attr(self.local_name.clone(), self.value.deref().borrow().as_slice().to_string()); + vtable_for(node).before_remove_attr( + self.local_name(), + self.value.deref().borrow().as_slice().to_string()); } } FirstSetAttr => {} @@ -124,18 +126,24 @@ impl Attr { *self.value.deref().borrow_mut() = value; if namespace_is_null { - vtable_for(node).after_set_attr(self.local_name.clone(), self.value.deref().borrow().as_slice().to_string()); + vtable_for(node).after_set_attr( + self.local_name(), + self.value.deref().borrow().as_slice().to_string()); } } pub fn value<'a>(&'a self) -> Ref<'a, AttrValue> { self.value.deref().borrow() } + + pub fn local_name<'a>(&'a self) -> &'a Atom { + &self.local_name + } } impl<'a> AttrMethods for JSRef<'a, Attr> { fn LocalName(&self) -> DOMString { - self.local_name.clone() + self.local_name().as_slice().to_string() } fn Value(&self) -> DOMString { @@ -145,7 +153,7 @@ impl<'a> AttrMethods for JSRef<'a, Attr> { fn SetValue(&self, value: DOMString) { let owner = self.owner.root(); let value = owner.deref().parse_attribute( - &self.namespace, self.deref().local_name.as_slice(), value); + &self.namespace, self.local_name(), value); self.set_value(ReplacedAttr, value); } diff --git a/servo/src/components/script/dom/element.rs b/servo/src/components/script/dom/element.rs index cdb2f4f1f2ba..425529fe6d4c 100644 --- a/servo/src/components/script/dom/element.rs +++ b/servo/src/components/script/dom/element.rs @@ -178,7 +178,8 @@ impl RawLayoutElementHelpers for Element { let attrs: *const Vec> = mem::transmute(&self.attrs); (*attrs).iter().find(|attr: & &JS| { let attr = attr.unsafe_get(); - name == (*attr).local_name.as_slice() && (*attr).namespace == *namespace + name == (*attr).local_name().as_slice() && + (*attr).namespace == *namespace }).map(|attr| { let attr = attr.unsafe_get(); (*attr).value_ref_forever() @@ -192,7 +193,8 @@ impl RawLayoutElementHelpers for Element { let attrs: *const Vec> = mem::transmute(&self.attrs); (*attrs).iter().find(|attr: & &JS| { let attr = attr.unsafe_get(); - name == (*attr).local_name.as_slice() && (*attr).namespace == *namespace + name == (*attr).local_name().as_slice() && + (*attr).namespace == *namespace }).and_then(|attr| { let attr = attr.unsafe_get(); (*attr).value_atom_forever() @@ -238,18 +240,18 @@ impl<'a> ElementHelpers for JSRef<'a, Element> { pub trait AttributeHandlers { fn get_attribute(&self, namespace: Namespace, name: &str) -> Option>; - fn set_attribute_from_parser(&self, local_name: DOMString, + fn set_attribute_from_parser(&self, local_name: Atom, value: DOMString, namespace: Namespace, prefix: Option); fn set_attribute(&self, name: &str, value: AttrValue); - fn do_set_attribute(&self, local_name: DOMString, value: AttrValue, + fn do_set_attribute(&self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, cb: |&JSRef| -> bool); - fn parse_attribute(&self, namespace: &Namespace, local_name: &str, + fn parse_attribute(&self, namespace: &Namespace, local_name: &Atom, value: DOMString) -> AttrValue; fn remove_attribute(&self, namespace: Namespace, name: &str); - fn notify_attribute_changed(&self, local_name: DOMString); + fn notify_attribute_changed(&self, local_name: &Atom); fn has_class(&self, name: &str) -> bool; fn set_atomic_attribute(&self, name: &str, value: DOMString); @@ -269,27 +271,26 @@ pub trait AttributeHandlers { impl<'a> AttributeHandlers for JSRef<'a, Element> { fn get_attribute(&self, namespace: Namespace, name: &str) -> Option> { let element: &Element = self.deref(); - let is_html_element = self.html_element_in_html_document(); - + let local_name = match self.html_element_in_html_document() { + true => Atom::from_slice(name.to_ascii_lower().as_slice()), + false => Atom::from_slice(name) + }; element.attrs.borrow().iter().map(|attr| attr.root()).find(|attr| { - let same_name = if is_html_element { - name.to_ascii_lower() == attr.local_name - } else { - name == attr.local_name.as_slice() - }; - - same_name && attr.namespace == namespace + *attr.local_name() == local_name && attr.namespace == namespace }).map(|x| Temporary::from_rooted(&*x)) } - fn set_attribute_from_parser(&self, local_name: DOMString, + fn set_attribute_from_parser(&self, local_name: Atom, value: DOMString, namespace: Namespace, prefix: Option) { let name = match prefix { - None => Atom::from_slice(local_name.as_slice()), - Some(ref prefix) => Atom::from_slice(format!("{:s}:{:s}", *prefix, local_name).as_slice()), + None => local_name.clone(), + Some(ref prefix) => { + let name = format!("{:s}:{:s}", *prefix, local_name.as_slice()); + Atom::from_slice(name.as_slice()) + }, }; - let value = self.parse_attribute(&namespace, local_name.as_slice(), value); + let value = self.parse_attribute(&namespace, &local_name, value); self.do_set_attribute(local_name, value, name, namespace, prefix, |_| false) } @@ -300,12 +301,12 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { let node: &JSRef = NodeCast::from_ref(self); node.wait_until_safe_to_modify_dom(); - self.do_set_attribute(name.to_string(), value, Atom::from_slice(name), - namespace::Null, None, - |attr| attr.deref().local_name.as_slice() == name); + let name = Atom::from_slice(name); + self.do_set_attribute(name.clone(), value, name.clone(), + namespace::Null, None, |attr| *attr.local_name() == name); } - fn do_set_attribute(&self, local_name: DOMString, value: AttrValue, + fn do_set_attribute(&self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, cb: |&JSRef| -> bool) { let idx = self.deref().attrs.borrow().iter() @@ -315,7 +316,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { Some(idx) => (idx, ReplacedAttr), None => { let window = window_from_node(self).root(); - let attr = Attr::new(&*window, local_name.clone(), value.clone(), + let attr = Attr::new(&*window, local_name, value.clone(), name, namespace.clone(), prefix, self); self.deref().attrs.borrow_mut().push_unrooted(&attr); (self.deref().attrs.borrow().len() - 1, FirstSetAttr) @@ -325,11 +326,11 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { (*self.deref().attrs.borrow())[idx].root().set_value(set_type, value); } - fn parse_attribute(&self, namespace: &Namespace, local_name: &str, + fn parse_attribute(&self, namespace: &Namespace, local_name: &Atom, value: DOMString) -> AttrValue { if *namespace == namespace::Null { vtable_for(NodeCast::from_ref(self)) - .parse_plain_attribute(local_name, value) + .parse_plain_attribute(local_name.as_slice(), value) } else { StringAttrValue(value) } @@ -337,9 +338,10 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { fn remove_attribute(&self, namespace: Namespace, name: &str) { let (_, local_name) = get_attribute_parts(name); + let local_name = Atom::from_slice(local_name); let idx = self.deref().attrs.borrow().iter().map(|attr| attr.root()).position(|attr| { - attr.local_name.as_slice() == local_name + *attr.local_name() == local_name }); match idx { @@ -353,7 +355,8 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { if namespace == namespace::Null { let removed_raw_value = (*self.deref().attrs.borrow())[idx].root().Value(); vtable_for(NodeCast::from_ref(self)) - .before_remove_attr(local_name.to_string(), removed_raw_value); + .before_remove_attr(&local_name, + removed_raw_value); } self.deref().attrs.borrow_mut().remove(idx); @@ -361,7 +364,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { }; } - fn notify_attribute_changed(&self, local_name: DOMString) { + fn notify_attribute_changed(&self, local_name: &Atom) { let node: &JSRef = NodeCast::from_ref(self); if node.is_in_doc() { let damage = match local_name.as_slice() { @@ -387,11 +390,11 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { fn has_attribute(&self, name: &str) -> bool { let name = match self.html_element_in_html_document() { - true => name.to_ascii_lower(), - false => name.to_string() + true => Atom::from_slice(name.to_ascii_lower().as_slice()), + false => Atom::from_slice(name) }; self.deref().attrs.borrow().iter().map(|attr| attr.root()).any(|attr| { - name == attr.local_name && attr.namespace == Null + *attr.local_name() == name && attr.namespace == Null }) } @@ -586,10 +589,10 @@ impl<'a> ElementMethods for JSRef<'a, Element> { }; // Step 3-5. - let value = self.parse_attribute(&namespace::Null, name.as_slice(), value); - let name_atom = Atom::from_slice(name.as_slice()); - self.do_set_attribute(name.clone(), value, name_atom.clone(), namespace::Null, None, |attr| { - attr.deref().name == name_atom + let name = Atom::from_slice(name.as_slice()); + let value = self.parse_attribute(&namespace::Null, &name, value); + self.do_set_attribute(name.clone(), value, name.clone(), namespace::Null, None, |attr| { + attr.deref().name.as_slice() == name.as_slice() }); Ok(()) } @@ -639,6 +642,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { } let name = Atom::from_slice(name.as_slice()); + let local_name = Atom::from_slice(local_name); let xmlns = Atom::from_slice("xmlns"); // TODO: Make this a static atom type // Step 7a. @@ -652,12 +656,12 @@ impl<'a> ElementMethods for JSRef<'a, Element> { } // Step 9. - let value = self.parse_attribute(&namespace, local_name.as_slice(), value); - self.do_set_attribute(local_name.to_string(), value, name, + let value = self.parse_attribute(&namespace, &local_name, value); + self.do_set_attribute(local_name.clone(), value, name, namespace.clone(), prefix.map(|s| s.to_string()), |attr| { - attr.deref().local_name.as_slice() == local_name && - attr.deref().namespace == namespace + *attr.local_name() == local_name && + attr.namespace == namespace }); Ok(()) } @@ -803,9 +807,9 @@ impl<'a> VirtualMethods for JSRef<'a, Element> { Some(node as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -829,9 +833,9 @@ impl<'a> VirtualMethods for JSRef<'a, Element> { self.notify_attribute_changed(name); } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlanchorelement.rs b/servo/src/components/script/dom/htmlanchorelement.rs index b69536a3303c..1983548809d9 100644 --- a/servo/src/components/script/dom/htmlanchorelement.rs +++ b/servo/src/components/script/dom/htmlanchorelement.rs @@ -16,6 +16,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::namespace::Null; use servo_util::str::DOMString; @@ -72,9 +74,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLAnchorElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -85,9 +87,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLAnchorElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlareaelement.rs b/servo/src/components/script/dom/htmlareaelement.rs index 339355c844f1..3de80a21802d 100644 --- a/servo/src/components/script/dom/htmlareaelement.rs +++ b/servo/src/components/script/dom/htmlareaelement.rs @@ -13,6 +13,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -45,9 +47,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLAreaElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -58,9 +60,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLAreaElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlbodyelement.rs b/servo/src/components/script/dom/htmlbodyelement.rs index 64abfc39eac7..b7bb35e618ad 100644 --- a/servo/src/components/script/dom/htmlbodyelement.rs +++ b/servo/src/components/script/dom/htmlbodyelement.rs @@ -16,6 +16,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId, EventTargetHelpers}; use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -60,9 +62,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLBodyElement> { Some(element as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlbuttonelement.rs b/servo/src/components/script/dom/htmlbuttonelement.rs index d0fb4bb16a66..f57b8fdbdfd1 100644 --- a/servo/src/components/script/dom/htmlbuttonelement.rs +++ b/servo/src/components/script/dom/htmlbuttonelement.rs @@ -15,6 +15,8 @@ use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -66,9 +68,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLButtonElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -82,9 +84,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLButtonElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmlcanvaselement.rs b/servo/src/components/script/dom/htmlcanvaselement.rs index 4267a5df4528..50198b197eeb 100644 --- a/servo/src/components/script/dom/htmlcanvaselement.rs +++ b/servo/src/components/script/dom/htmlcanvaselement.rs @@ -18,6 +18,7 @@ use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; +use servo_util::atom::Atom; use servo_util::str::DOMString; use geom::size::Size2D; @@ -98,9 +99,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLCanvasElement> { Some(element as &VirtualMethods) } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } @@ -125,9 +126,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLCanvasElement> { } } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlelement.rs b/servo/src/components/script/dom/htmlelement.rs index 6633e54d0656..076ba5fddce7 100644 --- a/servo/src/components/script/dom/htmlelement.rs +++ b/servo/src/components/script/dom/htmlelement.rs @@ -16,6 +16,8 @@ use dom::element::{Element, ElementTypeId, HTMLElementTypeId}; use dom::eventtarget::{EventTarget, EventTargetHelpers, NodeTargetTypeId}; use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::namespace; use servo_util::str::DOMString; @@ -92,9 +94,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLElement> { Some(element as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlfieldsetelement.rs b/servo/src/components/script/dom/htmlfieldsetelement.rs index 73001d56ddd3..6d5bc5a5aec4 100644 --- a/servo/src/components/script/dom/htmlfieldsetelement.rs +++ b/servo/src/components/script/dom/htmlfieldsetelement.rs @@ -17,6 +17,8 @@ use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::{DOMString, StaticStringVec}; #[deriving(Encodable)] @@ -85,9 +87,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLFieldSetElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -117,9 +119,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLFieldSetElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmliframeelement.rs b/servo/src/components/script/dom/htmliframeelement.rs index 5be30eceb2e7..b2d2c05f7285 100644 --- a/servo/src/components/script/dom/htmliframeelement.rs +++ b/servo/src/components/script/dom/htmliframeelement.rs @@ -18,9 +18,11 @@ use dom::node::{Node, NodeHelpers, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; use dom::window::Window; use page::IterablePage; + use servo_msg::constellation_msg::{PipelineId, SubpageId}; use servo_msg::constellation_msg::{IFrameSandboxed, IFrameUnsandboxed}; use servo_msg::constellation_msg::{ConstellationChan, LoadIframeUrlMsg}; +use servo_util::atom::Atom; use servo_util::namespace::Null; use servo_util::str::DOMString; @@ -163,9 +165,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLIFrameElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -193,9 +195,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLIFrameElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmlimageelement.rs b/servo/src/components/script/dom/htmlimageelement.rs index 21c109195a3f..73fc3d07646f 100644 --- a/servo/src/components/script/dom/htmlimageelement.rs +++ b/servo/src/components/script/dom/htmlimageelement.rs @@ -16,12 +16,16 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node}; use dom::virtualmethods::VirtualMethods; -use servo_util::geometry::to_px; + use servo_net::image_cache_task; +use servo_util::atom::Atom; +use servo_util::geometry::to_px; use servo_util::str::DOMString; -use std::cell::RefCell; + use url::{Url, UrlParser}; +use std::cell::RefCell; + #[deriving(Encodable)] pub struct HTMLImageElement { pub htmlelement: HTMLElement, @@ -221,9 +225,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -234,9 +238,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlinputelement.rs b/servo/src/components/script/dom/htmlinputelement.rs index 9701ef384be2..32997a507f1f 100644 --- a/servo/src/components/script/dom/htmlinputelement.rs +++ b/servo/src/components/script/dom/htmlinputelement.rs @@ -14,6 +14,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -60,9 +62,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLInputElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -76,9 +78,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLInputElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmllinkelement.rs b/servo/src/components/script/dom/htmllinkelement.rs index 3d3a46d28c41..fae89c1c5207 100644 --- a/servo/src/components/script/dom/htmllinkelement.rs +++ b/servo/src/components/script/dom/htmllinkelement.rs @@ -13,6 +13,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -45,9 +47,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLLinkElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -58,9 +60,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLLinkElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value.clone()), + Some(ref s) => s.before_remove_attr(name, value.clone()), _ => (), } diff --git a/servo/src/components/script/dom/htmlobjectelement.rs b/servo/src/components/script/dom/htmlobjectelement.rs index 3dd88ff49f4a..94c877195633 100644 --- a/servo/src/components/script/dom/htmlobjectelement.rs +++ b/servo/src/components/script/dom/htmlobjectelement.rs @@ -17,11 +17,13 @@ use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; -use servo_util::str::DOMString; use servo_net::image_cache_task; use servo_net::image_cache_task::ImageCacheTask; +use servo_util::atom::Atom; use servo_util::namespace::Null; +use servo_util::str::DOMString; + use url::Url; #[deriving(Encodable)] @@ -91,9 +93,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLObjectElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value), + Some(ref s) => s.after_set_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmloptgroupelement.rs b/servo/src/components/script/dom/htmloptgroupelement.rs index 4eda6938610e..eee7c80f27b3 100644 --- a/servo/src/components/script/dom/htmloptgroupelement.rs +++ b/servo/src/components/script/dom/htmloptgroupelement.rs @@ -14,6 +14,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -60,9 +62,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptGroupElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -80,9 +82,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptGroupElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmloptionelement.rs b/servo/src/components/script/dom/htmloptionelement.rs index a0c4f9e4067c..ac0502eb0eb4 100644 --- a/servo/src/components/script/dom/htmloptionelement.rs +++ b/servo/src/components/script/dom/htmloptionelement.rs @@ -14,6 +14,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -60,9 +62,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -76,9 +78,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmlselectelement.rs b/servo/src/components/script/dom/htmlselectelement.rs index 518bcbeb03ca..93717fc92651 100644 --- a/servo/src/components/script/dom/htmlselectelement.rs +++ b/servo/src/components/script/dom/htmlselectelement.rs @@ -17,6 +17,8 @@ use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, window_from_node}; use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -72,9 +74,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLSelectElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -88,9 +90,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLSelectElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/htmlserializer.rs b/servo/src/components/script/dom/htmlserializer.rs index e2bfee571c34..cb9e1769255c 100644 --- a/servo/src/components/script/dom/htmlserializer.rs +++ b/servo/src/components/script/dom/htmlserializer.rs @@ -2,7 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use servo_util::namespace; use dom::attr::Attr; use dom::bindings::codegen::InheritTypes::{ElementCast, TextCast, CommentCast, NodeCast}; use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, CharacterDataCast}; @@ -19,6 +18,9 @@ use dom::node::{TextNodeTypeId, NodeHelpers}; use dom::processinginstruction::ProcessingInstruction; use dom::text::Text; +use servo_util::atom::Atom; +use servo_util::namespace; + pub fn serialize(iterator: &mut NodeIterator) -> String { let mut html = String::new(); let mut open_elements: Vec = vec!(); @@ -137,16 +139,16 @@ fn serialize_attr(attr: &JSRef, html: &mut String) { html.push_char(' '); if attr.deref().namespace == namespace::XML { html.push_str("xml:"); - html.push_str(attr.deref().local_name.as_slice()); + html.push_str(attr.local_name().as_slice()); } else if attr.deref().namespace == namespace::XMLNS && - attr.deref().local_name.as_slice() == "xmlns" { + *attr.local_name() == Atom::from_slice("xmlns") { html.push_str("xmlns"); } else if attr.deref().namespace == namespace::XMLNS { html.push_str("xmlns:"); - html.push_str(attr.deref().local_name.as_slice()); + html.push_str(attr.local_name().as_slice()); } else if attr.deref().namespace == namespace::XLink { html.push_str("xlink:"); - html.push_str(attr.deref().local_name.as_slice()); + html.push_str(attr.local_name().as_slice()); } else { html.push_str(attr.deref().name.as_slice()); }; diff --git a/servo/src/components/script/dom/htmltextareaelement.rs b/servo/src/components/script/dom/htmltextareaelement.rs index ac96c0789ebe..7e607f131dd5 100644 --- a/servo/src/components/script/dom/htmltextareaelement.rs +++ b/servo/src/components/script/dom/htmltextareaelement.rs @@ -14,6 +14,8 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; + +use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] @@ -60,9 +62,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> { Some(htmlelement as &VirtualMethods) } - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.after_set_attr(name.clone(), value.clone()), + Some(ref s) => s.after_set_attr(name, value.clone()), _ => (), } @@ -76,9 +78,9 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> { } } - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { - Some(ref s) => s.before_remove_attr(name.clone(), value), + Some(ref s) => s.before_remove_attr(name, value), _ => (), } diff --git a/servo/src/components/script/dom/node.rs b/servo/src/components/script/dom/node.rs index 9ef327f4fa48..0d85f4202902 100644 --- a/servo/src/components/script/dom/node.rs +++ b/servo/src/components/script/dom/node.rs @@ -1374,7 +1374,7 @@ impl Node { for attr in node_elem.deref().attrs.borrow().iter().map(|attr| attr.root()) { copy_elem.deref().attrs.borrow_mut().push_unrooted( &Attr::new(&*window, - attr.deref().local_name.clone(), attr.deref().value().clone(), + attr.local_name().clone(), attr.deref().value().clone(), attr.deref().name.clone(), attr.deref().namespace.clone(), attr.deref().prefix.clone(), copy_elem)); } @@ -1833,7 +1833,7 @@ impl<'a> NodeMethods for JSRef<'a, Node> { element.attrs.borrow().iter().map(|attr| attr.root()).all(|attr| { other_element.attrs.borrow().iter().map(|attr| attr.root()).any(|other_attr| { (attr.namespace == other_attr.namespace) && - (attr.local_name == other_attr.local_name) && + (attr.local_name() == other_attr.local_name()) && (attr.deref().value().as_slice() == other_attr.deref().value().as_slice()) }) }) diff --git a/servo/src/components/script/dom/virtualmethods.rs b/servo/src/components/script/dom/virtualmethods.rs index c050d2e5449b..9ce38c4908be 100644 --- a/servo/src/components/script/dom/virtualmethods.rs +++ b/servo/src/components/script/dom/virtualmethods.rs @@ -59,6 +59,8 @@ use dom::htmlselectelement::HTMLSelectElement; use dom::htmlstyleelement::HTMLStyleElement; use dom::htmltextareaelement::HTMLTextAreaElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; + +use servo_util::atom::Atom; use servo_util::str::DOMString; /// Trait to allow DOM nodes to opt-in to overriding (or adding to) common @@ -70,7 +72,7 @@ pub trait VirtualMethods { /// Called when changing or adding attributes, after the attribute's value /// has been updated. - fn after_set_attr(&self, name: DOMString, value: DOMString) { + fn after_set_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { Some(ref s) => s.after_set_attr(name, value), _ => (), @@ -79,7 +81,7 @@ pub trait VirtualMethods { /// Called when changing or removing attributes, before any modification /// has taken place. - fn before_remove_attr(&self, name: DOMString, value: DOMString) { + fn before_remove_attr(&self, name: &Atom, value: DOMString) { match self.super_type() { Some(ref s) => s.before_remove_attr(name, value), _ => (), diff --git a/servo/src/components/script/html/hubbub_html_parser.rs b/servo/src/components/script/html/hubbub_html_parser.rs index e759a87f48e5..63c65bc9fd81 100644 --- a/servo/src/components/script/html/hubbub_html_parser.rs +++ b/servo/src/components/script/html/hubbub_html_parser.rs @@ -20,6 +20,7 @@ use page::Page; use hubbub::hubbub; use hubbub::hubbub::{NullNs, HtmlNs, MathMlNs, SvgNs, XLinkNs, XmlNs, XmlNsNs}; use servo_net::resource_task::{Load, LoadData, Payload, Done, ResourceTask, load_whole_resource}; +use servo_util::atom::Atom; use servo_util::namespace; use servo_util::namespace::{Namespace, Null}; use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS}; @@ -378,7 +379,7 @@ pub fn parse_html(page: &Page, XmlNsNs => (namespace::XMLNS, Some("xmlns")), ns => fail!("Not expecting namespace {:?}", ns), }; - element.set_attribute_from_parser(attr.name.clone(), + element.set_attribute_from_parser(Atom::from_slice(attr.name.as_slice()), attr.value.clone(), namespace, prefix.map(|p| p.to_string()));