<!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>[160014] 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/160014">160014</a></dd>
<dt>Author</dt> <dd>stavila@adobe.com</dd>
<dt>Date</dt> <dd>2013-12-03 10:28:54 -0800 (Tue, 03 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>The overflow border of a relatively positioned element inside a region is not painted
https://bugs.webkit.org/show_bug.cgi?id=124919

Source/WebCore:

Relative positioned elements have self-painting layers that don't propagate the visual overflow
so the layer's position should be used when determining the clipping rectangle for box decorations.

Reviewed by Mihnea Ovidenie.

Test: fast/regions/relative-borders-overflow.html

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

LayoutTests:

Added new tests for correct painting of the borders of a relatively positioned element inside a region.

Reviewed by Mihnea Ovidenie.

* fast/regions/relative-borders-overflow-expected.html: Added.
* fast/regions/relative-borders-overflow.html: Added.
* fast/regions/relative-in-absolute-borders-overflow-expected.html: Added.
* fast/regions/relative-in-absolute-borders-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="#trunkLayoutTestsfastregionsrelativebordersoverflowexpectedhtml">trunk/LayoutTests/fast/regions/relative-borders-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsrelativebordersoverflowhtml">trunk/LayoutTests/fast/regions/relative-borders-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsrelativeinabsolutebordersoverflowexpectedhtml">trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsrelativeinabsolutebordersoverflowhtml">trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (160013 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2013-12-03 18:09:28 UTC (rev 160013)
+++ trunk/LayoutTests/ChangeLog        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2013-12-03  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        The overflow border of a relatively positioned element inside a region is not painted
+        https://bugs.webkit.org/show_bug.cgi?id=124919
+
+        Added new tests for correct painting of the borders of a relatively positioned element inside a region.
+
+        Reviewed by Mihnea Ovidenie.
+
+        * fast/regions/relative-borders-overflow-expected.html: Added.
+        * fast/regions/relative-borders-overflow.html: Added.
+        * fast/regions/relative-in-absolute-borders-overflow-expected.html: Added.
+        * fast/regions/relative-in-absolute-borders-overflow.html: Added.
+
</ins><span class="cx"> 2013-12-03  Chris Fleizach  &lt;cfleizach@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: aria-hidden=false does not work as expected
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsrelativebordersoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/relative-borders-overflow-expected.html (0 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/relative-borders-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/relative-borders-overflow-expected.html        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        border: 1px solid brown;
+        width: 180px;
+        height: 140px;
+    }
+
+    #article {
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;p&gt;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;article&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="trunkLayoutTestsfastregionsrelativebordersoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/relative-borders-overflow.html (0 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/relative-borders-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/relative-borders-overflow.html        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        -webkit-flow-from: flow2;
+        border: 1px solid brown;
+        width: 180px;
+        height: 140px;
+    }
+
+    #article {
+        -webkit-flow-into: flow2;
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;p&gt;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;article&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="trunkLayoutTestsfastregionsrelativeinabsolutebordersoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow-expected.html (0 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow-expected.html        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        border: 1px solid brown;
+        width: 190px;
+        height: 150px;
+    }
+
+    #article {
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #abs {
+        border: 2px solid magenta;
+        position: absolute;
+        top: 66px;
+        left: 24px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;p&gt;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;abs&quot;&gt;
+            &lt;div id=&quot;article&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="trunkLayoutTestsfastregionsrelativeinabsolutebordersoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow.html (0 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/relative-in-absolute-borders-overflow.html        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;style&gt;
+    #regionFlow {
+        -webkit-flow-from: flow2;
+        border: 1px solid brown;
+        width: 180px;
+        height: 140px;
+        padding: 5px;
+    }
+
+    #article {
+        border: 2px solid green;
+        width: 210px;
+        height: 150px;
+        position: relative;
+        left: 30px;
+        top: 20px;
+        padding: 3px;
+    }
+
+    #abs {
+        -webkit-flow-into: flow2;
+        border: 2px solid magenta;
+        position: absolute;
+        top: 10px;
+        left: 10px;
+    }
+&lt;/style&gt;
+
+&lt;body&gt;
+    &lt;p&gt;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;abs&quot;&gt;
+        &lt;div id=&quot;article&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="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (160013 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2013-12-03 18:09:28 UTC (rev 160013)
+++ trunk/Source/WebCore/ChangeLog        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2013-12-03  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        The overflow border of a relatively positioned element inside a region is not painted
+        https://bugs.webkit.org/show_bug.cgi?id=124919
+
+        Relative positioned elements have self-painting layers that don't propagate the visual overflow
+        so the layer's position should be used when determining the clipping rectangle for box decorations.
+
+        Reviewed by Mihnea Ovidenie.
+
+        Test: fast/regions/relative-borders-overflow.html
+
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
+
</ins><span class="cx"> 2013-12-03  Seokju Kwon  &lt;seokju@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Get rid of 'hasFrontend()' in InspectorController and WorkerInspectorController
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (160013 => 160014)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2013-12-03 18:09:28 UTC (rev 160013)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2013-12-03 18:28:54 UTC (rev 160014)
</span><span class="lines">@@ -1282,26 +1282,33 @@
</span><span class="cx">         else
</span><span class="cx">             visualOverflowRect.moveBy(LayoutPoint(width(), 0));
</span><span class="cx">     }
</span><del>-    
-    const RenderBox* iterBox = &amp;box;
-    while (iterBox &amp;&amp; iterBox != this) {
-        RenderBlock* containerBlock = iterBox-&gt;containingBlock();
-        
-        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 (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();
+
+            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());
+            }
+
+            if (containerBlock-&gt;style().writingMode() != iterBox-&gt;style().writingMode())
+                iterBox-&gt;flipForWritingMode(currentBoxRect);
+
+            visualOverflowRect.moveBy(currentBoxRect.location());
+            iterBox = containerBlock;
</ins><span class="cx">         }
</span><del>-        
-        if (containerBlock-&gt;style().writingMode() != iterBox-&gt;style().writingMode())
-            iterBox-&gt;flipForWritingMode(currentBoxRect);
-        
-        visualOverflowRect.moveBy(currentBoxRect.location());
-        iterBox = containerBlock;
</del><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     return visualOverflowRect;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>