<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[169385] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/169385">169385</a></dd>
<dt>Author</dt> <dd>stavila@adobe.com</dd>
<dt>Date</dt> <dd>2014-05-27 09:36:09 -0700 (Tue, 27 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/168046">r168046</a>): Incorrect handling of multicol spanner
https://bugs.webkit.org/show_bug.cgi?id=133249

Reviewed by David Hyatt.

When removing the child of an object, the removeChild method should return the next element
following the one being deleted. This will ensure that proper iteration and destruction of
an object's children is possible.

No new tests added. This is because the test that triggers this issue also triggers
another assertion, in RenderMultiColumnSet::requiresBalancing(). However, that is a totally
separate problem and will be handled in a separate bug: https://bugs.webkit.org/show_bug.cgi?id=133309

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::removeChild):
* rendering/RenderBlock.h:
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::removeChild):
* rendering/RenderBlockFlow.h:
* rendering/RenderButton.cpp:
(WebCore::RenderButton::removeChild):
* rendering/RenderButton.h:
* rendering/RenderElement.cpp:
(WebCore::RenderElement::removeChild):
(WebCore::RenderElement::removeChildInternal):
* rendering/RenderElement.h:
* rendering/RenderMenuList.cpp:
(RenderMenuList::removeChild):
* rendering/RenderMenuList.h:
* rendering/RenderMultiColumnFlowThread.cpp:
(WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
* rendering/RenderRuby.cpp:
(WebCore::RenderRubyAsInline::removeChild):
(WebCore::RenderRubyAsBlock::removeChild):
* rendering/RenderRuby.h:
* rendering/RenderRubyRun.cpp:
(WebCore::RenderRubyRun::removeChild):
* rendering/RenderRubyRun.h:
* rendering/mathml/RenderMathMLScripts.cpp:
(WebCore::RenderMathMLScripts::removeChildInternal):
(WebCore::RenderMathMLScripts::removeChild):
(WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
(WebCore::RenderMathMLScriptsWrapper::removeChild):
* rendering/mathml/RenderMathMLScripts.h:
* rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::removeChild):
* rendering/svg/RenderSVGContainer.h:
* rendering/svg/RenderSVGInline.cpp:
(WebCore::RenderSVGInline::removeChild):
* rendering/svg/RenderSVGInline.h:
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::removeChild):
* rendering/svg/RenderSVGRoot.h:
* rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::removeChild):
* rendering/svg/RenderSVGText.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockh">trunk/Source/WebCore/rendering/RenderBlock.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowcpp">trunk/Source/WebCore/rendering/RenderBlockFlow.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowh">trunk/Source/WebCore/rendering/RenderBlockFlow.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderButtoncpp">trunk/Source/WebCore/rendering/RenderButton.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderButtonh">trunk/Source/WebCore/rendering/RenderButton.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementcpp">trunk/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementh">trunk/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMenuListcpp">trunk/Source/WebCore/rendering/RenderMenuList.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMenuListh">trunk/Source/WebCore/rendering/RenderMenuList.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMultiColumnFlowThreadcpp">trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRubycpp">trunk/Source/WebCore/rendering/RenderRuby.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRubyh">trunk/Source/WebCore/rendering/RenderRuby.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRubyRuncpp">trunk/Source/WebCore/rendering/RenderRubyRun.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRubyRunh">trunk/Source/WebCore/rendering/RenderRubyRun.h</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLScriptscpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLScriptsh">trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGContainercpp">trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGContainerh">trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGInlinecpp">trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGInlineh">trunk/Source/WebCore/rendering/svg/RenderSVGInline.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGRootcpp">trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGRooth">trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGTextcpp">trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGTexth">trunk/Source/WebCore/rendering/svg/RenderSVGText.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/ChangeLog        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -1,3 +1,62 @@
</span><ins>+2014-05-27  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        REGRESSION (r168046): Incorrect handling of multicol spanner
+        https://bugs.webkit.org/show_bug.cgi?id=133249
+
+        Reviewed by David Hyatt.
+
+        When removing the child of an object, the removeChild method should return the next element
+        following the one being deleted. This will ensure that proper iteration and destruction of
+        an object's children is possible.
+
+        No new tests added. This is because the test that triggers this issue also triggers
+        another assertion, in RenderMultiColumnSet::requiresBalancing(). However, that is a totally
+        separate problem and will be handled in a separate bug: https://bugs.webkit.org/show_bug.cgi?id=133309
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::removeChild):
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::removeChild):
+        * rendering/RenderBlockFlow.h:
+        * rendering/RenderButton.cpp:
+        (WebCore::RenderButton::removeChild):
+        * rendering/RenderButton.h:
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::removeChild):
+        (WebCore::RenderElement::removeChildInternal):
+        * rendering/RenderElement.h:
+        * rendering/RenderMenuList.cpp:
+        (RenderMenuList::removeChild):
+        * rendering/RenderMenuList.h:
+        * rendering/RenderMultiColumnFlowThread.cpp:
+        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
+        * rendering/RenderRuby.cpp:
+        (WebCore::RenderRubyAsInline::removeChild):
+        (WebCore::RenderRubyAsBlock::removeChild):
+        * rendering/RenderRuby.h:
+        * rendering/RenderRubyRun.cpp:
+        (WebCore::RenderRubyRun::removeChild):
+        * rendering/RenderRubyRun.h:
+        * rendering/mathml/RenderMathMLScripts.cpp:
+        (WebCore::RenderMathMLScripts::removeChildInternal):
+        (WebCore::RenderMathMLScripts::removeChild):
+        (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
+        (WebCore::RenderMathMLScriptsWrapper::removeChild):
+        * rendering/mathml/RenderMathMLScripts.h:
+        * rendering/svg/RenderSVGContainer.cpp:
+        (WebCore::RenderSVGContainer::removeChild):
+        * rendering/svg/RenderSVGContainer.h:
+        * rendering/svg/RenderSVGInline.cpp:
+        (WebCore::RenderSVGInline::removeChild):
+        * rendering/svg/RenderSVGInline.h:
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::removeChild):
+        * rendering/svg/RenderSVGRoot.h:
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::removeChild):
+        * rendering/svg/RenderSVGText.h:
+
</ins><span class="cx"> 2014-05-27  Jon Lee  &lt;jonlee@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Update ENABLE(MEDIA_SOURCE) on Mac
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -770,14 +770,12 @@
</span><span class="cx">     child-&gt;destroy();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBlock::removeChild(RenderObject&amp; oldChild)
</del><ins>+RenderObject* RenderBlock::removeChild(RenderObject&amp; oldChild)
</ins><span class="cx"> {
</span><span class="cx">     // No need to waste time in merging or removing empty anonymous blocks.
</span><span class="cx">     // We can just bail out if our document is getting destroyed.
</span><del>-    if (documentBeingDestroyed()) {
-        RenderBox::removeChild(oldChild);
-        return;
-    }
</del><ins>+    if (documentBeingDestroyed())
+        return RenderBox::removeChild(oldChild);
</ins><span class="cx"> 
</span><span class="cx">     // If this child is a block, and if our previous and next siblings are
</span><span class="cx">     // both anonymous blocks with inline content, then we can go ahead and
</span><span class="lines">@@ -830,7 +828,7 @@
</span><span class="cx"> 
</span><span class="cx">     invalidateLineLayoutPath();
</span><span class="cx"> 
</span><del>-    RenderBox::removeChild(oldChild);
</del><ins>+    RenderObject* nextSibling = RenderBox::removeChild(oldChild);
</ins><span class="cx"> 
</span><span class="cx">     RenderObject* child = prev ? prev : next;
</span><span class="cx">     if (canMergeAnonymousBlocks &amp;&amp; child &amp;&amp; !child-&gt;previousSibling() &amp;&amp; !child-&gt;nextSibling() &amp;&amp; canCollapseAnonymousBlockChild()) {
</span><span class="lines">@@ -838,6 +836,7 @@
</span><span class="cx">         // box.  We can go ahead and pull the content right back up into our
</span><span class="cx">         // box.
</span><span class="cx">         collapseAnonymousBoxChild(this, toRenderBlock(child));
</span><ins>+        nextSibling = nullptr;
</ins><span class="cx">     } else if (((prev &amp;&amp; prev-&gt;isAnonymousBlock()) || (next &amp;&amp; next-&gt;isAnonymousBlock())) &amp;&amp; canCollapseAnonymousBlockChild()) {
</span><span class="cx">         // It's possible that the removal has knocked us down to a single anonymous
</span><span class="cx">         // block with pseudo-style element siblings (e.g. first-letter). If these
</span><span class="lines">@@ -847,10 +846,13 @@
</span><span class="cx">             &amp;&amp; (!anonBlock-&gt;previousSibling() || (anonBlock-&gt;previousSibling()-&gt;style().styleType() != NOPSEUDO &amp;&amp; anonBlock-&gt;previousSibling()-&gt;isFloating() &amp;&amp; !anonBlock-&gt;previousSibling()-&gt;previousSibling()))
</span><span class="cx">             &amp;&amp; (!anonBlock-&gt;nextSibling() || (anonBlock-&gt;nextSibling()-&gt;style().styleType() != NOPSEUDO &amp;&amp; anonBlock-&gt;nextSibling()-&gt;isFloating() &amp;&amp; !anonBlock-&gt;nextSibling()-&gt;nextSibling()))) {
</span><span class="cx">             collapseAnonymousBoxChild(this, anonBlock);
</span><ins>+            nextSibling = nullptr;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!firstChild()) {
</span><ins>+        nextSibling = nullptr;
+
</ins><span class="cx">         // If this was our last child be sure to clear out our line boxes.
</span><span class="cx">         if (childrenInline())
</span><span class="cx">             deleteLines();
</span><span class="lines">@@ -881,6 +883,8 @@
</span><span class="cx">             destroy();
</span><span class="cx">         }
</span><span class="cx">     }
</span><ins>+    
+    return nextSibling;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RenderBlock::isSelfCollapsingBlock() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderBlock.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     virtual void deleteLines();
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -3638,14 +3638,14 @@
</span><span class="cx">     RenderBlock::addChild(newChild, beforeChild);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBlockFlow::removeChild(RenderObject&amp; oldChild)
</del><ins>+RenderObject* RenderBlockFlow::removeChild(RenderObject&amp; oldChild)
</ins><span class="cx"> {
</span><span class="cx">     if (!documentBeingDestroyed()) {
</span><span class="cx">         RenderFlowThread* flowThread = multiColumnFlowThread();
</span><span class="cx">         if (flowThread &amp;&amp; flowThread != &amp;oldChild)
</span><span class="cx">             flowThread-&gt;flowThreadRelativeWillBeRemoved(&amp;oldChild);
</span><span class="cx">     }
</span><del>-    RenderBlock::removeChild(oldChild);
</del><ins>+    return RenderBlock::removeChild(oldChild);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderBlockFlow::checkForPaginationLogicalHeightChange(bool&amp; relayoutChildren, LayoutUnit&amp; pageLogicalHeight, bool&amp; pageLogicalHeightChanged)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -382,7 +382,7 @@
</span><span class="cx">     bool hasNextPage(LayoutUnit logicalOffset, PageBoundaryRule = ExcludePageBoundary) const;
</span><span class="cx"> 
</span><span class="cx">     void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) override;
</span><del>-    void removeChild(RenderObject&amp;) override;
</del><ins>+    RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     void createMultiColumnFlowThread();
</span><span class="cx">     void destroyMultiColumnFlowThread();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderButtoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderButton.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderButton.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderButton.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -77,17 +77,18 @@
</span><span class="cx">     m_inner-&gt;addChild(newChild, beforeChild);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderButton::removeChild(RenderObject&amp; oldChild)
</del><ins>+RenderObject* RenderButton::removeChild(RenderObject&amp; oldChild)
</ins><span class="cx"> {
</span><span class="cx">     // m_inner should be the only child, but checking for direct children who
</span><span class="cx">     // are not m_inner prevents security problems when that assumption is
</span><span class="cx">     // violated.
</span><span class="cx">     if (&amp;oldChild == m_inner || !m_inner || oldChild.parent() == this) {
</span><span class="cx">         ASSERT(&amp;oldChild == m_inner || !m_inner);
</span><del>-        RenderFlexibleBox::removeChild(oldChild);
</del><ins>+        RenderObject* next = RenderFlexibleBox::removeChild(oldChild);
</ins><span class="cx">         m_inner = nullptr;
</span><ins>+        return next;
</ins><span class="cx">     } else
</span><del>-        m_inner-&gt;removeChild(oldChild);
</del><ins>+        return m_inner-&gt;removeChild(oldChild);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderButton::styleWillChange(StyleDifference diff, const RenderStyle&amp; newStyle)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderButtonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderButton.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderButton.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderButton.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     virtual bool canBeSelectionLeaf() const override;
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* newChild, RenderObject *beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx">     virtual void removeLeftoverAnonymousBlock(RenderBlock*) override { }
</span><span class="cx">     virtual bool createsAnonymousWrapper() const override { return true; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -515,9 +515,9 @@
</span><span class="cx">     SVGRenderSupport::childAdded(*this, *newChild);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderElement::removeChild(RenderObject&amp; oldChild)
</del><ins>+RenderObject* RenderElement::removeChild(RenderObject&amp; oldChild)
</ins><span class="cx"> {
</span><del>-    removeChildInternal(oldChild, NotifyChildren);
</del><ins>+    return removeChildInternal(oldChild, NotifyChildren);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderElement::destroyLeftoverChildren()
</span><span class="lines">@@ -585,7 +585,7 @@
</span><span class="cx">         cache-&gt;childrenChanged(this, newChild);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderElement::removeChildInternal(RenderObject&amp; oldChild, NotifyChildrenType notifyChildren)
</del><ins>+RenderObject* RenderElement::removeChildInternal(RenderObject&amp; oldChild, NotifyChildrenType notifyChildren)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(canHaveChildren() || canHaveGeneratedChildren());
</span><span class="cx">     ASSERT(oldChild.parent() == this);
</span><span class="lines">@@ -624,14 +624,16 @@
</span><span class="cx">     // WARNING: There should be no code running between willBeRemovedFromTree and the actual removal below.
</span><span class="cx">     // This is needed to avoid race conditions where willBeRemovedFromTree would dirty the tree's structure
</span><span class="cx">     // and the code running here would force an untimely rebuilding, leaving |oldChild| dangling.
</span><ins>+    
+    RenderObject* nextSibling = oldChild.nextSibling();
</ins><span class="cx"> 
</span><span class="cx">     if (oldChild.previousSibling())
</span><del>-        oldChild.previousSibling()-&gt;setNextSibling(oldChild.nextSibling());
-    if (oldChild.nextSibling())
-        oldChild.nextSibling()-&gt;setPreviousSibling(oldChild.previousSibling());
</del><ins>+        oldChild.previousSibling()-&gt;setNextSibling(nextSibling);
+    if (nextSibling)
+        nextSibling-&gt;setPreviousSibling(oldChild.previousSibling());
</ins><span class="cx"> 
</span><span class="cx">     if (m_firstChild == &amp;oldChild)
</span><del>-        m_firstChild = oldChild.nextSibling();
</del><ins>+        m_firstChild = nextSibling;
</ins><span class="cx">     if (m_lastChild == &amp;oldChild)
</span><span class="cx">         m_lastChild = oldChild.previousSibling();
</span><span class="cx"> 
</span><span class="lines">@@ -646,6 +648,8 @@
</span><span class="cx"> 
</span><span class="cx">     if (AXObjectCache* cache = document().existingAXObjectCache())
</span><span class="cx">         cache-&gt;childrenChanged(this);
</span><ins>+    
+    return nextSibling;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void addLayers(RenderElement&amp; renderer, RenderLayer* parentLayer, RenderElement*&amp; newObject, RenderLayer*&amp; beforeChild)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderElement.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     virtual bool isChildAllowed(const RenderObject&amp;, const RenderStyle&amp;) const { return true; }
</span><span class="cx">     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
</span><span class="cx">     virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); }
</span><del>-    virtual void removeChild(RenderObject&amp;);
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // The following functions are used when the render tree hierarchy changes to make sure layers get
</span><span class="cx">     // properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx"> 
</span><span class="cx">     enum NotifyChildrenType { NotifyChildren, DontNotifyChildren };
</span><span class="cx">     void insertChildInternal(RenderObject*, RenderObject* beforeChild, NotifyChildrenType);
</span><del>-    void removeChildInternal(RenderObject&amp;, NotifyChildrenType);
</del><ins>+    RenderObject* removeChildInternal(RenderObject&amp;, NotifyChildrenType);
</ins><span class="cx"> 
</span><span class="cx">     virtual RenderElement* hoverAncestor() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMenuListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMenuList.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -181,13 +181,14 @@
</span><span class="cx">         cache-&gt;childrenChanged(this, newChild);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMenuList::removeChild(RenderObject&amp; oldChild)
</del><ins>+RenderObject* RenderMenuList::removeChild(RenderObject&amp; oldChild)
</ins><span class="cx"> {
</span><span class="cx">     if (&amp;oldChild == m_innerBlock || !m_innerBlock) {
</span><del>-        RenderFlexibleBox::removeChild(oldChild);
</del><ins>+        RenderObject* next = RenderFlexibleBox::removeChild(oldChild);
</ins><span class="cx">         m_innerBlock = 0;
</span><ins>+        return next;
</ins><span class="cx">     } else
</span><del>-        m_innerBlock-&gt;removeChild(oldChild);
</del><ins>+        return m_innerBlock-&gt;removeChild(oldChild);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMenuListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMenuList.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMenuList.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderMenuList.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     virtual bool isMenuList() const override { return true; }
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx">     virtual bool createsAnonymousWrapper() const override { return true; }
</span><span class="cx"> 
</span><span class="cx">     virtual void updateFromElement() override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -279,7 +279,7 @@
</span><span class="cx">     if (gShiftingSpanner || m_beingEvacuated || descendant-&gt;isInFlowRenderFlowThread())
</span><span class="cx">         return;
</span><span class="cx">     RenderObject* subtreeRoot = descendant;
</span><del>-    for (; descendant; descendant = descendant-&gt;nextInPreOrder(subtreeRoot)) {
</del><ins>+    for (; descendant; descendant = (descendant ? descendant-&gt;nextInPreOrder(subtreeRoot) : nullptr)) {
</ins><span class="cx">         if (descendant-&gt;isRenderMultiColumnSpannerPlaceholder()) {
</span><span class="cx">             // A spanner's placeholder has been inserted. The actual spanner renderer is moved from
</span><span class="cx">             // where it would otherwise occur (if it weren't a spanner) to becoming a sibling of the
</span><span class="lines">@@ -296,11 +296,10 @@
</span><span class="cx">                 
</span><span class="cx">                 // Get info for the move of the original content back into our flow thread.
</span><span class="cx">                 RenderBoxModelObject* placeholderParent = toRenderBoxModelObject(placeholder-&gt;parent());
</span><del>-                RenderObject* placeholderNextSibling = placeholder-&gt;nextSibling();
</del><span class="cx">             
</span><span class="cx">                 // We have to nuke the placeholder, since the ancestor already lost the mapping to it when
</span><span class="cx">                 // we shifted the placeholder down into this flow thread.
</span><del>-                placeholder-&gt;parent()-&gt;removeChild(*placeholder);
</del><ins>+                RenderObject* placeholderNextSibling = placeholderParent-&gt;removeChild(*placeholder);
</ins><span class="cx"> 
</span><span class="cx">                 // Get the ancestor multicolumn flow thread to clean up its mess.
</span><span class="cx">                 RenderBlockFlow* ancestorBlock = toRenderBlockFlow(spanner-&gt;parent());
</span><span class="lines">@@ -314,9 +313,14 @@
</span><span class="cx">                 if (!descendant)
</span><span class="cx">                     return;
</span><span class="cx">                 
</span><ins>+                if (!placeholderNextSibling)
+                    descendant = nullptr;
+
</ins><span class="cx">                 // Now that we have done this, we can continue past the spanning content, since we advanced
</span><span class="cx">                 // descendant already.
</span><del>-                descendant = descendant-&gt;previousInPreOrder(subtreeRoot);
</del><ins>+                if (descendant)
+                    descendant = descendant-&gt;previousInPreOrder(subtreeRoot);
+
</ins><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx">             
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRubycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRuby.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRuby.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderRuby.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -187,27 +187,26 @@
</span><span class="cx">     lastRun-&gt;addChild(child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderRubyAsInline::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderRubyAsInline::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     // If the child's parent is *this (must be a ruby run or generated content or anonymous block),
</span><span class="cx">     // just use the normal remove method.
</span><span class="cx">     if (child.parent() == this) {
</span><span class="cx">         ASSERT(child.isRubyRun() || child.isBeforeContent() || child.isAfterContent() || isAnonymousRubyInlineBlock(&amp;child));
</span><del>-        RenderInline::removeChild(child);
-        return;
</del><ins>+        return RenderInline::removeChild(child);
</ins><span class="cx">     }
</span><span class="cx">     // If the child's parent is an anoymous block (must be generated :before/:after content)
</span><span class="cx">     // just use the block's remove method.
</span><span class="cx">     if (isAnonymousRubyInlineBlock(child.parent())) {
</span><span class="cx">         ASSERT(child.isBeforeContent() || child.isAfterContent());
</span><del>-        child.parent()-&gt;removeChild(child);
</del><ins>+        RenderObject* next = child.parent()-&gt;removeChild(child);
</ins><span class="cx">         removeChild(*child.parent());
</span><del>-        return;
</del><ins>+        return next;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Otherwise find the containing run and remove it from there.
</span><span class="cx">     RenderRubyRun&amp; run = findRubyRunParent(child);
</span><del>-    run.removeChild(child);
</del><ins>+    return run.removeChild(child);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> //=== ruby as block object ===
</span><span class="lines">@@ -292,27 +291,26 @@
</span><span class="cx">     lastRun-&gt;addChild(child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderRubyAsBlock::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderRubyAsBlock::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     // If the child's parent is *this (must be a ruby run or generated content or anonymous block),
</span><span class="cx">     // just use the normal remove method.
</span><span class="cx">     if (child.parent() == this) {
</span><span class="cx">         ASSERT(child.isRubyRun() || child.isBeforeContent() || child.isAfterContent() || isAnonymousRubyInlineBlock(&amp;child));
</span><del>-        RenderBlockFlow::removeChild(child);
-        return;
</del><ins>+        return RenderBlockFlow::removeChild(child);
</ins><span class="cx">     }
</span><span class="cx">     // If the child's parent is an anoymous block (must be generated :before/:after content)
</span><span class="cx">     // just use the block's remove method.
</span><span class="cx">     if (isAnonymousRubyInlineBlock(child.parent())) {
</span><span class="cx">         ASSERT(child.isBeforeContent() || child.isAfterContent());
</span><del>-        child.parent()-&gt;removeChild(child);
</del><ins>+        RenderObject* next = child.parent()-&gt;removeChild(child);
</ins><span class="cx">         removeChild(*child.parent());
</span><del>-        return;
</del><ins>+        return next;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Otherwise find the containing run and remove it from there.
</span><span class="cx">     RenderRubyRun&amp; run = findRubyRunParent(child);
</span><del>-    run.removeChild(child);
</del><ins>+    return run.removeChild(child);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRubyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRuby.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRuby.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderRuby.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     virtual ~RenderRubyAsInline();
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp; child) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp; child) override;
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     Element&amp; element() const { return toElement(nodeForNonAnonymous()); }
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp; child) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp; child) override;
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRubyRuncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRubyRun.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRubyRun.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderRubyRun.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderRubyRun::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderRubyRun::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     // If the child is a ruby text, then merge the ruby base with the base of
</span><span class="cx">     // the right sibling run, if possible.
</span><span class="lines">@@ -176,13 +176,13 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RenderBlockFlow::removeChild(child);
</del><ins>+    RenderObject* next = RenderBlockFlow::removeChild(child);
</ins><span class="cx"> 
</span><span class="cx">     if (!beingDestroyed() &amp;&amp; !documentBeingDestroyed()) {
</span><span class="cx">         // Check if our base (if any) is now empty. If so, destroy it.
</span><span class="cx">         RenderBlock* base = rubyBase();
</span><span class="cx">         if (base &amp;&amp; !base-&gt;firstChild()) {
</span><del>-            RenderBlockFlow::removeChild(*base);
</del><ins>+            next = RenderBlockFlow::removeChild(*base);
</ins><span class="cx">             base-&gt;deleteLines();
</span><span class="cx">             base-&gt;destroy();
</span><span class="cx">         }
</span><span class="lines">@@ -192,8 +192,11 @@
</span><span class="cx">             parent()-&gt;removeChild(*this);
</span><span class="cx">             deleteLines();
</span><span class="cx">             destroy();
</span><ins>+            next = nullptr;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><ins>+    
+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderRubyBase* RenderRubyRun::createRubyBase() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRubyRunh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRubyRun.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRubyRun.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/RenderRubyRun.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool isChildAllowed(const RenderObject&amp;, const RenderStyle&amp;) const;
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual RenderBlock* firstLineBlock() const;
</span><span class="cx">     virtual void updateFirstLetter();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLScriptscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -199,12 +199,10 @@
</span><span class="cx">     wrapper-&gt;addChildInternal(false, child, wrapper-&gt;firstChild());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLScripts::removeChildInternal(bool doNotRestructure, RenderObject&amp; child)
</del><ins>+RenderObject* RenderMathMLScripts::removeChildInternal(bool doNotRestructure, RenderObject&amp; child)
</ins><span class="cx"> {
</span><del>-    if (doNotRestructure) {
-        RenderMathMLBlock::removeChild(child);
-        return;
-    }
</del><ins>+    if (doNotRestructure)
+        return RenderMathMLBlock::removeChild(child);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(isPrescript(&amp;child));
</span><span class="cx"> 
</span><span class="lines">@@ -223,7 +221,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RenderMathMLBlock::removeChild(child);
</del><ins>+    return RenderMathMLBlock::removeChild(child);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLScripts::addChild(RenderObject* child, RenderObject* beforeChild)
</span><span class="lines">@@ -238,17 +236,18 @@
</span><span class="cx">     fixAnonymousStyles();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLScripts::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderMathMLScripts::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     if (beingDestroyed() || documentBeingDestroyed()) {
</span><span class="cx">         // The renderer is being destroyed so we remove the child normally.
</span><del>-        RenderMathMLBlock::removeChild(child);
-        return;
</del><ins>+        return RenderMathMLBlock::removeChild(child);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    removeChildInternal(false, child);
</del><ins>+    RenderObject* next = removeChildInternal(false, child);
</ins><span class="cx">     
</span><span class="cx">     fixAnonymousStyles();
</span><ins>+    
+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLScripts::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
</span><span class="lines">@@ -463,12 +462,10 @@
</span><span class="cx">     parentNode-&gt;fixAnonymousStyles();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLScriptsWrapper::removeChildInternal(bool doNotRestructure, RenderObject&amp; child)
</del><ins>+RenderObject* RenderMathMLScriptsWrapper::removeChildInternal(bool doNotRestructure, RenderObject&amp; child)
</ins><span class="cx"> {
</span><del>-    if (doNotRestructure) {
-        RenderMathMLBlock::removeChild(child);
-        return;
-    }
</del><ins>+    if (doNotRestructure)
+        return RenderMathMLBlock::removeChild(child);
</ins><span class="cx"> 
</span><span class="cx">     RenderMathMLScripts* parentNode = toRenderMathMLScripts(parent());
</span><span class="cx"> 
</span><span class="lines">@@ -483,11 +480,11 @@
</span><span class="cx">             wrapper-&gt;removeChildInternal(false, *script);
</span><span class="cx">             RenderMathMLBlock::addChild(script);
</span><span class="cx">         }
</span><del>-        return;
</del><ins>+        return sibling;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // We remove the child and shift the successors in the current sequence of scripts.
</span><del>-    RenderMathMLBlock::removeChild(child);
</del><ins>+    RenderObject* next = RenderMathMLBlock::removeChild(child);
</ins><span class="cx">     RenderMathMLScriptsWrapper* subSupPair = this;
</span><span class="cx">     for (RenderObject* nextSibling = subSupPair-&gt;nextSibling(); nextSibling &amp;&amp; !isPrescript(nextSibling); nextSibling = nextSibling-&gt;nextSibling()) {
</span><span class="cx">         RenderMathMLScriptsWrapper* nextSubSupPair = toRenderMathMLScriptsWrapper(nextSibling);
</span><span class="lines">@@ -502,19 +499,21 @@
</span><span class="cx">         parentNode-&gt;removeChildInternal(true, *subSupPair);
</span><span class="cx">         subSupPair-&gt;destroy();
</span><span class="cx">     }
</span><ins>+    
+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLScriptsWrapper::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderMathMLScriptsWrapper::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     if (beingDestroyed() || documentBeingDestroyed()) {
</span><span class="cx">         // The renderer is being destroyed so we remove the child normally.
</span><del>-        RenderMathMLBlock::removeChild(child);
-        return;
</del><ins>+        return RenderMathMLBlock::removeChild(child);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     RenderMathMLScripts* parentNode = toRenderMathMLScripts(parent());
</span><del>-    removeChildInternal(false, child);
</del><ins>+    RenderObject* next = removeChildInternal(false, child);
</ins><span class="cx">     parentNode-&gt;fixAnonymousStyles();
</span><ins>+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }    
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLScriptsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">     enum WrapperType { Base, SubSupPair };
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     RenderMathMLScriptsWrapper(Document&amp; document, PassRef&lt;RenderStyle&gt; style, WrapperType kind)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx">     static RenderMathMLScriptsWrapper* createAnonymousWrapper(RenderMathMLScripts* renderObject, WrapperType);
</span><span class="cx"> 
</span><span class="cx">     void addChildInternal(bool normalInsertion, RenderObject* child, RenderObject* beforeChild = 0);
</span><del>-    void removeChildInternal(bool normalRemoval, RenderObject&amp; child);
</del><ins>+    RenderObject* removeChildInternal(bool normalRemoval, RenderObject&amp; child);
</ins><span class="cx"> 
</span><span class="cx">     virtual const char* renderName() const override { return m_kind == Base ? &quot;Base Wrapper&quot; : &quot;SubSupPair Wrapper&quot;; }
</span><span class="cx">     virtual bool isRenderMathMLScriptsWrapper() const override final { return true; }
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx"> public:
</span><span class="cx">     RenderMathMLScripts(Element&amp;, PassRef&lt;RenderStyle&gt;);
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx">     
</span><span class="cx">     virtual RenderMathMLOperator* unembellishedOperator();
</span><span class="cx">     virtual int firstLineBaseline() const override;
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="cx">     void addChildInternal(bool normalInsertion, RenderObject* child, RenderObject* beforeChild = 0);
</span><del>-    void removeChildInternal(bool normalRemoval, RenderObject&amp; child);
</del><ins>+    RenderObject* removeChildInternal(bool normalRemoval, RenderObject&amp; child);
</ins><span class="cx"> 
</span><span class="cx">     virtual bool isRenderMathMLScripts() const override final { return true; }
</span><span class="cx">     virtual const char* renderName() const override { return &quot;RenderMathMLScripts&quot;; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGContainercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -93,10 +93,10 @@
</span><span class="cx">     SVGResourcesCache::clientWasAddedToTree(*child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderSVGContainer::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderSVGContainer::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     SVGResourcesCache::clientWillBeRemovedFromTree(child);
</span><del>-    RenderSVGModelObject::removeChild(child);
</del><ins>+    return RenderSVGModelObject::removeChild(child);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGContainerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">     virtual void layout() override;
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override final;
</span><del>-    virtual void removeChild(RenderObject&amp;) override final;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override final;
</ins><span class="cx">     virtual void addFocusRingRects(Vector&lt;IntRect&gt;&amp;, const LayoutPoint&amp; additionalOffset, const RenderLayerModelObject* paintContainer = 0) override final;
</span><span class="cx"> 
</span><span class="cx">     virtual FloatRect objectBoundingBox() const override final { return m_objectBoundingBox; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGInlinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -129,19 +129,19 @@
</span><span class="cx">         textAncestor-&gt;subtreeChildWasAdded(child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderSVGInline::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderSVGInline::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     SVGResourcesCache::clientWillBeRemovedFromTree(child);
</span><span class="cx"> 
</span><span class="cx">     auto* textAncestor = RenderSVGText::locateRenderSVGTextAncestor(*this);
</span><del>-    if (!textAncestor) {
-        RenderInline::removeChild(child);
-        return;
-    }
</del><ins>+    if (!textAncestor)
+        return RenderInline::removeChild(child);
+
</ins><span class="cx">     Vector&lt;SVGTextLayoutAttributes*, 2&gt; affectedAttributes;
</span><span class="cx">     textAncestor-&gt;subtreeChildWillBeRemoved(&amp;child, affectedAttributes);
</span><del>-    RenderInline::removeChild(child);
</del><ins>+    RenderObject* next = RenderInline::removeChild(child);
</ins><span class="cx">     textAncestor-&gt;subtreeChildWasRemoved(affectedAttributes);
</span><ins>+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGInlineh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override final;
</span><span class="cx"> 
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override final;
</span><del>-    virtual void removeChild(RenderObject&amp;) override final;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override final;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -313,10 +313,10 @@
</span><span class="cx">     SVGResourcesCache::clientWasAddedToTree(*child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderSVGRoot::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderSVGRoot::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     SVGResourcesCache::clientWillBeRemovedFromTree(child);
</span><del>-    RenderReplaced::removeChild(child);
</del><ins>+    return RenderReplaced::removeChild(child);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // RenderBox methods will expect coordinates w/o any transforms in coordinates
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGRooth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     virtual void willBeDestroyed() override;
</span><span class="cx">     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual const AffineTransform&amp; localToParentTransform() const override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -539,15 +539,16 @@
</span><span class="cx">     subtreeChildWasAdded(child);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderSVGText::removeChild(RenderObject&amp; child)
</del><ins>+RenderObject* RenderSVGText::removeChild(RenderObject&amp; child)
</ins><span class="cx"> {
</span><span class="cx">     SVGResourcesCache::clientWillBeRemovedFromTree(child);
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;SVGTextLayoutAttributes*, 2&gt; affectedAttributes;
</span><span class="cx">     FontCachePurgePreventer fontCachePurgePreventer;
</span><span class="cx">     subtreeChildWillBeRemoved(&amp;child, affectedAttributes);
</span><del>-    RenderSVGBlock::removeChild(child);
</del><ins>+    RenderObject* next = RenderSVGBlock::removeChild(child);
</ins><span class="cx">     subtreeChildWasRemoved(affectedAttributes);
</span><ins>+    return next;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Fix for &lt;rdar://problem/8048875&gt;. We should not render :first-line CSS Style
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGTexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (169384 => 169385)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h        2014-05-27 16:30:50 UTC (rev 169384)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h        2014-05-27 16:36:09 UTC (rev 169385)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&amp;, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const override;
</span><span class="cx">     virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&amp;) const override;
</span><span class="cx">     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
</span><del>-    virtual void removeChild(RenderObject&amp;) override;
</del><ins>+    virtual RenderObject* removeChild(RenderObject&amp;) override;
</ins><span class="cx">     virtual void willBeDestroyed() override;
</span><span class="cx"> 
</span><span class="cx">     virtual const AffineTransform&amp; localToParentTransform() const { return m_localTransform; }
</span></span></pre>
</div>
</div>

</body>
</html>