<!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>[203409] 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/203409">203409</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2016-07-19 09:10:40 -0700 (Tue, 19 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Bubbles appear split for a brief moment in Messages
https://bugs.webkit.org/show_bug.cgi?id=159915
rdar://problem/27182267

Reviewed by David Hyatt.

Source/WebCore:

RenderView::repaintRootContents() had a long-standing bug in WebView when the
view is scrolled. repaint() uses visualOverflowRect() but, for the
RenderView, the visualOverflowRect() is the initial containing block
which is anchored at 0,0. When the view is scrolled it's clipped out and
calls to repaintRootContents() have no effect.

Change repaintRootContents() to use layoutOverflowRect(). ScrollView::repaintContentRectangle()
will clip it to the view if necessary.

Test: fast/repaint/scrolled-view-full-repaint.html

* rendering/RenderView.cpp:
(WebCore::RenderView::repaintRootContents):

LayoutTests:

* fast/repaint/scrolled-view-full-repaint-expected.txt: Added.
* fast/repaint/scrolled-view-full-repaint.html: Added.
* platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt: Added.
* platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt: 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="#trunkSourceWebCorerenderingRenderViewcpp">trunk/Source/WebCore/rendering/RenderView.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastrepaintscrolledviewfullrepaintexpectedtxt">trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastrepaintscrolledviewfullrepainthtml">trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint.html</a></li>
<li>trunk/LayoutTests/platform/ios-simulator-wk1/fast/repaint/</li>
<li><a href="#trunkLayoutTestsplatformiossimulatorwk1fastrepaintscrolledviewfullrepaintexpectedtxt">trunk/LayoutTests/platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt</a></li>
<li>trunk/LayoutTests/platform/mac-wk1/fast/repaint/</li>
<li><a href="#trunkLayoutTestsplatformmacwk1fastrepaintscrolledviewfullrepaintexpectedtxt">trunk/LayoutTests/platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203408 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-19 16:08:56 UTC (rev 203408)
+++ trunk/LayoutTests/ChangeLog        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-07-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Bubbles appear split for a brief moment in Messages
+        https://bugs.webkit.org/show_bug.cgi?id=159915
+        rdar://problem/27182267
+
+        Reviewed by David Hyatt.
+
+        * fast/repaint/scrolled-view-full-repaint-expected.txt: Added.
+        * fast/repaint/scrolled-view-full-repaint.html: Added.
+        * platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt: Added.
+        * platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt: Added.
+
</ins><span class="cx"> 2016-07-19  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Release WK2] LayoutTest imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm failing
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintscrolledviewfullrepaintexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint-expected.txt (0 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint-expected.txt        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+In WebKit1 there should be a repaint at 0,-500.
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastrepaintscrolledviewfullrepainthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint.html (0 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint.html                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/scrolled-view-full-repaint.html        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        body {
+            height: 2000px;
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+        if (window.testRunner) {
+            testRunner.waitUntilDone();
+            testRunner.dumpAsText();
+        }
+
+        function doTest()
+        {
+            window.scrollTo(0, 500);
+            
+            window.setTimeout(function() {
+                window.internals.startTrackingRepaints();
+
+                window.resizeBy(0, 10);
+                var repaintRects = window.internals.repaintRectsAsText();
+                window.internals.stopTrackingRepaints();
+
+                document.getElementById('repaints').textContent = repaintRects;
+
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            }, 0);
+        }
+        
+        window.addEventListener('load', doTest, false);
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;p&gt;In WebKit1 there should be a repaint at 0,-500.&lt;/p&gt;
+    &lt;div id=&quot;repaints&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorwk1fastrepaintscrolledviewfullrepaintexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt (0 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/ios-simulator-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+In WebKit1 there should be a repaint at 0,-500.
+
+(repaint rects (rect 0 0 304 20) (rect 0 0 320 2024) )
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1fastrepaintscrolledviewfullrepaintexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt (0 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac-wk1/fast/repaint/scrolled-view-full-repaint-expected.txt        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+In WebKit1 there should be a repaint at 0,-500.
+
+(repaint rects (rect 0 -500 785 2024) )
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203408 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-19 16:08:56 UTC (rev 203408)
+++ trunk/Source/WebCore/ChangeLog        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-07-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Bubbles appear split for a brief moment in Messages
+        https://bugs.webkit.org/show_bug.cgi?id=159915
+        rdar://problem/27182267
+
+        Reviewed by David Hyatt.
+
+        RenderView::repaintRootContents() had a long-standing bug in WebView when the
+        view is scrolled. repaint() uses visualOverflowRect() but, for the 
+        RenderView, the visualOverflowRect() is the initial containing block
+        which is anchored at 0,0. When the view is scrolled it's clipped out and
+        calls to repaintRootContents() have no effect.
+        
+        Change repaintRootContents() to use layoutOverflowRect(). ScrollView::repaintContentRectangle()
+        will clip it to the view if necessary.
+
+        Test: fast/repaint/scrolled-view-full-repaint.html
+
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::repaintRootContents):
+
</ins><span class="cx"> 2016-07-19  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         &lt;rdar://problem/27420308&gt; WebCore-7602.1.42 fails to build: error: unused parameter 'vm'
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderView.cpp (203408 => 203409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderView.cpp        2016-07-19 16:08:56 UTC (rev 203408)
+++ trunk/Source/WebCore/rendering/RenderView.cpp        2016-07-19 16:10:40 UTC (rev 203409)
</span><span class="lines">@@ -613,7 +613,11 @@
</span><span class="cx">         layer()-&gt;setBackingNeedsRepaint(GraphicsLayer::DoNotClipToLayer);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    repaint();
</del><ins>+
+    // Always use layoutOverflowRect() to fix rdar://problem/27182267.
+    // This should be cleaned up via webkit.org/b/159913 and webkit.org/b/159914.
+    RenderLayerModelObject* repaintContainer = containerForRepaint();
+    repaintUsingContainer(repaintContainer, computeRectForRepaint(layoutOverflowRect(), repaintContainer));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderView::repaintViewRectangle(const LayoutRect&amp; repaintRect) const
</span></span></pre>
</div>
</div>

</body>
</html>