<!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>[160721] 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/160721">160721</a></dd>
<dt>Author</dt> <dd>stavila@adobe.com</dd>
<dt>Date</dt> <dd>2013-12-17 12:13:53 -0800 (Tue, 17 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CSS Regions] Positioned elements in regions get clipped if they fall outside the region
https://bugs.webkit.org/show_bug.cgi?id=117120

Reviewed by Mihnea Ovidenie.

Source/WebCore:

Fixed the computing of the box decorations clip rect when having statically positioned
elements inside positioned elements. The existing algorithm computed the rect in a loop
running up the containing block chain and only checked for positioned elements before
starting the loop. If a positioned elements was found in the middle of a loop (as would
be the case with a positioned element parenting a non-positioned element), it was not
correctly handled.
Also changed it so the clip is only performed in the fragmentation direction as that was
the original purpose of this method.

Tests: fast/regions/absolute-in-relative-overflow.html
       fast/regions/static-in-relative-overflow.html
       fast/regions/sticky-border-overflow.html

* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

LayoutTests:

Added tests for the correct painting of the borders of differently positioned elements overflowing regions.

* fast/regions/absolute-in-relative-overflow-expected.html: Added.
* fast/regions/absolute-in-relative-overflow.html: Added.
* fast/regions/static-in-relative-overflow-expected.html: Added.
* fast/regions/static-in-relative-overflow.html: Added.
* fast/regions/sticky-border-overflow-expected.html: Added.
* fast/regions/sticky-border-overflow.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="#trunkSourceWebCorerenderingRenderFlowThreadcpp">trunk/Source/WebCore/rendering/RenderFlowThread.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastregionsabsoluteinrelativeoverflowexpectedhtml">trunk/LayoutTests/fast/regions/absolute-in-relative-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsabsoluteinrelativeoverflowhtml">trunk/LayoutTests/fast/regions/absolute-in-relative-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsstaticinrelativeoverflowexpectedhtml">trunk/LayoutTests/fast/regions/static-in-relative-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsstaticinrelativeoverflowhtml">trunk/LayoutTests/fast/regions/static-in-relative-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsstickyborderoverflowexpectedhtml">trunk/LayoutTests/fast/regions/sticky-border-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsstickyborderoverflowhtml">trunk/LayoutTests/fast/regions/sticky-border-overflow.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (160720 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2013-12-17 20:11:56 UTC (rev 160720)
+++ trunk/LayoutTests/ChangeLog        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2013-12-17  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSS Regions] Positioned elements in regions get clipped if they fall outside the region
+        https://bugs.webkit.org/show_bug.cgi?id=117120
+
+        Reviewed by Mihnea Ovidenie.
+
+        Added tests for the correct painting of the borders of differently positioned elements overflowing regions.
+
+        * fast/regions/absolute-in-relative-overflow-expected.html: Added.
+        * fast/regions/absolute-in-relative-overflow.html: Added.
+        * fast/regions/static-in-relative-overflow-expected.html: Added.
+        * fast/regions/static-in-relative-overflow.html: Added.
+        * fast/regions/sticky-border-overflow-expected.html: Added.
+        * fast/regions/sticky-border-overflow.html: Added.
+
</ins><span class="cx"> 2013-12-17  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r160717.
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsabsoluteinrelativeoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/absolute-in-relative-overflow-expected.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/absolute-in-relative-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/absolute-in-relative-overflow-expected.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #rel {
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #abs {
+        border: 1px solid magenta;
+        position: absolute;
+        width: 250px;
+        top: 50px;
+        left: 30px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for absolute-positioned elements inside relative-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;
+        &lt;div id=&quot;rel&quot;&gt;
+            &lt;div id=&quot;abs&quot;&gt;
+                Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+            &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsabsoluteinrelativeoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/absolute-in-relative-overflow.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/absolute-in-relative-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/absolute-in-relative-overflow.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        -webkit-flow-from: flow2;
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #rel {
+        -webkit-flow-into: flow2;
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #abs {
+        border: 1px solid magenta;
+        position: absolute;
+        width: 250px;
+        top: 50px;
+        left: 30px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for absolute-positioned elements inside relative-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;&lt;/div&gt;
+
+    &lt;div id=&quot;rel&quot;&gt;
+        &lt;div id=&quot;abs&quot;&gt;
+            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsstaticinrelativeoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/static-in-relative-overflow-expected.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/static-in-relative-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/static-in-relative-overflow-expected.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #rel {
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #static {
+        border: 1px solid magenta;
+        width: 250px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for static-positioned elements inside relative-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;
+        &lt;div id=&quot;rel&quot;&gt;
+            &lt;div id=&quot;static&quot;&gt;
+                Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+            &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsstaticinrelativeoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/static-in-relative-overflow.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/static-in-relative-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/static-in-relative-overflow.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        -webkit-flow-from: flow2;
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #rel {
+        -webkit-flow-into: flow2;
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #static {
+        border: 1px solid magenta;
+        width: 250px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for static-positioned elements inside relative-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;&lt;/div&gt;
+
+    &lt;div id=&quot;rel&quot;&gt;
+        &lt;div id=&quot;static&quot;&gt;
+            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsstickyborderoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/sticky-border-overflow-expected.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/sticky-border-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/sticky-border-overflow-expected.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,29 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #sticky {
+        border: 1px solid magenta;
+        position: -webkit-sticky;
+        width: 250px;
+        top: 50px;
+        margin: 50px;
+        padding: 5px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for sticky-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;
+        &lt;div id=&quot;sticky&quot;&gt;
+            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsstickyborderoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/sticky-border-overflow.html (0 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/sticky-border-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/sticky-border-overflow.html        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        -webkit-flow-from: flow2;
+        border: 4px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #sticky {
+        -webkit-flow-into: flow2;
+        border: 1px solid magenta;
+        position: -webkit-sticky;
+        width: 250px;
+        top: 50px;
+        margin: 50px;
+        padding: 5px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=117120&quot;&gt;[CSS Regions] Positioned elements in regions get clipped if they fall outside the region&lt;/a&gt;
+    &lt;p&gt;This tests that overflowing borders are properly painted for sticky-positioned elements. The test passes if all borders are completely visible and the text &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt; is visible&lt;/p&gt;
+    &lt;div id=&quot;regionFlow&quot;&gt;&lt;/div&gt;
+
+    &lt;div id=&quot;sticky&quot;&gt;
+        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. &lt;span style=&quot;color:brown&quot;&gt;&lt;b&gt;THE END&lt;/b&gt;&lt;/span&gt;.
+    &lt;/div&gt;
+&lt;/body&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 (160720 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2013-12-17 20:11:56 UTC (rev 160720)
+++ trunk/Source/WebCore/ChangeLog        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2013-12-17  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSS Regions] Positioned elements in regions get clipped if they fall outside the region
+        https://bugs.webkit.org/show_bug.cgi?id=117120
+
+        Reviewed by Mihnea Ovidenie.
+
+        Fixed the computing of the box decorations clip rect when having statically positioned
+        elements inside positioned elements. The existing algorithm computed the rect in a loop
+        running up the containing block chain and only checked for positioned elements before 
+        starting the loop. If a positioned elements was found in the middle of a loop (as would
+        be the case with a positioned element parenting a non-positioned element), it was not 
+        correctly handled.
+        Also changed it so the clip is only performed in the fragmentation direction as that was 
+        the original purpose of this method.
+
+        Tests: fast/regions/absolute-in-relative-overflow.html
+               fast/regions/static-in-relative-overflow.html
+               fast/regions/sticky-border-overflow.html
+
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
+
</ins><span class="cx"> 2013-12-17  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r160717.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (160720 => 160721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2013-12-17 20:11:56 UTC (rev 160720)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2013-12-17 20:13:53 UTC (rev 160721)
</span><span class="lines">@@ -1266,7 +1266,8 @@
</span><span class="cx"> LayoutRect RenderFlowThread::decorationsClipRectForBoxInRegion(const RenderBox&amp; box, RenderRegion&amp; region) const
</span><span class="cx"> {
</span><span class="cx">     LayoutRect visualOverflowRect = region.visualOverflowRectForBox(&amp;box);
</span><del>-    
</del><ins>+    LayoutUnit initialLogicalX = style().isHorizontalWritingMode() ? visualOverflowRect.x() : visualOverflowRect.y();
+
</ins><span class="cx">     // The visual overflow rect returned by visualOverflowRectForBox is already flipped but the
</span><span class="cx">     // RenderRegion::rectFlowPortionForBox method expects it unflipped.
</span><span class="cx">     flipForWritingModeLocalCoordinates(visualOverflowRect);
</span><span class="lines">@@ -1283,32 +1284,52 @@
</span><span class="cx">             visualOverflowRect.moveBy(LayoutPoint(width(), 0));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // FIXME: This doesn't work properly with flipped writing modes.
-    // https://bugs.webkit.org/show_bug.cgi?id=125149
-    if (box.isRelPositioned()) {
-        // For relative-positioned elements, just use the layer's location.
-        visualOverflowRect.moveBy(box.layer()-&gt;absoluteBoundingBox().location());
-    } else {
-        const RenderBox* iterBox = &amp;box;
-        while (iterBox &amp;&amp; iterBox != this) {
-            RenderBlock* containerBlock = iterBox-&gt;containingBlock();
</del><ins>+    const RenderBox* iterBox = &amp;box;
+    while (iterBox &amp;&amp; iterBox != this) {
+        RenderBlock* containerBlock = iterBox-&gt;containingBlock();
</ins><span class="cx"> 
</span><del>-            LayoutRect currentBoxRect = iterBox-&gt;frameRect();
-            if (iterBox-&gt;style().isFlippedBlocksWritingMode()) {
-                if (iterBox-&gt;style().isHorizontalWritingMode())
-                    currentBoxRect.setY(currentBoxRect.height() - currentBoxRect.maxY());
-                else
-                    currentBoxRect.setX(currentBoxRect.width() - currentBoxRect.maxX());
-            }
</del><ins>+        // FIXME: This doesn't work properly with flipped writing modes.
+        // https://bugs.webkit.org/show_bug.cgi?id=125149
+        if (iterBox-&gt;isPositioned()) {
+            // For positioned elements, just use the layer's absolute bounding box.
+            visualOverflowRect.moveBy(iterBox-&gt;layer()-&gt;absoluteBoundingBox().location());
+            break;
+        }
</ins><span class="cx"> 
</span><del>-            if (containerBlock-&gt;style().writingMode() != iterBox-&gt;style().writingMode())
-                iterBox-&gt;flipForWritingMode(currentBoxRect);
</del><ins>+        LayoutRect currentBoxRect = iterBox-&gt;frameRect();
+        if (iterBox-&gt;style().isFlippedBlocksWritingMode()) {
+            if (iterBox-&gt;style().isHorizontalWritingMode())
+                currentBoxRect.setY(currentBoxRect.height() - currentBoxRect.maxY());
+            else
+                currentBoxRect.setX(currentBoxRect.width() - currentBoxRect.maxX());
+        }
</ins><span class="cx"> 
</span><del>-            visualOverflowRect.moveBy(currentBoxRect.location());
-            iterBox = containerBlock;
-        }
</del><ins>+        if (containerBlock-&gt;style().writingMode() != iterBox-&gt;style().writingMode())
+            iterBox-&gt;flipForWritingMode(currentBoxRect);
+
+        visualOverflowRect.moveBy(currentBoxRect.location());
+        iterBox = containerBlock;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // Since the purpose of this method is to make sure the borders of a fragmented
+    // element don't overflow the region in the fragmentation direction, there's no
+    // point in restricting the clipping rect on the logical X axis. 
+    // This also saves us the trouble of handling percent-based widths and margins
+    // since the absolute bounding box of a positioned element would not contain
+    // the correct coordinates relative to the region we're interested in, but rather
+    // relative to the actual flow thread.
+    if (style().isHorizontalWritingMode()) {
+        if (initialLogicalX &lt; visualOverflowRect.x())
+            visualOverflowRect.shiftXEdgeTo(initialLogicalX);
+        if (visualOverflowRect.width() &lt; frameRect().width())
+            visualOverflowRect.setWidth(frameRect().width());
+    } else {
+        if (initialLogicalX &lt; visualOverflowRect.y())
+            visualOverflowRect.shiftYEdgeTo(initialLogicalX);
+        if (visualOverflowRect.height() &lt; frameRect().height())
+            visualOverflowRect.setHeight(frameRect().height());
+    }
+
</ins><span class="cx">     return visualOverflowRect;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>