Title: [154541] trunk/Source/WebCore
Revision
154541
Author
[email protected]
Date
2013-08-24 04:09:26 -0700 (Sat, 24 Aug 2013)

Log Message

Tighten before/after pseudo element accessors
https://bugs.webkit.org/show_bug.cgi?id=120204

Reviewed by Andreas Kling.

We have generic looking Element::pseudoElement(PseudoID) which only returns before/after pseudo elements.
        
Switch to Element::before/afterPseudoElement(), similarly for setters.

* WebCore.exp.in:
* css/CSSComputedStyleDeclaration.cpp:
(WebCore::ComputedStyleExtractor::styledNode):
* dom/Element.cpp:
(WebCore::Element::~Element):
(WebCore::beforeOrAfterPseudeoElement):
(WebCore::Element::computedStyle):
(WebCore::Element::updatePseudoElement):
(WebCore::Element::createPseudoElementIfNeeded):
(WebCore::Element::updateBeforePseudoElement):
(WebCore::Element::updateAfterPseudoElement):
(WebCore::Element::beforePseudoElement):
(WebCore::Element::afterPseudoElement):
(WebCore::Element::setBeforePseudoElement):
(WebCore::Element::setAfterPseudoElement):
(WebCore::disconnectPseudoElement):
(WebCore::Element::clearBeforePseudoElement):
(WebCore::Element::clearAfterPseudoElement):
(WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
* dom/Element.h:
* dom/ElementRareData.h:
(WebCore::ElementRareData::beforePseudoElement):
(WebCore::ElementRareData::afterPseudoElement):
(WebCore::ElementRareData::hasPseudoElements):
(WebCore::ElementRareData::~ElementRareData):
(WebCore::ElementRareData::clearBeforePseudoElement):
(WebCore::ElementRareData::clearAfterPseudoElement):
(WebCore::ElementRareData::setBeforePseudoElement):
(WebCore::ElementRareData::setAfterPseudoElement):
        
    Move detach logic to Element. ElementRareData should not implement semantics.

* dom/Node.cpp:
(WebCore::Node::pseudoAwarePreviousSibling):
(WebCore::Node::pseudoAwareNextSibling):
(WebCore::Node::pseudoAwareFirstChild):
(WebCore::Node::pseudoAwareLastChild):
* dom/NodeRenderingTraversal.cpp:
(WebCore::NodeRenderingTraversal::nextSiblingSlow):
(WebCore::NodeRenderingTraversal::previousSiblingSlow):
* rendering/RenderTreeAsText.cpp:
(WebCore::writeCounterValuesFromChildren):
(WebCore::counterValueForElement):
* style/StyleResolveTree.cpp:
(WebCore::Style::attachRenderTree):
(WebCore::Style::resolveTree):
* testing/Internals.cpp:
(WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):
(WebCore::Internals::pauseTransitionAtTimeOnPseudoElement):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (154540 => 154541)


--- trunk/Source/WebCore/ChangeLog	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/ChangeLog	2013-08-24 11:09:26 UTC (rev 154541)
@@ -1,3 +1,64 @@
+2013-08-24  Antti Koivisto  <[email protected]>
+
+        Tighten before/after pseudo element accessors
+        https://bugs.webkit.org/show_bug.cgi?id=120204
+
+        Reviewed by Andreas Kling.
+
+        We have generic looking Element::pseudoElement(PseudoID) which only returns before/after pseudo elements.
+        
+        Switch to Element::before/afterPseudoElement(), similarly for setters.
+
+        * WebCore.exp.in:
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::ComputedStyleExtractor::styledNode):
+        * dom/Element.cpp:
+        (WebCore::Element::~Element):
+        (WebCore::beforeOrAfterPseudeoElement):
+        (WebCore::Element::computedStyle):
+        (WebCore::Element::updatePseudoElement):
+        (WebCore::Element::createPseudoElementIfNeeded):
+        (WebCore::Element::updateBeforePseudoElement):
+        (WebCore::Element::updateAfterPseudoElement):
+        (WebCore::Element::beforePseudoElement):
+        (WebCore::Element::afterPseudoElement):
+        (WebCore::Element::setBeforePseudoElement):
+        (WebCore::Element::setAfterPseudoElement):
+        (WebCore::disconnectPseudoElement):
+        (WebCore::Element::clearBeforePseudoElement):
+        (WebCore::Element::clearAfterPseudoElement):
+        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
+        * dom/Element.h:
+        * dom/ElementRareData.h:
+        (WebCore::ElementRareData::beforePseudoElement):
+        (WebCore::ElementRareData::afterPseudoElement):
+        (WebCore::ElementRareData::hasPseudoElements):
+        (WebCore::ElementRareData::~ElementRareData):
+        (WebCore::ElementRareData::clearBeforePseudoElement):
+        (WebCore::ElementRareData::clearAfterPseudoElement):
+        (WebCore::ElementRareData::setBeforePseudoElement):
+        (WebCore::ElementRareData::setAfterPseudoElement):
+        
+            Move detach logic to Element. ElementRareData should not implement semantics.
+
+        * dom/Node.cpp:
+        (WebCore::Node::pseudoAwarePreviousSibling):
+        (WebCore::Node::pseudoAwareNextSibling):
+        (WebCore::Node::pseudoAwareFirstChild):
+        (WebCore::Node::pseudoAwareLastChild):
+        * dom/NodeRenderingTraversal.cpp:
+        (WebCore::NodeRenderingTraversal::nextSiblingSlow):
+        (WebCore::NodeRenderingTraversal::previousSiblingSlow):
+        * rendering/RenderTreeAsText.cpp:
+        (WebCore::writeCounterValuesFromChildren):
+        (WebCore::counterValueForElement):
+        * style/StyleResolveTree.cpp:
+        (WebCore::Style::attachRenderTree):
+        (WebCore::Style::resolveTree):
+        * testing/Internals.cpp:
+        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):
+        (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement):
+
 2013-08-23  Simon Fraser  <[email protected]>
 
         Improve scrolling behavior in iTunes

Modified: trunk/Source/WebCore/WebCore.exp.in (154540 => 154541)


--- trunk/Source/WebCore/WebCore.exp.in	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/WebCore.exp.in	2013-08-24 11:09:26 UTC (rev 154541)
@@ -1641,7 +1641,8 @@
 __ZNK7WebCore7Element12getAttributeERKN3WTF12AtomicStringE
 __ZNK7WebCore7Element12getAttributeERKNS_13QualifiedNameE
 __ZNK7WebCore7Element12hasAttributeERKN3WTF12AtomicStringE
-__ZNK7WebCore7Element13pseudoElementENS_8PseudoIdE
+__ZNK7WebCore7Element18afterPseudoElementEv
+__ZNK7WebCore7Element19beforePseudoElementEv
 __ZNK7WebCore7IntRect10intersectsERKS0_
 __ZNK7WebCore7IntRect8containsERKS0_
 __ZNK7WebCore7IntRectcv6CGRectEv

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (154540 => 154541)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -1634,11 +1634,15 @@
 {
     if (!m_node)
         return 0;
-    if (m_node->isElementNode()) {
-        if (PseudoElement* element = toElement(m_node.get())->pseudoElement(m_pseudoElementSpecifier))
-            return element;
-    }
-    return m_node.get();
+    if (!m_node->isElementNode())
+        return m_node.get();
+    Element* element = toElement(m_node.get());
+    PseudoElement* pseudoElement;
+    if (m_pseudoElementSpecifier == BEFORE && (pseudoElement = element->beforePseudoElement()))
+        return pseudoElement;
+    if (m_pseudoElementSpecifier == AFTER && (pseudoElement = element->afterPseudoElement()))
+        return pseudoElement;
+    return element;
 }
 
 PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) const

Modified: trunk/Source/WebCore/dom/Element.cpp (154540 => 154541)


--- trunk/Source/WebCore/dom/Element.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/dom/Element.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -170,13 +170,11 @@
     }
 #endif
 
-    if (hasRareData()) {
-        ElementRareData* data = ""
-        data->setPseudoElement(BEFORE, 0);
-        data->setPseudoElement(AFTER, 0);
-        removeShadowRoot();
-    }
+    ASSERT(!beforePseudoElement());
+    ASSERT(!afterPseudoElement());
 
+    removeShadowRoot();
+
     if (hasSyntheticAttrChildNodes())
         detachAllAttrNodesFromElement();
 
@@ -2064,10 +2062,22 @@
     ensureElementRareData().setMinimumSizeForResizing(size);
 }
 
+static PseudoElement* beforeOrAfterPseudoElement(Element* host, PseudoId pseudoElementSpecifier)
+{
+    switch (pseudoElementSpecifier) {
+    case BEFORE:
+        return host->beforePseudoElement();
+    case AFTER:
+        return host->afterPseudoElement();
+    default:
+        return 0;
+    }
+}
+
 RenderStyle* Element::computedStyle(PseudoId pseudoElementSpecifier)
 {
-    if (PseudoElement* element = pseudoElement(pseudoElementSpecifier))
-        return element->computedStyle();
+    if (PseudoElement* pseudoElement = beforeOrAfterPseudoElement(this, pseudoElementSpecifier))
+        return pseudoElement->computedStyle();
 
     // FIXME: Find and use the renderer from the pseudo element instead of the actual element so that the 'length'
     // properties, which are only known by the renderer because it did the layout, will be correct and so that the
@@ -2302,66 +2312,105 @@
     }
 }
 
-void Element::updatePseudoElement(PseudoId pseudoId, Style::Change change)
+bool Element::updateExistingPseudoElement(PseudoElement* existingPseudoElement, Style::Change change)
 {
-    PseudoElement* existing = pseudoElement(pseudoId);
-    if (existing) {
-        // PseudoElement styles hang off their parent element's style so if we needed
-        // a style recalc we should Force one on the pseudo.
-        Style::resolveTree(existing, needsStyleRecalc() ? Style::Force : change);
+    // PseudoElement styles hang off their parent element's style so if we needed
+    // a style recalc we should Force one on the pseudo.
+    Style::resolveTree(existingPseudoElement, needsStyleRecalc() ? Style::Force : change);
 
-        // Wait until our parent is not displayed or pseudoElementRendererIsNeeded
-        // is false, otherwise we could continously create and destroy PseudoElements
-        // when RenderObject::isChildAllowed on our parent returns false for the
-        // PseudoElement's renderer for each style recalc.
-        if (!renderer() || !pseudoElementRendererIsNeeded(renderer()->getCachedPseudoStyle(pseudoId)))
-            setPseudoElement(pseudoId, 0);
-    } else if (RefPtr<PseudoElement> element = createPseudoElementIfNeeded(pseudoId)) {
-        Style::attachRenderTree(element.get());
-        setPseudoElement(pseudoId, element.release());
-    }
+    // FIXME: This is silly.
+    // Wait until our parent is not displayed or pseudoElementRendererIsNeeded
+    // is false, otherwise we could continously create and destroy PseudoElements
+    // when RenderObject::isChildAllowed on our parent returns false for the
+    // PseudoElement's renderer for each style recalc.
+    return renderer() && pseudoElementRendererIsNeeded(existingPseudoElement->renderStyle());
 }
 
 PassRefPtr<PseudoElement> Element::createPseudoElementIfNeeded(PseudoId pseudoId)
 {
     if (!document()->styleSheetCollection()->usesBeforeAfterRules())
         return 0;
-
     if (!renderer() || !renderer()->canHaveGeneratedChildren())
         return 0;
-
     if (isPseudoElement())
         return 0;
-
     if (!pseudoElementRendererIsNeeded(renderer()->getCachedPseudoStyle(pseudoId)))
         return 0;
+    RefPtr<PseudoElement> pseudoElement = PseudoElement::create(this, pseudoId);
+    Style::attachRenderTree(pseudoElement.get());
+    return pseudoElement.release();
+}
 
-    return PseudoElement::create(this, pseudoId);
+void Element::updateBeforePseudoElement(Style::Change change)
+{
+    if (PseudoElement* existingPseudoElement = beforePseudoElement()) {
+        if (!updateExistingPseudoElement(existingPseudoElement, change))
+            clearBeforePseudoElement();
+        return;
+    }
+    if (RefPtr<PseudoElement> pseudo = createPseudoElementIfNeeded(BEFORE))
+        setBeforePseudoElement(pseudo.release());
 }
 
-bool Element::hasPseudoElements() const
+void Element::updateAfterPseudoElement(Style::Change change)
 {
-    return hasRareData() && elementRareData()->hasPseudoElements();
+    if (PseudoElement* existingPseudoElement = afterPseudoElement()) {
+        if (!updateExistingPseudoElement(existingPseudoElement, change))
+            clearAfterPseudoElement();
+        return;
+    }
+    if (RefPtr<PseudoElement> pseudo = createPseudoElementIfNeeded(AFTER))
+        setAfterPseudoElement(pseudo.release());
 }
 
-PseudoElement* Element::pseudoElement(PseudoId pseudoId) const
+PseudoElement* Element::beforePseudoElement() const
 {
-    return hasRareData() ? elementRareData()->pseudoElement(pseudoId) : 0;
+    return hasRareData() ? elementRareData()->beforePseudoElement() : 0;
 }
 
-void Element::setPseudoElement(PseudoId pseudoId, PassRefPtr<PseudoElement> element)
+PseudoElement* Element::afterPseudoElement() const
 {
-    ensureElementRareData().setPseudoElement(pseudoId, element);
+    return hasRareData() ? elementRareData()->afterPseudoElement() : 0;
+}
+
+void Element::setBeforePseudoElement(PassRefPtr<PseudoElement> element)
+{
+    ensureElementRareData().setBeforePseudoElement(element);
     resetNeedsShadowTreeWalker();
 }
 
-RenderObject* Element::pseudoElementRenderer(PseudoId pseudoId) const
+void Element::setAfterPseudoElement(PassRefPtr<PseudoElement> element)
 {
-    if (PseudoElement* element = pseudoElement(pseudoId))
-        return element->renderer();
-    return 0;
+    ensureElementRareData().setAfterPseudoElement(element);
+    resetNeedsShadowTreeWalker();
 }
 
+static void disconnectPseudoElement(PseudoElement* pseudoElement)
+{
+    if (!pseudoElement)
+        return;
+    if (pseudoElement->attached())
+        Style::detachRenderTree(pseudoElement);
+    ASSERT(pseudoElement->hostElement());
+    pseudoElement->clearHostElement();
+}
+
+void Element::clearBeforePseudoElement()
+{
+    if (!hasRareData())
+        return;
+    disconnectPseudoElement(elementRareData()->beforePseudoElement());
+    elementRareData()->setBeforePseudoElement(nullptr);
+}
+
+void Element::clearAfterPseudoElement()
+{
+    if (!hasRareData())
+        return;
+    disconnectPseudoElement(elementRareData()->afterPseudoElement());
+    elementRareData()->setAfterPseudoElement(nullptr);
+}
+
 // ElementTraversal API
 Element* Element::firstElementChild() const
 {
@@ -2956,11 +3005,11 @@
 {
     unregisterNamedFlowContentNode();
     cancelFocusAppearanceUpdate();
+    clearBeforePseudoElement();
+    clearAfterPseudoElement();
     if (!hasRareData())
         return;
     ElementRareData* data = ""
-    data->setPseudoElement(BEFORE, 0);
-    data->setPseudoElement(AFTER, 0);
     data->setIsInCanvasSubtree(false);
     data->resetComputedStyle();
     data->resetDynamicRestyleObservations();

Modified: trunk/Source/WebCore/dom/Element.h (154540 => 154541)


--- trunk/Source/WebCore/dom/Element.h	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/dom/Element.h	2013-08-24 11:09:26 UTC (rev 154541)
@@ -422,9 +422,8 @@
     virtual void finishParsingChildren();
     virtual void beginParsingChildren() OVERRIDE FINAL;
 
-    bool hasPseudoElements() const;
-    PseudoElement* pseudoElement(PseudoId) const;
-    RenderObject* pseudoElementRenderer(PseudoId) const;
+    PseudoElement* beforePseudoElement() const;
+    PseudoElement* afterPseudoElement() const;
     bool childNeedsShadowWalker() const;
     void didShadowTreeAwareChildrenChange();
 
@@ -551,7 +550,8 @@
     virtual void willDetachRenderers();
     virtual void didDetachRenderers();
 
-    void updatePseudoElement(PseudoId, Style::Change = Style::NoChange);
+    void updateBeforePseudoElement(Style::Change);
+    void updateAfterPseudoElement(Style::Change);
     void resetComputedStyle();
     void clearStyleDerivedDataBeforeDetachingRenderer();
     void clearHoverAndActiveStatusBeforeDetachingRenderer();
@@ -590,8 +590,13 @@
     bool isUserActionElementHovered() const;
 
     PassRefPtr<PseudoElement> createPseudoElementIfNeeded(PseudoId);
-    void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
+    bool updateExistingPseudoElement(PseudoElement* existing, Style::Change);
 
+    void setBeforePseudoElement(PassRefPtr<PseudoElement>);
+    void setAfterPseudoElement(PassRefPtr<PseudoElement>);
+    void clearBeforePseudoElement();
+    void clearAfterPseudoElement();
+
     virtual bool areAuthorShadowsAllowed() const { return true; }
     virtual void didAddUserAgentShadowRoot(ShadowRoot*) { }
     virtual bool alwaysCreateUserAgentShadowRoot() const { return false; }

Modified: trunk/Source/WebCore/dom/ElementRareData.h (154540 => 154541)


--- trunk/Source/WebCore/dom/ElementRareData.h	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2013-08-24 11:09:26 UTC (rev 154541)
@@ -39,10 +39,12 @@
 
     ~ElementRareData();
 
-    void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
-    PseudoElement* pseudoElement(PseudoId) const;
-    bool hasPseudoElements() const { return m_generatedBefore || m_generatedAfter; }
+    void setBeforePseudoElement(PassRefPtr<PseudoElement>);
+    void setAfterPseudoElement(PassRefPtr<PseudoElement>);
 
+    PseudoElement* beforePseudoElement() const { return m_beforePseudoElement.get(); }
+    PseudoElement* afterPseudoElement() const { return m_afterPseudoElement.get(); }
+
     void resetComputedStyle();
     void resetDynamicRestyleObservations();
     
@@ -169,8 +171,8 @@
     RefPtr<ShadowRoot> m_shadowRoot;
     OwnPtr<NamedNodeMap> m_attributeMap;
 
-    RefPtr<PseudoElement> m_generatedBefore;
-    RefPtr<PseudoElement> m_generatedAfter;
+    RefPtr<PseudoElement> m_beforePseudoElement;
+    RefPtr<PseudoElement> m_afterPseudoElement;
 
     ElementRareData(RenderObject*);
     void releasePseudoElement(PseudoElement*);
@@ -215,51 +217,22 @@
 inline ElementRareData::~ElementRareData()
 {
     ASSERT(!m_shadowRoot);
-    ASSERT(!m_generatedBefore);
-    ASSERT(!m_generatedAfter);
+    ASSERT(!m_beforePseudoElement);
+    ASSERT(!m_afterPseudoElement);
 }
 
-inline void ElementRareData::setPseudoElement(PseudoId pseudoId, PassRefPtr<PseudoElement> element)
+inline void ElementRareData::setBeforePseudoElement(PassRefPtr<PseudoElement> pseudoElement)
 {
-    switch (pseudoId) {
-    case BEFORE:
-        releasePseudoElement(m_generatedBefore.get());
-        m_generatedBefore = element;
-        break;
-    case AFTER:
-        releasePseudoElement(m_generatedAfter.get());
-        m_generatedAfter = element;
-        break;
-    default:
-        ASSERT_NOT_REACHED();
-    }
+    ASSERT(!m_beforePseudoElement || !pseudoElement);
+    m_beforePseudoElement = pseudoElement;
 }
 
-inline PseudoElement* ElementRareData::pseudoElement(PseudoId pseudoId) const
+inline void ElementRareData::setAfterPseudoElement(PassRefPtr<PseudoElement> pseudoElement)
 {
-    switch (pseudoId) {
-    case BEFORE:
-        return m_generatedBefore.get();
-    case AFTER:
-        return m_generatedAfter.get();
-    default:
-        return 0;
-    }
+    ASSERT(!m_afterPseudoElement || !pseudoElement);
+    m_afterPseudoElement = pseudoElement;
 }
 
-inline void ElementRareData::releasePseudoElement(PseudoElement* element)
-{
-    if (!element)
-        return;
-    if (element->attached())
-        Style::detachRenderTree(element);
-    element->clearHostElement();
-
-    ASSERT(!element->nextSibling());
-    ASSERT(!element->previousSibling());
-    ASSERT(!element->parentNode());
-}
-
 inline void ElementRareData::resetComputedStyle()
 {
     setComputedStyle(0);

Modified: trunk/Source/WebCore/dom/Node.cpp (154540 => 154541)


--- trunk/Source/WebCore/dom/Node.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/dom/Node.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -895,7 +895,7 @@
         if (isAfterPseudoElement() && parentOrHost->lastChild())
             return parentOrHost->lastChild();
         if (!isBeforePseudoElement())
-            return parentOrHost->pseudoElement(BEFORE);
+            return parentOrHost->beforePseudoElement();
     }
     return previousSibling();
 }
@@ -907,7 +907,7 @@
         if (isBeforePseudoElement() && parentOrHost->firstChild())
             return parentOrHost->firstChild();
         if (!isAfterPseudoElement())
-            return parentOrHost->pseudoElement(AFTER);
+            return parentOrHost->afterPseudoElement();
     }
     return nextSibling();
 }
@@ -916,12 +916,12 @@
 {
     if (isElementNode()) {
         const Element* currentElement = toElement(this);
-        Node* first = currentElement->pseudoElement(BEFORE);
+        Node* first = currentElement->beforePseudoElement();
         if (first)
             return first;
         first = currentElement->firstChild();
         if (!first)
-            first = currentElement->pseudoElement(AFTER);
+            first = currentElement->afterPseudoElement();
         return first;
     }
     return firstChild();
@@ -931,12 +931,12 @@
 {
     if (isElementNode()) {
         const Element* currentElement = toElement(this);
-        Node* last = currentElement->pseudoElement(AFTER);
+        Node* last = currentElement->afterPseudoElement();
         if (last)
             return last;
         last = currentElement->lastChild();
         if (!last)
-            last = currentElement->pseudoElement(BEFORE);
+            last = currentElement->beforePseudoElement();
         return last;
     }
     return lastChild();
@@ -1063,7 +1063,14 @@
 
 bool Node::needsShadowTreeWalkerSlow() const
 {
-    return (isShadowRoot() || (isElementNode() && (isInsertionPoint() || isPseudoElement() || toElement(this)->hasPseudoElements() || toElement(this)->shadowRoot())));
+    if (isShadowRoot())
+        return true;
+    if (!isElementNode())
+        return false;
+    const Element* asElement = toElement(this);
+    if (asElement->isPseudoElement() || asElement->beforePseudoElement() || asElement->afterPseudoElement())
+        return true;
+    return asElement->isInsertionPoint() || asElement->shadowRoot();
 }
 
 bool Node::isRootEditableElement() const

Modified: trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp (154540 => 154541)


--- trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -54,7 +54,7 @@
 
     Node* parent = walker.traverseParent(node);
     if (parent && parent->isElementNode())
-        return toElement(parent)->pseudoElement(AFTER);
+        return toElement(parent)->afterPseudoElement();
 
     return 0;
 }
@@ -73,7 +73,7 @@
 
     Node* parent = walker.traverseParent(node);
     if (parent && parent->isElementNode())
-        return toElement(parent)->pseudoElement(BEFORE);
+        return toElement(parent)->beforePseudoElement();
 
     return 0;
 }

Modified: trunk/Source/WebCore/rendering/RenderTreeAsText.cpp (154540 => 154541)


--- trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -35,6 +35,7 @@
 #include "HTMLNames.h"
 #include "InlineTextBox.h"
 #include "PrintContext.h"
+#include "PseudoElement.h"
 #include "RenderBR.h"
 #include "RenderDetailsMarker.h"
 #include "RenderFileUploadControl.h"
@@ -902,6 +903,8 @@
 
 static void writeCounterValuesFromChildren(TextStream& stream, RenderObject* parent, bool& isFirstCounter)
 {
+    if (!parent)
+        return;
     for (RenderObject* child = parent->firstChild(); child; child = child->nextSibling()) {
         if (child->isCounter()) {
             if (!isFirstCounter)
@@ -921,10 +924,10 @@
     TextStream stream;
     bool isFirstCounter = true;
     // The counter renderers should be children of :before or :after pseudo-elements.
-    if (RenderObject* before = element->pseudoElementRenderer(BEFORE))
-        writeCounterValuesFromChildren(stream, before, isFirstCounter);
-    if (RenderObject* after = element->pseudoElementRenderer(AFTER))
-        writeCounterValuesFromChildren(stream, after, isFirstCounter);
+    if (PseudoElement* before = element->beforePseudoElement())
+        writeCounterValuesFromChildren(stream, before->renderer(), isFirstCounter);
+    if (PseudoElement* after = element->afterPseudoElement())
+        writeCounterValuesFromChildren(stream, after->renderer(), isFirstCounter);
     return stream.release();
 }
 

Modified: trunk/Source/WebCore/style/StyleResolveTree.cpp (154540 => 154541)


--- trunk/Source/WebCore/style/StyleResolveTree.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/style/StyleResolveTree.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -176,7 +176,7 @@
     if (current->parentElement() && current->parentElement()->isInCanvasSubtree())
         current->setIsInCanvasSubtree(true);
 
-    current->updatePseudoElement(BEFORE);
+    current->updateBeforePseudoElement(NoChange);
 
     StyleResolverParentPusher parentPusher(current);
 
@@ -201,7 +201,7 @@
             cache->updateCacheAfterNodeIsAttached(current);
     }
 
-    current->updatePseudoElement(AFTER);
+    current->updateAfterPseudoElement(NoChange);
 
     current->updateFocusAppearanceAfterAttachIfNeeded();
     
@@ -429,7 +429,7 @@
             }
         }
 
-        current->updatePseudoElement(BEFORE, change);
+        current->updateBeforePseudoElement(change);
 
         // FIXME: This check is good enough for :hover + foo, but it is not good enough for :hover + foo + bar.
         // For now we will just worry about the common case, since it's a lot trickier to get the second case right
@@ -455,7 +455,7 @@
             forceCheckOfAnyElementSibling = forceCheckOfAnyElementSibling || (childRulesChanged && hasIndirectAdjacentRules);
         }
 
-        current->updatePseudoElement(AFTER, change);
+        current->updateAfterPseudoElement(change);
     }
 
     current->clearNeedsStyleRecalc();

Modified: trunk/Source/WebCore/testing/Internals.cpp (154540 => 154541)


--- trunk/Source/WebCore/testing/Internals.cpp	2013-08-24 08:44:44 UTC (rev 154540)
+++ trunk/Source/WebCore/testing/Internals.cpp	2013-08-24 11:09:26 UTC (rev 154541)
@@ -457,7 +457,7 @@
         return false;
     }
 
-    PseudoElement* pseudoElement = element->pseudoElement(pseudoId == "before" ? BEFORE : AFTER);
+    PseudoElement* pseudoElement = pseudoId == "before" ? element->beforePseudoElement() : element->afterPseudoElement();
     if (!pseudoElement) {
         ec = INVALID_ACCESS_ERR;
         return false;
@@ -487,7 +487,7 @@
         return false;
     }
 
-    PseudoElement* pseudoElement = element->pseudoElement(pseudoId == "before" ? BEFORE : AFTER);
+    PseudoElement* pseudoElement = pseudoId == "before" ? element->beforePseudoElement() : element->afterPseudoElement();
     if (!pseudoElement) {
         ec = INVALID_ACCESS_ERR;
         return false;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to