Changeset 228683 in webkit


Ignore:
Timestamp:
Feb 19, 2018 7:16:59 AM (6 years ago)
Author:
Alan Bujtas
Message:

[RenderTreeBuilder] Move RenderElement::removeAndDestroyChild() to RenderTreeBuilder
https://bugs.webkit.org/show_bug.cgi?id=182915
<rdar://problem/37658123>

Reviewed by Antti Koivisto.

No change in functionality.

  • rendering/RenderElement.cpp:

(WebCore::RenderElement::removeAndDestroyChild): Deleted.

  • rendering/RenderElement.h:

(WebCore::RenderElement::isChildAllowed const):

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::removeFromParentAndDestroy):

  • rendering/RenderView.cpp:

(WebCore::RenderView::willBeDestroyed):

  • rendering/updating/RenderTreeBuilder.cpp:

(WebCore::RenderTreeBuilder::removeAndDestroyChild):
(WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):

  • rendering/updating/RenderTreeBuilder.h:
  • rendering/updating/RenderTreeBuilderFirstLetter.cpp:

(WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
(WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r228662 r228683  
     12018-02-19  Zalan Bujtas  <zalan@apple.com>
     2
     3        [RenderTreeBuilder] Move RenderElement::removeAndDestroyChild() to RenderTreeBuilder
     4        https://bugs.webkit.org/show_bug.cgi?id=182915
     5        <rdar://problem/37658123>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        No change in functionality.
     10
     11        * rendering/RenderElement.cpp:
     12        (WebCore::RenderElement::removeAndDestroyChild): Deleted.
     13        * rendering/RenderElement.h:
     14        (WebCore::RenderElement::isChildAllowed const):
     15        * rendering/RenderObject.cpp:
     16        (WebCore::RenderObject::removeFromParentAndDestroy):
     17        * rendering/RenderView.cpp:
     18        (WebCore::RenderView::willBeDestroyed):
     19        * rendering/updating/RenderTreeBuilder.cpp:
     20        (WebCore::RenderTreeBuilder::removeAndDestroyChild):
     21        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
     22        * rendering/updating/RenderTreeBuilder.h:
     23        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
     24        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
     25        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
     26
    1272018-02-12  Sergio Villar Senin  <svillar@igalia.com>
    228
  • trunk/Source/WebCore/rendering/RenderElement.cpp

    r228606 r228683  
    474474}
    475475
    476 void RenderElement::removeAndDestroyChild(RenderTreeBuilder& builder, RenderObject& oldChild)
    477 {
    478     auto toDestroy = builder.takeChild(*this, oldChild);
    479     // We need to detach the subtree first so that the descendants don't have
    480     // access to previous/next sublings at takeChild().
    481     // FIXME: webkit.org/b/182909.
    482     if (!is<RenderElement>(toDestroy.get()))
    483         return;
    484 
    485     auto& child = downcast<RenderElement>(*toDestroy.get());
    486     while (child.firstChild()) {
    487         auto& firstChild = *child.firstChild();
    488         if (auto* node = firstChild.node())
    489             node->setRenderer(nullptr);
    490         child.removeAndDestroyChild(builder, firstChild);
    491     }
    492 }
    493 
    494476RenderObject* RenderElement::attachRendererInternal(RenderPtr<RenderObject> child, RenderObject* beforeChild)
    495477{
  • trunk/Source/WebCore/rendering/RenderElement.h

    r228588 r228683  
    8888
    8989    virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const { return true; }
    90     void removeAndDestroyChild(RenderTreeBuilder&, RenderObject&);
    9190    void didInsertChild(RenderObject& child, RenderObject* beforeChild);
    9291
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r228337 r228683  
    259259{
    260260    ASSERT(m_parent);
    261     m_parent->removeAndDestroyChild(builder, *this);
     261    builder.removeAndDestroyChild(*this);
    262262}
    263263
  • trunk/Source/WebCore/rendering/RenderView.cpp

    r228387 r228683  
    617617    // FIXME: This is a workaround for leftover content (see webkit.org/b/182547).
    618618    while (firstChild())
    619         removeAndDestroyChild(builder, *firstChild());
     619        builder.removeAndDestroyChild(*firstChild());
    620620
    621621    ASSERT_WITH_MESSAGE(m_rendererCount == 1, "All other renderers in this render tree should have been destroyed");
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp

    r228595 r228683  
    140140}
    141141
     142void RenderTreeBuilder::removeAndDestroyChild(RenderObject& child)
     143{
     144    ASSERT(child.parent());
     145    auto toDestroy = takeChild(*child.parent(), child);
     146    // We need to detach the subtree first so that the descendants don't have
     147    // access to previous/next sublings at takeChild().
     148    // FIXME: webkit.org/b/182909.
     149    if (!is<RenderElement>(toDestroy.get()))
     150        return;
     151
     152    auto& childToDestroy = downcast<RenderElement>(*toDestroy.get());
     153    while (childToDestroy.firstChild()) {
     154        auto& firstChild = *childToDestroy.firstChild();
     155        if (auto* node = firstChild.node())
     156            node->setRenderer(nullptr);
     157        removeAndDestroyChild(firstChild);
     158    }
     159}
     160
    142161void RenderTreeBuilder::insertChild(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
    143162{
     
    640659
    641660    auto& destroyRootParent = *destroyRoot.parent();
    642     destroyRootParent.removeAndDestroyChild(*this, destroyRoot);
     661    removeAndDestroyChild(destroyRoot);
    643662    removeAnonymousWrappersForInlineChildrenIfNeeded(destroyRootParent);
    644663
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h

    r228595 r228683  
    4545    void insertChild(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
    4646
     47    void removeAndDestroyChild(RenderObject& child);
    4748    RenderPtr<RenderObject> takeChild(RenderElement&, RenderObject&) WARN_UNUSED_RETURN;
    4849
  • trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp

    r228400 r228683  
    186186            newFirstLetter->setFirstLetterRemainingText(*remainingText);
    187187        }
    188         firstLetterContainer->removeAndDestroyChild(m_builder, *firstLetter);
     188        m_builder.removeAndDestroyChild(*firstLetter);
    189189        m_builder.insertChild(*firstLetterContainer, WTFMove(newFirstLetter), nextSibling);
    190190        return;
     
    242242        auto* textNode = currentTextChild.textNode();
    243243        auto* beforeChild = currentTextChild.nextSibling();
    244         firstLetterContainer->removeAndDestroyChild(m_builder, currentTextChild);
     244        m_builder.removeAndDestroyChild(currentTextChild);
    245245
    246246        // Construct a text fragment for the text after the first letter.
Note: See TracChangeset for help on using the changeset viewer.