<!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>[198560] 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/198560">198560</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2016-03-22 15:15:45 -0700 (Tue, 22 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[RTL Scrollbars] Position: absolute divs are covered by vertical scrollbar
https://bugs.webkit.org/show_bug.cgi?id=155533

Reviewed by Darin Adler.

Source/WebCore:

This patch changes the behavior of position: absolute elements when their
containing block has overflow: scroll in RTL scrollbar mode. Previously, we
were only adjusting the overflow calculation for such elements (but not
their position calculation). This patch updates the position calculation,
which automatically makes the overflow calculation work propertly, so the
old calculation is no longer necessary.

This patch also updates iframes to appropriately move their dirty rects
and their painting CTM by the scrollbar width when traversing frame
boundaries. This fixes all our existing RTL scrollbar RTL tests.

The RTL scrollbar tests are only marked as passing on certain OSes, so these
tests are transitioning from failing to passing in that other repository.

Test: fast/scrolling/rtl-scrollbars-positioning.html
      fast/scrolling/rtl-scrollbars-overflow-elementFromPoint.html
      fast/scrolling/rtl-scrollbars-overflow-position-absolute.html
      fast/scrolling/rtl-scrollbars-iframe-offset.html
      fast/scrolling/rtl-scrollbars-iframe-position-absolute.html
      fast/scrolling/rtl-scrollbars-iframe-scrolled.html
      fast/scrolling/rtl-scrollbars-iframe.html

* platform/ScrollView.cpp:
(WebCore::ScrollView::paint):
(WebCore::ScrollView::locationOfContents):
* platform/ScrollView.h:
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::repaintLayerDirtyRects):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::addOverflowFromPositionedObjects):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::computePositionedLogicalWidth):
* rendering/RenderView.cpp:
(WebCore::RenderView::repaintViewRectangle):

LayoutTests:

* TestExpectations:
* fast/scrolling/rtl-scrollbars-positioning-expected.html: Added.
* fast/scrolling/rtl-scrollbars-positioning.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollViewcpp">trunk/Source/WebCore/platform/ScrollView.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollViewh">trunk/Source/WebCore/platform/ScrollView.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderViewcpp">trunk/Source/WebCore/rendering/RenderView.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastscrollingrtlscrollbarspositioningexpectedhtml">trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastscrollingrtlscrollbarspositioninghtml">trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/LayoutTests/ChangeLog        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-03-22  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [RTL Scrollbars] Position: absolute divs are covered by vertical scrollbar
+        https://bugs.webkit.org/show_bug.cgi?id=155533
+
+        Reviewed by Darin Adler.
+
+        * TestExpectations:
+        * fast/scrolling/rtl-scrollbars-positioning-expected.html: Added.
+        * fast/scrolling/rtl-scrollbars-positioning.html: Added.
+
</ins><span class="cx"> 2016-03-22  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Marking inspector/console/console-api.html as flaky on Mac
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/LayoutTests/TestExpectations        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -1013,3 +1013,4 @@
</span><span class="cx"> fast/scrolling/rtl-scrollbars-iframe-offset.html [ ImageOnlyFailure ]
</span><span class="cx"> fast/scrolling/rtl-scrollbars-elementFromPoint-static.html [ Failure ]
</span><span class="cx"> fast/scrolling/rtl-scrollbars-iframe-scrolled.html [ ImageOnlyFailure ]
</span><ins>+fast/scrolling/rtl-scrollbars-positioning.html [ ImageOnlyFailure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingrtlscrollbarspositioningexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning-expected.html (0 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning-expected.html        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+&lt;!DOCTYPE html&gt;&lt;!-- webkit-test-runner [ rtlScrollbars=true ] --&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+div {
+    font: 20px Ahem;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body style=&quot;margin: 0px;&quot;&gt;
+&lt;div style=&quot;position: absolute; left: 40px; top: 8px; width: 600px; font: 16px Times;&quot;&gt;This test makes sure that static and absolutely positioned divs work correctly with main frame scrolling, overflow: scroll, and iframes. The test passes if you see 7 equally sized and equally spaced black boxes (20px x 20px) below, stacked vertically, with 10px of vertical space between them&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 0px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 30px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 60px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 90px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 120px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 150px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 180px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 0px; width: 1px; height: 2000px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastscrollingrtlscrollbarspositioninghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning.html (0 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/rtl-scrollbars-positioning.html        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;!DOCTYPE html&gt;&lt;!-- webkit-test-runner [ rtlScrollbars=true ] --&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+div {
+    font: 20px Ahem;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body style=&quot;margin: 0px;&quot;&gt;
+&lt;div style=&quot;position: absolute; left: 40px; top: 8px; width: 600px; font: 16px Times;&quot;&gt;This test makes sure that static and absolutely positioned divs work correctly with main frame scrolling, overflow: scroll, and iframes. The test passes if you see 7 equally sized and equally spaced black boxes (20px x 20px) below, stacked vertically, with 10px of vertical space between them&lt;/div&gt;
+&lt;div&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 30px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: fixed; left: 0px; top: 60px;&quot;&gt;m&lt;/div&gt;
+&lt;div style=&quot;position: absolute; left: -15px; top: 90px; width: 200px; height: 60px; overflow-y: scroll&quot;&gt;
+    &lt;div&gt;m&lt;/div&gt;
+    &lt;div style=&quot;position: absolute; left: 0px; top: 30px;&quot;&gt;m&lt;/div&gt;
+    &lt;div style=&quot;position: absolute; left: 0px; top: 0px; width: 1px; height: 2000px;&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;iframe style=&quot;position: absolute; left: -15px; top: 150px; width: 200px; height: 100px; border: 0px solid black;&quot; srcdoc=&quot;&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+div {
+    font: 20px Ahem;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body style='margin: 0px;'&gt;
+&lt;div&gt;m&lt;/div&gt;
+&lt;div style='position: absolute; left: 0px; top: 30px;'&gt;m&lt;/div&gt;
+&lt;div style='position: absolute; left: 0px; top: 0px; width: 1px; height: 2000px;'&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;&quot;&gt;&lt;/iframe&gt;
+&lt;div style=&quot;position: absolute; left: 0px; top: 0px; width: 1px; height: 2000px;&quot;&gt;&lt;/div&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 (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/ChangeLog        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -1,3 +1,45 @@
</span><ins>+2016-03-22  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [RTL Scrollbars] Position: absolute divs are covered by vertical scrollbar
+        https://bugs.webkit.org/show_bug.cgi?id=155533
+
+        Reviewed by Darin Adler.
+
+        This patch changes the behavior of position: absolute elements when their
+        containing block has overflow: scroll in RTL scrollbar mode. Previously, we
+        were only adjusting the overflow calculation for such elements (but not
+        their position calculation). This patch updates the position calculation,
+        which automatically makes the overflow calculation work propertly, so the
+        old calculation is no longer necessary.
+
+        This patch also updates iframes to appropriately move their dirty rects
+        and their painting CTM by the scrollbar width when traversing frame
+        boundaries. This fixes all our existing RTL scrollbar RTL tests.
+
+        The RTL scrollbar tests are only marked as passing on certain OSes, so these
+        tests are transitioning from failing to passing in that other repository.
+
+        Test: fast/scrolling/rtl-scrollbars-positioning.html
+              fast/scrolling/rtl-scrollbars-overflow-elementFromPoint.html
+              fast/scrolling/rtl-scrollbars-overflow-position-absolute.html
+              fast/scrolling/rtl-scrollbars-iframe-offset.html
+              fast/scrolling/rtl-scrollbars-iframe-position-absolute.html
+              fast/scrolling/rtl-scrollbars-iframe-scrolled.html
+              fast/scrolling/rtl-scrollbars-iframe.html
+
+        * platform/ScrollView.cpp:
+        (WebCore::ScrollView::paint):
+        (WebCore::ScrollView::locationOfContents):
+        * platform/ScrollView.h:
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::repaintLayerDirtyRects):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::addOverflowFromPositionedObjects):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::computePositionedLogicalWidth):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::repaintViewRectangle):
+
</ins><span class="cx"> 2016-03-22  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Non-const DocumentRuleSets::features() does not check default style version
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollView.cpp (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollView.cpp        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/platform/ScrollView.cpp        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -1222,15 +1222,16 @@
</span><span class="cx"> 
</span><span class="cx">     IntRect documentDirtyRect = rect;
</span><span class="cx">     if (!paintsEntireContents()) {
</span><del>-        IntRect visibleAreaWithoutScrollbars(location(), visibleContentRect(LegacyIOSDocumentVisibleRect).size());
</del><ins>+        IntRect visibleAreaWithoutScrollbars(locationOfContents(), visibleContentRect(LegacyIOSDocumentVisibleRect).size());
</ins><span class="cx">         documentDirtyRect.intersect(visibleAreaWithoutScrollbars);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!documentDirtyRect.isEmpty()) {
</span><span class="cx">         GraphicsContextStateSaver stateSaver(context);
</span><span class="cx"> 
</span><del>-        context.translate(x(), y());
-        documentDirtyRect.moveBy(-location());
</del><ins>+        IntPoint locationOfContents = this-&gt;locationOfContents();
+        context.translate(locationOfContents.x(), locationOfContents.y());
+        documentDirtyRect.moveBy(-locationOfContents);
</ins><span class="cx"> 
</span><span class="cx">         if (!paintsEntireContents()) {
</span><span class="cx">             context.translate(-scrollX(), -scrollY());
</span><span class="lines">@@ -1498,6 +1499,14 @@
</span><span class="cx">         m_verticalScrollbar-&gt;styleChanged();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+IntPoint ScrollView::locationOfContents() const
+{
+    IntPoint result = location();
+    if (verticalScrollbarIsOnLeft() &amp;&amp; m_verticalScrollbar)
+        result.move(m_verticalScrollbar-&gt;occupiedWidth(), 0);
+    return result;
+}
+
</ins><span class="cx"> #if !PLATFORM(COCOA)
</span><span class="cx"> 
</span><span class="cx"> void ScrollView::platformAddChild(Widget*)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollView.h (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollView.h        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/platform/ScrollView.h        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -73,6 +73,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void notifyPageThatContentAreaWillPaint() const;
</span><span class="cx"> 
</span><ins>+    IntPoint locationOfContents() const;
+
</ins><span class="cx">     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
</span><span class="cx">     virtual void scrollTo(const ScrollPosition&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -2675,11 +2675,8 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (!m_dirtyRects.size())
-        return;
-
-    for (size_t i = 0; i &lt; m_dirtyRects.size(); ++i)
-        m_layer-&gt;setNeedsDisplayInRect(m_dirtyRects[i]);
</del><ins>+    for (auto&amp; dirtyRect : m_dirtyRects)
+        m_layer-&gt;setNeedsDisplayInRect(dirtyRect);
</ins><span class="cx">     
</span><span class="cx">     m_dirtyRects.clear();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -1063,12 +1063,8 @@
</span><span class="cx">         RenderBox* positionedObject = *it;
</span><span class="cx">         
</span><span class="cx">         // Fixed positioned elements don't contribute to layout overflow, since they don't scroll with the content.
</span><del>-        if (positionedObject-&gt;style().position() != FixedPosition) {
-            LayoutUnit x = positionedObject-&gt;x();
-            if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
-                x += (style().isLeftToRightDirection() ? 1 : -1) * verticalScrollbarWidth();
-            addOverflowFromChild(positionedObject, LayoutSize(x, positionedObject-&gt;y()));
-        }
</del><ins>+        if (positionedObject-&gt;style().position() != FixedPosition)
+            addOverflowFromChild(positionedObject, { positionedObject-&gt;x(), positionedObject-&gt;y() });
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -3522,6 +3522,11 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     computedValues.m_extent += bordersPlusPadding;
</span><ins>+    if (is&lt;RenderBox&gt;(*containerBlock)) {
+        auto&amp; containingBox = downcast&lt;RenderBox&gt;(*containerBlock);
+        if (containingBox.layer() &amp;&amp; containingBox.layer()-&gt;verticalScrollbarIsOnLeft())
+            computedValues.m_position += containingBox.verticalScrollbarWidth();
+    }
</ins><span class="cx">     
</span><span class="cx">     // Adjust logicalLeft if we need to for the flipped version of our writing mode in regions.
</span><span class="cx">     // FIXME: Add support for other types of objects as containerBlock, not only RenderBlock.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderView.cpp (198559 => 198560)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderView.cpp        2016-03-22 22:14:38 UTC (rev 198559)
+++ trunk/Source/WebCore/rendering/RenderView.cpp        2016-03-22 22:15:45 UTC (rev 198560)
</span><span class="lines">@@ -635,6 +635,16 @@
</span><span class="cx"> #endif
</span><span class="cx">         adjustedRect.moveBy(-viewRect.location());
</span><span class="cx">         adjustedRect.moveBy(ownerBox-&gt;contentBoxRect().location());
</span><ins>+
+        // A dirty rect in an iframe is relative to the contents of that iframe.
+        // When we traverse between parent frames and child frames, we need to make sure
+        // that the coordinate system is mapped appropriately between the iframe's contents
+        // and the Renderer that contains the iframe. This transformation must account for a
+        // left scrollbar (if one exists).
+        FrameView&amp; frameView = this-&gt;frameView();
+        if (frameView.verticalScrollbarIsOnLeft() &amp;&amp; frameView.verticalScrollbar())
+            adjustedRect.move(LayoutSize(frameView.verticalScrollbar()-&gt;occupiedWidth(), 0));
+
</ins><span class="cx">         ownerBox-&gt;repaintRectangle(adjustedRect);
</span><span class="cx">         return;
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>