<!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>[186712] trunk/Source</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/186712">186712</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2015-07-11 11:19:46 -0700 (Sat, 11 Jul 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS WK2] Scrolling issues on horizontally scrollable RTL pages
https://bugs.webkit.org/show_bug.cgi?id=146872
rdar://problem/7569416

Reviewed by Sam Weinig.

Horizontally scrollable RTL pages in WebKit2 had a variety of issues: they had
a gap down the right edge, and unreachable content on the left side, focussing
form fields scrolled to the wrong location, and programmatic scrolls scrolled
to the wrong place.

Fix by plumbing the WebCore notion of scrollOrigin through to the UI process,
and using it in various places. There are three main aspects to the patch:

1. scroll origin is included in RemoteLayerTreeTransaction, and plumbed through
   to -[WKWebView _scrollToContentOffset:] for correct programmatic scrolling,
Source/WebCore:

   including zooming to focussed form elements.
2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
   rather than just conjuring up a rect with a zero origin, which makes position:fixed
   work correctly.
3. _interactionViewsContainerView (which hosts tap highlights) is positioned to
   coincide with the origin of the documentRect (i.e. at the scroll origin, which
   may not be top-left). This allows tap highlights to show in the correct location.
4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
   if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
   testing area.

* platform/ios/ScrollViewIOS.mm:
(WebCore::ScrollView::unobscuredContentRect):

Source/WebKit2:

   including zooming to focused form elements. The WKContentView's boundsOrigin
   is set to the scroll origin so that the view coordinates match document coordinates.
2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
   rather than just conjuring up a rect with a zero origin, which makes position:fixed
   work correctly.
3. _interactionViewsContainerView (which hosts tap highlights) is positioned to
   coincide with the origin of the documentRect (i.e. at the scroll origin, which
   may not be top-left). This allows tap highlights to show in the correct location.
4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
   if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
   testing area.

* Shared/mac/RemoteLayerTreeTransaction.h:
(WebKit::RemoteLayerTreeTransaction::scrollOrigin):
(WebKit::RemoteLayerTreeTransaction::setScrollOrigin):
* Shared/mac/RemoteLayerTreeTransaction.mm:
(WebKit::RemoteLayerTreeTransaction::encode):
(WebKit::RemoteLayerTreeTransaction::decode):
(WebKit::RemoteLayerTreeTransaction::description): Dump some more info.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _scrollToContentOffset:scrollOrigin:]):
(-[WKWebView _scrollToContentOffset:]): Deleted.
* UIProcess/API/Cocoa/WKWebViewInternal.h:
* UIProcess/API/gtk/PageClientImpl.cpp:
(WebKit::PageClientImpl::requestScroll):
* UIProcess/API/gtk/PageClientImpl.h:
* UIProcess/CoordinatedGraphics/WebView.cpp:
(WebKit::WebView::requestScroll):
* UIProcess/CoordinatedGraphics/WebView.h:
* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestScroll):
* UIProcess/WebPageProxy.h:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::requestScroll):
(WebKit::PageClientImpl::documentRect):
(WebKit::PageClientImpl::contentsSize): Deleted.
* UIProcess/ios/WKContentView.mm:
(-[WKContentView _didCommitLayerTree:]):
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::computeCustomFixedPositionRect):
* UIProcess/mac/PageClientImpl.h:
* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::requestScroll):
* UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::willCommitLayerTree):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformiosScrollViewIOSmm">trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewInternalh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkPageClientImplcpp">trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkPageClientImplh">trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp">trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewh">trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPageClienth">trunk/Source/WebKit2/UIProcess/PageClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSh">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSmm">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWKContentViewmm">trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebPageProxyIOSmm">trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacPageClientImplh">trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacPageClientImplmm">trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxymm">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebCore/ChangeLog        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-07-10  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        [iOS WK2] Scrolling issues on horizontally scrollable RTL pages
+        https://bugs.webkit.org/show_bug.cgi?id=146872
+        rdar://problem/7569416
+
+        Reviewed by Sam Weinig.
+
+        Horizontally scrollable RTL pages in WebKit2 had a variety of issues: they had
+        a gap down the right edge, and unreachable content on the left side, focussing
+        form fields scrolled to the wrong location, and programmatic scrolls scrolled
+        to the wrong place.
+        
+        Fix by plumbing the WebCore notion of scrollOrigin through to the UI process,
+        and using it in various places. There are three main aspects to the patch:
+        
+        1. scroll origin is included in RemoteLayerTreeTransaction, and plumbed through
+           to -[WKWebView _scrollToContentOffset:] for correct programmatic scrolling,
+           including zooming to focussed form elements.
+        2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
+           rather than just conjuring up a rect with a zero origin, which makes position:fixed
+           work correctly.
+        3. _interactionViewsContainerView (which hosts tap highlights) is positioned to 
+           coincide with the origin of the documentRect (i.e. at the scroll origin, which
+           may not be top-left). This allows tap highlights to show in the correct location.
+        4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
+           if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
+           testing area.
+
+        * platform/ios/ScrollViewIOS.mm:
+        (WebCore::ScrollView::unobscuredContentRect):
+
</ins><span class="cx"> 2015-07-10  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] Diagnostic logging messages are causing too much IPC
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosScrollViewIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!m_unobscuredContentSize.isEmpty())
</span><del>-        return IntRect(IntPoint(m_scrollOffset), roundedIntSize(m_unobscuredContentSize));
</del><ins>+        return IntRect(scrollOrigin() + m_scrollOffset, roundedIntSize(m_unobscuredContentSize));
</ins><span class="cx"> 
</span><span class="cx">     return unobscuredContentRectInternal();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/ChangeLog        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -1,3 +1,71 @@
</span><ins>+2015-07-10  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        [iOS WK2] Scrolling issues on horizontally scrollable RTL pages
+        https://bugs.webkit.org/show_bug.cgi?id=146872
+        rdar://problem/7569416
+
+        Reviewed by Sam Weinig.
+
+        Horizontally scrollable RTL pages in WebKit2 had a variety of issues: they had
+        a gap down the right edge, and unreachable content on the left side, focussing
+        form fields scrolled to the wrong location, and programmatic scrolls scrolled
+        to the wrong place.
+        
+        Fix by plumbing the WebCore notion of scrollOrigin through to the UI process,
+        and using it in various places. There are three main aspects to the patch:
+        
+        1. scroll origin is included in RemoteLayerTreeTransaction, and plumbed through
+           to -[WKWebView _scrollToContentOffset:] for correct programmatic scrolling,
+           including zooming to focused form elements. The WKContentView's boundsOrigin
+           is set to the scroll origin so that the view coordinates match document coordinates.
+        2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
+           rather than just conjuring up a rect with a zero origin, which makes position:fixed
+           work correctly.
+        3. _interactionViewsContainerView (which hosts tap highlights) is positioned to 
+           coincide with the origin of the documentRect (i.e. at the scroll origin, which
+           may not be top-left). This allows tap highlights to show in the correct location.
+        4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
+           if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
+           testing area.
+
+        * Shared/mac/RemoteLayerTreeTransaction.h:
+        (WebKit::RemoteLayerTreeTransaction::scrollOrigin):
+        (WebKit::RemoteLayerTreeTransaction::setScrollOrigin):
+        * Shared/mac/RemoteLayerTreeTransaction.mm:
+        (WebKit::RemoteLayerTreeTransaction::encode):
+        (WebKit::RemoteLayerTreeTransaction::decode):
+        (WebKit::RemoteLayerTreeTransaction::description): Dump some more info.
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _scrollToContentOffset:scrollOrigin:]):
+        (-[WKWebView _scrollToContentOffset:]): Deleted.
+        * UIProcess/API/Cocoa/WKWebViewInternal.h:
+        * UIProcess/API/gtk/PageClientImpl.cpp:
+        (WebKit::PageClientImpl::requestScroll):
+        * UIProcess/API/gtk/PageClientImpl.h:
+        * UIProcess/CoordinatedGraphics/WebView.cpp:
+        (WebKit::WebView::requestScroll):
+        * UIProcess/CoordinatedGraphics/WebView.h:
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::requestScroll):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/ios/PageClientImplIOS.h:
+        * UIProcess/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::requestScroll):
+        (WebKit::PageClientImpl::documentRect):
+        (WebKit::PageClientImpl::contentsSize): Deleted.
+        * UIProcess/ios/WKContentView.mm:
+        (-[WKContentView _didCommitLayerTree:]):
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::computeCustomFixedPositionRect):
+        * UIProcess/mac/PageClientImpl.h:
+        * UIProcess/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::requestScroll):
+        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
+        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::willCommitLayerTree):
+
</ins><span class="cx"> 2015-07-10  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] Diagnostic logging messages are causing too much IPC
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -195,6 +195,9 @@
</span><span class="cx"> 
</span><span class="cx">     WebCore::IntSize contentsSize() const { return m_contentsSize; }
</span><span class="cx">     void setContentsSize(const WebCore::IntSize&amp; size) { m_contentsSize = size; };
</span><ins>+
+    WebCore::IntPoint scrollOrigin() const { return m_scrollOrigin; }
+    void setScrollOrigin(const WebCore::IntPoint&amp; origin) { m_scrollOrigin = origin; };
</ins><span class="cx">     
</span><span class="cx">     WebCore::Color pageExtendedBackgroundColor() const { return m_pageExtendedBackgroundColor; }
</span><span class="cx">     void setPageExtendedBackgroundColor(WebCore::Color color) { m_pageExtendedBackgroundColor = color; }
</span><span class="lines">@@ -242,6 +245,7 @@
</span><span class="cx">     Vector&lt;TransactionCallbackID&gt; m_callbackIDs;
</span><span class="cx"> 
</span><span class="cx">     WebCore::IntSize m_contentsSize;
</span><ins>+    WebCore::IntPoint m_scrollOrigin;
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     WebCore::IntPoint m_scrollPosition;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -516,6 +516,7 @@
</span><span class="cx">     encoder &lt;&lt; m_layerIDsWithNewlyUnreachableBackingStore;
</span><span class="cx"> 
</span><span class="cx">     encoder &lt;&lt; m_contentsSize;
</span><ins>+    encoder &lt;&lt; m_scrollOrigin;
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     encoder &lt;&lt; m_scrollPosition;
</span><span class="cx"> #endif
</span><span class="lines">@@ -581,6 +582,9 @@
</span><span class="cx">     if (!decoder.decode(result.m_contentsSize))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    if (!decoder.decode(result.m_scrollOrigin))
+        return false;
+
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     if (!decoder.decode(result.m_scrollPosition))
</span><span class="cx">         return false;
</span><span class="lines">@@ -1242,6 +1246,15 @@
</span><span class="cx"> {
</span><span class="cx">     RemoteLayerTreeTextStream ts;
</span><span class="cx"> 
</span><ins>+    ts &lt;&lt; &quot;(&quot;;
+    dumpProperty(ts, &quot;transactionID&quot;, m_transactionID);
+    dumpProperty(ts, &quot;contentsSize&quot;, m_contentsSize);
+    if (m_scrollOrigin != IntPoint::zero())
+        dumpProperty(ts, &quot;scrollOrigin&quot;, m_scrollOrigin);
+
+    if (m_pageScaleFactor != 1)
+        dumpProperty(ts, &quot;pageScaleFactor&quot;, m_pageScaleFactor);
+
</ins><span class="cx">     ts &lt;&lt; &quot;(\n&quot;;
</span><span class="cx">     ts.increaseIndent();
</span><span class="cx">     ts.writeIndent();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -1145,12 +1145,14 @@
</span><span class="cx">     return contentOffset;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)_scrollToContentOffset:(WebCore::FloatPoint)contentOffsetInPageCoordinates
</del><ins>+- (void)_scrollToContentOffset:(WebCore::FloatPoint)contentOffsetInPageCoordinates scrollOrigin:(WebCore::IntPoint)scrollOrigin
</ins><span class="cx"> {
</span><span class="cx">     if (_dynamicViewportUpdateMode != DynamicViewportUpdateMode::NotResizing)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    WebCore::FloatPoint scaledOffset = contentOffsetInPageCoordinates;
</del><ins>+    WebCore::FloatPoint contentOffsetRespectingOrigin = scrollOrigin + toFloatSize(contentOffsetInPageCoordinates);
+
+    WebCore::FloatPoint scaledOffset = contentOffsetRespectingOrigin;
</ins><span class="cx">     CGFloat zoomScale = contentZoomScale(self);
</span><span class="cx">     scaledOffset.scale(zoomScale, zoomScale);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewInternalh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (PassRefPtr&lt;WebKit::ViewSnapshot&gt;)_takeViewSnapshot;
</span><span class="cx"> 
</span><del>-- (void)_scrollToContentOffset:(WebCore::FloatPoint)contentOffset;
</del><ins>+- (void)_scrollToContentOffset:(WebCore::FloatPoint)contentOffset scrollOrigin:(WebCore::IntPoint)scrollOrigin;
</ins><span class="cx"> - (BOOL)_scrollToRect:(WebCore::FloatRect)targetRect origin:(WebCore::FloatPoint)origin minimumScrollDistance:(float)minimumScrollDistance;
</span><span class="cx"> - (void)_scrollByOffset:(WebCore::FloatPoint)offset;
</span><span class="cx"> - (void)_zoomToFocusRect:(WebCore::FloatRect)focusedElementRect selectionRect:(WebCore::FloatRect)selectionRectInDocumentCoordinates fontSize:(float)fontSize minimumScale:(double)minimumScale maximumScale:(double)maximumScale allowScaling:(BOOL)allowScaling forceScroll:(BOOL)forceScroll;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkPageClientImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     setViewNeedsDisplay(scrollRect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::requestScroll(const WebCore::FloatPoint&amp;, bool)
</del><ins>+void PageClientImpl::requestScroll(const WebCore::FloatPoint&amp;, const WebCore::IntPoint&amp;, bool)
</ins><span class="cx"> {
</span><span class="cx">     notImplemented();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkPageClientImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     virtual void displayView() override;
</span><span class="cx">     virtual bool canScrollView() override { return false; }
</span><span class="cx">     virtual void scrollView(const WebCore::IntRect&amp; scrollRect, const WebCore::IntSize&amp; scrollOffset) override;
</span><del>-    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, bool isProgrammaticScroll) override;
</del><ins>+    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, const WebCore::IntPoint&amp; scrollOrigin, bool isProgrammaticScroll) override;
</ins><span class="cx">     virtual WebCore::IntSize viewSize() override;
</span><span class="cx">     virtual bool isViewWindowActive() override;
</span><span class="cx">     virtual bool isViewFocused() override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -304,7 +304,7 @@
</span><span class="cx">     setViewNeedsDisplay(scrollRect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebView::requestScroll(const WebCore::FloatPoint&amp;, bool)
</del><ins>+void WebView::requestScroll(const WebCore::FloatPoint&amp;, const WebCore::IntPoint&amp;, bool)
</ins><span class="cx"> {
</span><span class="cx">     notImplemented();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool canScrollView() override { return false; }
</span><span class="cx">     virtual void scrollView(const WebCore::IntRect&amp;, const WebCore::IntSize&amp;) override;
</span><del>-    virtual void requestScroll(const WebCore::FloatPoint&amp;, bool) override;
</del><ins>+    virtual void requestScroll(const WebCore::FloatPoint&amp;, const WebCore::IntPoint&amp;, bool) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual WebCore::IntSize viewSize() override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPageClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/PageClient.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx">     // Tell the view to scroll scrollRect by scrollOffset.
</span><span class="cx">     virtual void scrollView(const WebCore::IntRect&amp; scrollRect, const WebCore::IntSize&amp; scrollOffset) = 0;
</span><span class="cx">     // Tell the view to scroll to the given position, and whether this was a programmatic scroll.
</span><del>-    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, bool isProgrammaticScroll) = 0;
</del><ins>+    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, const WebCore::IntPoint&amp; scrollOrigin, bool isProgrammaticScroll) = 0;
</ins><span class="cx"> 
</span><span class="cx">     // Return the size of the view the page is associated with.
</span><span class="cx">     virtual WebCore::IntSize viewSize() = 0;
</span><span class="lines">@@ -279,7 +279,7 @@
</span><span class="cx">     virtual void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale) = 0;
</span><span class="cx">     virtual void didChangeViewportMetaTagWidth(float) = 0;
</span><span class="cx">     virtual double minimumZoomScale() const = 0;
</span><del>-    virtual WebCore::FloatSize contentsSize() const = 0;
</del><ins>+    virtual WebCore::FloatRect documentRect() const = 0;
</ins><span class="cx">     virtual void overflowScrollViewWillStartPanGesture() = 0;
</span><span class="cx">     virtual void overflowScrollViewDidScroll() = 0;
</span><span class="cx">     virtual void overflowScrollWillStartScroll() = 0;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -1275,9 +1275,9 @@
</span><span class="cx">     m_pageClient.scrollView(scrollRect, scrollOffset);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::requestScroll(const FloatPoint&amp; scrollPosition, bool isProgrammaticScroll)
</del><ins>+void WebPageProxy::requestScroll(const FloatPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, bool isProgrammaticScroll)
</ins><span class="cx"> {
</span><del>-    m_pageClient.requestScroll(scrollPosition, isProgrammaticScroll);
</del><ins>+    m_pageClient.requestScroll(scrollPosition, scrollOrigin, isProgrammaticScroll);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::setSuppressVisibilityUpdates(bool flag)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -418,7 +418,7 @@
</span><span class="cx">     void displayView();
</span><span class="cx">     bool canScrollView();
</span><span class="cx">     void scrollView(const WebCore::IntRect&amp; scrollRect, const WebCore::IntSize&amp; scrollOffset); // FIXME: CoordinatedGraphics should use requestScroll().
</span><del>-    void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, bool isProgrammaticScroll);
</del><ins>+    void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, const WebCore::IntPoint&amp; scrollOrigin, bool isProgrammaticScroll);
</ins><span class="cx">     
</span><span class="cx">     void setDelegatesScrolling(bool delegatesScrolling) { m_delegatesScrolling = delegatesScrolling; }
</span><span class="cx">     bool delegatesScrolling() const { return m_delegatesScrolling; }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     virtual void displayView() override;
</span><span class="cx">     virtual bool canScrollView() override;
</span><span class="cx">     virtual void scrollView(const WebCore::IntRect&amp; scrollRect, const WebCore::IntSize&amp; scrollOffset) override;
</span><del>-    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, bool isProgrammaticScroll) override;
</del><ins>+    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, const WebCore::IntPoint&amp; scrollOrigin, bool isProgrammaticScroll) override;
</ins><span class="cx">     virtual WebCore::IntSize viewSize() override;
</span><span class="cx">     virtual bool isViewWindowActive() override;
</span><span class="cx">     virtual bool isViewFocused() override;
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx">     virtual bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, WebOpenPanelParameters*, WebOpenPanelResultListenerProxy*) override;
</span><span class="cx">     virtual void didChangeViewportMetaTagWidth(float) override;
</span><span class="cx">     virtual double minimumZoomScale() const override;
</span><del>-    virtual WebCore::FloatSize contentsSize() const override;
</del><ins>+    virtual WebCore::FloatRect documentRect() const override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void showInspectorHighlight(const WebCore::Highlight&amp;) override;
</span><span class="cx">     virtual void hideInspectorHighlight() override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -154,10 +154,10 @@
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::requestScroll(const FloatPoint&amp; scrollPosition, bool isProgrammaticScroll)
</del><ins>+void PageClientImpl::requestScroll(const FloatPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, bool isProgrammaticScroll)
</ins><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(isProgrammaticScroll);
</span><del>-    [m_webView _scrollToContentOffset:scrollPosition];
</del><ins>+    [m_webView _scrollToContentOffset:scrollPosition scrollOrigin:scrollOrigin];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IntSize PageClientImpl::viewSize()
</span><span class="lines">@@ -278,9 +278,9 @@
</span><span class="cx">     return 1;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WebCore::FloatSize PageClientImpl::contentsSize() const
</del><ins>+WebCore::FloatRect PageClientImpl::documentRect() const
</ins><span class="cx"> {
</span><del>-    return FloatSize([m_contentView bounds].size);
</del><ins>+    return [m_contentView bounds];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::setCursor(const Cursor&amp;)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWKContentViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -494,14 +494,21 @@
</span><span class="cx"> - (void)_didCommitLayerTree:(const WebKit::RemoteLayerTreeTransaction&amp;)layerTreeTransaction
</span><span class="cx"> {
</span><span class="cx">     CGSize contentsSize = layerTreeTransaction.contentsSize();
</span><del>-    CGRect contentBounds = { CGPointZero, contentsSize };
-    CGRect oldBounds = [self bounds];
</del><ins>+    CGPoint scrollOrigin = -layerTreeTransaction.scrollOrigin();
+    CGRect contentBounds = { scrollOrigin, contentsSize };
</ins><span class="cx"> 
</span><del>-    BOOL boundsChanged = !CGRectEqualToRect(oldBounds, contentBounds);
</del><ins>+    BOOL boundsChanged = !CGRectEqualToRect([self bounds], contentBounds);
</ins><span class="cx">     if (boundsChanged)
</span><span class="cx">         [self setBounds:contentBounds];
</span><span class="cx"> 
</span><span class="cx">     [_webView _didCommitLayerTree:layerTreeTransaction];
</span><ins>+
+    if (_interactionViewsContainerView) {
+        FloatPoint scaledOrigin = layerTreeTransaction.scrollOrigin();
+        float scale = [[_webView scrollView] zoomScale];
+        scaledOrigin.scale(scale, scale);
+        [_interactionViewsContainerView setFrame:CGRectMake(scaledOrigin.x(), scaledOrigin.y(), 0, 0)];
+    }
</ins><span class="cx">     
</span><span class="cx">     if (boundsChanged) {
</span><span class="cx">         FloatRect fixedPositionRect = _page-&gt;computeCustomFixedPositionRect(_page-&gt;unobscuredContentRect(), [[_webView scrollView] zoomScale]);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebPageProxyIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -217,8 +217,7 @@
</span><span class="cx"> WebCore::FloatRect WebPageProxy::computeCustomFixedPositionRect(const FloatRect&amp; unobscuredContentRect, double displayedContentScale, UnobscuredRectConstraint constraint) const
</span><span class="cx"> {
</span><span class="cx">     FloatRect constrainedUnobscuredRect = unobscuredContentRect;
</span><del>-    FloatSize contentsSize = m_pageClient.contentsSize();
-    FloatRect documentRect = FloatRect(FloatPoint(), contentsSize);
</del><ins>+    FloatRect documentRect = m_pageClient.documentRect();
</ins><span class="cx"> 
</span><span class="cx">     if (m_pageClient.isAssistingNode())
</span><span class="cx">         return documentRect;
</span><span class="lines">@@ -238,7 +237,7 @@
</span><span class="cx">         constrainedUnobscuredRect.setHeight(adjustedUnexposedMaxEdge(documentRect.maxY(), constrainedUnobscuredRect.maxY(), factor) - constrainedUnobscuredRect.y());
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    return FrameView::rectForViewportConstrainedObjects(enclosingLayoutRect(constrainedUnobscuredRect), LayoutSize(contentsSize), displayedContentScale, false, StickToViewportBounds);
</del><ins>+    return FrameView::rectForViewportConstrainedObjects(enclosingLayoutRect(constrainedUnobscuredRect), LayoutSize(documentRect.size()), displayedContentScale, false, StickToViewportBounds);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::overflowScrollViewWillStartPanGesture()
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacPageClientImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">     virtual void displayView() override;
</span><span class="cx">     virtual bool canScrollView() override;
</span><span class="cx">     virtual void scrollView(const WebCore::IntRect&amp; scrollRect, const WebCore::IntSize&amp; scrollOffset) override;
</span><del>-    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, bool isProgrammaticScroll) override;
</del><ins>+    virtual void requestScroll(const WebCore::FloatPoint&amp; scrollPosition, const WebCore::IntPoint&amp; scrollOrigin, bool isProgrammaticScroll) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual WebCore::IntSize viewSize() override;
</span><span class="cx">     virtual bool isViewWindowActive() override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacPageClientImplmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -181,7 +181,7 @@
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::requestScroll(const FloatPoint&amp; scrollPosition, bool isProgrammaticScroll)
</del><ins>+void PageClientImpl::requestScroll(const FloatPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, bool isProgrammaticScroll)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -219,7 +219,7 @@
</span><span class="cx">     // Handle requested scroll position updates from the scrolling tree transaction after didCommitLayerTree()
</span><span class="cx">     // has updated the view size based on the content size.
</span><span class="cx">     if (requestedScrollInfo.requestsScrollPositionUpdate)
</span><del>-        m_webPageProxy.requestScroll(requestedScrollInfo.requestedScrollPosition, requestedScrollInfo.requestIsProgrammaticScroll);
</del><ins>+        m_webPageProxy.requestScroll(requestedScrollInfo.requestedScrollPosition, layerTreeTransaction.scrollOrigin(), requestedScrollInfo.requestIsProgrammaticScroll);
</ins><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> 
</span><span class="cx">     if (m_debugIndicatorLayerTreeHost) {
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (186711 => 186712)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-07-11 15:44:13 UTC (rev 186711)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-07-11 18:19:46 UTC (rev 186712)
</span><span class="lines">@@ -2948,6 +2948,7 @@
</span><span class="cx"> void WebPage::willCommitLayerTree(RemoteLayerTreeTransaction&amp; layerTransaction)
</span><span class="cx"> {
</span><span class="cx">     layerTransaction.setContentsSize(corePage()-&gt;mainFrame().view()-&gt;contentsSize());
</span><ins>+    layerTransaction.setScrollOrigin(corePage()-&gt;mainFrame().view()-&gt;scrollOrigin());
</ins><span class="cx">     layerTransaction.setPageScaleFactor(corePage()-&gt;pageScaleFactor());
</span><span class="cx">     layerTransaction.setRenderTreeSize(corePage()-&gt;renderTreeSize());
</span><span class="cx">     layerTransaction.setPageExtendedBackgroundColor(corePage()-&gt;pageExtendedBackgroundColor());
</span></span></pre>
</div>
</div>

</body>
</html>