Diff
Modified: trunk/Source/WebCore/ChangeLog (227976 => 227977)
--- trunk/Source/WebCore/ChangeLog 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/ChangeLog 2018-02-01 19:42:32 UTC (rev 227977)
@@ -1,3 +1,79 @@
+2018-02-01 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] Introduce RenderTreeBuilder to takeChild()
+ https://bugs.webkit.org/show_bug.cgi?id=182373
+ <rdar://problem/37101484>
+
+ Reviewed by Antti Koivisto.
+
+ This is in preparation for moving mutation code out of takeChild.
+
+ No change in functionality.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::takeChild):
+ * rendering/RenderBlock.h:
+ * rendering/RenderBlockFlow.cpp:
+ (WebCore::RenderBlockFlow::takeChild):
+ * rendering/RenderBlockFlow.h:
+ * rendering/RenderButton.cpp:
+ (WebCore::RenderButton::takeChild):
+ * rendering/RenderButton.h:
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::takeChild):
+ (WebCore::RenderElement::removeAndDestroyChild):
+ (WebCore::RenderElement::destroyLeftoverChildren):
+ * rendering/RenderElement.h:
+ * rendering/RenderFullScreen.cpp:
+ (WebCore::RenderFullScreen::wrapExistingRenderer):
+ (WebCore::RenderFullScreen::unwrapRenderer):
+ * rendering/RenderGrid.cpp:
+ (WebCore::RenderGrid::takeChild):
+ * rendering/RenderGrid.h:
+ * rendering/RenderMenuList.cpp:
+ (RenderMenuList::takeChild):
+ * rendering/RenderMenuList.h:
+ * rendering/RenderMultiColumnFlow.cpp:
+ (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::removeFromParentAndDestroy):
+ * rendering/RenderRuby.cpp:
+ (WebCore::RenderRubyAsInline::takeChild):
+ (WebCore::RenderRubyAsBlock::takeChild):
+ * rendering/RenderRuby.h:
+ * rendering/RenderRubyRun.cpp:
+ (WebCore::RenderRubyRun::takeChild):
+ * rendering/RenderRubyRun.h:
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::collapseAndDestroyAnonymousSiblingRows): Deleted.
+ * rendering/RenderTableRow.h:
+ * rendering/svg/RenderSVGContainer.cpp:
+ (WebCore::RenderSVGContainer::takeChild):
+ * rendering/svg/RenderSVGContainer.h:
+ * rendering/svg/RenderSVGInline.cpp:
+ (WebCore::RenderSVGInline::takeChild):
+ * rendering/svg/RenderSVGInline.h:
+ * rendering/svg/RenderSVGRoot.cpp:
+ (WebCore::RenderSVGRoot::takeChild):
+ * rendering/svg/RenderSVGRoot.h:
+ * rendering/svg/RenderSVGText.cpp:
+ (WebCore::RenderSVGText::takeChild):
+ * rendering/svg/RenderSVGText.h:
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::collapseAndDestroyAnonymousSiblingRows):
+ (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
+ * rendering/updating/RenderTreeBuilder.h:
+ * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
+ (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
+ (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
+ * rendering/updating/RenderTreeBuilderList.cpp:
+ (WebCore::RenderTreeBuilder::List::updateItemMarker):
+ * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
+ (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
+ (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
+ * rendering/updating/RenderTreeBuilderRuby.cpp:
+ (WebCore::RenderTreeBuilder::Ruby::insertChild):
+
2018-02-01 Dean Jackson <[email protected]>
REGRESSION (r219342): Scaled HTML widget is not responding to a clicks outside the body
Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -582,12 +582,12 @@
child.deleteLines();
}
-RenderPtr<RenderObject> RenderBlock::takeChild(RenderObject& oldChild)
+RenderPtr<RenderObject> RenderBlock::takeChild(RenderTreeBuilder& builder, RenderObject& oldChild)
{
// No need to waste time in merging or removing empty anonymous blocks.
// We can just bail out if our document is getting destroyed.
if (renderTreeBeingDestroyed())
- return RenderBox::takeChild(oldChild);
+ return RenderBox::takeChild(builder, oldChild);
// If this child is a block, and if our previous and next siblings are both anonymous blocks
// with inline content, then we can fold the inline content back together.
@@ -637,7 +637,7 @@
invalidateLineLayoutPath();
- auto takenChild = RenderBox::takeChild(oldChild);
+ auto takenChild = RenderBox::takeChild(builder, oldChild);
RenderObject* child = prev ? prev : next;
if (canMergeAnonymousBlocks && child && !child->previousSibling() && !child->nextSibling() && canDropAnonymousBlockChild()) {
Modified: trunk/Source/WebCore/rendering/RenderBlock.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderBlock.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderBlock.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -74,7 +74,7 @@
virtual void deleteLines();
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild = 0) override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
virtual void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0);
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -3849,7 +3849,7 @@
builder.insertChildToRenderBlockFlow(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderBlockFlow::takeChild(RenderObject& oldChild)
+RenderPtr<RenderObject> RenderBlockFlow::takeChild(RenderTreeBuilder& builder, RenderObject& oldChild)
{
if (!renderTreeBeingDestroyed()) {
RenderFragmentedFlow* fragmentedFlow = multiColumnFlow();
@@ -3856,7 +3856,7 @@
if (fragmentedFlow && fragmentedFlow != &oldChild)
fragmentedFlow->fragmentedFlowRelativeWillBeRemoved(oldChild);
}
- return RenderBlock::takeChild(oldChild);
+ return RenderBlock::takeChild(builder, oldChild);
}
void RenderBlockFlow::checkForPaginationLogicalHeightChange(bool& relayoutChildren, LayoutUnit& pageLogicalHeight, bool& pageLogicalHeightChanged)
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -379,7 +379,7 @@
bool hasNextPage(LayoutUnit logicalOffset, PageBoundaryRule = ExcludePageBoundary) const;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild = 0) override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
void updateColumnProgressionFromStyle(RenderStyle&);
void updateStylesForColumnChildren();
Modified: trunk/Source/WebCore/rendering/RenderButton.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderButton.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderButton.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -70,7 +70,7 @@
updateAnonymousChildStyle(m_inner->mutableStyle());
}
-RenderPtr<RenderObject> RenderButton::takeChild(RenderObject& oldChild)
+RenderPtr<RenderObject> RenderButton::takeChild(RenderTreeBuilder& builder, RenderObject& oldChild)
{
// m_inner should be the only child, but checking for direct children who
// are not m_inner prevents security problems when that assumption is
@@ -77,9 +77,9 @@
// violated.
if (&oldChild == m_inner || !m_inner || oldChild.parent() == this) {
ASSERT(&oldChild == m_inner || !m_inner);
- return RenderFlexibleBox::takeChild(oldChild);
+ return RenderFlexibleBox::takeChild(builder, oldChild);
}
- return m_inner->takeChild(oldChild);
+ return m_inner->takeChild(builder, oldChild);
}
void RenderButton::updateAnonymousChildStyle(RenderStyle& childStyle) const
Modified: trunk/Source/WebCore/rendering/RenderButton.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderButton.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderButton.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -41,7 +41,7 @@
bool canBeSelectionLeaf() const override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
void removeLeftoverAnonymousBlock(RenderBlock*) override { }
bool createsAnonymousWrapper() const override { return true; }
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -480,14 +480,14 @@
builder.insertChild(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderElement::takeChild(RenderObject& oldChild)
+RenderPtr<RenderObject> RenderElement::takeChild(RenderTreeBuilder&, RenderObject& oldChild)
{
return takeChildInternal(oldChild);
}
-void RenderElement::removeAndDestroyChild(RenderObject& oldChild)
+void RenderElement::removeAndDestroyChild(RenderTreeBuilder& builder, RenderObject& oldChild)
{
- auto toDestroy = takeChild(oldChild);
+ auto toDestroy = takeChild(builder, oldChild);
}
void RenderElement::destroyLeftoverChildren()
@@ -495,7 +495,7 @@
while (m_firstChild) {
if (auto* node = m_firstChild->node())
node->setRenderer(nullptr);
- removeAndDestroyChild(*m_firstChild);
+ removeAndDestroyChild(*RenderTreeBuilder::current(), *m_firstChild);
}
}
Modified: trunk/Source/WebCore/rendering/RenderElement.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderElement.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderElement.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -89,8 +89,8 @@
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);
- virtual RenderPtr<RenderObject> takeChild(RenderObject&) WARN_UNUSED_RETURN;
- void removeAndDestroyChild(RenderObject&);
+ virtual RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) WARN_UNUSED_RETURN;
+ void removeAndDestroyChild(RenderTreeBuilder&, RenderObject&);
// 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/RenderFullScreen.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderFullScreen.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderFullScreen.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -132,7 +132,7 @@
builder.insertChild(parent, WTFMove(newFullscreenRenderer), &renderer);
- auto toMove = parent.takeChild(renderer);
+ auto toMove = parent.takeChild(builder, renderer);
// Always just do a full layout to ensure that line boxes get deleted properly.
// Because objects moved from |parent| to |fullscreenRenderer|, we want to
@@ -178,7 +178,7 @@
// lying around on the child.
if (is<RenderBox>(*child))
downcast<RenderBox>(*child).clearOverrideSize();
- auto childToMove = child->parent()->takeChild(*child);
+ auto childToMove = child->parent()->takeChild(builder, *child);
builder.insertChild(*parent(), WTFMove(childToMove), this);
parent()->setNeedsLayoutAndPrefWidthsRecalc();
}
Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderGrid.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -85,9 +85,9 @@
dirtyGrid();
}
-RenderPtr<RenderObject> RenderGrid::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderGrid::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
- auto takenChild = RenderBlock::takeChild(child);
+ auto takenChild = RenderBlock::takeChild(builder, child);
// Positioned grid items do not take up space or otherwise participate in the layout of the grid,
// for that reason we don't need to mark the grid as dirty when they are removed.
Modified: trunk/Source/WebCore/rendering/RenderGrid.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderGrid.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderGrid.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -80,7 +80,7 @@
void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild) final;
- RenderPtr<RenderObject> takeChild(RenderObject&) final;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) final;
StyleSelfAlignmentData selfAlignmentForChild(GridAxis, const RenderBox&, const RenderStyle* = nullptr) const;
bool selfAlignmentChangedToStretch(GridAxis, const RenderStyle& oldStyle, const RenderStyle& newStyle, const RenderBox&) const;
Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderMenuList.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -172,11 +172,11 @@
cache->childrenChanged(this, child.get());
}
-RenderPtr<RenderObject> RenderMenuList::takeChild(RenderObject& oldChild)
+RenderPtr<RenderObject> RenderMenuList::takeChild(RenderTreeBuilder& builder, RenderObject& oldChild)
{
if (!m_innerBlock || &oldChild == m_innerBlock)
- return RenderFlexibleBox::takeChild(oldChild);
- return m_innerBlock->takeChild(oldChild);
+ return RenderFlexibleBox::takeChild(builder, oldChild);
+ return m_innerBlock->takeChild(builder, oldChild);
}
void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
Modified: trunk/Source/WebCore/rendering/RenderMenuList.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderMenuList.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderMenuList.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -70,7 +70,7 @@
bool isMenuList() const override { return true; }
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild = 0) override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
bool createsAnonymousWrapper() const override { return true; }
void updateFromElement() override;
Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -274,7 +274,7 @@
auto newPlaceholder = RenderMultiColumnSpannerPlaceholder::createAnonymous(*this, downcast<RenderBox>(descendant), container->style());
auto& placeholder = *newPlaceholder;
RenderTreeBuilder::current()->insertChild(*container, WTFMove(newPlaceholder), descendant.nextSibling());
- auto takenDescendant = container->takeChild(descendant);
+ auto takenDescendant = container->takeChild(*RenderTreeBuilder::current(), descendant);
// This is a guard to stop an ancestor flow thread from processing the spanner.
gShiftingSpanner = true;
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -62,6 +62,7 @@
#include "RenderScrollbarPart.h"
#include "RenderTableRow.h"
#include "RenderTheme.h"
+#include "RenderTreeBuilder.h"
#include "RenderView.h"
#include "RenderWidget.h"
#include "SVGRenderSupport.h"
@@ -257,7 +258,7 @@
void RenderObject::removeFromParentAndDestroy()
{
ASSERT(m_parent);
- m_parent->removeAndDestroyChild(*this);
+ m_parent->removeAndDestroyChild(*RenderTreeBuilder::current(), *this);
}
RenderObject* RenderObject::nextInPreOrder() const
Modified: trunk/Source/WebCore/rendering/RenderRuby.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderRuby.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderRuby.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -93,7 +93,7 @@
propagateStyleToAnonymousChildren(PropagateToAllChildren);
}
-RenderPtr<RenderObject> RenderRubyAsInline::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderRubyAsInline::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
// If the child's parent is *this (must be a ruby run or generated content or anonymous block),
// just use the normal remove method.
@@ -101,7 +101,7 @@
#ifndef ASSERT_DISABLED
ASSERT(isRubyChildForNormalRemoval(child));
#endif
- return RenderInline::takeChild(child);
+ return RenderInline::takeChild(builder, child);
}
// If the child's parent is an anoymous block (must be generated :before/:after content)
// just use the block's remove method.
@@ -108,13 +108,13 @@
if (isAnonymousRubyInlineBlock(child.parent())) {
ASSERT(child.isBeforeContent() || child.isAfterContent());
auto& parent = *child.parent();
- auto takenChild = parent.takeChild(child);
+ auto takenChild = parent.takeChild(builder, child);
parent.removeFromParentAndDestroy();
return takenChild;
}
// Otherwise find the containing run and remove it from there.
- return findRubyRunParent(child).takeChild(child);
+ return findRubyRunParent(child).takeChild(builder, child);
}
//=== ruby as block object ===
@@ -132,7 +132,7 @@
propagateStyleToAnonymousChildren(PropagateToAllChildren);
}
-RenderPtr<RenderObject> RenderRubyAsBlock::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderRubyAsBlock::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
// If the child's parent is *this (must be a ruby run or generated content or anonymous block),
// just use the normal remove method.
@@ -140,7 +140,7 @@
#ifndef ASSERT_DISABLED
ASSERT(isRubyChildForNormalRemoval(child));
#endif
- return RenderBlockFlow::takeChild(child);
+ return RenderBlockFlow::takeChild(builder, child);
}
// If the child's parent is an anoymous block (must be generated :before/:after content)
// just use the block's remove method.
@@ -147,13 +147,13 @@
if (isAnonymousRubyInlineBlock(child.parent())) {
ASSERT(child.isBeforeContent() || child.isAfterContent());
auto& parent = *child.parent();
- auto takenChild = parent.takeChild(child);
+ auto takenChild = parent.takeChild(builder, child);
parent.removeFromParentAndDestroy();
return takenChild;
}
// Otherwise find the containing run and remove it from there.
- return findRubyRunParent(child).takeChild(child);
+ return findRubyRunParent(child).takeChild(builder, child);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderRuby.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderRuby.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderRuby.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -56,7 +56,7 @@
RenderRubyAsInline(Element&, RenderStyle&&);
virtual ~RenderRubyAsInline();
- RenderPtr<RenderObject> takeChild(RenderObject& child) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject& child) override;
protected:
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
@@ -76,7 +76,7 @@
Element& element() const { return downcast<Element>(nodeForNonAnonymous()); }
- RenderPtr<RenderObject> takeChild(RenderObject& child) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject& child) override;
protected:
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
Modified: trunk/Source/WebCore/rendering/RenderRubyRun.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderRubyRun.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderRubyRun.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -97,7 +97,7 @@
return child.isInline() || child.isRubyText();
}
-RenderPtr<RenderObject> RenderRubyRun::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderRubyRun::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
// If the child is a ruby text, then merge the ruby base with the base of
// the right sibling run, if possible.
@@ -119,13 +119,13 @@
}
}
- auto takenChild = RenderBlockFlow::takeChild(child);
+ auto takenChild = RenderBlockFlow::takeChild(builder, child);
if (!beingDestroyed() && !renderTreeBeingDestroyed()) {
// Check if our base (if any) is now empty. If so, destroy it.
RenderBlock* base = rubyBase();
if (base && !base->firstChild()) {
- auto takenBase = RenderBlockFlow::takeChild(*base);
+ auto takenBase = RenderBlockFlow::takeChild(builder, *base);
base->deleteLines();
}
}
Modified: trunk/Source/WebCore/rendering/RenderRubyRun.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/RenderRubyRun.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/RenderRubyRun.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -56,7 +56,7 @@
void layoutBlock(bool relayoutChildren, LayoutUnit pageHeight = 0) override;
bool isChildAllowed(const RenderObject&, const RenderStyle&) const override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
RenderBlock* firstLineBlock() const override;
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -95,10 +95,10 @@
builder.insertChildToSVGContainer(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderSVGContainer::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderSVGContainer::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
SVGResourcesCache::clientWillBeRemovedFromTree(child);
- return RenderSVGModelObject::takeChild(child);
+ return RenderSVGModelObject::takeChild(builder, child);
}
bool RenderSVGContainer::selfWillPaint()
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -49,7 +49,7 @@
void layout() override;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject* beforeChild = 0) final;
- RenderPtr<RenderObject> takeChild(RenderObject&) final;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) final;
void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer = 0) final;
FloatRect objectBoundingBox() const final { return m_objectBoundingBox; }
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -128,17 +128,17 @@
builder.insertChildToSVGInline(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderSVGInline::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderSVGInline::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
SVGResourcesCache::clientWillBeRemovedFromTree(child);
auto* textAncestor = RenderSVGText::locateRenderSVGTextAncestor(*this);
if (!textAncestor)
- return RenderInline::takeChild(child);
+ return RenderInline::takeChild(builder, child);
Vector<SVGTextLayoutAttributes*, 2> affectedAttributes;
textAncestor->subtreeChildWillBeRemoved(&child, affectedAttributes);
- auto takenChild = RenderInline::takeChild(child);
+ auto takenChild = RenderInline::takeChild(builder, child);
textAncestor->subtreeChildWasRemoved(affectedAttributes);
return takenChild;
}
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -62,7 +62,7 @@
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) final;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr) final;
- RenderPtr<RenderObject> takeChild(RenderObject&) final;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) final;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -308,10 +308,10 @@
builder.insertChildToSVGRoot(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderSVGRoot::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderSVGRoot::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
SVGResourcesCache::clientWillBeRemovedFromTree(child);
- return RenderReplaced::takeChild(child);
+ return RenderReplaced::takeChild(builder, child);
}
// RenderBox methods will expect coordinates w/o any transforms in coordinates
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -83,7 +83,7 @@
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject* beforeChild = 0) override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
const AffineTransform& localToParentTransform() const override;
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -525,13 +525,13 @@
builder.insertChildToSVGText(*this, WTFMove(newChild), beforeChild);
}
-RenderPtr<RenderObject> RenderSVGText::takeChild(RenderObject& child)
+RenderPtr<RenderObject> RenderSVGText::takeChild(RenderTreeBuilder& builder, RenderObject& child)
{
SVGResourcesCache::clientWillBeRemovedFromTree(child);
Vector<SVGTextLayoutAttributes*, 2> affectedAttributes;
subtreeChildWillBeRemoved(&child, affectedAttributes);
- auto takenChild = RenderSVGBlock::takeChild(child);
+ auto takenChild = RenderSVGBlock::takeChild(builder, child);
subtreeChildWasRemoved(affectedAttributes);
return takenChild;
}
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (227976 => 227977)
--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h 2018-02-01 19:42:32 UTC (rev 227977)
@@ -84,7 +84,7 @@
void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr) override;
- RenderPtr<RenderObject> takeChild(RenderObject&) override;
+ RenderPtr<RenderObject> takeChild(RenderTreeBuilder&, RenderObject&) override;
void willBeDestroyed() override;
const AffineTransform& localToParentTransform() const override { return m_localTransform; }
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -358,7 +358,7 @@
tableBuilder().collapseAndDestroyAnonymousSiblingRows(downcast<RenderTableRow>(destroyRoot));
auto& destroyRootParent = *destroyRoot.parent();
- destroyRootParent.removeAndDestroyChild(destroyRoot);
+ destroyRootParent.removeAndDestroyChild(*this, destroyRoot);
destroyRootParent.removeAnonymousWrappersForInlinesIfNecessary();
// Anonymous parent might have become empty, try to delete it too.
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFirstLetter.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -174,7 +174,7 @@
while (RenderObject* child = firstLetter->firstChild()) {
if (is<RenderText>(*child))
downcast<RenderText>(*child).removeAndDestroyTextBoxes();
- auto toMove = firstLetter->takeChild(*child);
+ auto toMove = firstLetter->takeChild(m_builder, *child);
m_builder.insertChild(*newFirstLetter, WTFMove(toMove));
}
@@ -185,7 +185,7 @@
remainingText->setFirstLetter(*newFirstLetter);
newFirstLetter->setFirstLetterRemainingText(*remainingText);
}
- firstLetterContainer->removeAndDestroyChild(*firstLetter);
+ firstLetterContainer->removeAndDestroyChild(m_builder, *firstLetter);
m_builder.insertChild(*firstLetterContainer, WTFMove(newFirstLetter), nextSibling);
return;
}
@@ -241,7 +241,7 @@
auto* textNode = currentTextChild.textNode();
auto* beforeChild = currentTextChild.nextSibling();
- firstLetterContainer->removeAndDestroyChild(currentTextChild);
+ firstLetterContainer->removeAndDestroyChild(m_builder, currentTextChild);
// Construct a text fragment for the text after the first letter.
// This text fragment might be empty.
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderList.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderList.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderList.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -115,7 +115,7 @@
return;
if (currentParent)
- m_builder.insertChild(*newParent, currentParent->takeChild(*markerRenderer), firstNonMarkerChild(*newParent));
+ m_builder.insertChild(*newParent, currentParent->takeChild(m_builder, *markerRenderer), firstNonMarkerChild(*newParent));
else
m_builder.insertChild(*newParent, WTFMove(newMarkerRenderer), firstNonMarkerChild(*newParent));
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -79,7 +79,7 @@
// Move the spanner back to its original position.
auto& spannerOriginalParent = *placeholder->parent();
// Detaching the spanner takes care of removing the placeholder (and merges the RenderMultiColumnSets).
- auto spannerToReInsert = spanner->parent()->takeChild(*spanner);
+ auto spannerToReInsert = spanner->parent()->takeChild(m_builder, *spanner);
m_builder.insertChild(spannerOriginalParent, WTFMove(spannerToReInsert));
}
}
@@ -127,7 +127,7 @@
spannerOriginalParent = &flow;
// Detaching the spanner takes care of removing the placeholder (and merges the RenderMultiColumnSets).
auto* spanner = placeholder->spanner();
- parentAndSpannerList.append(std::make_pair(spannerOriginalParent, spanner->parent()->takeChild(*spanner)));
+ parentAndSpannerList.append(std::make_pair(spannerOriginalParent, spanner->parent()->takeChild(m_builder, *spanner)));
}
while (auto* columnSet = multiColumnFlow.firstMultiColumnSet())
columnSet->removeFromParentAndDestroy();
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -209,7 +209,7 @@
// in order to avoid automatic removal of the ruby run in case there is no
// other child besides the old ruby text.
parent.addChild(m_builder, WTFMove(child), beforeChild);
- auto takenBeforeChild = parent.RenderBlockFlow::takeChild(*beforeChild);
+ auto takenBeforeChild = parent.RenderBlockFlow::takeChild(m_builder, *beforeChild);
m_builder.insertChild(*newRun, WTFMove(takenBeforeChild));
return;
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (227976 => 227977)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-01 19:41:11 UTC (rev 227976)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-01 19:42:32 UTC (rev 227977)
@@ -236,7 +236,7 @@
continue;
}
currentRow->moveAllChildrenTo(rowToInsertInto, RenderBoxModelObject::NormalizeAfterInsertion::No);
- auto toDestroy = section->takeChild(*currentRow);
+ auto toDestroy = section->takeChild(m_builder, *currentRow);
currentRow = currentRow->nextRow();
}
if (rowToInsertInto)