<!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>[185762] 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/185762">185762</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2015-06-19 12:24:59 -0700 (Fri, 19 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] scrollIntoViewIfNeeded is not working with scroll-snap points
https://bugs.webkit.org/show_bug.cgi?id=145318
&lt;rdar://problem/21081501&gt;

Reviewed by Simon Fraser.

Source/WebCore:

Use the ScrollController in iOS to track the scroll snap point state.
We do not need the animation implementation or timers since the actual
animation is handled by UIKit.

This change lets us communicate the current offset into the scroll snap
offset vector between the WebProcess and RemoteScrollingTree so that
both sides stay in sync regardless of whether user gestures or style
updates have caused us to shift to a different snap point.

* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Set the
current horizontal and vertical scroll snap offset indices.
(WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Ditto.
* page/scrolling/AsyncScrollingCoordinator.h: Mark the setActiveScrollSnapIndices
for export so that it can be reached by the UIProcess.
* page/scrolling/ScrollingCoordinator.h: Keep track of horizontal and
vertical scroll snap offset indices.
* page/scrolling/ScrollingStateScrollingNode.cpp:
(WebCore::ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
(WebCore::ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex): Added.
* page/scrolling/ScrollingStateScrollingNode.h:
(WebCore::ScrollingStateScrollingNode::currentHorizontalSnapPointIndex): Added.
(WebCore::ScrollingStateScrollingNode::currentVerticalSnapPointIndex): Added.
* page/scrolling/ScrollingTree.h:
* page/scrolling/ScrollingTreeScrollingNode.cpp:
(WebCore::ScrollingTreeScrollingNode::updateBeforeChildren): Update the scroll snap
point offset indices if either has changed.
* page/scrolling/ScrollingTreeScrollingNode.h:
(WebCore::ScrollingTreeScrollingNode::currentHorizontalSnapPointIndex): Added.
(WebCore::ScrollingTreeScrollingNode::currentVerticalSnapPointIndex): Added.
(WebCore::ScrollingTreeScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
(WebCore::ScrollingTreeScrollingNode::setCurrentVerticalSnapPointIndex): Added.
* page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::currentSnapPointIndicesDidChange): New method
to handle notifications about scroll snap index changes from the UIProcess.
* page/scrolling/ThreadedScrollingTree.h:
* page/scrolling/ios/ScrollingTreeIOS.cpp:
(WebCore::ScrollingTreeIOS::currentSnapPointIndicesDidChange): New method
to handle notifications about scroll snap index changes from the UIProcess.
* page/scrolling/ios/ScrollingTreeIOS.h:
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
(WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): Update scroll
snap point current offset indices if they have changed.
(WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Remove unneeded
PLATFORM(MAC) macro.
* platform/ScrollAnimator.cpp:
(WebCore::ScrollAnimator::ScrollAnimator): We have a ScrollController if we are
supporting scroll snap points or rubber banding.
(WebCore::ScrollAnimator::processWheelEventForScrollSnap): This method is not needed
for iOS builds.
(WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): Enable this on iOS.
(WebCore::ScrollAnimator::updateScrollSnapState): Renamed from 'updateScrollAnimatorsAndTimers'
and enabled on iOS.
(WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers): Deleted.
* platform/ScrollAnimator.h: Enable some scroll snap methods on iOS.
* platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::handleWheelEvent): Enable scroll snap index bookkeeping on iOS, too.
(WebCore::ScrollableArea::updateScrollSnapState): Revise to call 'updateScrollSnapState' instead
of 'updateScrollAnimatorsAndTimers'.
* platform/cocoa/ScrollController.h: Enable some methods on iOS. Reorder methods to
reduce the number of macros needed to do so.
* platform/cocoa/ScrollController.mm:
(systemUptime): Only build for Mac.
(WebCore::ScrollController::ScrollController): Disable rubber band-specific members on iOS.
(WebCore::ScrollController::handleWheelEvent): Only build this on Mac.
(WebCore::ScrollController::isRubberBandInProgress): Always return 'false' on iOS.
(WebCore::ScrollController::startSnapRubberbandTimer): Only build this on Mac.
(WebCore::ScrollController::shouldRubberBandInHorizontalDirection): Ditto.
(WebCore::ScrollController::scrollSnapPointState): Enable on iOS.
(WebCore::ScrollController::hasActiveScrollSnapTimerForAxis): Only build on Mac.
(WebCore::ScrollController::updateScrollSnapState): renamed from 'updateScrollAnimatorsAndTimers'
(WebCore::ScrollController::startScrollSnapTimer): Only build on Mac.
(WebCore::ScrollController::initializeGlideParameters): Ditto.
(WebCore::ScrollController::activeScrollSnapIndexForAxis): Enable on iOS.
(WebCore::ScrollController::setActiveScrollSnapIndicesForOffset): Ditto.
(WebCore::ScrollController::beginScrollSnapAnimation): Only build on Mac.
(WebCore::ScrollController::computeGlideDelta): Ditto.
(WebCore::ScrollController::updateScrollAnimatorsAndTimers): Deleted.
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Capture any changes in scroll
snap offset indices.

Source/WebKit2:

* Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
(ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::encode): Handle scroll snap point offset indices.
(ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::decode): Ditto.
* UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::currentSnapPointIndicesDidChange): Added. Send message
to WebProcess when scroll snap indices have changed.
* UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
* UIProcess/Scrolling/RemoteScrollingTree.cpp:
(WebKit::RemoteScrollingTree::currentSnapPointIndicesDidChange): Added. Notify the
RemoteScrollingCoordinatorProxy when scroll snap indices have changed.
* UIProcess/Scrolling/RemoteScrollingTree.h:
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
(-[WKOverflowScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Revised.
Identify changes in the current scroll snap point offset index (in either the horizontal or vertical
directions), and send a notification when this happens.
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::currentSnapPointIndicesDidChange): Added. Notify the
Scrolling Tree when indices changed.
* UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
(WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping): Revised. Always compute
the new scroll snap offset index (even when we will rubber band).
* WebProcess/Scrolling/RemoteScrollingCoordinator.h:
* WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in: Add a new message to relay changes in scroll
snap index.
* WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
(WebKit::RemoteScrollingCoordinator::currentSnapPointIndicesChangedForNode): Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorcpp">trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorh">trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingCoordinatorh">trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeh">trunk/Source/WebCore/page/scrolling/ScrollingTree.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingThreadedScrollingTreecpp">trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingThreadedScrollingTreeh">trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeIOScpp">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeIOSh">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollAnimatorcpp">trunk/Source/WebCore/platform/ScrollAnimator.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollAnimatorh">trunk/Source/WebCore/platform/ScrollAnimator.h</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollableAreacpp">trunk/Source/WebCore/platform/ScrollableArea.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformcocoaScrollControllerh">trunk/Source/WebCore/platform/cocoa/ScrollController.h</a></li>
<li><a href="#trunkSourceWebCoreplatformcocoaScrollControllermm">trunk/Source/WebCore/platform/cocoa/ScrollController.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedScrollingRemoteScrollingCoordinatorTransactioncpp">trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxycpp">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxyh">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreecpp">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreeh">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSh">trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSmm">trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosRemoteScrollingCoordinatorProxyIOSmm">trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatorh">trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatormessagesin">trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatormm">trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/ChangeLog        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -1,3 +1,93 @@
</span><ins>+2015-06-18  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        [iOS] scrollIntoViewIfNeeded is not working with scroll-snap points
+        https://bugs.webkit.org/show_bug.cgi?id=145318
+        &lt;rdar://problem/21081501&gt;
+
+        Reviewed by Simon Fraser.
+
+        Use the ScrollController in iOS to track the scroll snap point state.
+        We do not need the animation implementation or timers since the actual
+        animation is handled by UIKit.
+
+        This change lets us communicate the current offset into the scroll snap
+        offset vector between the WebProcess and RemoteScrollingTree so that
+        both sides stay in sync regardless of whether user gestures or style
+        updates have caused us to shift to a different snap point.
+
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Set the
+        current horizontal and vertical scroll snap offset indices.
+        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Ditto.
+        * page/scrolling/AsyncScrollingCoordinator.h: Mark the setActiveScrollSnapIndices
+        for export so that it can be reached by the UIProcess.
+        * page/scrolling/ScrollingCoordinator.h: Keep track of horizontal and
+        vertical scroll snap offset indices.
+        * page/scrolling/ScrollingStateScrollingNode.cpp:
+        (WebCore::ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
+        (WebCore::ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex): Added.
+        * page/scrolling/ScrollingStateScrollingNode.h:
+        (WebCore::ScrollingStateScrollingNode::currentHorizontalSnapPointIndex): Added.
+        (WebCore::ScrollingStateScrollingNode::currentVerticalSnapPointIndex): Added.
+        * page/scrolling/ScrollingTree.h:
+        * page/scrolling/ScrollingTreeScrollingNode.cpp:
+        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren): Update the scroll snap
+        point offset indices if either has changed.
+        * page/scrolling/ScrollingTreeScrollingNode.h:
+        (WebCore::ScrollingTreeScrollingNode::currentHorizontalSnapPointIndex): Added.
+        (WebCore::ScrollingTreeScrollingNode::currentVerticalSnapPointIndex): Added.
+        (WebCore::ScrollingTreeScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
+        (WebCore::ScrollingTreeScrollingNode::setCurrentVerticalSnapPointIndex): Added.
+        * page/scrolling/ThreadedScrollingTree.cpp:
+        (WebCore::ThreadedScrollingTree::currentSnapPointIndicesDidChange): New method
+        to handle notifications about scroll snap index changes from the UIProcess.
+        * page/scrolling/ThreadedScrollingTree.h:
+        * page/scrolling/ios/ScrollingTreeIOS.cpp:
+        (WebCore::ScrollingTreeIOS::currentSnapPointIndicesDidChange): New method
+        to handle notifications about scroll snap index changes from the UIProcess.
+        * page/scrolling/ios/ScrollingTreeIOS.h:
+        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): Update scroll
+        snap point current offset indices if they have changed.
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Remove unneeded
+        PLATFORM(MAC) macro.
+        * platform/ScrollAnimator.cpp:
+        (WebCore::ScrollAnimator::ScrollAnimator): We have a ScrollController if we are
+        supporting scroll snap points or rubber banding.
+        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): This method is not needed
+        for iOS builds.
+        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): Enable this on iOS.
+        (WebCore::ScrollAnimator::updateScrollSnapState): Renamed from 'updateScrollAnimatorsAndTimers'
+        and enabled on iOS.
+        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers): Deleted.
+        * platform/ScrollAnimator.h: Enable some scroll snap methods on iOS.
+        * platform/ScrollableArea.cpp:
+        (WebCore::ScrollableArea::handleWheelEvent): Enable scroll snap index bookkeeping on iOS, too.
+        (WebCore::ScrollableArea::updateScrollSnapState): Revise to call 'updateScrollSnapState' instead
+        of 'updateScrollAnimatorsAndTimers'.
+        * platform/cocoa/ScrollController.h: Enable some methods on iOS. Reorder methods to
+        reduce the number of macros needed to do so.
+        * platform/cocoa/ScrollController.mm:
+        (systemUptime): Only build for Mac.
+        (WebCore::ScrollController::ScrollController): Disable rubber band-specific members on iOS.
+        (WebCore::ScrollController::handleWheelEvent): Only build this on Mac.
+        (WebCore::ScrollController::isRubberBandInProgress): Always return 'false' on iOS.
+        (WebCore::ScrollController::startSnapRubberbandTimer): Only build this on Mac.
+        (WebCore::ScrollController::shouldRubberBandInHorizontalDirection): Ditto.
+        (WebCore::ScrollController::scrollSnapPointState): Enable on iOS.
+        (WebCore::ScrollController::hasActiveScrollSnapTimerForAxis): Only build on Mac.
+        (WebCore::ScrollController::updateScrollSnapState): renamed from 'updateScrollAnimatorsAndTimers'
+        (WebCore::ScrollController::startScrollSnapTimer): Only build on Mac.
+        (WebCore::ScrollController::initializeGlideParameters): Ditto.
+        (WebCore::ScrollController::activeScrollSnapIndexForAxis): Enable on iOS.
+        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset): Ditto.
+        (WebCore::ScrollController::beginScrollSnapAnimation): Only build on Mac.
+        (WebCore::ScrollController::computeGlideDelta): Ditto.
+        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Deleted.
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Capture any changes in scroll
+        snap offset indices.
+
</ins><span class="cx"> 2015-06-19  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fullscreen view should not update bounds of video when in PiP.
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -146,6 +146,9 @@
</span><span class="cx"> 
</span><span class="cx">     if (const Vector&lt;LayoutUnit&gt;* verticalSnapOffsets = frameView.verticalSnapOffsets())
</span><span class="cx">         setStateScrollingNodeSnapOffsetsAsFloat(*node, ScrollEventAxis::Vertical, *verticalSnapOffsets, m_page-&gt;deviceScaleFactor());
</span><ins>+
+    node-&gt;setCurrentHorizontalSnapPointIndex(frameView.currentHorizontalSnapPointIndex());
+    node-&gt;setCurrentVerticalSnapPointIndex(frameView.currentVerticalSnapPointIndex());
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="lines">@@ -484,6 +487,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">         setStateScrollingNodeSnapOffsetsAsFloat(*node, ScrollEventAxis::Horizontal, scrollingGeometry-&gt;horizontalSnapOffsets, m_page-&gt;deviceScaleFactor());
</span><span class="cx">         setStateScrollingNodeSnapOffsetsAsFloat(*node, ScrollEventAxis::Vertical, scrollingGeometry-&gt;verticalSnapOffsets, m_page-&gt;deviceScaleFactor());
</span><ins>+        node-&gt;setCurrentHorizontalSnapPointIndex(scrollingGeometry-&gt;currentHorizontalSnapPointIndex);
+        node-&gt;setCurrentVerticalSnapPointIndex(scrollingGeometry-&gt;currentVerticalSnapPointIndex);
</ins><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     WEBCORE_EXPORT void scheduleUpdateScrollPositionAfterAsyncScroll(ScrollingNodeID, const FloatPoint&amp;, bool programmaticScroll, SetOrSyncScrollingLayerPosition);
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-    void setActiveScrollSnapIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex);
</del><ins>+    WEBCORE_EXPORT void setActiveScrollSnapIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex);
</ins><span class="cx">     void deferTestsForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const;
</span><span class="cx">     void removeTestDeferralForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -168,6 +168,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">         Vector&lt;LayoutUnit&gt; horizontalSnapOffsets;
</span><span class="cx">         Vector&lt;LayoutUnit&gt; verticalSnapOffsets;
</span><ins>+        unsigned currentHorizontalSnapPointIndex;
+        unsigned currentVerticalSnapPointIndex;
</ins><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -123,6 +123,24 @@
</span><span class="cx">     m_verticalSnapOffsets = snapOffsets;
</span><span class="cx">     setPropertyChanged(VerticalSnapOffsets);
</span><span class="cx"> }
</span><ins>+
+void ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex(unsigned index)
+{
+    if (m_currentHorizontalSnapPointIndex == index)
+        return;
+    
+    m_currentHorizontalSnapPointIndex = index;
+    setPropertyChanged(CurrentHorizontalSnapOffsetIndex);
+}
+
+void ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex(unsigned index)
+{
+    if (m_currentVerticalSnapPointIndex == index)
+        return;
+    
+    m_currentVerticalSnapPointIndex = index;
+    setPropertyChanged(CurrentVerticalSnapOffsetIndex);
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> void ScrollingStateScrollingNode::setScrollableAreaParameters(const ScrollableAreaParameters&amp; parameters)
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -50,6 +50,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">         HorizontalSnapOffsets,
</span><span class="cx">         VerticalSnapOffsets,
</span><ins>+        CurrentHorizontalSnapOffsetIndex,
+        CurrentVerticalSnapOffsetIndex,
</ins><span class="cx"> #endif
</span><span class="cx">         ExpectsWheelEventTestTrigger,
</span><span class="cx">     };
</span><span class="lines">@@ -75,6 +77,12 @@
</span><span class="cx"> 
</span><span class="cx">     const Vector&lt;float&gt;&amp; verticalSnapOffsets() const { return m_verticalSnapOffsets; }
</span><span class="cx">     WEBCORE_EXPORT void setVerticalSnapOffsets(const Vector&lt;float&gt;&amp;);
</span><ins>+
+    unsigned currentHorizontalSnapPointIndex() const { return m_currentHorizontalSnapPointIndex; }
+    WEBCORE_EXPORT void setCurrentHorizontalSnapPointIndex(unsigned);
+
+    unsigned currentVerticalSnapPointIndex() const { return m_currentVerticalSnapPointIndex; }
+    WEBCORE_EXPORT void setCurrentVerticalSnapPointIndex(unsigned);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     const ScrollableAreaParameters&amp; scrollableAreaParameters() const { return m_scrollableAreaParameters; }
</span><span class="lines">@@ -103,6 +111,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     Vector&lt;float&gt; m_horizontalSnapOffsets;
</span><span class="cx">     Vector&lt;float&gt; m_verticalSnapOffsets;
</span><ins>+    unsigned m_currentHorizontalSnapPointIndex { 0 };
+    unsigned m_currentVerticalSnapPointIndex { 0 };
</ins><span class="cx"> #endif
</span><span class="cx">     ScrollableAreaParameters m_scrollableAreaParameters;
</span><span class="cx">     bool m_requestedScrollPositionRepresentsProgrammaticScroll { false };
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTree.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -89,6 +89,8 @@
</span><span class="cx">     // and call scrollingTreeNodeDidScroll().
</span><span class="cx">     WEBCORE_EXPORT virtual void scrollPositionChangedViaDelegatedScrolling(ScrollingNodeID, const WebCore::FloatPoint&amp; scrollPosition, bool inUserInteration);
</span><span class="cx"> 
</span><ins>+    WEBCORE_EXPORT virtual void currentSnapPointIndicesDidChange(ScrollingNodeID, unsigned horizontal, unsigned vertical) = 0;
+
</ins><span class="cx">     FloatPoint mainFrameScrollPosition();
</span><span class="cx">     
</span><span class="cx"> #if PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeScrollingNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -73,6 +73,12 @@
</span><span class="cx"> 
</span><span class="cx">     if (state.hasChangedProperty(ScrollingStateScrollingNode::VerticalSnapOffsets))
</span><span class="cx">         m_verticalSnapOffsets = state.verticalSnapOffsets();
</span><ins>+
+    if (state.hasChangedProperty(ScrollingStateScrollingNode::CurrentHorizontalSnapOffsetIndex))
+        m_currentHorizontalSnapPointIndex = state.currentHorizontalSnapPointIndex();
+
+    if (state.hasChangedProperty(ScrollingStateScrollingNode::CurrentVerticalSnapOffsetIndex))
+        m_currentVerticalSnapPointIndex = state.currentVerticalSnapPointIndex();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams))
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeScrollingNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -59,6 +59,10 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     const Vector&lt;float&gt;&amp; horizontalSnapOffsets() const { return m_horizontalSnapOffsets; }
</span><span class="cx">     const Vector&lt;float&gt;&amp; verticalSnapOffsets() const { return m_verticalSnapOffsets; }
</span><ins>+    unsigned currentHorizontalSnapPointIndex() const { return m_currentHorizontalSnapPointIndex; }
+    unsigned currentVerticalSnapPointIndex() const { return m_currentVerticalSnapPointIndex; }
+    void setCurrentHorizontalSnapPointIndex(unsigned index) { m_currentHorizontalSnapPointIndex = index; }
+    void setCurrentVerticalSnapPointIndex(unsigned index) { m_currentVerticalSnapPointIndex = index; }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="lines">@@ -99,6 +103,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     Vector&lt;float&gt; m_horizontalSnapOffsets;
</span><span class="cx">     Vector&lt;float&gt; m_verticalSnapOffsets;
</span><ins>+    unsigned m_currentHorizontalSnapPointIndex { 0 };
+    unsigned m_currentVerticalSnapPointIndex { 0 };
</ins><span class="cx"> #endif
</span><span class="cx">     ScrollableAreaParameters m_scrollableAreaParameters;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingThreadedScrollingTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -111,6 +111,17 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ThreadedScrollingTree::currentSnapPointIndicesDidChange(ScrollingNodeID nodeID, unsigned horizontal, unsigned vertical)
+{
+    if (!m_scrollingCoordinator)
+        return;
+
+    RefPtr&lt;AsyncScrollingCoordinator&gt; scrollingCoordinator = m_scrollingCoordinator;
+    RunLoop::main().dispatch([scrollingCoordinator, nodeID, horizontal, vertical] {
+        scrollingCoordinator-&gt;setActiveScrollSnapIndices(nodeID, horizontal, vertical);
+    });
+}
+
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx"> void ThreadedScrollingTree::handleWheelEventPhase(PlatformWheelEventPhase phase)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingThreadedScrollingTreeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx">     explicit ThreadedScrollingTree(AsyncScrollingCoordinator*);
</span><span class="cx"> 
</span><span class="cx">     virtual void scrollingTreeNodeDidScroll(ScrollingNodeID, const FloatPoint&amp; scrollPosition, SetOrSyncScrollingLayerPosition = SyncScrollingLayerPosition) override;
</span><ins>+    void currentSnapPointIndicesDidChange(ScrollingNodeID, unsigned horizontal, unsigned vertical) override;
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     void handleWheelEventPhase(PlatformWheelEventPhase) override;
</span><span class="cx">     void setActiveScrollSnapIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex) override;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeIOScpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -118,6 +118,17 @@
</span><span class="cx">     return FloatRect();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ScrollingTreeIOS::currentSnapPointIndicesDidChange(WebCore::ScrollingNodeID nodeID, unsigned horizontal, unsigned vertical)
+{
+    if (!m_scrollingCoordinator)
+        return;
+    
+    RefPtr&lt;AsyncScrollingCoordinator&gt; scrollingCoordinator = m_scrollingCoordinator;
+    callOnMainThread([scrollingCoordinator, nodeID, horizontal, vertical] {
+        scrollingCoordinator-&gt;setActiveScrollSnapIndices(nodeID, horizontal, vertical);
+    });
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeIOS.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -58,6 +58,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void scrollingTreeNodeDidScroll(ScrollingNodeID, const FloatPoint&amp; scrollPosition, SetOrSyncScrollingLayerPosition = SyncScrollingLayerPosition) override;
</span><span class="cx"> 
</span><ins>+    void currentSnapPointIndicesDidChange(WebCore::ScrollingNodeID, unsigned horizontal, unsigned vertical) override;
+
</ins><span class="cx">     virtual FloatRect fixedPositionRect() override;
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;AsyncScrollingCoordinator&gt; m_scrollingCoordinator;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -137,6 +137,12 @@
</span><span class="cx"> 
</span><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalSnapOffsets))
</span><span class="cx">         m_scrollController.updateScrollSnapPoints(ScrollEventAxis::Vertical, convertToLayoutUnits(scrollingStateNode.verticalSnapOffsets()));
</span><ins>+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CurrentHorizontalSnapOffsetIndex))
+        m_scrollController.setActiveScrollSnapIndexForAxis(ScrollEventAxis::Horizontal, scrollingStateNode.currentHorizontalSnapPointIndex());
+    
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CurrentVerticalSnapOffsetIndex))
+        m_scrollController.setActiveScrollSnapIndexForAxis(ScrollEventAxis::Vertical, scrollingStateNode.currentVerticalSnapPointIndex());
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ExpectsWheelEventTestTrigger))
</span><span class="lines">@@ -553,7 +559,7 @@
</span><span class="cx">         WTFLogAlways(&quot;SCROLLING: Switching to threaded scrolling mode. Time: %f\n&quot;, WTF::monotonicallyIncreasingTime());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx"> LayoutUnit ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis(ScrollEventAxis axis) const
</span><span class="cx"> {
</span><span class="cx">     const FloatPoint&amp; currentPosition = scrollPosition();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollAnimatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollAnimator.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollAnimator.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/platform/ScrollAnimator.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> 
</span><span class="cx"> ScrollAnimator::ScrollAnimator(ScrollableArea&amp; scrollableArea)
</span><span class="cx">     : m_scrollableArea(scrollableArea)
</span><del>-#if (ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
</ins><span class="cx">     , m_scrollController(*this)
</span><span class="cx"> #endif
</span><span class="cx">     , m_currentPosX(0)
</span><span class="lines">@@ -84,11 +84,13 @@
</span><span class="cx">     updateActiveScrollSnapIndexForOffset();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+#if PLATFORM(MAC)
</ins><span class="cx"> bool ScrollAnimator::processWheelEventForScrollSnap(const PlatformWheelEvent&amp; wheelEvent)
</span><span class="cx"> {
</span><span class="cx">     return m_scrollController.processWheelEventForScrollSnap(wheelEvent);
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> bool ScrollAnimator::activeScrollSnapIndexDidChange() const
</span><span class="cx"> {
</span><span class="lines">@@ -180,7 +182,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ScrollAnimator::updateActiveScrollSnapIndexForOffset()
</span><span class="cx"> {
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     m_scrollController.setActiveScrollSnapIndicesForOffset(m_currentPosX, m_currentPosY);
</span><span class="cx">     if (m_scrollController.activeScrollSnapIndexDidChange()) {
</span><span class="cx">         m_scrollableArea.setCurrentHorizontalSnapPointIndex(m_scrollController.activeScrollSnapIndexForAxis(ScrollEventAxis::Horizontal));
</span><span class="lines">@@ -195,10 +197,10 @@
</span><span class="cx">     m_scrollableArea.setScrollOffsetFromAnimation(IntPoint(m_currentPosX, m_currentPosY));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
-void ScrollAnimator::updateScrollAnimatorsAndTimers()
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+void ScrollAnimator::updateScrollSnapState()
</ins><span class="cx"> {
</span><del>-    m_scrollController.updateScrollAnimatorsAndTimers(m_scrollableArea);
</del><ins>+    m_scrollController.updateScrollSnapState(m_scrollableArea);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> LayoutUnit ScrollAnimator::scrollOffsetOnAxis(ScrollEventAxis axis) const
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollAnimatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollAnimator.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollAnimator.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/platform/ScrollAnimator.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> #include &lt;wtf/FastMalloc.h&gt;
</span><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> 
</span><del>-#if (ENABLE(RUBBER_BANDING) || ENABLE(CSS_SCROLL_SNAP)) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(RUBBER_BANDING) || ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx"> #include &quot;ScrollController.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> class Scrollbar;
</span><span class="cx"> class WheelEventTestTrigger;
</span><span class="cx"> 
</span><del>-#if (ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
</ins><span class="cx"> class ScrollAnimator : private ScrollControllerClient {
</span><span class="cx"> #else
</span><span class="cx"> class ScrollAnimator {
</span><span class="lines">@@ -128,9 +128,11 @@
</span><span class="cx">     void removeTestDeferralForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const override;
</span><span class="cx"> #endif
</span><span class="cx">     
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+#if PLATFORM(MAC)
</ins><span class="cx">     bool processWheelEventForScrollSnap(const PlatformWheelEvent&amp;);
</span><del>-    void updateScrollAnimatorsAndTimers();
</del><ins>+#endif
+    void updateScrollSnapState();
</ins><span class="cx">     LayoutUnit scrollOffsetOnAxis(ScrollEventAxis) const override;
</span><span class="cx">     void immediateScrollOnAxis(ScrollEventAxis, float delta) override;
</span><span class="cx">     bool activeScrollSnapIndexDidChange() const;
</span><span class="lines">@@ -144,7 +146,7 @@
</span><span class="cx"> 
</span><span class="cx">     ScrollableArea&amp; m_scrollableArea;
</span><span class="cx">     RefPtr&lt;WheelEventTestTrigger&gt; m_wheelEventTestTrigger;
</span><del>-#if (ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
</ins><span class="cx">     ScrollController m_scrollController;
</span><span class="cx"> #endif
</span><span class="cx">     float m_currentPosX; // We avoid using a FloatPoint in order to reduce
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollableAreacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollableArea.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollableArea.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/platform/ScrollableArea.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     bool handledEvent = scrollAnimator().handleWheelEvent(wheelEvent);
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     if (scrollAnimator().activeScrollSnapIndexDidChange()) {
</span><span class="cx">         setCurrentHorizontalSnapPointIndex(scrollAnimator().activeScrollSnapIndexForAxis(ScrollEventAxis::Horizontal));
</span><span class="cx">         setCurrentVerticalSnapPointIndex(scrollAnimator().activeScrollSnapIndexForAxis(ScrollEventAxis::Vertical));
</span><span class="lines">@@ -461,10 +461,8 @@
</span><span class="cx"> 
</span><span class="cx"> void ScrollableArea::updateScrollSnapState()
</span><span class="cx"> {
</span><del>-#if PLATFORM(MAC)
</del><span class="cx">     if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
</span><del>-        scrollAnimator-&gt;updateScrollAnimatorsAndTimers();
-#endif
</del><ins>+        scrollAnimator-&gt;updateScrollSnapState();
</ins><span class="cx"> 
</span><span class="cx">     if (isScrollSnapInProgress())
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcocoaScrollControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cocoa/ScrollController.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cocoa/ScrollController.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/platform/cocoa/ScrollController.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #ifndef ScrollController_h
</span><span class="cx"> #define ScrollController_h
</span><span class="cx"> 
</span><del>-#if ENABLE(RUBBER_BANDING)
</del><ins>+#if ENABLE(RUBBER_BANDING) || ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><span class="cx"> #include &quot;FloatSize.h&quot;
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     virtual ~ScrollControllerClient() { }
</span><span class="cx"> 
</span><span class="cx"> public:
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx">     virtual bool allowsHorizontalStretching(const PlatformWheelEvent&amp;) = 0;
</span><span class="cx">     virtual bool allowsVerticalStretching(const PlatformWheelEvent&amp;) = 0;
</span><span class="cx">     virtual IntSize stretchAmount() = 0;
</span><span class="lines">@@ -77,11 +78,12 @@
</span><span class="cx">     // If the current scroll position is within the overhang area, this function will cause
</span><span class="cx">     // the page to scroll to the nearest boundary point.
</span><span class="cx">     virtual void adjustScrollPositionToBoundsIfNecessary() = 0;
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     virtual void deferTestsForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const { /* Do nothing */ }
</span><span class="cx">     virtual void removeTestDeferralForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const { /* Do nothing */ }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     virtual LayoutUnit scrollOffsetOnAxis(ScrollEventAxis) const = 0;
</span><span class="cx">     virtual void immediateScrollOnAxis(ScrollEventAxis, float delta) = 0;
</span><span class="cx">     virtual void startScrollSnapTimer(ScrollEventAxis)
</span><span class="lines">@@ -114,41 +116,50 @@
</span><span class="cx"> public:
</span><span class="cx">     explicit ScrollController(ScrollControllerClient&amp;);
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx">     bool handleWheelEvent(const PlatformWheelEvent&amp;);
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     bool isRubberBandInProgress() const;
</span><span class="cx">     bool isScrollSnapInProgress() const;
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
-    bool processWheelEventForScrollSnap(const PlatformWheelEvent&amp;);
-    void updateScrollAnimatorsAndTimers(const ScrollableArea&amp;);
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     void updateScrollSnapPoints(ScrollEventAxis, const Vector&lt;LayoutUnit&gt;&amp;);
</span><del>-    unsigned activeScrollSnapIndexForAxis(ScrollEventAxis) const;
</del><span class="cx">     void setActiveScrollSnapIndexForAxis(ScrollEventAxis, unsigned);
</span><span class="cx">     void setActiveScrollSnapIndicesForOffset(int x, int y);
</span><span class="cx">     bool activeScrollSnapIndexDidChange() const { return m_activeScrollSnapIndexDidChange; }
</span><span class="cx">     void setScrollSnapIndexDidChange(bool state) { m_activeScrollSnapIndexDidChange = state; }
</span><ins>+    unsigned activeScrollSnapIndexForAxis(ScrollEventAxis) const;
+    void updateScrollSnapState(const ScrollableArea&amp;);
+#if PLATFORM(MAC)
+    bool processWheelEventForScrollSnap(const PlatformWheelEvent&amp;);
</ins><span class="cx">     bool hasActiveScrollSnapTimerForAxis(ScrollEventAxis) const;
</span><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx">     void startSnapRubberbandTimer();
</span><span class="cx">     void stopSnapRubberbandTimer();
</span><span class="cx">     void snapRubberBand();
</span><span class="cx">     void snapRubberBandTimerFired();
</span><span class="cx"> 
</span><span class="cx">     bool shouldRubberBandInHorizontalDirection(const PlatformWheelEvent&amp;);
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+    LayoutUnit scrollOffsetOnAxis(ScrollEventAxis) const;
+    void setNearestScrollSnapIndexForAxisAndOffset(ScrollEventAxis, int);
+    ScrollSnapAnimatorState&amp; scrollSnapPointState(ScrollEventAxis);
+    const ScrollSnapAnimatorState&amp; scrollSnapPointState(ScrollEventAxis) const;
+#if PLATFORM(MAC)
</ins><span class="cx">     void horizontalScrollSnapTimerFired();
</span><span class="cx">     void verticalScrollSnapTimerFired();
</span><span class="cx">     void startScrollSnapTimer(ScrollEventAxis);
</span><span class="cx">     void stopScrollSnapTimer(ScrollEventAxis);
</span><span class="cx"> 
</span><del>-    LayoutUnit scrollOffsetOnAxis(ScrollEventAxis) const;
</del><span class="cx">     void processWheelEventForScrollSnapOnAxis(ScrollEventAxis, const PlatformWheelEvent&amp;);
</span><span class="cx">     bool shouldOverrideWheelEvent(ScrollEventAxis, const PlatformWheelEvent&amp;) const;
</span><del>-    void setNearestScrollSnapIndexForAxisAndOffset(ScrollEventAxis, int);
</del><span class="cx"> 
</span><span class="cx">     void beginScrollSnapAnimation(ScrollEventAxis, ScrollSnapState);
</span><span class="cx">     void scrollSnapAnimationUpdate(ScrollEventAxis);
</span><span class="lines">@@ -157,32 +168,34 @@
</span><span class="cx">     void initializeGlideParameters(ScrollEventAxis, bool);
</span><span class="cx">     float computeSnapDelta(ScrollEventAxis) const;
</span><span class="cx">     float computeGlideDelta(ScrollEventAxis) const;
</span><del>-
-    ScrollSnapAnimatorState&amp; scrollSnapPointState(ScrollEventAxis);
-    const ScrollSnapAnimatorState&amp; scrollSnapPointState(ScrollEventAxis) const;
</del><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     ScrollControllerClient&amp; m_client;
</span><span class="cx">     
</span><del>-    CFTimeInterval m_lastMomentumScrollTimestamp;
</del><ins>+    CFTimeInterval m_lastMomentumScrollTimestamp { 0 };
</ins><span class="cx">     FloatSize m_overflowScrollDelta;
</span><span class="cx">     FloatSize m_stretchScrollForce;
</span><span class="cx">     FloatSize m_momentumVelocity;
</span><span class="cx"> 
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx">     // Rubber band state.
</span><del>-    CFTimeInterval m_startTime;
</del><ins>+    CFTimeInterval m_startTime { 0 };
</ins><span class="cx">     FloatSize m_startStretch;
</span><span class="cx">     FloatPoint m_origOrigin;
</span><span class="cx">     FloatSize m_origVelocity;
</span><span class="cx">     RunLoop::Timer&lt;ScrollController&gt; m_snapRubberbandTimer;
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
-    // FIXME: Find a way to consolidate both timers into one variable.
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     std::unique_ptr&lt;ScrollSnapAnimatorState&gt; m_horizontalScrollSnapState;
</span><span class="cx">     std::unique_ptr&lt;ScrollSnapAnimatorState&gt; m_verticalScrollSnapState;
</span><ins>+#if PLATFORM(MAC)
+    // FIXME: Find a way to consolidate both timers into one variable.
</ins><span class="cx">     RunLoop::Timer&lt;ScrollController&gt; m_horizontalScrollSnapTimer;
</span><span class="cx">     RunLoop::Timer&lt;ScrollController&gt; m_verticalScrollSnapTimer;
</span><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx">     bool m_inScrollGesture { false };
</span><span class="cx">     bool m_momentumScrollInProgress { false };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcocoaScrollControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cocoa/ScrollController.mm (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cocoa/ScrollController.mm        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/platform/cocoa/ScrollController.mm        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -38,8 +38,9 @@
</span><span class="cx"> #include &quot;ScrollableArea.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(RUBBER_BANDING)
</del><ins>+#if ENABLE(RUBBER_BANDING) || ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> static NSTimeInterval systemUptime()
</span><span class="cx"> {
</span><span class="cx">     if ([[NSProcessInfo processInfo] respondsToSelector:@selector(systemUptime)])
</span><span class="lines">@@ -62,13 +63,15 @@
</span><span class="cx">     }
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx"> static const float scrollVelocityZeroingTimeout = 0.10f;
</span><span class="cx"> static const float rubberbandDirectionLockStretchRatio = 1;
</span><span class="cx"> static const float rubberbandMinimumRequiredDeltaBeforeStretch = 10;
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</span><span class="cx"> static const float snapMagnitudeMax = 25;
</span><span class="lines">@@ -85,6 +88,7 @@
</span><span class="cx"> static const float minTargetWheelDelta = 3.5;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> enum class WheelEventStatus {
</span><span class="cx">     UserScrollBegin,
</span><span class="cx">     UserScrolling,
</span><span class="lines">@@ -121,12 +125,13 @@
</span><span class="cx">     }
</span><span class="cx">     return multiplier;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> ScrollController::ScrollController(ScrollControllerClient&amp; client)
</span><span class="cx">     : m_client(client)
</span><del>-    , m_lastMomentumScrollTimestamp(0)
-    , m_startTime(0)
</del><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx">     , m_snapRubberbandTimer(RunLoop::current(), this, &amp;ScrollController::snapRubberBandTimerFired)
</span><ins>+#endif
</ins><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</span><span class="cx">     , m_horizontalScrollSnapTimer(RunLoop::current(), this, &amp;ScrollController::horizontalScrollSnapTimerFired)
</span><span class="cx">     , m_verticalScrollSnapTimer(RunLoop::current(), this, &amp;ScrollController::verticalScrollSnapTimerFired)
</span><span class="lines">@@ -134,9 +139,10 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> bool ScrollController::handleWheelEvent(const PlatformWheelEvent&amp; wheelEvent)
</span><span class="cx"> {
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx">     if (!processWheelEventForScrollSnap(wheelEvent))
</span><span class="cx">         return false;
</span><span class="cx"> #endif
</span><span class="lines">@@ -320,7 +326,9 @@
</span><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx"> static inline float roundTowardZero(float num)
</span><span class="cx"> {
</span><span class="cx">     return num &gt; 0 ? ceilf(num - 0.5f) : floorf(num + 0.5f);
</span><span class="lines">@@ -396,13 +404,18 @@
</span><span class="cx">             stopSnapRubberbandTimer();
</span><span class="cx">     }
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> bool ScrollController::isRubberBandInProgress() const
</span><span class="cx"> {
</span><ins>+#if ENABLE(RUBBER_BANDING) &amp;&amp; PLATFORM(MAC)
</ins><span class="cx">     if (!m_inScrollGesture &amp;&amp; !m_momentumScrollInProgress &amp;&amp; !m_snapRubberbandTimerIsActive)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     return !m_client.stretchAmount().isZero();
</span><ins>+#else
+    return false;
+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool ScrollController::isScrollSnapInProgress() const
</span><span class="lines">@@ -414,6 +427,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(RUBBER_BANDING)
</ins><span class="cx"> void ScrollController::startSnapRubberbandTimer()
</span><span class="cx"> {
</span><span class="cx">     m_client.startSnapRubberbandTimer();
</span><span class="lines">@@ -460,8 +474,9 @@
</span><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP) &amp;&amp; PLATFORM(MAC)
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
</ins><span class="cx"> ScrollSnapAnimatorState&amp; ScrollController::scrollSnapPointState(ScrollEventAxis axis)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(axis != ScrollEventAxis::Horizontal || m_horizontalScrollSnapState);
</span><span class="lines">@@ -478,6 +493,7 @@
</span><span class="cx">     return (axis == ScrollEventAxis::Horizontal) ? *m_horizontalScrollSnapState : *m_verticalScrollSnapState;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> bool ScrollController::hasActiveScrollSnapTimerForAxis(ScrollEventAxis axis) const
</span><span class="cx"> {
</span><span class="cx">     return (axis == ScrollEventAxis::Horizontal) ? m_horizontalScrollSnapTimer.isActive() : m_verticalScrollSnapTimer.isActive();
</span><span class="lines">@@ -597,8 +613,9 @@
</span><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-void ScrollController::updateScrollAnimatorsAndTimers(const ScrollableArea&amp; scrollableArea)
</del><ins>+void ScrollController::updateScrollSnapState(const ScrollableArea&amp; scrollableArea)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Currently, scroll snap animators are recreated even though the snap offsets alone can be updated.
</span><span class="cx">     if (scrollableArea.horizontalSnapOffsets())
</span><span class="lines">@@ -622,6 +639,7 @@
</span><span class="cx">         m_verticalScrollSnapState = !snapPoints.isEmpty() ? std::make_unique&lt;ScrollSnapAnimatorState&gt;(ScrollEventAxis::Vertical, snapPoints) : nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> void ScrollController::startScrollSnapTimer(ScrollEventAxis axis)
</span><span class="cx"> {
</span><span class="cx">     RunLoop::Timer&lt;ScrollController&gt;&amp; scrollSnapTimer = axis == ScrollEventAxis::Horizontal ? m_horizontalScrollSnapTimer : m_verticalScrollSnapTimer;
</span><span class="lines">@@ -699,6 +717,7 @@
</span><span class="cx">     snapState.m_glideMagnitude = (snapState.m_glideInitialWheelDelta + targetFinalWheelDelta) / 2;
</span><span class="cx">     snapState.m_glidePhaseShift = acos((snapState.m_glideInitialWheelDelta - targetFinalWheelDelta) / (snapState.m_glideInitialWheelDelta + targetFinalWheelDelta));
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> unsigned ScrollController::activeScrollSnapIndexForAxis(ScrollEventAxis axis) const
</span><span class="cx"> {
</span><span class="lines">@@ -745,6 +764,7 @@
</span><span class="cx">         setNearestScrollSnapIndexForAxisAndOffset(ScrollEventAxis::Vertical, y);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
</ins><span class="cx"> void ScrollController::beginScrollSnapAnimation(ScrollEventAxis axis, ScrollSnapState newState)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(newState == ScrollSnapState::Gliding || newState == ScrollSnapState::Snapping);
</span><span class="lines">@@ -886,6 +906,7 @@
</span><span class="cx">     return glideDelta;
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -3933,6 +3933,8 @@
</span><span class="cx">                 scrollingGeometry.horizontalSnapOffsets = *offsets;
</span><span class="cx">             if (const Vector&lt;LayoutUnit&gt;* offsets = layer.verticalSnapOffsets())
</span><span class="cx">                 scrollingGeometry.verticalSnapOffsets = *offsets;
</span><ins>+            scrollingGeometry.currentHorizontalSnapPointIndex = layer.currentHorizontalSnapPointIndex();
+            scrollingGeometry.currentVerticalSnapPointIndex = layer.currentVerticalSnapPointIndex();
</ins><span class="cx"> #endif
</span><span class="cx">             scrollingCoordinator-&gt;updateOverflowScrollingNode(nodeID, backing-&gt;scrollingLayer(), backing-&gt;scrollingContentsLayer(), &amp;scrollingGeometry);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/ChangeLog        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2015-06-18  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        [iOS] scrollIntoViewIfNeeded is not working with scroll-snap points
+        https://bugs.webkit.org/show_bug.cgi?id=145318
+        &lt;rdar://problem/21081501&gt;
+
+        Reviewed by Simon Fraser.
+
+        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
+        (ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::encode): Handle scroll snap point offset indices.
+        (ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::decode): Ditto.
+        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
+        (WebKit::RemoteScrollingCoordinatorProxy::currentSnapPointIndicesDidChange): Added. Send message
+        to WebProcess when scroll snap indices have changed.
+        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
+        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
+        (WebKit::RemoteScrollingTree::currentSnapPointIndicesDidChange): Added. Notify the
+        RemoteScrollingCoordinatorProxy when scroll snap indices have changed.
+        * UIProcess/Scrolling/RemoteScrollingTree.h:
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
+        (-[WKOverflowScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Revised.
+        Identify changes in the current scroll snap point offset index (in either the horizontal or vertical
+        directions), and send a notification when this happens.
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::currentSnapPointIndicesDidChange): Added. Notify the
+        Scrolling Tree when indices changed.
+        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
+        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping): Revised. Always compute
+        the new scroll snap offset index (even when we will rubber band).
+        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
+        * WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in: Add a new message to relay changes in scroll
+        snap index.
+        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
+        (WebKit::RemoteScrollingCoordinator::currentSnapPointIndicesChangedForNode): Added.
+
</ins><span class="cx"> 2015-06-19  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Revert switch to _synchronizedDrawingFence.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedScrollingRemoteScrollingCoordinatorTransactioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -131,6 +131,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::HorizontalSnapOffsets, horizontalSnapOffsets)
</span><span class="cx">     SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::VerticalSnapOffsets, verticalSnapOffsets)
</span><ins>+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::CurrentHorizontalSnapOffsetIndex, currentHorizontalSnapPointIndex)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::CurrentVerticalSnapOffsetIndex, currentVerticalSnapPointIndex)
</ins><span class="cx"> #endif
</span><span class="cx">     SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollableAreaParams, scrollableAreaParameters)
</span><span class="cx">     SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::RequestedScrollPosition, requestedScrollPosition)
</span><span class="lines">@@ -200,6 +202,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::HorizontalSnapOffsets, Vector&lt;float&gt;, setHorizontalSnapOffsets);
</span><span class="cx">     SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::VerticalSnapOffsets, Vector&lt;float&gt;, setVerticalSnapOffsets);
</span><ins>+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::CurrentHorizontalSnapOffsetIndex, unsigned, setCurrentHorizontalSnapPointIndex);
+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::CurrentVerticalSnapOffsetIndex, unsigned, setCurrentVerticalSnapPointIndex);
</ins><span class="cx"> #endif
</span><span class="cx">     SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollableAreaParams, ScrollableAreaParameters, setScrollableAreaParameters);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -159,6 +159,11 @@
</span><span class="cx">     m_scrollingTree-&gt;viewportChangedViaDelegatedScrolling(nodeID, fixedPositionRect, scale);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RemoteScrollingCoordinatorProxy::currentSnapPointIndicesDidChange(WebCore::ScrollingNodeID nodeID, unsigned horizontal, unsigned vertical)
+{
+    m_webPageProxy.send(Messages::RemoteScrollingCoordinator::CurrentSnapPointIndicesChangedForNode(nodeID, horizontal, vertical));
+}
+
</ins><span class="cx"> // This comes from the scrolling tree.
</span><span class="cx"> void RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll(ScrollingNodeID scrolledNodeID, const FloatPoint&amp; newScrollPosition, SetOrSyncScrollingLayerPosition scrollingLayerPositionAction)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -61,6 +61,8 @@
</span><span class="cx">     // Called externally when native views move around.
</span><span class="cx">     void viewportChangedViaDelegatedScrolling(WebCore::ScrollingNodeID, const WebCore::FloatRect&amp; fixedPositionRect, double scale);
</span><span class="cx"> 
</span><ins>+    void currentSnapPointIndicesDidChange(WebCore::ScrollingNodeID, unsigned horizontal, unsigned vertical);
+
</ins><span class="cx">     // FIXME: expose the tree and pass this to that?
</span><span class="cx">     bool handleWheelEvent(const WebCore::PlatformWheelEvent&amp;);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -134,6 +134,11 @@
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RemoteScrollingTree::currentSnapPointIndicesDidChange(ScrollingNodeID nodeID, unsigned horizontal, unsigned vertical)
+{
+    m_scrollingCoordinatorProxy.currentSnapPointIndicesDidChange(nodeID, horizontal, vertical);
+}
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -48,6 +48,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void scrollingTreeNodeDidScroll(WebCore::ScrollingNodeID, const WebCore::FloatPoint&amp; scrollPosition, WebCore::SetOrSyncScrollingLayerPosition = WebCore::SyncScrollingLayerPosition) override;
</span><span class="cx">     virtual void scrollingTreeNodeRequestsScroll(WebCore::ScrollingNodeID, const WebCore::FloatPoint&amp; scrollPosition, bool representsProgrammaticScroll) override;
</span><ins>+    void currentSnapPointIndicesDidChange(WebCore::ScrollingNodeID, unsigned horizontal, unsigned vertical) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     explicit RemoteScrollingTree(RemoteScrollingCoordinatorProxy&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -44,6 +44,7 @@
</span><span class="cx">     void overflowScrollDidEnd();
</span><span class="cx">     void overflowScrollViewWillStartPanGesture();
</span><span class="cx">     void scrollViewDidScroll(const WebCore::FloatPoint&amp;, bool inUserInteration);
</span><ins>+    void currentSnapPointIndicesDidChange(unsigned horizontal, unsigned vertical);
</ins><span class="cx"> 
</span><span class="cx">     CALayer *scrollLayer() const { return m_scrollLayer.get(); }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -83,11 +83,29 @@
</span><span class="cx">     CGFloat horizontalTarget = targetContentOffset-&gt;x;
</span><span class="cx">     CGFloat verticalTarget = targetContentOffset-&gt;y;
</span><span class="cx"> 
</span><del>-    unsigned ignore;
-    if (!_scrollingTreeNode-&gt;horizontalSnapOffsets().isEmpty() &amp;&amp; horizontalTarget &gt;= 0 &amp;&amp; horizontalTarget &lt;= scrollView.contentSize.width)
-        targetContentOffset-&gt;x = closestSnapOffset&lt;float, CGFloat&gt;(_scrollingTreeNode-&gt;horizontalSnapOffsets(), horizontalTarget, velocity.x, ignore);
-    if (!_scrollingTreeNode-&gt;verticalSnapOffsets().isEmpty() &amp;&amp; verticalTarget &gt;= 0 &amp;&amp; verticalTarget &lt;= scrollView.contentSize.height)
-        targetContentOffset-&gt;y = closestSnapOffset&lt;float, CGFloat&gt;(_scrollingTreeNode-&gt;verticalSnapOffsets(), verticalTarget, velocity.y, ignore);
</del><ins>+    unsigned originalHorizontalSnapPosition = _scrollingTreeNode-&gt;currentHorizontalSnapPointIndex();
+    unsigned originalVerticalSnapPosition = _scrollingTreeNode-&gt;currentVerticalSnapPointIndex();
+
+    if (!_scrollingTreeNode-&gt;horizontalSnapOffsets().isEmpty()) {
+        unsigned index;
+        float potentialSnapPosition = closestSnapOffset&lt;float, CGFloat&gt;(_scrollingTreeNode-&gt;horizontalSnapOffsets(), horizontalTarget, velocity.x, index);
+        _scrollingTreeNode-&gt;setCurrentHorizontalSnapPointIndex(index);
+        if (horizontalTarget &gt;= 0 &amp;&amp; horizontalTarget &lt;= scrollView.contentSize.width)
+            targetContentOffset-&gt;x = potentialSnapPosition;
+    }
+
+    if (!_scrollingTreeNode-&gt;verticalSnapOffsets().isEmpty()) {
+        unsigned index;
+        float potentialSnapPosition = closestSnapOffset&lt;float, CGFloat&gt;(_scrollingTreeNode-&gt;verticalSnapOffsets(), verticalTarget, velocity.y, index);
+        _scrollingTreeNode-&gt;setCurrentVerticalSnapPointIndex(index);
+        if (verticalTarget &gt;= 0 &amp;&amp; verticalTarget &lt;= scrollView.contentSize.height)
+            targetContentOffset-&gt;y = potentialSnapPosition;
+    }
+
+    if (originalHorizontalSnapPosition != _scrollingTreeNode-&gt;currentHorizontalSnapPointIndex()
+        || originalVerticalSnapPosition != _scrollingTreeNode-&gt;currentVerticalSnapPointIndex()) {
+        _scrollingTreeNode-&gt;currentSnapPointIndicesDidChange(_scrollingTreeNode-&gt;currentHorizontalSnapPointIndex(), _scrollingTreeNode-&gt;currentVerticalSnapPointIndex());
+    }
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -283,6 +301,14 @@
</span><span class="cx">     scrollingTree().scrollPositionChangedViaDelegatedScrolling(scrollingNodeID(), scrollPosition, inUserInteration);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ScrollingTreeOverflowScrollingNodeIOS::currentSnapPointIndicesDidChange(unsigned horizontal, unsigned vertical)
+{
+    if (m_updatingFromStateNode)
+        return;
+    
+    scrollingTree().currentSnapPointIndicesDidChange(scrollingNodeID(), horizontal, vertical);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosRemoteScrollingCoordinatorProxyIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -116,15 +116,17 @@
</span><span class="cx"> void RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping(CGSize maxScrollOffsets, CGPoint velocity, CGFloat topInset, CGPoint* targetContentOffset)
</span><span class="cx"> {
</span><span class="cx">     // The bounds checking with maxScrollOffsets is to ensure that we won't interfere with rubber-banding when scrolling to the edge of the page.
</span><del>-    if (shouldSnapForMainFrameScrolling(WebCore::ScrollEventAxis::Horizontal) &amp;&amp; targetContentOffset-&gt;x &gt; 0 &amp;&amp; targetContentOffset-&gt;x &lt; maxScrollOffsets.width) {
</del><ins>+    if (shouldSnapForMainFrameScrolling(WebCore::ScrollEventAxis::Horizontal)) {
</ins><span class="cx">         float potentialSnapPosition = closestSnapOffsetForMainFrameScrolling(WebCore::ScrollEventAxis::Horizontal, targetContentOffset-&gt;x, velocity.x, m_currentHorizontalSnapPointIndex);
</span><del>-        targetContentOffset-&gt;x = std::min&lt;float&gt;(maxScrollOffsets.width, potentialSnapPosition);
</del><ins>+        if (targetContentOffset-&gt;x &gt; 0 &amp;&amp; targetContentOffset-&gt;x &lt; maxScrollOffsets.width)
+            targetContentOffset-&gt;x = std::min&lt;float&gt;(maxScrollOffsets.width, potentialSnapPosition);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (shouldSnapForMainFrameScrolling(WebCore::ScrollEventAxis::Vertical) &amp;&amp; targetContentOffset-&gt;y &gt; 0 &amp;&amp; targetContentOffset-&gt;y &lt; maxScrollOffsets.height) {
</del><ins>+    if (shouldSnapForMainFrameScrolling(WebCore::ScrollEventAxis::Vertical)) {
</ins><span class="cx">         float potentialSnapPosition = closestSnapOffsetForMainFrameScrolling(WebCore::ScrollEventAxis::Vertical, targetContentOffset-&gt;y, velocity.y, m_currentVerticalSnapPointIndex);
</span><span class="cx">         potentialSnapPosition -= topInset;
</span><del>-        targetContentOffset-&gt;y = std::min&lt;float&gt;(maxScrollOffsets.height, potentialSnapPosition);
</del><ins>+        if (targetContentOffset-&gt;y &gt; 0 &amp;&amp; targetContentOffset-&gt;y &lt; maxScrollOffsets.height)
+            targetContentOffset-&gt;y = std::min&lt;float&gt;(maxScrollOffsets.height, potentialSnapPosition);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.h (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.h        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.h        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx">     
</span><span class="cx">     // Respond to UI process changes.
</span><span class="cx">     void scrollPositionChangedForNode(WebCore::ScrollingNodeID, const WebCore::FloatPoint&amp; scrollPosition, bool syncLayerPosition);
</span><ins>+    void currentSnapPointIndicesChangedForNode(WebCore::ScrollingNodeID, unsigned horizontal, unsigned vertical);
</ins><span class="cx"> 
</span><span class="cx">     WebPage* m_webPage;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatormessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-# Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+# Copyright (C) 2014-2015 Apple Inc. All rights reserved.
</ins><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="cx"> # modification, are permitted provided that the following conditions
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> 
</span><span class="cx"> messages -&gt; RemoteScrollingCoordinator {
</span><span class="cx">     ScrollPositionChangedForNode(uint64_t nodeID, WebCore::FloatPoint scrollPosition, bool syncLayerPosition);
</span><ins>+    CurrentSnapPointIndicesChangedForNode(uint64_t nodeID, unsigned horizontal, unsigned vertical);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessScrollingRemoteScrollingCoordinatormm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.mm (185761 => 185762)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.mm        2015-06-19 19:10:51 UTC (rev 185761)
+++ trunk/Source/WebKit2/WebProcess/Scrolling/RemoteScrollingCoordinator.mm        2015-06-19 19:24:59 UTC (rev 185762)
</span><span class="lines">@@ -102,6 +102,11 @@
</span><span class="cx">     scheduleUpdateScrollPositionAfterAsyncScroll(nodeID, scrollPosition, false /* FIXME */, syncLayerPosition ? SyncScrollingLayerPosition : SetScrollingLayerPosition);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RemoteScrollingCoordinator::currentSnapPointIndicesChangedForNode(ScrollingNodeID nodeID, unsigned horizontal, unsigned vertical)
+{
+    setActiveScrollSnapIndices(nodeID, horizontal, vertical);
+}
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre>
</div>
</div>

</body>
</html>