Diff
Modified: trunk/Source/WebCore/ChangeLog (226633 => 226634)
--- trunk/Source/WebCore/ChangeLog 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/ChangeLog 2018-01-09 16:15:23 UTC (rev 226634)
@@ -1,5 +1,33 @@
2018-01-09 Zalan Bujtas <[email protected]>
+ [RenderTreeBuilder] Move RenderTable* addChild mutation logic to RenderTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=181424
+ <rdar://problem/36368628>
+
+ Reviewed by Antti Koivisto.
+
+ This is about moving code, no cleanup and/or normalization (unfortunately it also means
+ some temporary changes).
+
+ Covered by existing tests.
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::addChild):
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::addChild):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::addChild):
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::insertChildToRenderTable):
+ (WebCore::RenderTreeBuilder::insertChildToRenderTableSection):
+ (WebCore::RenderTreeBuilder::insertChildToRenderTableRow):
+ * rendering/updating/RenderTreeBuilder.h:
+ * rendering/updating/RenderTreeBuilderTable.cpp:
+ (WebCore::RenderTreeBuilder::Table::insertChild):
+ * rendering/updating/RenderTreeBuilderTable.h:
+
+2018-01-09 Zalan Bujtas <[email protected]>
+
[RenderTreeBuilder] Transition Render*::addChild() calls to RenderTreeBuilder::insertChildToRender*()
https://bugs.webkit.org/show_bug.cgi?id=181407
<rdar://problem/36361176>
Modified: trunk/Source/WebCore/rendering/RenderTable.cpp (226633 => 226634)
--- trunk/Source/WebCore/rendering/RenderTable.cpp 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/RenderTable.cpp 2018-01-09 16:15:23 UTC (rev 226634)
@@ -169,10 +169,7 @@
if (is<RenderTableSection>(*child))
setNeedsSectionRecalc();
- if (beforeChild && beforeChild->parent() != this)
- beforeChild = builder.splitAnonymousBoxesAroundChild(*this, beforeChild);
-
- RenderBox::addChild(builder, WTFMove(child), beforeChild);
+ builder.insertChildToRenderTable(*this, WTFMove(child), beforeChild);
}
void RenderTable::addCaption(RenderTableCaption& caption)
Modified: trunk/Source/WebCore/rendering/RenderTableRow.cpp (226633 => 226634)
--- trunk/Source/WebCore/rendering/RenderTableRow.cpp 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/RenderTableRow.cpp 2018-01-09 16:15:23 UTC (rev 226634)
@@ -113,19 +113,16 @@
void RenderTableRow::addChild(RenderTreeBuilder& builder, RenderPtr<RenderObject> child, RenderObject* beforeChild)
{
- if (beforeChild && beforeChild->parent() != this)
- beforeChild = builder.splitAnonymousBoxesAroundChild(*this, beforeChild);
+ auto& childToAdd = *child;
+ builder.insertChildToRenderTableRow(*this, WTFMove(child), beforeChild);
// Generated content can result in us having a null section so make sure to null check our parent.
- if (auto* section = this->section())
- section->addCell(&downcast<RenderTableCell>(*child), this);
-
- ASSERT(!beforeChild || is<RenderTableCell>(*beforeChild));
- RenderBox::addChild(builder, WTFMove(child), beforeChild);
-
- if (beforeChild || nextRow())
- section()->setNeedsCellRecalc();
- if (RenderTable* table = this->table())
+ if (auto* section = this->section()) {
+ section->addCell(&downcast<RenderTableCell>(childToAdd), this);
+ if (beforeChild || nextRow())
+ section->setNeedsCellRecalc();
+ }
+ if (auto* table = this->table())
table->invalidateCollapsedBorders();
}
Modified: trunk/Source/WebCore/rendering/RenderTableSection.cpp (226633 => 226634)
--- trunk/Source/WebCore/rendering/RenderTableSection.cpp 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/RenderTableSection.cpp 2018-01-09 16:15:23 UTC (rev 226634)
@@ -138,12 +138,7 @@
if (!beforeChild)
setRowLogicalHeightToRowStyleLogicalHeightIfNotRelative(m_grid[insertionRow]);
-
- if (beforeChild && beforeChild->parent() != this)
- beforeChild = builder.splitAnonymousBoxesAroundChild(*this, beforeChild);
-
- ASSERT(!beforeChild || is<RenderTableRow>(*beforeChild));
- RenderBox::addChild(builder, WTFMove(child), beforeChild);
+ builder.insertChildToRenderTableSection(*this, WTFMove(child), beforeChild);
}
void RenderTableSection::ensureRows(unsigned numRows)
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (226633 => 226634)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-01-09 16:15:23 UTC (rev 226634)
@@ -31,7 +31,9 @@
#include "RenderRuby.h"
#include "RenderRubyBase.h"
#include "RenderRubyRun.h"
+#include "RenderTable.h"
#include "RenderTableRow.h"
+#include "RenderTableSection.h"
#include "RenderText.h"
#include "RenderTreeBuilderBlock.h"
#include "RenderTreeBuilderBlockFlow.h"
@@ -307,6 +309,21 @@
svgBuilder().insertChild(parent, WTFMove(child), beforeChild);
}
+void RenderTreeBuilder::insertChildToRenderTable(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ tableBuilder().insertChild(parent, WTFMove(child), beforeChild);
+}
+
+void RenderTreeBuilder::insertChildToRenderTableSection(RenderTableSection& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ tableBuilder().insertChild(parent, WTFMove(child), beforeChild);
+}
+
+void RenderTreeBuilder::insertChildToRenderTableRow(RenderTableRow& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ tableBuilder().insertChild(parent, WTFMove(child), beforeChild);
+}
+
void RenderTreeBuilder::splitFlow(RenderInline& parent, RenderObject* beforeChild, RenderPtr<RenderBlock> newBlockBox, RenderPtr<RenderObject> child, RenderBoxModelObject* oldCont)
{
inlineBuilder().splitFlow(parent, beforeChild, WTFMove(newBlockBox), WTFMove(child), oldCont);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (226633 => 226634)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-01-09 16:15:23 UTC (rev 226634)
@@ -34,6 +34,9 @@
class RenderSVGInline;
class RenderSVGRoot;
class RenderSVGText;
+class RenderTable;
+class RenderTableRow;
+class RenderTableSection;
class RenderTreeUpdater;
class RenderTreeBuilder {
@@ -60,6 +63,9 @@
void insertChildToSVGInline(RenderSVGInline& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
void insertChildToSVGRoot(RenderSVGRoot& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
void insertChildToSVGText(RenderSVGText& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderTable(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderTableSection(RenderTableSection& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderTableRow(RenderTableRow& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint = nullptr);
RenderObject* splitAnonymousBoxesAroundChild(RenderBox& parent, RenderObject* beforeChild);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (226633 => 226634)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-01-09 16:15:23 UTC (rev 226634)
@@ -161,4 +161,30 @@
return section;
}
+void RenderTreeBuilder::Table::insertChild(RenderTableRow& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ if (beforeChild && beforeChild->parent() != &parent)
+ beforeChild = m_builder.splitAnonymousBoxesAroundChild(parent, beforeChild);
+
+ ASSERT(!beforeChild || is<RenderTableCell>(*beforeChild));
+ parent.RenderBox::addChild(m_builder, WTFMove(child), beforeChild);
}
+
+void RenderTreeBuilder::Table::insertChild(RenderTableSection& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ if (beforeChild && beforeChild->parent() != &parent)
+ beforeChild = m_builder.splitAnonymousBoxesAroundChild(parent, beforeChild);
+
+ ASSERT(!beforeChild || is<RenderTableRow>(*beforeChild));
+ parent.RenderBox::addChild(m_builder, WTFMove(child), beforeChild);
+}
+
+void RenderTreeBuilder::Table::insertChild(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+{
+ if (beforeChild && beforeChild->parent() != &parent)
+ beforeChild = m_builder.splitAnonymousBoxesAroundChild(parent, beforeChild);
+
+ parent.RenderBox::addChild(m_builder, WTFMove(child), beforeChild);
+}
+
+}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.h (226633 => 226634)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.h 2018-01-09 15:53:38 UTC (rev 226633)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.h 2018-01-09 16:15:23 UTC (rev 226634)
@@ -44,6 +44,10 @@
RenderElement& findOrCreateParentForChild(RenderTableSection& parent, const RenderObject& child, RenderObject*& beforeChild);
RenderElement& findOrCreateParentForChild(RenderTable& parent, const RenderObject& child, RenderObject*& beforeChild);
+ void insertChild(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
+ void insertChild(RenderTableSection& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
+ void insertChild(RenderTableRow& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
+
private:
RenderTreeBuilder& m_builder;
};