<!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>[180095] branches/safari-600.5-branch</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/180095">180095</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2015-02-13 19:55:38 -0800 (Fri, 13 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>
Source/WebCore: Merge <a href="http://trac.webkit.org/projects/webkit/changeset/173806">r173806</a>. &lt;rdar://problem/19830405&gt;

    2014-09-22  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;

    [CSS Regions] Assertion failure and null dereference crash when using animations and regions
    https://bugs.webkit.org/show_bug.cgi?id=136918

    Reviewed by Andrei Bucur.

    In some situations, for instance when an image has an attached animation, the style change caused by the animation
    triggers a geometry update for the backing store associated with the image's layer. This may occur before
    the layout for the image has finished.

    Moreover, if the image in such situation - having a composited layer - is displayed in a region,
    sicne the layout did not finish yet, the mappings between the layers of the elements collected in the named flow
    and the regions associated with the named flow are not updated and cannot be used.

    Therefore in those situations, we have to bail out early and use these mappings only after the layout has finished.

    This patch also changes RenderLayerBacking method updateAfterDescendents -&gt; updateAfterDescendants.

    Test: fast/regions/animated-image-in-region.html

    * rendering/RenderFlowThread.cpp:
    (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
    * rendering/RenderLayer.cpp:
    (WebCore::RenderLayer::calculateClipRects):
    * rendering/RenderLayerBacking.cpp:
    (WebCore::RenderLayerBacking::updateAfterDescendants):
    * rendering/RenderLayerBacking.h:
    * rendering/RenderLayerCompositor.cpp:
    (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
    (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
    (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):

LayoutTests:        Merge <a href="http://trac.webkit.org/projects/webkit/changeset/173806">r173806</a>. &lt;rdar://problem/19830405&gt;

    2014-09-22  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;

    [CSS Regions] Assertion failure and null dereference crash when using animations and regions
    https://bugs.webkit.org/show_bug.cgi?id=136918

    Reviewed by Andrei Bucur.

    * fast/regions/animated-image-in-region-expected.txt: Added.
    * fast/regions/animated-image-in-region.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari6005branchLayoutTestsChangeLog">branches/safari-600.5-branch/LayoutTests/ChangeLog</a></li>
<li><a href="#branchessafari6005branchSourceWebCoreChangeLog">branches/safari-600.5-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari6005branchSourceWebCorerenderingRenderFlowThreadcpp">branches/safari-600.5-branch/Source/WebCore/rendering/RenderFlowThread.cpp</a></li>
<li><a href="#branchessafari6005branchSourceWebCorerenderingRenderLayercpp">branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#branchessafari6005branchSourceWebCorerenderingRenderLayerBackingcpp">branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#branchessafari6005branchSourceWebCorerenderingRenderLayerBackingh">branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
<li><a href="#branchessafari6005branchSourceWebCorerenderingRenderLayerCompositorcpp">branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari6005branchLayoutTestsfastregionsanimatedimageinregionexpectedtxt">branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region-expected.txt</a></li>
<li><a href="#branchessafari6005branchLayoutTestsfastregionsanimatedimageinregionhtml">branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari6005branchLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/LayoutTests/ChangeLog (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/LayoutTests/ChangeLog        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/LayoutTests/ChangeLog        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2015-02-12  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+       Merge r173806. &lt;rdar://problem/19830405&gt;
+
+    2014-09-22  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;
+
+            [CSS Regions] Assertion failure and null dereference crash when using animations and regions
+            https://bugs.webkit.org/show_bug.cgi?id=136918
+
+            Reviewed by Andrei Bucur.
+
+            * fast/regions/animated-image-in-region-expected.txt: Added.
+            * fast/regions/animated-image-in-region.html: Added.
+
</ins><span class="cx"> 2015-02-12  Matthew Hanson  &lt;matthew_hanson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge r179883. rdar://problem/19790645
</span></span></pre></div>
<a id="branchessafari6005branchLayoutTestsfastregionsanimatedimageinregionexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region-expected.txt (0 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region-expected.txt                                (rev 0)
+++ branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region-expected.txt        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test that an animated image displayed in a region is correctly animated.
+
+On success, you should see an image of an iPad displayed inside a black border box and no crash.
+
+PASS
+
+
</ins></span></pre></div>
<a id="branchessafari6005branchLayoutTestsfastregionsanimatedimageinregionhtml"></a>
<div class="addfile"><h4>Added: branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region.html (0 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region.html                                (rev 0)
+++ branches/safari-600.5-branch/LayoutTests/fast/regions/animated-image-in-region.html        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+
+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;style&gt;
+            .region {
+                -webkit-flow-from: flow;
+                width: 320px;
+                height: 320px;
+                border: 5px solid black;
+            }
+
+            #img {
+                -webkit-flow-into: flow;
+                width: 300px;
+                height: 300px;
+            }
+
+            .spin {
+                -webkit-animation-name: spin;
+                -webkit-animation-duration: 0.1s;
+                -webkit-animation-timing-function: linear;
+            }
+
+            @-webkit-keyframes spin {
+                from { -webkit-transform: rotateZ(0deg);}
+                to   { -webkit-transform: rotateZ(360deg); }
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+
+    &lt;body&gt;
+        &lt;p&gt;Test that an animated image displayed in a region is correctly animated.&lt;/p&gt;
+        &lt;p&gt;On success, you should see an image of an iPad displayed inside a black border box and no crash.&lt;/p&gt;
+        &lt;p&gt;PASS&lt;/p&gt;
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+        &lt;img id=&quot;img&quot; class=&quot;spin&quot; src=&quot;resources/ipad.jpg&quot; /&gt;
+        &lt;script&gt;
+            if (window.testRunner)
+                window.testRunner.dumpAsText();
+        &lt;/script&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchessafari6005branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/ChangeLog (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/ChangeLog        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/ChangeLog        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2015-02-12  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        Merge r173806. &lt;rdar://problem/19830405&gt;
+
+    2014-09-22  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;
+
+            [CSS Regions] Assertion failure and null dereference crash when using animations and regions
+            https://bugs.webkit.org/show_bug.cgi?id=136918
+
+            Reviewed by Andrei Bucur.
+
+            In some situations, for instance when an image has an attached animation, the style change caused by the animation
+            triggers a geometry update for the backing store associated with the image's layer. This may occur before
+            the layout for the image has finished.
+
+            Moreover, if the image in such situation - having a composited layer - is displayed in a region,
+            sicne the layout did not finish yet, the mappings between the layers of the elements collected in the named flow
+            and the regions associated with the named flow are not updated and cannot be used.
+
+            Therefore in those situations, we have to bail out early and use these mappings only after the layout has finished.
+
+            This patch also changes RenderLayerBacking method updateAfterDescendents -&gt; updateAfterDescendants.
+
+            Test: fast/regions/animated-image-in-region.html
+
+            * rendering/RenderFlowThread.cpp:
+            (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
+            * rendering/RenderLayer.cpp:
+            (WebCore::RenderLayer::calculateClipRects):
+            * rendering/RenderLayerBacking.cpp:
+            (WebCore::RenderLayerBacking::updateAfterDescendants):
+            * rendering/RenderLayerBacking.h:
+            * rendering/RenderLayerCompositor.cpp:
+            (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
+            (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
+            (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
+
</ins><span class="cx"> 2015-02-12  Babak Shafiei  &lt;bshafiei@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge r180028.
</span></span></pre></div>
<a id="branchessafari6005branchSourceWebCorerenderingRenderFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/rendering/RenderFlowThread.cpp (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/rendering/RenderFlowThread.cpp        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/rendering/RenderFlowThread.cpp        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -251,7 +251,12 @@
</span><span class="cx"> 
</span><span class="cx"> RenderNamedFlowFragment* RenderFlowThread::cachedRegionForCompositedLayer(RenderLayer&amp; childLayer) const
</span><span class="cx"> {
</span><del>-    ASSERT(m_layerToRegionMap);
</del><ins>+    if (!m_layerToRegionMap) {
+        ASSERT(needsLayout());
+        ASSERT(m_layersToRegionMappingsDirty);
+        return nullptr;
+    }
+
</ins><span class="cx">     RenderNamedFlowFragment* namedFlowFragment = m_layerToRegionMap-&gt;get(&amp;childLayer);
</span><span class="cx">     ASSERT(!namedFlowFragment || m_regionList.contains(namedFlowFragment));
</span><span class="cx">     return namedFlowFragment;
</span></span></pre></div>
<a id="branchessafari6005branchSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayer.cpp (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayer.cpp        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayer.cpp        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -6520,7 +6520,7 @@
</span><span class="cx">     else if (isComposited()) {
</span><span class="cx">         // FIXME: updating geometry here is potentially harmful, because layout is not up-to-date.
</span><span class="cx">         backing()-&gt;updateGeometry();
</span><del>-        backing()-&gt;updateAfterDescendents();
</del><ins>+        backing()-&gt;updateAfterDescendants();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (oldStyle) {
</span></span></pre></div>
<a id="branchessafari6005branchSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.cpp (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.cpp        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -965,7 +965,7 @@
</span><span class="cx">     compositor().updateScrollCoordinatedStatus(m_owningLayer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderLayerBacking::updateAfterDescendents()
</del><ins>+void RenderLayerBacking::updateAfterDescendants()
</ins><span class="cx"> {
</span><span class="cx">     bool isSimpleContainer = false;
</span><span class="cx">     if (!m_owningLayer.isRootLayer()) {
</span></span></pre></div>
<a id="branchessafari6005branchSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.h (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.h        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerBacking.h        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     void updateGeometry();
</span><span class="cx"> 
</span><span class="cx">     // Update state the requires that descendant layers have been updated.
</span><del>-    void updateAfterDescendents();
</del><ins>+    void updateAfterDescendants();
</ins><span class="cx"> 
</span><span class="cx">     // Update contents and clipping structure.
</span><span class="cx">     void updateDrawsContent();
</span></span></pre></div>
<a id="branchessafari6005branchSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp (180094 => 180095)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-02-14 01:25:07 UTC (rev 180094)
+++ branches/safari-600.5-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-02-14 03:55:38 UTC (rev 180095)
</span><span class="lines">@@ -1539,7 +1539,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     if (RenderLayerBacking* layerBacking = layer.backing())
</span><del>-        layerBacking-&gt;updateAfterDescendents();
</del><ins>+        layerBacking-&gt;updateAfterDescendants();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderLayerCompositor::rebuildRegionCompositingLayerTree(RenderNamedFlowFragment* region, Vector&lt;GraphicsLayer*&gt;&amp; childList, int depth)
</span><span class="lines">@@ -1776,7 +1776,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (RenderLayerBacking* layerBacking = layer.backing())
</span><del>-        layerBacking-&gt;updateAfterDescendents();
</del><ins>+        layerBacking-&gt;updateAfterDescendants();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Recurs down the RenderLayer tree until its finds the compositing descendants of compositingAncestor and updates their geometry.
</span><span class="lines">@@ -1793,7 +1793,7 @@
</span><span class="cx"> 
</span><span class="cx">             layerBacking-&gt;updateGeometry();
</span><span class="cx">             if (compositedChildrenOnly) {
</span><del>-                layerBacking-&gt;updateAfterDescendents();
</del><ins>+                layerBacking-&gt;updateAfterDescendants();
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -1833,7 +1833,7 @@
</span><span class="cx">     
</span><span class="cx">     if (&amp;layer != &amp;compositingAncestor) {
</span><span class="cx">         if (RenderLayerBacking* layerBacking = layer.backing())
</span><del>-            layerBacking-&gt;updateAfterDescendents();
</del><ins>+            layerBacking-&gt;updateAfterDescendants();
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>