diff --git a/src/components/layout/css/matching.rs b/src/components/layout/css/matching.rs index afce7c237f0a..13f613a87ba7 100644 --- a/src/components/layout/css/matching.rs +++ b/src/components/layout/css/matching.rs @@ -12,6 +12,7 @@ use util::{LayoutDataAccess, LayoutDataWrapper}; use wrapper::{LayoutElement, LayoutNode, PostorderNodeMutTraversal, ThreadSafeLayoutNode}; use gfx::font_context::FontContext; +use servo_util::atom::Atom; use servo_util::cache::{Cache, LRUCache, SimpleHashCache}; use servo_util::namespace::Null; use servo_util::smallvec::{SmallVec, SmallVec16}; @@ -162,10 +163,7 @@ pub struct StyleSharingCandidateCache { pub struct StyleSharingCandidate { pub style: Arc, pub parent_style: Arc, - - // TODO(pcwalton): Intern. - pub local_name: DOMString, - + pub local_name: Atom, pub class: Option, } @@ -224,14 +222,14 @@ impl StyleSharingCandidate { Some(StyleSharingCandidate { style: style.take_unwrap(), parent_style: parent_style.take_unwrap(), - local_name: element.get_local_name().to_str(), + local_name: element.get_local_name().clone(), class: element.get_attr(&Null, "class") .map(|string| string.to_str()), }) } fn can_share_style_with(&self, element: &LayoutElement) -> bool { - if element.get_local_name() != self.local_name.as_slice() { + if *element.get_local_name() != self.local_name { return false } match (&self.class, element.get_attr(&Null, "class")) { diff --git a/src/components/layout/wrapper.rs b/src/components/layout/wrapper.rs index 4fd202c9b1fa..adf0151749c0 100644 --- a/src/components/layout/wrapper.rs +++ b/src/components/layout/wrapper.rs @@ -47,6 +47,7 @@ use script::dom::node::{DocumentNodeTypeId, ElementNodeTypeId, Node, NodeTypeId} use script::dom::node::{LayoutNodeHelpers, RawLayoutNodeHelpers, TextNodeTypeId}; use script::dom::text::Text; use servo_msg::constellation_msg::{PipelineId, SubpageId}; +use servo_util::atom::Atom; use servo_util::namespace::Namespace; use servo_util::namespace; use servo_util::str::is_whitespace; @@ -359,8 +360,8 @@ impl<'le> LayoutElement<'le> { impl<'le> TElement for LayoutElement<'le> { #[inline] - fn get_local_name<'a>(&'a self) -> &'a str { - self.element.local_name.as_slice() + fn get_local_name<'a>(&'a self) -> &'a Atom { + &self.element.local_name } #[inline] diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 8f1c918e256c..db0f527580b5 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -201,7 +201,7 @@ impl LayoutElementHelpers for JS { pub trait ElementHelpers { fn html_element_in_html_document(&self) -> bool; - fn get_local_name<'a>(&'a self) -> &'a str; + fn get_local_name<'a>(&'a self) -> &'a Atom; fn get_namespace<'a>(&'a self) -> &'a Namespace; } @@ -212,8 +212,8 @@ impl<'a> ElementHelpers for JSRef<'a, Element> { is_html && node.owner_doc().root().is_html_document } - fn get_local_name<'a>(&'a self) -> &'a str { - self.deref().local_name.as_slice() + fn get_local_name<'a>(&'a self) -> &'a Atom { + &self.deref().local_name } fn get_namespace<'a>(&'a self) -> &'a Namespace { @@ -912,7 +912,7 @@ impl<'a> style::TElement for JSRef<'a, Element> { _ => None, } } - fn get_local_name<'a>(&'a self) -> &'a str { + fn get_local_name<'a>(&'a self) -> &'a Atom { (self as &ElementHelpers).get_local_name() } fn get_namespace<'a>(&'a self) -> &'a Namespace { diff --git a/src/components/style/node.rs b/src/components/style/node.rs index d53bffe66c6d..5d00d34c746d 100644 --- a/src/components/style/node.rs +++ b/src/components/style/node.rs @@ -6,6 +6,7 @@ //! style. use selectors::AttrSelector; +use servo_util::atom::Atom; use servo_util::namespace::Namespace; @@ -22,7 +23,7 @@ pub trait TNode : Clone { pub trait TElement { fn get_attr(&self, namespace: &Namespace, attr: &str) -> Option<&'static str>; fn get_link(&self) -> Option<&'static str>; - fn get_local_name<'a>(&'a self) -> &'a str; + fn get_local_name<'a>(&'a self) -> &'a Atom; fn get_namespace<'a>(&'a self) -> &'a Namespace; fn get_hover_state(&self) -> bool; } diff --git a/src/components/style/selector_matching.rs b/src/components/style/selector_matching.rs index 6e1af004a029..eeff8b3c60eb 100644 --- a/src/components/style/selector_matching.rs +++ b/src/components/style/selector_matching.rs @@ -147,7 +147,7 @@ impl SelectorMap { // TODO(pradeep): Case-sensitivity depends on the document type. SelectorMap::get_matching_rules_from_hash_ignoring_case(node, &self.element_hash, - element.get_local_name(), + element.get_local_name().as_slice(), matching_rules_list, shareable); @@ -678,7 +678,7 @@ fn matches_simple_selector { let element = element.as_element(); - element.get_local_name().eq_ignore_ascii_case(name.as_slice()) + element.get_local_name().as_slice().eq_ignore_ascii_case(name.as_slice()) } NamespaceSelector(ref namespace) => {