Diff
Modified: trunk/Source/WebCore/ChangeLog (228565 => 228566)
--- trunk/Source/WebCore/ChangeLog 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/ChangeLog 2018-02-16 19:25:18 UTC (rev 228566)
@@ -1,3 +1,33 @@
+2018-02-16 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] Move RenderElement::addChild() to RenderTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=182878
+ <rdar://problem/37608349>
+
+ Reviewed by Antti Koivisto.
+
+ This patch removes the last addChild() related mutation logic from the renderers.
+
+ No change in functionality.
+
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::didInsertChild):
+ (WebCore::RenderElement::addChild): Deleted.
+ * rendering/RenderElement.h:
+ (WebCore::RenderElement::isChildAllowed const):
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::insertChild):
+ (WebCore::RenderTreeBuilder::insertChildToRenderElement):
+ * rendering/updating/RenderTreeBuilder.h:
+ * rendering/updating/RenderTreeBuilderBlock.cpp:
+ (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
+ * rendering/updating/RenderTreeBuilderInline.cpp:
+ (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
+ * rendering/updating/RenderTreeBuilderSVG.cpp:
+ (WebCore::RenderTreeBuilder::SVG::insertChild):
+ * rendering/updating/RenderTreeBuilderTable.cpp:
+ (WebCore::RenderTreeBuilder::Table::insertChild):
+
2018-02-16 Matt Lewis <[email protected]>
Unreviewed, rolling out r228546.
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -456,11 +456,8 @@
}
}
-void RenderElement::addChild(RenderTreeBuilder& builder, RenderPtr<RenderObject> newChild, RenderObject* beforeChild)
+void RenderElement::didInsertChild(RenderObject& child, RenderObject*)
{
- auto& child = *newChild;
- builder.insertChildToRenderElement(*this, WTFMove(newChild), beforeChild);
-
if (is<RenderText>(child))
downcast<RenderText>(child).styleDidChange(StyleDifferenceEqual, nullptr);
// SVG creates renderers for <g display="none">, as SVG requires children of hidden
Modified: trunk/Source/WebCore/rendering/RenderElement.h (228565 => 228566)
--- trunk/Source/WebCore/rendering/RenderElement.h 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/RenderElement.h 2018-02-16 19:25:18 UTC (rev 228566)
@@ -87,9 +87,9 @@
bool isRenderInline() const;
virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const { return true; }
- virtual void addChild(RenderTreeBuilder&, RenderPtr<RenderObject>, RenderObject* beforeChild);
virtual void addChildIgnoringContinuation(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild = nullptr);
void removeAndDestroyChild(RenderTreeBuilder&, RenderObject&);
+ void didInsertChild(RenderObject& child, RenderObject* beforeChild);
// The following functions are used when the render tree hierarchy changes to make sure layers get
// properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -142,7 +142,7 @@
{
auto insertRecursiveIfNeeded = [&](RenderElement& parentCandidate) {
if (&parent == &parentCandidate) {
- parent.addChild(*this, WTFMove(child), beforeChild);
+ insertChildToRenderElement(parent, WTFMove(child), beforeChild);
return;
}
insertChild(parentCandidate, WTFMove(child), beforeChild);
@@ -255,7 +255,7 @@
return;
}
- parent.addChild(*this, WTFMove(child), beforeChild);
+ insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}
RenderPtr<RenderObject> RenderTreeBuilder::takeChild(RenderElement& parent, RenderObject& child)
@@ -320,7 +320,9 @@
insertChild(*table, WTFMove(child));
return;
}
- parent.RenderElement::insertChildInternal(WTFMove(child), beforeChild);
+ auto& newChild = *child.get();
+ parent.insertChildInternal(WTFMove(child), beforeChild);
+ parent.didInsertChild(newChild, beforeChild);
}
void RenderTreeBuilder::insertChildToRenderBlockIgnoringContinuation(RenderBlock& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-16 19:25:18 UTC (rev 228566)
@@ -63,7 +63,6 @@
static RenderTreeBuilder* current() { return s_current; }
// These functions are temporary until after all block/inline/continuation code is moved over.
- void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void insertChildToRenderBlockIgnoringContinuation(RenderBlock& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
void insertChildToRenderInlineIgnoringContinuation(RenderInline& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
@@ -95,6 +94,7 @@
RenderPtr<RenderObject> takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child);
void insertChildToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
List& listBuilder() { return *m_listBuilder; }
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -223,7 +223,7 @@
// No suitable existing anonymous box - create a new one.
auto newBox = parent.createAnonymousBlock();
auto& box = *newBox;
- parent.RenderElement::addChild(m_builder, WTFMove(newBox), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(newBox), beforeChild);
m_builder.insertChild(box, WTFMove(child));
return;
}
@@ -231,7 +231,7 @@
parent.invalidateLineLayoutPath();
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
if (madeBoxesNonInline && is<RenderBlock>(parent.parent()) && parent.isAnonymousBlock())
removeLeftoverAnonymousBlock(parent);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderInline.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderInline.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderInline.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -188,7 +188,7 @@
}
auto& childToAdd = *child;
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
childToAdd.setNeedsLayoutAndPrefWidthsRecalc();
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderSVG.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderSVG.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderSVG.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -43,7 +43,7 @@
void RenderTreeBuilder::SVG::insertChild(RenderSVGContainer& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
{
auto& childToAdd = *child;
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
SVGResourcesCache::clientWasAddedToTree(childToAdd);
}
@@ -60,7 +60,7 @@
void RenderTreeBuilder::SVG::insertChild(RenderSVGRoot& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
{
auto& childToAdd = *child;
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
SVGResourcesCache::clientWasAddedToTree(childToAdd);
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (228565 => 228566)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-16 19:12:29 UTC (rev 228565)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-16 19:25:18 UTC (rev 228566)
@@ -168,7 +168,7 @@
auto& newChild = *child.get();
ASSERT(!beforeChild || is<RenderTableCell>(*beforeChild));
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
// FIXME: child should always be a RenderTableCell at this point.
if (is<RenderTableCell>(newChild))
parent.didInsertTableCell(downcast<RenderTableCell>(newChild), beforeChild);
@@ -183,7 +183,7 @@
if (is<RenderTableRow>(*child.get()))
parent.willInsertTableRow(downcast<RenderTableRow>(*child.get()), beforeChild);
ASSERT(!beforeChild || is<RenderTableRow>(*beforeChild));
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}
void RenderTreeBuilder::Table::insertChild(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
@@ -197,7 +197,7 @@
else if (is<RenderTableCol>(newChild))
parent.willInsertTableColumn(downcast<RenderTableCol>(newChild), beforeChild);
- parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
+ m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}
bool RenderTreeBuilder::Table::childRequiresTable(const RenderElement& parent, const RenderObject& child)