<!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>[167489] 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/167489">167489</a></dd>
<dt>Author</dt> <dd>stavila@adobe.com</dd>
<dt>Date</dt> <dd>2014-04-18 06:07:48 -0700 (Fri, 18 Apr 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CSSRegions] Incorrect background paint on positioned element hover
https://bugs.webkit.org/show_bug.cgi?id=131617

Reviewed by Andrei Bucur.

Source/WebCore:
When computing the repaint rect for absolute elements flowed into regions, the Y location of the
region within the flow thread must no longer be added to the repaint rect's location because absolute
positioned elements get pushed down through the regions by their absolute top. So adding the region's
position in the flow thread and then adding the element's absolute top would cause us to add
something twice.

Tests: fast/regions/repaint/repaint-absolute-pushed-to-next-region.html

* rendering/RenderBox.cpp:
(WebCore::RenderBox::computeRectForRepaint):

LayoutTests:
Added test for the proper repainting of absolute positioned elements in regions when the
absolute top of the elements causes it to be pushed to the next region.

* fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt: Added.
* fast/regions/repaint/repaint-absolute-pushed-to-next-region.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="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastregionsrepaintrepaintabsolutepushedtonextregionexpectedtxt">trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastregionsrepaintrepaintabsolutepushedtonextregionhtml">trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (167488 => 167489)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-18 12:34:03 UTC (rev 167488)
+++ trunk/LayoutTests/ChangeLog        2014-04-18 13:07:48 UTC (rev 167489)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-04-18  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSSRegions] Incorrect background paint on positioned element hover
+        https://bugs.webkit.org/show_bug.cgi?id=131617
+
+        Reviewed by Andrei Bucur.
+
+        Added test for the proper repainting of absolute positioned elements in regions when the
+        absolute top of the elements causes it to be pushed to the next region.
+
+        * fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt: Added.
+        * fast/regions/repaint/repaint-absolute-pushed-to-next-region.html: Added.
+
</ins><span class="cx"> 2014-04-18  Philippe Normand  &lt;pnormand@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove NETWORK_INFO support
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsrepaintrepaintabsolutepushedtonextregionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt (0 => 167489)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region-expected.txt        2014-04-18 13:07:48 UTC (rev 167489)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Bug 131617 - [CSSRegions] Incorrect background paint on positioned element hover
+When hovering the blue div, it should turn green
+
+(repaint rects
+  (rect 105 205 100 300)
+  (rect 305 105 100 300)
+  (rect 105 205 100 300)
+  (rect 305 105 100 300)
+  (rect 105 205 100 300)
+  (rect 305 105 100 300)
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregionsrepaintrepaintabsolutepushedtonextregionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region.html (0 => 167489)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/repaint/repaint-absolute-pushed-to-next-region.html        2014-04-18 13:07:48 UTC (rev 167489)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;script src=&quot;../../repaint/resources/text-based-repaint.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+
+        &lt;style&gt;
+            #cn {
+                -webkit-flow-into: flow;
+            }
+            #region {
+                -webkit-flow-from: flow;
+                position: absolute;
+                top: 100px;
+                left: 100px;
+                width: 100px;
+                height: 100px;
+                border: 5px solid green;
+            }
+            #region2 {
+                -webkit-flow-from: flow;
+                position: absolute;
+                top: 100px;
+                left: 300px;
+                width: 100px;
+                height: 100px;
+                border: 5px solid green;
+            }
+            #inner {
+                position: absolute;
+                top: 100px;
+                left: 0px; 
+                width: 100px;
+                height: 300px;
+                background-color: blue;
+            }
+            #inner:hover { background-color: lime; }
+        &lt;/style&gt;
+    &lt;/head&gt;
+
+    &lt;body onload=&quot;runRepaintTest();&quot;&gt;
+        &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=131617&quot;&gt;Bug 131617 - [CSSRegions] Incorrect background paint on positioned element hover&lt;/a&gt;
+        &lt;p&gt;When hovering the blue div, it should turn green&lt;/p&gt;
+
+        &lt;div id=&quot;cn&quot;&gt;
+            &lt;div id=&quot;inner&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;region&quot;&gt;&lt;/div&gt;
+        &lt;div id=&quot;region2&quot;&gt;&lt;/div&gt;
+
+        &lt;script type=&quot;text/javascript&quot;&gt;
+            function repaintTest() 
+            {
+                if(!window.testRunner)
+                    return;
+
+                var element = document.getElementById(&quot;inner&quot;);
+                var left = element.offsetLeft;
+                var top = element.offsetTop;
+
+                eventSender.mouseMoveTo(left + 10, top + 10);
+            }
+        &lt;/script&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167488 => 167489)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-18 12:34:03 UTC (rev 167488)
+++ trunk/Source/WebCore/ChangeLog        2014-04-18 13:07:48 UTC (rev 167489)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-04-18  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSSRegions] Incorrect background paint on positioned element hover
+        https://bugs.webkit.org/show_bug.cgi?id=131617
+
+        Reviewed by Andrei Bucur.
+
+        When computing the repaint rect for absolute elements flowed into regions, the Y location of the
+        region within the flow thread must no longer be added to the repaint rect's location because absolute
+        positioned elements get pushed down through the regions by their absolute top. So adding the region's
+        position in the flow thread and then adding the element's absolute top would cause us to add
+        something twice.
+
+        Tests: fast/regions/repaint/repaint-absolute-pushed-to-next-region.html
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::computeRectForRepaint):
+
</ins><span class="cx"> 2014-04-18  Philippe Normand  &lt;pnormand@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove NETWORK_INFO support
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (167488 => 167489)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-18 12:34:03 UTC (rev 167488)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-18 13:07:48 UTC (rev 167489)
</span><span class="lines">@@ -2108,8 +2108,14 @@
</span><span class="cx">     if (!o)
</span><span class="cx">         return;
</span><span class="cx">     
</span><ins>+    EPosition position = styleToUse.position();
+
</ins><span class="cx">     // This code isn't necessary for in-flow RenderFlowThreads.
</span><del>-    if (o-&gt;isOutOfFlowRenderFlowThread()) {
</del><ins>+    // Don't add the location of the region in the flow thread for absolute positioned
+    // elements because their absolute position already pushes them down through
+    // the regions so adding this here and then adding the topLeft again would cause
+    // us to add the height twice.
+    if (o-&gt;isOutOfFlowRenderFlowThread() &amp;&amp; position != AbsolutePosition) {
</ins><span class="cx">         RenderRegion* firstRegion = nullptr;
</span><span class="cx">         RenderRegion* lastRegion = nullptr;
</span><span class="cx">         if (toRenderFlowThread(o)-&gt;getRegionRangeForBox(this, firstRegion, lastRegion))
</span><span class="lines">@@ -2122,8 +2128,6 @@
</span><span class="cx">     LayoutPoint topLeft = rect.location();
</span><span class="cx">     topLeft.move(locationOffset());
</span><span class="cx"> 
</span><del>-    EPosition position = styleToUse.position();
-
</del><span class="cx">     // We are now in our parent container's coordinate space.  Apply our transform to obtain a bounding box
</span><span class="cx">     // in the parent's coordinate space that encloses us.
</span><span class="cx">     if (hasLayer() &amp;&amp; layer()-&gt;transform()) {
</span></span></pre>
</div>
</div>

</body>
</html>