2011-06-28 Dimitri Glazkov <dglazkov@chromium.org>
Reviewed by Kent Tamura.
Store shadowPseudoId in ElementRareData.
https://bugs.webkit.org/show_bug.cgi?id=63604
No new tests, because the code isn't yet used.
* css/CSSSelector.cpp:
(WebCore::CSSSelector::isUnknownPseudoType): Added convenience helper.
* css/CSSSelector.h: Added decl.
* dom/Element.cpp:
(WebCore::Element::shadowPseudoId): Changed to use ElementRareData.
(WebCore::Element::setShadowPseudoId): Ditto.
* dom/Element.h: Added decls.
* dom/ElementRareData.h: Added a member to keep shadowPseudoId.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@89989 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 450e690..a16b4b9 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,21 @@
+2011-06-28 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Store shadowPseudoId in ElementRareData.
+ https://bugs.webkit.org/show_bug.cgi?id=63604
+
+ No new tests, because the code isn't yet used.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::isUnknownPseudoType): Added convenience helper.
+ * css/CSSSelector.h: Added decl.
+ * dom/Element.cpp:
+ (WebCore::Element::shadowPseudoId): Changed to use ElementRareData.
+ (WebCore::Element::setShadowPseudoId): Ditto.
+ * dom/Element.h: Added decls.
+ * dom/ElementRareData.h: Added a member to keep shadowPseudoId.
+
2011-06-28 Kenichi Ishibashi <bashi@chromium.org>
Reviewed by Tony Chang.
diff --git a/Source/WebCore/css/CSSSelector.cpp b/Source/WebCore/css/CSSSelector.cpp
index 4a3266f..cda4045 100644
--- a/Source/WebCore/css/CSSSelector.cpp
+++ b/Source/WebCore/css/CSSSelector.cpp
@@ -392,6 +392,11 @@
return slot == nameToPseudoType->end() ? PseudoUnknown : slot->second;
}
+bool CSSSelector::isUnknownPseudoType(const AtomicString& name)
+{
+ return parsePseudoType(name) == PseudoUnknown;
+}
+
void CSSSelector::extractPseudoType() const
{
if (m_match != PseudoClass && m_match != PseudoElement && m_match != PagePseudoClass)
diff --git a/Source/WebCore/css/CSSSelector.h b/Source/WebCore/css/CSSSelector.h
index abd10e4..c589f75 100644
--- a/Source/WebCore/css/CSSSelector.h
+++ b/Source/WebCore/css/CSSSelector.h
@@ -213,6 +213,7 @@
}
static PseudoType parsePseudoType(const AtomicString&);
+ static bool isUnknownPseudoType(const AtomicString&);
static PseudoId pseudoId(PseudoType);
// Selectors are kept in an array by CSSSelectorList. The next component of the selector is
diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp
index d190e56..3027391 100644
--- a/Source/WebCore/dom/Element.cpp
+++ b/Source/WebCore/dom/Element.cpp
@@ -1234,6 +1234,24 @@
}
}
+const AtomicString& Element::shadowPseudoId() const
+{
+ return hasRareData() ? rareData()->m_shadowPseudoId : nullAtom;
+}
+
+void Element::setShadowPseudoId(const AtomicString& id, ExceptionCode& ec)
+{
+ if (!hasRareData() && id == nullAtom)
+ return;
+
+ if (!CSSSelector::isUnknownPseudoType(id)) {
+ ec = SYNTAX_ERR;
+ return;
+ }
+
+ ensureRareData()->m_shadowPseudoId = id;
+}
+
bool Element::childTypeAllowed(NodeType type) const
{
switch (type) {
diff --git a/Source/WebCore/dom/Element.h b/Source/WebCore/dom/Element.h
index 90dad64..5a04862 100644
--- a/Source/WebCore/dom/Element.h
+++ b/Source/WebCore/dom/Element.h
@@ -235,6 +235,7 @@
void removeShadowRoot();
virtual const AtomicString& shadowPseudoId() const;
+ void setShadowPseudoId(const AtomicString&, ExceptionCode&);
RenderStyle* computedStyle(PseudoId = NOPSEUDO);
@@ -542,11 +543,6 @@
setAttribute(document()->idAttributeName(), value);
}
-inline const AtomicString& Element::shadowPseudoId() const
-{
- return nullAtom;
-}
-
inline Element* firstElementChild(const ContainerNode* container)
{
ASSERT_ARG(container, container);
diff --git a/Source/WebCore/dom/ElementRareData.h b/Source/WebCore/dom/ElementRareData.h
index 5a65edb..7277a6f 100644
--- a/Source/WebCore/dom/ElementRareData.h
+++ b/Source/WebCore/dom/ElementRareData.h
@@ -45,6 +45,7 @@
IntSize m_minimumSizeForResizing;
RefPtr<RenderStyle> m_computedStyle;
ShadowRoot* m_shadowRoot;
+ AtomicString m_shadowPseudoId;
OwnPtr<DatasetDOMStringMap> m_datasetDOMStringMap;
OwnPtr<ClassList> m_classList;