<!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>[162605] trunk</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/162605">162605</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-01-23 06:19:54 -0800 (Thu, 23 Jan 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CSS Regions] Fix positioning composited layers when the region has overflow:hidden
https://bugs.webkit.org/show_bug.cgi?id=124042

Patch by Mihai Maerean &lt;mmaerean@adobe.com&gt; on 2014-01-23
Reviewed by Mihnea Ovidenie.

Source/WebCore:

If there's a clipping GraphicsLayer on the hierarchy, substract its offset, since it's its
parent that positions us.

Tests: compositing/regions/position-layer-inside-region-overflow-hidden.html
       compositing/regions/position-layer-inside-overflow-hidden.html
       compositing/regions/position-layers-inside-region-overflow-hidden.html
       compositing/regions/position-layers-inside-regions-overflow-hidden.html

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): The position
must also be correct when the region has box-shadow that inflates the region's layer. The
composited layers from the flow thread should be rendered in the same position whether the
associated region has clipping or not.
Using the position of the clipping layer instead of the location of the clipbox makes it
also work with box-shadow that inflates the region's graphics layer.

LayoutTests:

* compositing/regions/position-layer-inside-region-overflow-hidden.html: Added.
* compositing/regions/position-layer-inside-region-overflow-hidden-expected.html: Added.
* compositing/regions/position-layer-inside-overflow-hidden.html: Added.
* compositing/regions/position-layer-inside-overflow-hidden-expected.html: Added.
* compositing/regions/position-layers-inside-region-overflow-hidden.html: Added.
* compositing/regions/position-layers-inside-region-overflow-hidden-expected.html: Added.
* compositing/regions/position-layers-inside-regions-overflow-hidden.html: Added.
* compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingregionspositionlayerinsideoverflowhiddenexpectedhtml">trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayerinsideoverflowhiddenhtml">trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayerinsideregionoverflowhiddenexpectedhtml">trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayerinsideregionoverflowhiddenhtml">trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayersinsideregionoverflowhiddenexpectedhtml">trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayersinsideregionoverflowhiddenhtml">trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayersinsideregionsoverflowhiddenexpectedhtml">trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingregionspositionlayersinsideregionsoverflowhiddenhtml">trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (162604 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-01-23 12:38:39 UTC (rev 162604)
+++ trunk/LayoutTests/ChangeLog        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2014-01-23  Mihai Maerean  &lt;mmaerean@adobe.com&gt;
+
+        [CSS Regions] Fix positioning composited layers when the region has overflow:hidden
+        https://bugs.webkit.org/show_bug.cgi?id=124042
+
+        Reviewed by Mihnea Ovidenie.
+
+        * compositing/regions/position-layer-inside-region-overflow-hidden.html: Added.
+        * compositing/regions/position-layer-inside-region-overflow-hidden-expected.html: Added.
+        * compositing/regions/position-layer-inside-overflow-hidden.html: Added.
+        * compositing/regions/position-layer-inside-overflow-hidden-expected.html: Added.
+        * compositing/regions/position-layers-inside-region-overflow-hidden.html: Added.
+        * compositing/regions/position-layers-inside-region-overflow-hidden-expected.html: Added.
+        * compositing/regions/position-layers-inside-regions-overflow-hidden.html: Added.
+        * compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html: Added.
+
</ins><span class="cx"> 2014-01-23  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed gardening.
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayerinsideoverflowhiddenexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden-expected.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden-expected.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Expected result - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 300px;
+            }
+            .region, .content, .clipping, .transformed {
+                border: solid 4px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;clipping transformed&quot;&gt;&lt;div class=&quot;transformed&quot;&gt;composited&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layer is positioned at the same location whether the overflow:hidden is set or not.&lt;/p&gt;
+        &lt;p&gt;The clipping layer is not the region itself. There are nested composited layers inside the region where the parent one is clipping.&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayerinsideoverflowhiddenhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layer-inside-overflow-hidden.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Test - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .clipping {
+                overflow: hidden;
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 300px;
+            }
+            .region, .content, .clipping, .transformed {
+                border: solid 4px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content&quot;&gt;&lt;div class=&quot;clipping transformed&quot;&gt;&lt;div class=&quot;transformed&quot;&gt;composited&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layer is positioned at the same location whether the overflow:hidden is set or not.&lt;/p&gt;
+        &lt;p&gt;The clipping layer is not the region itself. There are nested composited layers inside the region where the parent one is clipping.&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayerinsideregionoverflowhiddenexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden-expected.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden-expected.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Expected Result - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;composited&lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layer is positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayerinsideregionoverflowhiddenhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layer-inside-region-overflow-hidden.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Test - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                overflow: hidden;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;composited&lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layer is positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayersinsideregionoverflowhiddenexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden-expected.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden-expected.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Expected Result - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .transformedChild {
+                -webkit-transform: rotateY(180deg);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layers are positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayersinsideregionoverflowhiddenhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layers-inside-region-overflow-hidden.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Test - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+                overflow: hidden;
+            }
+            .transformedChild {
+                -webkit-transform: rotateY(180deg);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                overflow: hidden;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 1.&lt;/span&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;span class=&quot;content&quot;&gt;some text 2.&lt;/span&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layers are positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayersinsideregionsoverflowhiddenexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden-expected.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Expected Result - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .content:nth-child(2) {
+                -webkit-region-break-after: always;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+            }
+            .transformedChild {
+                -webkit-transform: rotateY(180deg);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            body, .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;div class=&quot;content&quot;&gt;some text 1.&lt;/div&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;content&quot;&gt;some text 2.&lt;/div&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layers are positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestscompositingregionspositionlayersinsideregionsoverflowhiddenhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden.html (0 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden.html                                (rev 0)
+++ trunk/LayoutTests/compositing/regions/position-layers-inside-regions-overflow-hidden.html        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;title&gt;Test - Bug #124042: [CSS Regions] Fix positioning composited layers when the region has overflow:hidden&lt;/title&gt;
+        &lt;style&gt;
+            html {
+                -webkit-font-smoothing: none;
+                font-size: 16px;
+            }
+            .content {
+                -webkit-flow-into: theFlow;
+            }
+            .content:nth-child(2) {
+                -webkit-region-break-after: always;
+            }
+            .transformed {
+                -webkit-transform: translateZ(1px);
+                overflow: hidden;
+            }
+            .transformedChild {
+                -webkit-transform: rotateY(180deg);
+            }
+            .region {
+                -webkit-flow-from: theFlow;
+                width: 600px;
+                height: 150px;
+                overflow: hidden;
+                box-shadow: 0px 0px 0px 10px Green;
+            }
+            body, .region, .content {
+                border: solid 5px #888;
+                padding: 5px 10px 15px 20px;
+                margin: 10px 15px 20px 25px;
+            }
+        &lt;/style&gt;
+    &lt;/head&gt;
+    &lt;body&gt;
+        &lt;div class=&quot;content&quot;&gt;some text 1.&lt;/div&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;content transformed&quot;&gt;
+            &lt;div&gt;composited&lt;/div&gt;
+            &lt;div class=&quot;transformedChild&quot;&gt;transformed child&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;content&quot;&gt;some text 2.&lt;/div&gt;
+
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;region&quot;&gt;&lt;/div&gt;
+
+        &lt;p&gt;Test passes if the composited layers are positioned at the same place (in the region with overflow:hidden) as in the region that doesn't have overflow:hidden .&lt;/p&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (162604 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-23 12:38:39 UTC (rev 162604)
+++ trunk/Source/WebCore/ChangeLog        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-01-23  Mihai Maerean  &lt;mmaerean@adobe.com&gt;
+
+        [CSS Regions] Fix positioning composited layers when the region has overflow:hidden
+        https://bugs.webkit.org/show_bug.cgi?id=124042
+
+        Reviewed by Mihnea Ovidenie.
+
+        If there's a clipping GraphicsLayer on the hierarchy, substract its offset, since it's its
+        parent that positions us.
+
+        Tests: compositing/regions/position-layer-inside-region-overflow-hidden.html
+               compositing/regions/position-layer-inside-overflow-hidden.html
+               compositing/regions/position-layers-inside-region-overflow-hidden.html
+               compositing/regions/position-layers-inside-regions-overflow-hidden.html
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): The position
+        must also be correct when the region has box-shadow that inflates the region's layer. The
+        composited layers from the flow thread should be rendered in the same position whether the
+        associated region has clipping or not.
+        Using the position of the clipping layer instead of the location of the clipbox makes it
+        also work with box-shadow that inflates the region's graphics layer.
+
</ins><span class="cx"> 2014-01-23  Andrei Bucur  &lt;abucur@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSS Regions] Convert regions iterator loops to range-based loops
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (162604 => 162605)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-01-23 12:38:39 UTC (rev 162604)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-01-23 14:19:54 UTC (rev 162605)
</span><span class="lines">@@ -985,7 +985,6 @@
</span><span class="cx"> 
</span><span class="cx">     RenderLayer* flowThreadLayer = m_owningLayer.isInsideOutOfFlowThread() ? m_owningLayer.stackingContainer() : m_owningLayer.enclosingFlowThreadAncestor();
</span><span class="cx">     if (flowThreadLayer &amp;&amp; flowThreadLayer-&gt;isRenderFlowThread()) {
</span><del>-        RenderFlowThread&amp; flowThread = toRenderFlowThread(flowThreadLayer-&gt;renderer());
</del><span class="cx">         if (m_owningLayer.isFlowThreadCollectingGraphicsLayersUnderRegions()) {
</span><span class="cx">             // The RenderNamedFlowThread is not composited, as we need it to paint the 
</span><span class="cx">             // background layer of the regions. We need to compensate for that by manually
</span><span class="lines">@@ -996,21 +995,31 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Move the ancestor position at the top of the region where the composited layer is going to display.
</span><ins>+        RenderFlowThread&amp; flowThread = toRenderFlowThread(flowThreadLayer-&gt;renderer());
</ins><span class="cx">         RenderNamedFlowFragment* parentRegion = flowThread.cachedRegionForCompositedLayer(m_owningLayer);
</span><del>-        if (parentRegion) {
-            IntPoint flowDelta;
-            m_owningLayer.convertToPixelSnappedLayerCoords(flowThreadLayer, flowDelta);
-            parentRegion-&gt;adjustRegionBoundsFromFlowThreadPortionRect(flowDelta, ancestorCompositingBounds);
-            RenderBoxModelObject&amp; layerOwner = toRenderBoxModelObject(parentRegion-&gt;layerOwner());
-            if (layerOwner.layer()-&gt;backing()) {
-                // Make sure that the region propagates its borders, paddings, outlines or box-shadows to layers inside it.
-                // Note that the composited bounds of the RenderRegion are already calculated
-                // because RenderLayerCompositor::rebuildCompositingLayerTree will only
-                // iterate on the content of the region after the region itself is computed.
-                ancestorCompositingBounds.moveBy(roundedIntPoint(layerOwner.layer()-&gt;backing()-&gt;compositedBounds().location()));
-                ancestorCompositingBounds.move(-layerOwner.borderAndPaddingStart(), -layerOwner.borderAndPaddingBefore());
-            }
-        }
</del><ins>+        if (!parentRegion)
+            return;
+
+        IntPoint flowDelta;
+        m_owningLayer.convertToPixelSnappedLayerCoords(flowThreadLayer, flowDelta);
+        parentRegion-&gt;adjustRegionBoundsFromFlowThreadPortionRect(flowDelta, ancestorCompositingBounds);
+        RenderBoxModelObject&amp; layerOwner = toRenderBoxModelObject(parentRegion-&gt;layerOwner());
+        RenderLayerBacking* layerOwnerBacking = layerOwner.layer()-&gt;backing();
+        if (!layerOwnerBacking)
+            return;
+
+        // Make sure that the region propagates its borders, paddings, outlines or box-shadows to layers inside it.
+        // Note that the composited bounds of the RenderRegion are already calculated because
+        // RenderLayerCompositor::rebuildCompositingLayerTree will only iterate on the content of the region after the
+        // region itself is computed.
+        ancestorCompositingBounds.moveBy(roundedIntPoint(layerOwnerBacking-&gt;compositedBounds().location()));
+        ancestorCompositingBounds.move(-layerOwner.borderAndPaddingStart(), -layerOwner.borderAndPaddingBefore());
+
+        // If there's a clipping GraphicsLayer on the hierarchy (region graphics layer -&gt; clipping graphics layer -&gt;
+        // composited content graphics layer), substract the offset of the clipping layer, since it's its parent
+        // that positions us (the graphics layer of the region).
+        if (layerOwnerBacking-&gt;clippingLayer())
+            ancestorCompositingBounds.moveBy(roundedIntPoint(layerOwnerBacking-&gt;clippingLayer()-&gt;position()));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>