<!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>[187947] releases/WebKitGTK/webkit-2.8</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/187947">187947</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-08-05 01:08:33 -0700 (Wed, 05 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/187502">r187502</a> - ASSERTION FAILED: !currBox-&gt;needsLayout() loading bing maps (and apple.com/music and nytimes)
https://bugs.webkit.org/show_bug.cgi?id=93891

Reviewed by Simon Fraser.

Source/WebCore:

Added new tests in fast/dynamic.

Change tracking of positioned objects to always insert objects that need a layout in the
end of the ListHashMap for RenderViews. This ensures that dependencies between nested
positioned objects that both need a layout by the RenderView are resolved in the correct order.

Don't cache the end object when walking the ListHashMap to do layouts of positioned objects,
since that list is getting updated dynamically as earlier objects can mark and insert new
objects into the list during their layouts.

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::layoutPositionedObject):
(WebCore::RenderBlock::layoutPositionedObjects):
(WebCore::RenderBlock::insertIntoTrackedRendererMaps):
(WebCore::RenderBlock::insertPositionedObject):
(WebCore::RenderBlock::removePositionedObject):
* rendering/RenderBlock.h:

LayoutTests:

* fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt: Added.
* fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorerenderingRenderBlockcpp">releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit28SourceWebCorerenderingRenderBlockh">releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastdynamicpositionfixedtoabsolutewithpositionedchildcrashexpectedtxt">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit28LayoutTestsfastdynamicpositionfixedtoabsolutewithpositionedchildcrashhtml">releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit28LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (187946 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-08-05 07:51:54 UTC (rev 187946)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2015-07-27  David Hyatt  &lt;hyatt@apple.com&gt;
+
+        ASSERTION FAILED: !currBox-&gt;needsLayout() loading bing maps (and apple.com/music and nytimes)
+        https://bugs.webkit.org/show_bug.cgi?id=93891
+
+        Reviewed by Simon Fraser.
+
+        * fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt: Added.
+        * fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html: Added.
+
</ins><span class="cx"> 2015-07-22  Jinyoung Hur  &lt;hur.ims@navercorp.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WinCairo] SVG path not rendered with all-zero dasharray
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastdynamicpositionfixedtoabsolutewithpositionedchildcrashexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt (0 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+This tests that changing the container's position from fixed to absolute is safe, when child container with fixed position is present.
+PASS, if no crash or assert in debug.
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit28LayoutTestsfastdynamicpositionfixedtoabsolutewithpositionedchildcrashhtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html (0 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+&lt;html&gt;
+&lt;body&gt;
+    &lt;div id=&quot;toabsolute&quot; style=&quot;position: fixed;&quot;&gt;
+        &lt;div style=&quot;position: fixed;&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;p id=&quot;foo&quot;&gt;
+        This tests that changing the container's position from fixed to absolute is safe, when
+        child container with fixed position is present.&lt;br&gt;
+        PASS, if no crash or assert in debug.
+    &lt;/p&gt;
+    &lt;script&gt;
+        if (window.testRunner)
+            testRunner.dumpAsText();
+         var m = document.getElementById(&quot;foo&quot;);
+         var c = document.getElementById(&quot;toabsolute&quot;);
+         
+         c.offsetHeight;
+         c.style.position = &quot;absolute&quot;;
+         c.style.width = m.offsetWidth + &quot;px&quot;;
+         c.offsetHeight;
+     &lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (187946 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-08-05 07:51:54 UTC (rev 187946)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2015-07-27  David Hyatt  &lt;hyatt@apple.com&gt;
+
+        ASSERTION FAILED: !currBox-&gt;needsLayout() loading bing maps (and apple.com/music and nytimes)
+        https://bugs.webkit.org/show_bug.cgi?id=93891
+
+        Reviewed by Simon Fraser.
+
+        Added new tests in fast/dynamic.
+
+        Change tracking of positioned objects to always insert objects that need a layout in the
+        end of the ListHashMap for RenderViews. This ensures that dependencies between nested
+        positioned objects that both need a layout by the RenderView are resolved in the correct order.
+
+        Don't cache the end object when walking the ListHashMap to do layouts of positioned objects,
+        since that list is getting updated dynamically as earlier objects can mark and insert new
+        objects into the list during their layouts.
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::layoutPositionedObject):
+        (WebCore::RenderBlock::layoutPositionedObjects):
+        (WebCore::RenderBlock::insertIntoTrackedRendererMaps):
+        (WebCore::RenderBlock::insertPositionedObject):
+        (WebCore::RenderBlock::removePositionedObject):
+        * rendering/RenderBlock.h:
+
</ins><span class="cx"> 2015-07-28  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Use fastMalloc instead of g_slice
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.cpp (187946 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.cpp        2015-08-05 07:51:54 UTC (rev 187946)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.cpp        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -1293,71 +1293,75 @@
</span><span class="cx">     return margin;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly)
</del><ins>+void RenderBlock::layoutPositionedObject(RenderBox&amp; r, bool relayoutChildren, bool fixedPositionObjectsOnly)
</ins><span class="cx"> {
</span><del>-    TrackedRendererListHashSet* positionedDescendants = positionedObjects();
-    if (!positionedDescendants)
</del><ins>+    estimateRegionRangeForBoxChild(r);
+
+    // A fixed position element with an absolute positioned ancestor has no way of knowing if the latter has changed position. So
+    // if this is a fixed position element, mark it for layout if it has an abspos ancestor and needs to move with that ancestor, i.e. 
+    // it has static position.
+    markFixedPositionObjectForLayoutIfNeeded(r);
+    if (fixedPositionObjectsOnly) {
+        r.layoutIfNeeded();
</ins><span class="cx">         return;
</span><ins>+    }
</ins><span class="cx"> 
</span><del>-    for (auto it = positionedDescendants-&gt;begin(), end = positionedDescendants-&gt;end(); it != end; ++it) {
-        RenderBox&amp; r = **it;
</del><ins>+    // When a non-positioned block element moves, it may have positioned children that are implicitly positioned relative to the
+    // non-positioned block.  Rather than trying to detect all of these movement cases, we just always lay out positioned
+    // objects that are positioned implicitly like this.  Such objects are rare, and so in typical DHTML menu usage (where everything is
+    // positioned explicitly) this should not incur a performance penalty.
+    if (relayoutChildren || (r.style().hasStaticBlockPosition(isHorizontalWritingMode()) &amp;&amp; r.parent() != this))
+        r.setChildNeedsLayout(MarkOnlyThis);
</ins><span class="cx">         
</span><del>-        estimateRegionRangeForBoxChild(r);
</del><ins>+    // If relayoutChildren is set and the child has percentage padding or an embedded content box, we also need to invalidate the childs pref widths.
+    if (relayoutChildren &amp;&amp; r.needsPreferredWidthsRecalculation())
+        r.setPreferredLogicalWidthsDirty(true, MarkOnlyThis);
+    
+    r.markForPaginationRelayoutIfNeeded();
+    
+    // We don't have to do a full layout.  We just have to update our position. Try that first. If we have shrink-to-fit width
+    // and we hit the available width constraint, the layoutIfNeeded() will catch it and do a full layout.
+    if (r.needsPositionedMovementLayoutOnly() &amp;&amp; r.tryLayoutDoingPositionedMovementOnly())
+        r.clearNeedsLayout();
+        
+    // If we are paginated or in a line grid, compute a vertical position for our object now.
+    // If it's wrong we'll lay out again.
+    LayoutUnit oldLogicalTop = 0;
+    bool needsBlockDirectionLocationSetBeforeLayout = r.needsLayout() &amp;&amp; view().layoutState()-&gt;needsBlockDirectionLocationSetBeforeLayout();
+    if (needsBlockDirectionLocationSetBeforeLayout) {
+        if (isHorizontalWritingMode() == r.isHorizontalWritingMode())
+            r.updateLogicalHeight();
+        else
+            r.updateLogicalWidth();
+        oldLogicalTop = logicalTopForChild(r);
+    }
</ins><span class="cx"> 
</span><del>-        // A fixed position element with an absolute positioned ancestor has no way of knowing if the latter has changed position. So
-        // if this is a fixed position element, mark it for layout if it has an abspos ancestor and needs to move with that ancestor, i.e. 
-        // it has static position.
-        markFixedPositionObjectForLayoutIfNeeded(r);
-        if (fixedPositionObjectsOnly) {
-            r.layoutIfNeeded();
-            continue;
-        }
</del><ins>+    r.layoutIfNeeded();
</ins><span class="cx"> 
</span><del>-        // When a non-positioned block element moves, it may have positioned children that are implicitly positioned relative to the
-        // non-positioned block.  Rather than trying to detect all of these movement cases, we just always lay out positioned
-        // objects that are positioned implicitly like this.  Such objects are rare, and so in typical DHTML menu usage (where everything is
-        // positioned explicitly) this should not incur a performance penalty.
-        if (relayoutChildren || (r.style().hasStaticBlockPosition(isHorizontalWritingMode()) &amp;&amp; r.parent() != this))
-            r.setChildNeedsLayout(MarkOnlyThis);
-            
-        // If relayoutChildren is set and the child has percentage padding or an embedded content box, we also need to invalidate the childs pref widths.
-        if (relayoutChildren &amp;&amp; r.needsPreferredWidthsRecalculation())
-            r.setPreferredLogicalWidthsDirty(true, MarkOnlyThis);
-        
-        r.markForPaginationRelayoutIfNeeded();
-        
-        // We don't have to do a full layout.  We just have to update our position. Try that first. If we have shrink-to-fit width
-        // and we hit the available width constraint, the layoutIfNeeded() will catch it and do a full layout.
-        if (r.needsPositionedMovementLayoutOnly() &amp;&amp; r.tryLayoutDoingPositionedMovementOnly())
-            r.clearNeedsLayout();
-            
-        // If we are paginated or in a line grid, go ahead and compute a vertical position for our object now.
-        // If it's wrong we'll lay out again.
-        LayoutUnit oldLogicalTop = 0;
-        bool needsBlockDirectionLocationSetBeforeLayout = r.needsLayout() &amp;&amp; view().layoutState()-&gt;needsBlockDirectionLocationSetBeforeLayout();
-        if (needsBlockDirectionLocationSetBeforeLayout) {
-            if (isHorizontalWritingMode() == r.isHorizontalWritingMode())
-                r.updateLogicalHeight();
-            else
-                r.updateLogicalWidth();
-            oldLogicalTop = logicalTopForChild(r);
-        }
</del><ins>+    // Lay out again if our estimate was wrong.
+    if (needsBlockDirectionLocationSetBeforeLayout &amp;&amp; logicalTopForChild(r) != oldLogicalTop) {
+        r.setChildNeedsLayout(MarkOnlyThis);
+        r.layoutIfNeeded();
+    }
</ins><span class="cx"> 
</span><ins>+    if (updateRegionRangeForBoxChild(r)) {
+        r.setNeedsLayout(MarkOnlyThis);
</ins><span class="cx">         r.layoutIfNeeded();
</span><del>-
-        // Lay out again if our estimate was wrong.
-        if (needsBlockDirectionLocationSetBeforeLayout &amp;&amp; logicalTopForChild(r) != oldLogicalTop) {
-            r.setChildNeedsLayout(MarkOnlyThis);
-            r.layoutIfNeeded();
-        }
-
-        if (updateRegionRangeForBoxChild(r)) {
-            r.setNeedsLayout(MarkOnlyThis);
-            r.layoutIfNeeded();
-        }
</del><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly)
+{
+    TrackedRendererListHashSet* positionedDescendants = positionedObjects();
+    if (!positionedDescendants)
+        return;
+    
+    // Do not cache positionedDescendants-&gt;end() in a local variable, since |positionedDescendants| can be mutated
+    // as it is walked. We always need to fetch the new end() value dynamically.
+    for (auto it = positionedDescendants-&gt;begin(); it != positionedDescendants-&gt;end(); ++it)
+        layoutPositionedObject(**it, relayoutChildren, fixedPositionObjectsOnly);
+}
+
</ins><span class="cx"> void RenderBlock::markPositionedObjectsForLayout()
</span><span class="cx"> {
</span><span class="cx">     TrackedRendererListHashSet* positionedDescendants = positionedObjects();
</span><span class="lines">@@ -2087,7 +2091,7 @@
</span><span class="cx">     return beforeBlock;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBlock::insertIntoTrackedRendererMaps(RenderBox&amp; descendant, TrackedDescendantsMap*&amp; descendantsMap, TrackedContainerMap*&amp; containerMap)
</del><ins>+void RenderBlock::insertIntoTrackedRendererMaps(RenderBox&amp; descendant, TrackedDescendantsMap*&amp; descendantsMap, TrackedContainerMap*&amp; containerMap, bool forceNewEntry)
</ins><span class="cx"> {
</span><span class="cx">     if (!descendantsMap) {
</span><span class="cx">         descendantsMap = new TrackedDescendantsMap;
</span><span class="lines">@@ -2099,6 +2103,12 @@
</span><span class="cx">         descendantSet = new TrackedRendererListHashSet;
</span><span class="cx">         descendantsMap-&gt;set(this, std::unique_ptr&lt;TrackedRendererListHashSet&gt;(descendantSet));
</span><span class="cx">     }
</span><ins>+    
+    if (forceNewEntry) {
+        descendantSet-&gt;remove(&amp;descendant);
+        containerMap-&gt;remove(&amp;descendant);
+    }
+    
</ins><span class="cx">     bool added = descendantSet-&gt;add(&amp;descendant).isNewEntry;
</span><span class="cx">     if (!added) {
</span><span class="cx">         ASSERT(containerMap-&gt;get(&amp;descendant));
</span><span class="lines">@@ -2110,7 +2120,7 @@
</span><span class="cx">     if (!containerSet) {
</span><span class="cx">         containerSet = new HashSet&lt;RenderBlock*&gt;;
</span><span class="cx">         containerMap-&gt;set(&amp;descendant, std::unique_ptr&lt;HashSet&lt;RenderBlock*&gt;&gt;(containerSet));
</span><del>-    }
</del><ins>+    }    
</ins><span class="cx">     ASSERT(!containerSet-&gt;contains(this));
</span><span class="cx">     containerSet-&gt;add(this);
</span><span class="cx"> }
</span><span class="lines">@@ -2158,7 +2168,7 @@
</span><span class="cx">     if (o.isRenderFlowThread())
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    insertIntoTrackedRendererMaps(o, gPositionedDescendantsMap, gPositionedContainerMap);
</del><ins>+    insertIntoTrackedRendererMaps(o, gPositionedDescendantsMap, gPositionedContainerMap, isRenderView());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderBlock::removePositionedObject(RenderBox&amp; o)
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit28SourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.h (187946 => 187947)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.h        2015-08-05 07:51:54 UTC (rev 187946)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/RenderBlock.h        2015-08-05 08:08:33 UTC (rev 187947)
</span><span class="lines">@@ -318,6 +318,8 @@
</span><span class="cx">     virtual void layout() override;
</span><span class="cx"> 
</span><span class="cx">     void layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly = false);
</span><ins>+    void layoutPositionedObject(RenderBox&amp;, bool relayoutChildren, bool fixedPositionObjectsOnly);
+    
</ins><span class="cx">     void markFixedPositionObjectForLayoutIfNeeded(RenderObject&amp; child);
</span><span class="cx"> 
</span><span class="cx">     LayoutUnit marginIntrinsicLogicalWidthForChild(RenderBox&amp;) const;
</span><span class="lines">@@ -417,7 +419,7 @@
</span><span class="cx">     // FIXME-BLOCKFLOW: Remove virtualizaion when all callers have moved to RenderBlockFlow
</span><span class="cx">     virtual bool hasLines() const { return false; }
</span><span class="cx"> 
</span><del>-    void insertIntoTrackedRendererMaps(RenderBox&amp; descendant, TrackedDescendantsMap*&amp;, TrackedContainerMap*&amp;);
</del><ins>+    void insertIntoTrackedRendererMaps(RenderBox&amp; descendant, TrackedDescendantsMap*&amp;, TrackedContainerMap*&amp;, bool forceNewEntry = false);
</ins><span class="cx">     static void removeFromTrackedRendererMaps(RenderBox&amp; descendant, TrackedDescendantsMap*&amp;, TrackedContainerMap*&amp;);
</span><span class="cx"> 
</span><span class="cx">     void createFirstLetterRenderer(RenderElement* firstLetterBlock, RenderText* currentTextChild);
</span></span></pre>
</div>
</div>

</body>
</html>