<!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>[169063] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/169063">169063</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-05-19 13:23:10 -0700 (Mon, 19 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
https://bugs.webkit.org/show_bug.cgi?id=133022

Reviewed by Sam Weinig.

Source/WebCore:

In both the scrolling state tree and the scrolling tree, split the &quot;scrolling nodes&quot;
into FrameScrolling and OverflowScrolling nodes.

Move what was the &quot;viewportSize&quot; property onto the base class for the scrolling
nodes, calling it &quot;scrollableAreaSize&quot;.

Make minimum/maximumScrollPosition() virtual so we can share more code (and there
is more code sharing to be done in future).

* Configurations/WebCore.xcconfig: Remove ScrollingStateScrollingNodeMac.mm and ScrollingTreeScrollingNodeMac.mm
from the list, using #ifdefs in the file instead.
* WebCore.exp.in: Lots of exports.
* WebCore.xcodeproj/project.pbxproj: New files.
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
(WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
(WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
(WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
(WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
(WebCore::AsyncScrollingCoordinator::updateScrollingNode): Deleted.
(WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode): Deleted.
This tiny function didn't need to exist.
* page/scrolling/AsyncScrollingCoordinator.h:
* page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::updateFrameScrollingNode):
(WebCore::ScrollingCoordinator::updateOverflowScrollingNode):
(WebCore::ScrollingCoordinator::updateScrollingNode): Deleted.
* page/scrolling/ScrollingStateFrameScrollingNode.cpp: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp.
(WebCore::ScrollingStateFrameScrollingNode::create):
(WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
(WebCore::ScrollingStateFrameScrollingNode::~ScrollingStateFrameScrollingNode):
(WebCore::ScrollingStateFrameScrollingNode::clone):
(WebCore::ScrollingStateFrameScrollingNode::setFrameScaleFactor):
(WebCore::ScrollingStateFrameScrollingNode::setNonFastScrollableRegion):
(WebCore::ScrollingStateFrameScrollingNode::setWheelEventHandlerCount):
(WebCore::ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons):
(WebCore::ScrollingStateFrameScrollingNode::setScrollBehaviorForFixedElements):
(WebCore::ScrollingStateFrameScrollingNode::setHeaderHeight):
(WebCore::ScrollingStateFrameScrollingNode::setFooterHeight):
(WebCore::ScrollingStateFrameScrollingNode::setTopContentInset):
(WebCore::ScrollingStateFrameScrollingNode::setCounterScrollingLayer):
(WebCore::ScrollingStateFrameScrollingNode::setInsetClipLayer):
(WebCore::ScrollingStateFrameScrollingNode::setContentShadowLayer):
(WebCore::ScrollingStateFrameScrollingNode::setHeaderLayer):
(WebCore::ScrollingStateFrameScrollingNode::setFooterLayer):
(WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
(WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
* page/scrolling/ScrollingStateFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h.
* page/scrolling/ScrollingStateNode.h:
(WebCore::LayerRepresentation::layerID):
(WebCore::ScrollingStateNode::isFrameScrollingNode):
(WebCore::ScrollingStateNode::isOverflowScrollingNode):
* page/scrolling/ScrollingStateOverflowScrollingNode.cpp: Added.
(WebCore::ScrollingStateOverflowScrollingNode::create):
(WebCore::ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode):
(WebCore::ScrollingStateOverflowScrollingNode::~ScrollingStateOverflowScrollingNode):
(WebCore::ScrollingStateOverflowScrollingNode::clone):
(WebCore::ScrollingStateOverflowScrollingNode::setScrolledContentsLayer):
(WebCore::ScrollingStateOverflowScrollingNode::dumpProperties):
* page/scrolling/ScrollingStateOverflowScrollingNode.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
(WebCore::ScrollingStateOverflowScrollingNode::scrolledContentsLayer):
* page/scrolling/ScrollingStateScrollingNode.cpp:
(WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
(WebCore::ScrollingStateScrollingNode::setScrollableAreaSize):
(WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
(WebCore::ScrollingStateScrollingNode::dumpProperties):
(WebCore::ScrollingStateScrollingNode::create): Deleted.
(WebCore::ScrollingStateScrollingNode::clone): Deleted.
(WebCore::ScrollingStateScrollingNode::setViewportSize): Deleted.
(WebCore::ScrollingStateScrollingNode::setFrameScaleFactor): Deleted.
(WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion): Deleted.
(WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount): Deleted.
(WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons): Deleted.
(WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements): Deleted.
(WebCore::ScrollingStateScrollingNode::setHeaderHeight): Deleted.
(WebCore::ScrollingStateScrollingNode::setFooterHeight): Deleted.
(WebCore::ScrollingStateScrollingNode::setTopContentInset): Deleted.
(WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setInsetClipLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setContentShadowLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setHeaderLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setFooterLayer): Deleted.
(WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars): Deleted.
* page/scrolling/ScrollingStateScrollingNode.h:
(WebCore::ScrollingStateScrollingNode::scrollableAreaSize):
(WebCore::ScrollingStateScrollingNode::totalContentsSize):
* page/scrolling/ScrollingStateTree.cpp:
(WebCore::ScrollingStateTree::attachNode):
(WebCore::ScrollingStateTree::commit):
* page/scrolling/ScrollingStateTree.h:
(WebCore::ScrollingStateTree::rootStateNode):
(WebCore::ScrollingStateTree::setRootStateNode):
* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::commitNewTreeState):
* page/scrolling/ScrollingTreeFrameScrollingNode.cpp: Added.
(WebCore::ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode):
(WebCore::ScrollingTreeFrameScrollingNode::~ScrollingTreeFrameScrollingNode):
(WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren):
* page/scrolling/ScrollingTreeFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h.
(WebCore::ScrollingTreeFrameScrollingNode::updateLayersAfterDelegatedScroll):
(WebCore::ScrollingTreeFrameScrollingNode::synchronousScrollingReasons):
(WebCore::ScrollingTreeFrameScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
(WebCore::ScrollingTreeFrameScrollingNode::frameScaleFactor):
(WebCore::ScrollingTreeFrameScrollingNode::headerHeight):
(WebCore::ScrollingTreeFrameScrollingNode::footerHeight):
(WebCore::ScrollingTreeFrameScrollingNode::topContentInset):
(WebCore::ScrollingTreeFrameScrollingNode::scrollBehaviorForFixedElements):
* page/scrolling/ScrollingTreeNode.h:
(WebCore::ScrollingTreeNode::isFrameScrollingNode):
(WebCore::ScrollingTreeNode::isOverflowScrollingNode):
* page/scrolling/ScrollingTreeOverflowScrollingNode.cpp: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
(WebCore::ScrollingTreeOverflowScrollingNode::ScrollingTreeOverflowScrollingNode):
(WebCore::ScrollingTreeOverflowScrollingNode::~ScrollingTreeOverflowScrollingNode):
* page/scrolling/ScrollingTreeOverflowScrollingNode.h: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
* page/scrolling/ScrollingTreeScrollingNode.cpp:
(WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
(WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
(WebCore::ScrollingTreeScrollingNode::updateAfterChildren):
(WebCore::ScrollingTreeScrollingNode::setScrollPosition):
(WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints):
(WebCore::ScrollingTreeScrollingNode::minimumScrollPosition):
(WebCore::ScrollingTreeScrollingNode::maximumScrollPosition):
* page/scrolling/ScrollingTreeScrollingNode.h:
(WebCore::ScrollingTreeScrollingNode::scrollableAreaSize):
(WebCore::ScrollingTreeScrollingNode::totalContentsSize):
(WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
(WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
(WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons): Deleted.
(WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously): Deleted.
(WebCore::ScrollingTreeScrollingNode::viewportSize): Deleted.
(WebCore::ScrollingTreeScrollingNode::frameScaleFactor): Deleted.
(WebCore::ScrollingTreeScrollingNode::headerHeight): Deleted.
(WebCore::ScrollingTreeScrollingNode::footerHeight): Deleted.
(WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements): Deleted.
(WebCore::ScrollingTreeScrollingNode::topContentInset): Deleted.
* page/scrolling/ios/ScrollingCoordinatorIOS.mm:
(WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
* page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h.
(WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer):
* page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm.
(WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::ScrollingTreeFrameScrollingNodeIOS):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::~ScrollingTreeFrameScrollingNodeIOS):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterDelegatedScroll):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::minimumScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::maximumScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollBy):
(WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
* page/scrolling/mac/ScrollingCoordinatorMac.mm:
(WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
* page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
(WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h.
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm.
(WebCore::ScrollingTreeFrameScrollingNodeMac::create):
(WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
(WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac):
(WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
(WebCore::ScrollingTreeFrameScrollingNodeMac::updateAfterChildren):
(WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
(WebCore::ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching):
(WebCore::ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching):
(WebCore::ScrollingTreeFrameScrollingNodeMac::stretchAmount):
(WebCore::ScrollingTreeFrameScrollingNodeMac::pinnedInDirection):
(WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollHorizontally):
(WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollVertically):
(WebCore::ScrollingTreeFrameScrollingNodeMac::shouldRubberBandInDirection):
(WebCore::ScrollingTreeFrameScrollingNodeMac::absoluteScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollBy):
(WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints):
(WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer):
(WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer):
(WebCore::ScrollingTreeFrameScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
(WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
(WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange):
(WebCore::ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::maximumScrollPosition):
(WebCore::ScrollingTreeFrameScrollingNodeMac::scrollBy):
(WebCore::ScrollingTreeFrameScrollingNodeMac::scrollByWithoutContentEdgeConstraints):
(WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState):
(WebCore::ScrollingTreeFrameScrollingNodeMac::logExposedUnfilledArea):
(WebCore::logThreadedScrollingMode):
(WebCore::logWheelEventHandlerCountChanged):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

Source/WebKit2:

In both the scrolling state tree and the scrolling tree, split the &quot;scrolling nodes&quot;
into FrameScrolling and OverflowScrolling nodes.

Move what was the &quot;viewportSize&quot; property onto the base class for the scrolling
nodes, calling it &quot;scrollableAreaSize&quot;.

Make minimum/maximumScrollPosition() virtual so we can share more code (and there
is more code sharing to be done in future).

* Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
(ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::encode):
(ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::encode):
(ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::encode):
(ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::decode):
(ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::decode):
(ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::decode):
(WebKit::encodeNodeAndDescendants):
(WebKit::RemoteScrollingCoordinatorTransaction::decode):
(WebKit::RemoteScrollingTreeTextStream::dump):
* UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
* UIProcess/Scrolling/RemoteScrollingTree.cpp:
(WebKit::RemoteScrollingTree::createNode):
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollLayer):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterViewportChange):
* UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition):
(WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll):
* UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
(WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

LayoutTests:

Updated for new node name. No geometry changes.

* platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt:
* platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt:
* platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt:
* platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingclampoutofboundsscrollsexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedabsoluteinsidefixedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedabsoluteinsideoutofviewfixedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedinoverflowexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedpositionoutofviewexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedpositionoutofviewnegativezindexexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedfourbarsexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedfourbarswithheaderandfooterexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixednegativescrolloffsetexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixednegativescrolloffsetinviewexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixednestedfixedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingfixedpercentageinsidefixedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingtreeafterscrollexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingtreeslowscrollingexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingstickynegativescrolloffsetexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingstickystickyhorizontalexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsWebCorexcconfig">trunk/Source/WebCore/Configurations/WebCore.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</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="#trunkSourceWebCorepagescrollingScrollingStateNodeh">trunk/Source/WebCore/page/scrolling/ScrollingStateNode.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="#trunkSourceWebCorepagescrollingScrollingStateTreecpp">trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateTreeh">trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreecpp">trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeNodeh">trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.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="#trunkSourceWebCorepagescrollingiosScrollingCoordinatorIOSmm">trunk/Source/WebCore/page/scrolling/ios/ScrollingCoordinatorIOS.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingCoordinatorMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.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="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreecpp">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp</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>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateFrameScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateFrameScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateOverflowScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateOverflowScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeFrameScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeFrameScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeOverflowScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeOverflowScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeFrameScrollingNodeIOSh">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeFrameScrollingNodeIOSmm">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingStateFrameScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMach">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSh">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSmm">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingStateScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMach">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/ChangeLog        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
+        https://bugs.webkit.org/show_bug.cgi?id=133022
+
+        Reviewed by Sam Weinig.
+        
+        Updated for new node name. No geometry changes.
+
+        * platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt:
+        * platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt:
+        * platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt:
+
</ins><span class="cx"> 2014-05-19  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix Element.offset* and .client* rounding mismatches after r168868.
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingclampoutofboundsscrollsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,38 +1,38 @@
</span><span class="cx"> Attempted scroll to -5000, 0
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx"> )
</span><span class="cx"> 
</span><span class="cx"> Attempted scroll to 0, -5000
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx"> )
</span><span class="cx"> 
</span><span class="cx"> Attempted scroll to -5000, -5000
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx"> )
</span><span class="cx"> 
</span><span class="cx"> Attempted scroll to 10000, 0
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx">   (requested scroll position 4223 0)
</span><span class="cx"> )
</span><span class="cx"> 
</span><span class="cx"> Attempted scroll to 0, 10000
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx">   (requested scroll position 0 4436)
</span><span class="cx"> )
</span><span class="cx"> 
</span><span class="cx"> Attempted scroll to 10000, 10000
</span><del>-(Scrolling node
-  (viewport rect 785 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 585)
</ins><span class="cx">   (contents size 5008 5021)
</span><span class="cx">   (requested scroll position 4223 4436)
</span><span class="cx"> )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedabsoluteinsidefixedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-fixed-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2710)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 1
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedabsoluteinsideoutofviewfixedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/absolute-inside-out-of-view-fixed-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2513)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 1
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedinoverflowexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-in-overflow-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2213)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 1
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedpositionoutofviewexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 1021)
</span><span class="cx">   (children 1
</span><span class="cx">     (Fixed node
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedfixedpositionoutofviewnegativezindexexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/fixed-position-out-of-view-negative-zindex-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 1021)
</span><span class="cx">   (children 1
</span><span class="cx">     (Fixed node
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedfourbarsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2221)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 4
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedfourbarswithheaderandfooterexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/four-bars-with-header-and-footer-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2421)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 4
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixednegativescrolloffsetexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2221)
</span><span class="cx">   (children 1
</span><span class="cx">     (Fixed node
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixednegativescrolloffsetinviewexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/negative-scroll-offset-in-view-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2221)
</span><span class="cx">   (children 1
</span><span class="cx">     (Fixed node
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixednestedfixedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/nested-fixed-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2213)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 1
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingfixedpercentageinsidefixedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/fixed/percentage-inside-fixed-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2513)
</span><span class="cx">   (requested scroll position 0 200)
</span><span class="cx">   (children 1
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingtreeafterscrollexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-after-scroll-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 5021)
</span><span class="cx">   (requested scroll position 0 3000)
</span><span class="cx"> )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingtreeslowscrollingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling-tree-slow-scrolling-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 800 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 800 600)
</ins><span class="cx">   (contents size 800 600)
</span><span class="cx">   (Scrolling on main thread because: Has slow repaint objects)
</span><span class="cx"> )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingstickynegativescrolloffsetexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/negative-scroll-offset-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>-(Scrolling node
-  (viewport rect 785 600)
</del><ins>+(Frame scrolling node
+  (scrollable area size 785 600)
</ins><span class="cx">   (contents size 785 2216)
</span><span class="cx">   (children 1
</span><span class="cx">     (Sticky node
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingstickystickyhorizontalexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/sticky/sticky-horizontal-expected.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> Left sticky Right sticky Left % sticky Right % sticky Left and Right Left and Right %
</span><del>-(Scrolling node
-  (viewport rect 800 585)
</del><ins>+(Frame scrolling node
+  (scrollable area size 800 585)
</ins><span class="cx">   (contents size 2008 585)
</span><span class="cx">   (requested scroll position 800 0)
</span><span class="cx">   (children 6
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1935,6 +1935,9 @@
</span><span class="cx">     page/scrolling/ScrollingStateFixedNode.cpp
</span><span class="cx">     page/scrolling/ScrollingStateNode.cpp
</span><span class="cx">     page/scrolling/ScrollingStateScrollingNode.cpp
</span><ins>+    page/scrolling/ScrollingStateFrameScrollingNode.cpp
+    page/scrolling/ScrollingStateOverflowScrollingNode.cpp
+    page/scrolling/ScrollingStateScrollingNode.cpp
</ins><span class="cx">     page/scrolling/ScrollingStateStickyNode.cpp
</span><span class="cx">     page/scrolling/ScrollingStateTree.cpp
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/ChangeLog        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,5 +1,210 @@
</span><span class="cx"> 2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
+        https://bugs.webkit.org/show_bug.cgi?id=133022
+
+        Reviewed by Sam Weinig.
+
+        In both the scrolling state tree and the scrolling tree, split the &quot;scrolling nodes&quot;
+        into FrameScrolling and OverflowScrolling nodes.
+        
+        Move what was the &quot;viewportSize&quot; property onto the base class for the scrolling
+        nodes, calling it &quot;scrollableAreaSize&quot;.
+        
+        Make minimum/maximumScrollPosition() virtual so we can share more code (and there
+        is more code sharing to be done in future).
+
+        * Configurations/WebCore.xcconfig: Remove ScrollingStateScrollingNodeMac.mm and ScrollingTreeScrollingNodeMac.mm
+        from the list, using #ifdefs in the file instead.
+        * WebCore.exp.in: Lots of exports.
+        * WebCore.xcodeproj/project.pbxproj: New files.
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
+        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
+        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
+        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
+        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
+        (WebCore::AsyncScrollingCoordinator::updateScrollingNode): Deleted.
+        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode): Deleted.
+        This tiny function didn't need to exist.
+        * page/scrolling/AsyncScrollingCoordinator.h:
+        * page/scrolling/ScrollingCoordinator.h:
+        (WebCore::ScrollingCoordinator::updateFrameScrollingNode):
+        (WebCore::ScrollingCoordinator::updateOverflowScrollingNode):
+        (WebCore::ScrollingCoordinator::updateScrollingNode): Deleted.
+        * page/scrolling/ScrollingStateFrameScrollingNode.cpp: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp.
+        (WebCore::ScrollingStateFrameScrollingNode::create):
+        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
+        (WebCore::ScrollingStateFrameScrollingNode::~ScrollingStateFrameScrollingNode):
+        (WebCore::ScrollingStateFrameScrollingNode::clone):
+        (WebCore::ScrollingStateFrameScrollingNode::setFrameScaleFactor):
+        (WebCore::ScrollingStateFrameScrollingNode::setNonFastScrollableRegion):
+        (WebCore::ScrollingStateFrameScrollingNode::setWheelEventHandlerCount):
+        (WebCore::ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons):
+        (WebCore::ScrollingStateFrameScrollingNode::setScrollBehaviorForFixedElements):
+        (WebCore::ScrollingStateFrameScrollingNode::setHeaderHeight):
+        (WebCore::ScrollingStateFrameScrollingNode::setFooterHeight):
+        (WebCore::ScrollingStateFrameScrollingNode::setTopContentInset):
+        (WebCore::ScrollingStateFrameScrollingNode::setCounterScrollingLayer):
+        (WebCore::ScrollingStateFrameScrollingNode::setInsetClipLayer):
+        (WebCore::ScrollingStateFrameScrollingNode::setContentShadowLayer):
+        (WebCore::ScrollingStateFrameScrollingNode::setHeaderLayer):
+        (WebCore::ScrollingStateFrameScrollingNode::setFooterLayer):
+        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
+        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
+        * page/scrolling/ScrollingStateFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h.
+        * page/scrolling/ScrollingStateNode.h:
+        (WebCore::LayerRepresentation::layerID):
+        (WebCore::ScrollingStateNode::isFrameScrollingNode):
+        (WebCore::ScrollingStateNode::isOverflowScrollingNode):
+        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp: Added.
+        (WebCore::ScrollingStateOverflowScrollingNode::create):
+        (WebCore::ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode):
+        (WebCore::ScrollingStateOverflowScrollingNode::~ScrollingStateOverflowScrollingNode):
+        (WebCore::ScrollingStateOverflowScrollingNode::clone):
+        (WebCore::ScrollingStateOverflowScrollingNode::setScrolledContentsLayer):
+        (WebCore::ScrollingStateOverflowScrollingNode::dumpProperties):
+        * page/scrolling/ScrollingStateOverflowScrollingNode.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
+        (WebCore::ScrollingStateOverflowScrollingNode::scrolledContentsLayer):
+        * page/scrolling/ScrollingStateScrollingNode.cpp:
+        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
+        (WebCore::ScrollingStateScrollingNode::setScrollableAreaSize):
+        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
+        (WebCore::ScrollingStateScrollingNode::dumpProperties):
+        (WebCore::ScrollingStateScrollingNode::create): Deleted.
+        (WebCore::ScrollingStateScrollingNode::clone): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setViewportSize): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setHeaderHeight): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setFooterHeight): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setTopContentInset): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setInsetClipLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setContentShadowLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setHeaderLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setFooterLayer): Deleted.
+        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars): Deleted.
+        * page/scrolling/ScrollingStateScrollingNode.h:
+        (WebCore::ScrollingStateScrollingNode::scrollableAreaSize):
+        (WebCore::ScrollingStateScrollingNode::totalContentsSize):
+        * page/scrolling/ScrollingStateTree.cpp:
+        (WebCore::ScrollingStateTree::attachNode):
+        (WebCore::ScrollingStateTree::commit):
+        * page/scrolling/ScrollingStateTree.h:
+        (WebCore::ScrollingStateTree::rootStateNode):
+        (WebCore::ScrollingStateTree::setRootStateNode):
+        * page/scrolling/ScrollingTree.cpp:
+        (WebCore::ScrollingTree::commitNewTreeState):
+        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp: Added.
+        (WebCore::ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode):
+        (WebCore::ScrollingTreeFrameScrollingNode::~ScrollingTreeFrameScrollingNode):
+        (WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren):
+        * page/scrolling/ScrollingTreeFrameScrollingNode.h: Copied from Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h.
+        (WebCore::ScrollingTreeFrameScrollingNode::updateLayersAfterDelegatedScroll):
+        (WebCore::ScrollingTreeFrameScrollingNode::synchronousScrollingReasons):
+        (WebCore::ScrollingTreeFrameScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
+        (WebCore::ScrollingTreeFrameScrollingNode::frameScaleFactor):
+        (WebCore::ScrollingTreeFrameScrollingNode::headerHeight):
+        (WebCore::ScrollingTreeFrameScrollingNode::footerHeight):
+        (WebCore::ScrollingTreeFrameScrollingNode::topContentInset):
+        (WebCore::ScrollingTreeFrameScrollingNode::scrollBehaviorForFixedElements):
+        * page/scrolling/ScrollingTreeNode.h:
+        (WebCore::ScrollingTreeNode::isFrameScrollingNode):
+        (WebCore::ScrollingTreeNode::isOverflowScrollingNode):
+        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
+        (WebCore::ScrollingTreeOverflowScrollingNode::ScrollingTreeOverflowScrollingNode):
+        (WebCore::ScrollingTreeOverflowScrollingNode::~ScrollingTreeOverflowScrollingNode):
+        * page/scrolling/ScrollingTreeOverflowScrollingNode.h: Copied from Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h.
+        * page/scrolling/ScrollingTreeScrollingNode.cpp:
+        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
+        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
+        (WebCore::ScrollingTreeScrollingNode::updateAfterChildren):
+        (WebCore::ScrollingTreeScrollingNode::setScrollPosition):
+        (WebCore::ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints):
+        (WebCore::ScrollingTreeScrollingNode::minimumScrollPosition):
+        (WebCore::ScrollingTreeScrollingNode::maximumScrollPosition):
+        * page/scrolling/ScrollingTreeScrollingNode.h:
+        (WebCore::ScrollingTreeScrollingNode::scrollableAreaSize):
+        (WebCore::ScrollingTreeScrollingNode::totalContentsSize):
+        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
+        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
+        (WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::viewportSize): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::frameScaleFactor): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::headerHeight): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::footerHeight): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements): Deleted.
+        (WebCore::ScrollingTreeScrollingNode::topContentInset): Deleted.
+        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
+        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
+        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h.
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer):
+        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Renamed from Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm.
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::ScrollingTreeFrameScrollingNodeIOS):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::~ScrollingTreeFrameScrollingNodeIOS):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterDelegatedScroll):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::minimumScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::maximumScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollBy):
+        (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
+        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
+        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
+        * page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm.
+        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
+        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h.
+        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm.
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::create):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateAfterChildren):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::stretchAmount):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::pinnedInDirection):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollHorizontally):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::canScrollVertically):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::shouldRubberBandInDirection):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::absoluteScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollBy):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::maximumScrollPosition):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollBy):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollByWithoutContentEdgeConstraints):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState):
+        (WebCore::ScrollingTreeFrameScrollingNodeMac::logExposedUnfilledArea):
+        (WebCore::logThreadedScrollingMode):
+        (WebCore::logWheelEventHandlerCountChanged):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
+
+2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
</ins><span class="cx">         Images missing sometimes with composited clipping layers
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=133065
</span><span class="cx">         &lt;rdar://problem/15224559&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsWebCorexcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/WebCore.xcconfig (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/WebCore.xcconfig        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/Configurations/WebCore.xcconfig        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -112,6 +112,6 @@
</span><span class="cx"> JAVASCRIPTCORE_PRIVATE_HEADERS_engineering = $(BUILT_PRODUCTS_DIR)/JavaScriptCore.framework/PrivateHeaders;
</span><span class="cx"> 
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES = $(EXCLUDED_SOURCE_FILE_NAMES_$(PLATFORM_NAME));
</span><del>-EXCLUDED_SOURCE_FILE_NAMES_iphoneos = *.tiff *Cursor.png AccessibilityObjectMac.mm AXObjectCacheMac.mm ColorMac.mm Cursor.cpp CursorMac.mm DataTransferMac.mm EditorMac.mm EventHandlerMac.mm EventLoopMac.mm GeolocationServiceMac.mm GraphicsContext3DOpenGLES.cpp IconDatabase.cpp IconMac.mm KillRingMac.mm LocalCurrentGraphicsContext.mm MIMETypeRegistryMac.mm MediaPlayerPrivateQTKit.mm NSScrollerImpDetails.mm NetworkStateNotifierMac.cpp PasteboardMac.mm PlatformEventFactoryMac.mm PlatformMouseEventMac.mm PlatformPasteboardMac.mm PlatformScreenMac.mm PlatformSpeechSynthesizerMac.mm PluginMainThreadScheduler.cpp RunLoopMac.mm SSLKeyGeneratorMac.cpp ScrollingCoordinatorMac.mm ScrollingStateScrollingNodeMac.mm ScrollingTreeScrollingNodeMac.mm ScrollViewMac.mm ScrollbarThemeMac.mm SharedTimerMac.mm SoundMac.mm SystemTimeMac.cpp ThemeMac.mm ThreadCheck.mm UserAgentMac.mm WebAccessibilityObjectWrapperMac.mm WebCoreSystemInterface.mm WebCoreURLResponse.mm WebCoreView.m WebFontCache.mm WebVideoFullscreenController.mm WebVideoFullscreenHUDWindowController.mm WebWindowAnimation.mm WidgetMac.mm mac/LayerPool.mm DisplayRefreshMonitorMac.cpp;
</del><ins>+EXCLUDED_SOURCE_FILE_NAMES_iphoneos = *.tiff *Cursor.png AccessibilityObjectMac.mm AXObjectCacheMac.mm ColorMac.mm Cursor.cpp CursorMac.mm DataTransferMac.mm EditorMac.mm EventHandlerMac.mm EventLoopMac.mm GeolocationServiceMac.mm GraphicsContext3DOpenGLES.cpp IconDatabase.cpp IconMac.mm KillRingMac.mm LocalCurrentGraphicsContext.mm MIMETypeRegistryMac.mm MediaPlayerPrivateQTKit.mm NSScrollerImpDetails.mm NetworkStateNotifierMac.cpp PasteboardMac.mm PlatformEventFactoryMac.mm PlatformMouseEventMac.mm PlatformPasteboardMac.mm PlatformScreenMac.mm PlatformSpeechSynthesizerMac.mm PluginMainThreadScheduler.cpp RunLoopMac.mm SSLKeyGeneratorMac.cpp ScrollingCoordinatorMac.mm ScrollViewMac.mm ScrollbarThemeMac.mm SharedTimerMac.mm SoundMac.mm SystemTimeMac.cpp ThemeMac.mm ThreadCheck.mm UserAgentMac.mm WebAccessibilityObjectWrapperMac.mm WebCoreSystemInterface.mm WebCoreURLResponse.mm WebCoreView.m WebFontCache.mm WebVideoFullscreenController.mm WebVideoFullscreenHUDWindowController.mm WebWindowAnimation.mm WidgetMac.mm mac/LayerPool.mm DisplayRefreshMonitorMac.cpp;
</ins><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES_iphonesimulator = $(EXCLUDED_SOURCE_FILE_NAMES_iphoneos);
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES_macosx = *IOS.h *IOS.cpp *IOS.mm JSTouch* JSGesture* DOMGesture* DOMTouch* KillRingNone.cpp WAKAppKitStubs.h WAKClipView.h WAKResponder.h WAKScrollView.h WAKView.h WAKViewPrivate.h WAKWindow.h WKContentObservation.h WKGraphics.h WKTypes.h WKUtilities.h WKView.h WKViewPrivate.h WebCoreThread.h WebCoreThreadMessage.h WebCoreThreadRun.h WebCoreThreadSystemInterface.h;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -2814,10 +2814,11 @@
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator17attachToStateTreeENS_17ScrollingNodeTypeEyy
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator18syncChildPositionsERKNS_10LayoutRectE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator19detachFromStateTreeEy
</span><del>-__ZN7WebCore25AsyncScrollingCoordinator19updateScrollingNodeEyPNS_13GraphicsLayerES2_S2_S2_PKNS_20ScrollingCoordinator17ScrollingGeometryE
</del><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator22frameViewLayoutUpdatedEPNS_9FrameViewE
</span><ins>+__ZN7WebCore25AsyncScrollingCoordinator24updateFrameScrollingNodeEyPNS_13GraphicsLayerES2_S2_PKNS_20ScrollingCoordinator17ScrollingGeometryE
</ins><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator27frameViewRootLayerDidChangeEPNS_9FrameViewE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator27requestScrollPositionUpdateEPNS_9FrameViewERKNS_8IntPointE
</span><ins>+__ZN7WebCore25AsyncScrollingCoordinator27updateOverflowScrollingNodeEyPNS_13GraphicsLayerES2_PKNS_20ScrollingCoordinator17ScrollingGeometryE
</ins><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator29updateViewportConstrainedNodeEyRKNS_19ViewportConstraintsEPNS_13GraphicsLayerE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator30setSynchronousScrollingReasonsEj
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator37scrollableAreaScrollbarLayerDidChangeEPNS_14ScrollableAreaENS_20ScrollbarOrientationE
</span><span class="lines">@@ -2826,43 +2827,43 @@
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator44scheduleUpdateScrollPositionAfterAsyncScrollEyRKNS_10FloatPointEbNS_31SetOrSyncScrollingLayerPositionE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinatorC2EPNS_4PageE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinatorD2Ev
</span><del>-__ZN7WebCore27ScrollingStateScrollingNode14setFooterLayerERKNS_19LayerRepresentationE
-__ZN7WebCore27ScrollingStateScrollingNode14setHeaderLayerERKNS_19LayerRepresentationE
-__ZN7WebCore27ScrollingStateScrollingNode15setFooterHeightEi
-__ZN7WebCore27ScrollingStateScrollingNode15setHeaderHeightEi
</del><ins>+__ZN7WebCore26ScrollingTreeScrollingNode17setScrollPositionERKNS_10FloatPointE
+__ZN7WebCore26ScrollingTreeScrollingNode19updateAfterChildrenERKNS_18ScrollingStateNodeE
+__ZN7WebCore26ScrollingTreeScrollingNode20updateBeforeChildrenERKNS_18ScrollingStateNodeE
+__ZN7WebCore26ScrollingTreeScrollingNode46setScrollPositionWithoutContentEdgeConstraintsERKNS_10FloatPointE
</ins><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode15setScrollOriginERKNS_8IntPointE
</span><del>-__ZN7WebCore27ScrollingStateScrollingNode15setViewportSizeERKNS_9FloatSizeE
-__ZN7WebCore27ScrollingStateScrollingNode17setInsetClipLayerERKNS_19LayerRepresentationE
</del><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode17setScrollPositionERKNS_10FloatPointE
</span><del>-__ZN7WebCore27ScrollingStateScrollingNode18setTopContentInsetEf
-__ZN7WebCore27ScrollingStateScrollingNode19setFrameScaleFactorEf
-__ZN7WebCore27ScrollingStateScrollingNode20setTotalContentsSizeERKNS_7IntSizeE
-__ZN7WebCore27ScrollingStateScrollingNode21setContentShadowLayerERKNS_19LayerRepresentationE
-__ZN7WebCore27ScrollingStateScrollingNode24setCounterScrollingLayerERKNS_19LayerRepresentationE
-__ZN7WebCore27ScrollingStateScrollingNode24setScrolledContentsLayerERKNS_19LayerRepresentationE
-__ZN7WebCore27ScrollingStateScrollingNode25setWheelEventHandlerCountEj
-__ZN7WebCore27ScrollingStateScrollingNode26setNonFastScrollableRegionERKNS_6RegionE
</del><ins>+__ZN7WebCore27ScrollingStateScrollingNode20setTotalContentsSizeERKNS_9FloatSizeE
+__ZN7WebCore27ScrollingStateScrollingNode21setScrollableAreaSizeERKNS_9FloatSizeE
</ins><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode26setRequestedScrollPositionERKNS_10FloatPointEb
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode27setScrollableAreaParametersERKNS_24ScrollableAreaParametersE
</span><del>-__ZN7WebCore27ScrollingStateScrollingNode30setSynchronousScrollingReasonsEj
-__ZN7WebCore27ScrollingStateScrollingNode33setScrollBehaviorForFixedElementsENS_30ScrollBehaviorForFixedElementsE
</del><ins>+__ZN7WebCore32ScrollingStateFrameScrollingNode14setFooterLayerERKNS_19LayerRepresentationE
+__ZN7WebCore32ScrollingStateFrameScrollingNode14setHeaderLayerERKNS_19LayerRepresentationE
+__ZN7WebCore32ScrollingStateFrameScrollingNode15setFooterHeightEi
+__ZN7WebCore32ScrollingStateFrameScrollingNode15setHeaderHeightEi
+__ZN7WebCore32ScrollingStateFrameScrollingNode17setInsetClipLayerERKNS_19LayerRepresentationE
+__ZN7WebCore32ScrollingStateFrameScrollingNode18setTopContentInsetEf
+__ZN7WebCore32ScrollingStateFrameScrollingNode19setFrameScaleFactorEf
+__ZN7WebCore32ScrollingStateFrameScrollingNode21setContentShadowLayerERKNS_19LayerRepresentationE
+__ZN7WebCore32ScrollingStateFrameScrollingNode24setCounterScrollingLayerERKNS_19LayerRepresentationE
+__ZN7WebCore32ScrollingStateFrameScrollingNode25setWheelEventHandlerCountEj
+__ZN7WebCore32ScrollingStateFrameScrollingNode26setNonFastScrollableRegionERKNS_6RegionE
+__ZN7WebCore32ScrollingStateFrameScrollingNode30setSynchronousScrollingReasonsEj
+__ZN7WebCore32ScrollingStateFrameScrollingNode33setScrollBehaviorForFixedElementsENS_30ScrollBehaviorForFixedElementsE
+__ZN7WebCore34ScrollingTreeOverflowScrollingNodeC2ERNS_13ScrollingTreeEy
+__ZN7WebCore34ScrollingTreeOverflowScrollingNodeD2Ev
+__ZN7WebCore35ScrollingStateOverflowScrollingNode24setScrolledContentsLayerERKNS_19LayerRepresentationE
</ins><span class="cx"> __ZNK7WebCore25AsyncScrollingCoordinator24scrollingStateTreeAsTextEv
</span><ins>+__ZNK7WebCore26ScrollingTreeScrollingNode21maximumScrollPositionEv
+__ZNK7WebCore26ScrollingTreeScrollingNode21minimumScrollPositionEv
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
</span><del>-__ZN7WebCore29ScrollingTreeScrollingNodeMac6createERNS_13ScrollingTreeENS_17ScrollingNodeTypeEy
</del><ins>+__ZN7WebCore34ScrollingTreeFrameScrollingNodeMac6createERNS_13ScrollingTreeEy
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
</span><del>-__ZN7WebCore29ScrollingTreeScrollingNodeIOS17setScrollPositionERKNS_10FloatPointE
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS19updateAfterChildrenERKNS_18ScrollingStateNodeE
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS20updateBeforeChildrenERKNS_18ScrollingStateNodeE
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS31updateLayersAfterViewportChangeERKNS_9FloatRectEd
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS32updateLayersAfterDelegatedScrollERKNS_10FloatPointE
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS46setScrollPositionWithoutContentEdgeConstraintsERKNS_10FloatPointE
-__ZN7WebCore29ScrollingTreeScrollingNodeIOS6createERNS_13ScrollingTreeENS_17ScrollingNodeTypeEy
-__ZN7WebCore29ScrollingTreeScrollingNodeIOSC2ERNS_13ScrollingTreeENS_17ScrollingNodeTypeEy
-__ZN7WebCore29ScrollingTreeScrollingNodeIOSD2Ev
</del><ins>+__ZN7WebCore34ScrollingTreeFrameScrollingNodeIOS6createERNS_13ScrollingTreeEy
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(AVFOUNDATION)
</span><span class="lines">@@ -3231,7 +3232,9 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(POINTER_LOCK)
</span><span class="cx"> __ZN7WebCore10MouseEvent6createERKN3WTF12AtomicStringEbbdNS1_10PassRefPtrINS_9DOMWindowEEEiiiiiiibbbbtNS5_INS_11EventTargetEEENS5_INS_12DataTransferEEEb
</span><del>-#else
</del><ins>+#endif
+
+#if !ENABLE(POINTER_LOCK)
</ins><span class="cx"> __ZN7WebCore10MouseEvent6createERKN3WTF12AtomicStringEbbdNS1_10PassRefPtrINS_9DOMWindowEEEiiiiibbbbtNS5_INS_11EventTargetEEENS5_INS_12DataTransferEEEb
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -520,7 +520,7 @@
</span><span class="cx">                 0F97A658155DA81E00FADD4C /* DisplayRefreshMonitorIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F97A657155DA81E00FADD4C /* DisplayRefreshMonitorIOS.mm */; };
</span><span class="cx">                 0FA24D79162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FA24D77162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp */; };
</span><span class="cx">                 0FA24D7A162DF91900A3F4C0 /* GraphicsLayerUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FA24D78162DF91900A3F4C0 /* GraphicsLayerUpdater.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                0FA88EBD16A8D1BD00F99984 /* ScrollingStateScrollingNodeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FA88EBC16A8D1BD00F99984 /* ScrollingStateScrollingNodeMac.mm */; };
</del><ins>+                0FA88EBD16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */; };
</ins><span class="cx">                 0FB6252E18DE1B1500A07C05 /* GeometryUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FB6252C18DE1B1500A07C05 /* GeometryUtilities.cpp */; };
</span><span class="cx">                 0FB6252F18DE1B1500A07C05 /* GeometryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB6252D18DE1B1500A07C05 /* GeometryUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0FB8890A167D2FA10010CDA5 /* ScrollingTreeStickyNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -531,8 +531,8 @@
</span><span class="cx">                 0FC4E40E187F82E10045882C /* ScrollingCoordinatorIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FC4E408187F82E10045882C /* ScrollingCoordinatorIOS.mm */; };
</span><span class="cx">                 0FC4E40F187F82E10045882C /* ScrollingTreeIOS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC4E409187F82E10045882C /* ScrollingTreeIOS.cpp */; };
</span><span class="cx">                 0FC4E410187F82E10045882C /* ScrollingTreeIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4E40A187F82E10045882C /* ScrollingTreeIOS.h */; };
</span><del>-                0FC4E411187F82E10045882C /* ScrollingTreeScrollingNodeIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4E40B187F82E10045882C /* ScrollingTreeScrollingNodeIOS.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                0FC4E412187F82E10045882C /* ScrollingTreeScrollingNodeIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FC4E40C187F82E10045882C /* ScrollingTreeScrollingNodeIOS.mm */; };
</del><ins>+                0FC4E411187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC4E40B187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                0FC4E412187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FC4E40C187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.mm */; };
</ins><span class="cx">                 0FCF33240F2B9715004B6795 /* ColorCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCF33230F2B9715004B6795 /* ColorCG.cpp */; };
</span><span class="cx">                 0FCF332E0F2B9A25004B6795 /* WebLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FCF332A0F2B9A25004B6795 /* WebLayer.mm */; };
</span><span class="cx">                 0FCF332F0F2B9A25004B6795 /* WebLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCF332B0F2B9A25004B6795 /* WebLayer.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -556,6 +556,14 @@
</span><span class="cx">                 0FDA7C271883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDA7C251883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.h */; };
</span><span class="cx">                 0FE71405142170B800DB33BA /* ScrollbarThemeMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */; };
</span><span class="cx">                 0FE71406142170B800DB33BA /* ScrollbarThemeMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE71404142170B800DB33BA /* ScrollbarThemeMock.h */; };
</span><ins>+                0FEA3E7B191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA3E79191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                0FEA3E7C191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEA3E7A191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.cpp */; };
+                0FEA3E7F191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEA3E7D191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.cpp */; };
+                0FEA3E80191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA3E7E191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                0FEA3E83191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEA3E81191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp */; };
+                0FEA3E84191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA3E82191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                0FEA3E87191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEA3E85191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.cpp */; };
+                0FEA3E88191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FEA3E86191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 0FF5025B102BA9010066F39A /* DOMStyleMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF50259102BA9010066F39A /* DOMStyleMedia.h */; };
</span><span class="cx">                 0FF5025C102BA9010066F39A /* DOMStyleMedia.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FF5025A102BA9010066F39A /* DOMStyleMedia.mm */; };
</span><span class="cx">                 0FF50263102BA92C0066F39A /* DOMStyleMediaInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF50262102BA92B0066F39A /* DOMStyleMediaInternal.h */; };
</span><span class="lines">@@ -3255,8 +3263,8 @@
</span><span class="cx">                 93C38C03164473DD00091EB2 /* ScrollingTreeFixedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 93C38C04164473DD00091EB2 /* ScrollingTreeFixedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93C38C02164473DD00091EB2 /* ScrollingTreeFixedNode.mm */; };
</span><span class="cx">                 93C442000F813AE100C1A634 /* CollectionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441FF0F813AE100C1A634 /* CollectionType.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                93C4A4151629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4A4131629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
-                93C4A4161629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93C4A4141629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.mm */; };
</del><ins>+                93C4A4151629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                93C4A4161629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */; };
</ins><span class="cx">                 93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */; };
</span><span class="cx">                 93C841F809CE855C00DFF5E5 /* DOMImplementationFront.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */; };
</span><span class="cx">                 93C841FF09CE858300DFF5E5 /* DOMImplementationFront.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */; };
</span><span class="lines">@@ -7391,7 +7399,7 @@
</span><span class="cx">                 0F97A657155DA81E00FADD4C /* DisplayRefreshMonitorIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DisplayRefreshMonitorIOS.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FA24D77162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsLayerUpdater.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FA24D78162DF91900A3F4C0 /* GraphicsLayerUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayerUpdater.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                0FA88EBC16A8D1BD00F99984 /* ScrollingStateScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingStateScrollingNodeMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingStateFrameScrollingNodeMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0FB6252C18DE1B1500A07C05 /* GeometryUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeometryUtilities.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FB6252D18DE1B1500A07C05 /* GeometryUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryUtilities.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeStickyNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -7402,8 +7410,8 @@
</span><span class="cx">                 0FC4E408187F82E10045882C /* ScrollingCoordinatorIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScrollingCoordinatorIOS.mm; path = ios/ScrollingCoordinatorIOS.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FC4E409187F82E10045882C /* ScrollingTreeIOS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollingTreeIOS.cpp; path = ios/ScrollingTreeIOS.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FC4E40A187F82E10045882C /* ScrollingTreeIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScrollingTreeIOS.h; path = ios/ScrollingTreeIOS.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                0FC4E40B187F82E10045882C /* ScrollingTreeScrollingNodeIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScrollingTreeScrollingNodeIOS.h; path = ios/ScrollingTreeScrollingNodeIOS.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-                0FC4E40C187F82E10045882C /* ScrollingTreeScrollingNodeIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScrollingTreeScrollingNodeIOS.mm; path = ios/ScrollingTreeScrollingNodeIOS.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                0FC4E40B187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScrollingTreeFrameScrollingNodeIOS.h; path = ios/ScrollingTreeFrameScrollingNodeIOS.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FC4E40C187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ScrollingTreeFrameScrollingNodeIOS.mm; path = ios/ScrollingTreeFrameScrollingNodeIOS.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0FCF33230F2B9715004B6795 /* ColorCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorCG.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCF332A0F2B9A25004B6795 /* WebLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebLayer.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCF332B0F2B9A25004B6795 /* WebLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebLayer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -7428,6 +7436,14 @@
</span><span class="cx">                 0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollbarThemeMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FE71404142170B800DB33BA /* ScrollbarThemeMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollbarThemeMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FE71415142189FC00DB33BA /* ScrollbarTheme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollbarTheme.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                0FEA3E79191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingStateFrameScrollingNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E7A191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateFrameScrollingNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E7D191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingTreeOverflowScrollingNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E7E191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeOverflowScrollingNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E81191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateOverflowScrollingNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E82191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingStateOverflowScrollingNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E85191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingTreeFrameScrollingNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FEA3E86191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeFrameScrollingNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0FF50259102BA9010066F39A /* DOMStyleMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStyleMedia.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FF5025A102BA9010066F39A /* DOMStyleMedia.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMStyleMedia.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FF50262102BA92B0066F39A /* DOMStyleMediaInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStyleMediaInternal.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -10327,8 +10343,8 @@
</span><span class="cx">                 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeFixedNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93C38C02164473DD00091EB2 /* ScrollingTreeFixedNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeFixedNode.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93C441FF0F813AE100C1A634 /* CollectionType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionType.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                93C4A4131629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeScrollingNodeMac.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-                93C4A4141629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeScrollingNodeMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeFrameScrollingNodeMac.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingTreeFrameScrollingNodeMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityScrollbar.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMImplementationFront.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMImplementationFront.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -14736,8 +14752,8 @@
</span><span class="cx">                                 0FC4E408187F82E10045882C /* ScrollingCoordinatorIOS.mm */,
</span><span class="cx">                                 0FC4E409187F82E10045882C /* ScrollingTreeIOS.cpp */,
</span><span class="cx">                                 0FC4E40A187F82E10045882C /* ScrollingTreeIOS.h */,
</span><del>-                                0FC4E40B187F82E10045882C /* ScrollingTreeScrollingNodeIOS.h */,
-                                0FC4E40C187F82E10045882C /* ScrollingTreeScrollingNodeIOS.mm */,
</del><ins>+                                0FC4E40B187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h */,
+                                0FC4E40C187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.mm */,
</ins><span class="cx">                         );
</span><span class="cx">                         name = ios;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -14985,6 +15001,10 @@
</span><span class="cx">                                 931CBD07161A44E900E4C874 /* ScrollingStateNode.h */,
</span><span class="cx">                                 931CBD08161A44E900E4C874 /* ScrollingStateScrollingNode.cpp */,
</span><span class="cx">                                 931CBD09161A44E900E4C874 /* ScrollingStateScrollingNode.h */,
</span><ins>+                                0FEA3E7A191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.cpp */,
+                                0FEA3E79191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.h */,
+                                0FEA3E81191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp */,
+                                0FEA3E82191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.h */,
</ins><span class="cx">                                 0FB8890C167D30160010CDA5 /* ScrollingStateStickyNode.cpp */,
</span><span class="cx">                                 0FB8890D167D30160010CDA5 /* ScrollingStateStickyNode.h */,
</span><span class="cx">                                 931CBD0A161A44E900E4C874 /* ScrollingStateTree.cpp */,
</span><span class="lines">@@ -14995,6 +15015,10 @@
</span><span class="cx">                                 1AAADDA214DB409F00AF64B3 /* ScrollingTree.h */,
</span><span class="cx">                                 1AAADDE114DC8C8F00AF64B3 /* ScrollingTreeNode.cpp */,
</span><span class="cx">                                 1AAADDE214DC8C8F00AF64B3 /* ScrollingTreeNode.h */,
</span><ins>+                                0FEA3E85191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.cpp */,
+                                0FEA3E86191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h */,
+                                0FEA3E7D191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.cpp */,
+                                0FEA3E7E191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h */,
</ins><span class="cx">                                 9391A99A1629D6FF00297330 /* ScrollingTreeScrollingNode.cpp */,
</span><span class="cx">                                 9391A99B1629D70000297330 /* ScrollingTreeScrollingNode.h */,
</span><span class="cx">                                 0F6383DB18615B29003E5DB5 /* ThreadedScrollingTree.cpp */,
</span><span class="lines">@@ -15009,12 +15033,12 @@
</span><span class="cx">                                 9391A990162746CB00297330 /* ScrollingCoordinatorMac.h */,
</span><span class="cx">                                 1AF62EE314DA22A70041556C /* ScrollingCoordinatorMac.mm */,
</span><span class="cx">                                 931CBD12161A44F800E4C874 /* ScrollingStateNodeMac.mm */,
</span><del>-                                0FA88EBC16A8D1BD00F99984 /* ScrollingStateScrollingNodeMac.mm */,
</del><ins>+                                0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */,
</ins><span class="cx">                                 1AF62F2314DAFE910041556C /* ScrollingThreadMac.mm */,
</span><span class="cx">                                 93C38C01164473DD00091EB2 /* ScrollingTreeFixedNode.h */,
</span><span class="cx">                                 93C38C02164473DD00091EB2 /* ScrollingTreeFixedNode.mm */,
</span><del>-                                93C4A4131629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.h */,
-                                93C4A4141629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.mm */,
</del><ins>+                                93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */,
+                                93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */,
</ins><span class="cx">                                 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */,
</span><span class="cx">                                 0FB88909167D2FA10010CDA5 /* ScrollingTreeStickyNode.mm */,
</span><span class="cx">                         );
</span><span class="lines">@@ -24014,6 +24038,7 @@
</span><span class="cx">                                 D72F6D7A153159A3001EE44E /* FlowThreadController.h in Headers */,
</span><span class="cx">                                 14993BE60B2F2B1C0050497F /* FocusController.h in Headers */,
</span><span class="cx">                                 062287840B4DB322000C34DF /* FocusDirection.h in Headers */,
</span><ins>+                                0FEA3E88191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.h in Headers */,
</ins><span class="cx">                                 B6D9D23514EABD260090D75E /* FocusEvent.h in Headers */,
</span><span class="cx">                                 B2C3DA610D006CD600EF6F26 /* Font.h in Headers */,
</span><span class="cx">                                 BCB92D4F1293550B00C8387F /* FontBaseline.h in Headers */,
</span><span class="lines">@@ -24522,6 +24547,7 @@
</span><span class="cx">                                 FE80DA640E9C4703000D6F75 /* JSGeolocation.h in Headers */,
</span><span class="cx">                                 FE80DA660E9C4703000D6F75 /* JSGeoposition.h in Headers */,
</span><span class="cx">                                 0FDA7C1F188322FC00C954B5 /* JSGestureEvent.h in Headers */,
</span><ins>+                                0FEA3E80191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h in Headers */,
</ins><span class="cx">                                 8482B7521198CB6B00BFB005 /* JSHashChangeEvent.h in Headers */,
</span><span class="cx">                                 BC94D14F0C275C68006BC617 /* JSHistory.h in Headers */,
</span><span class="cx">                                 BC97E413109154FA0010D361 /* JSHTMLAllCollection.h in Headers */,
</span><span class="lines">@@ -25618,8 +25644,8 @@
</span><span class="cx">                                 0FC4E410187F82E10045882C /* ScrollingTreeIOS.h in Headers */,
</span><span class="cx">                                 1AAADDE414DC8C8F00AF64B3 /* ScrollingTreeNode.h in Headers */,
</span><span class="cx">                                 9391A99D1629D70000297330 /* ScrollingTreeScrollingNode.h in Headers */,
</span><del>-                                0FC4E411187F82E10045882C /* ScrollingTreeScrollingNodeIOS.h in Headers */,
-                                93C4A4151629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.h in Headers */,
</del><ins>+                                0FC4E411187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.h in Headers */,
+                                93C4A4151629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h in Headers */,
</ins><span class="cx">                                 0FB8890A167D2FA10010CDA5 /* ScrollingTreeStickyNode.h in Headers */,
</span><span class="cx">                                 93C09C860B0657AA005ABD4D /* ScrollTypes.h in Headers */,
</span><span class="cx">                                 BC6D6E2609AF943500F59759 /* ScrollView.h in Headers */,
</span><span class="lines">@@ -25904,6 +25930,7 @@
</span><span class="cx">                                 081EBF3B0FD34F4100DA7559 /* SVGFilterBuilder.h in Headers */,
</span><span class="cx">                                 B2227A0C0D00BF220071B782 /* SVGFilterElement.h in Headers */,
</span><span class="cx">                                 B2227A0F0D00BF220071B782 /* SVGFilterPrimitiveStandardAttributes.h in Headers */,
</span><ins>+                                0FEA3E84191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.h in Headers */,
</ins><span class="cx">                                 B2227A120D00BF220071B782 /* SVGFitToViewBox.h in Headers */,
</span><span class="cx">                                 B237C8A80D344D110013F707 /* SVGFontData.h in Headers */,
</span><span class="cx">                                 B2A1F2AB0CEF0ABF00442F6A /* SVGFontElement.h in Headers */,
</span><span class="lines">@@ -26299,6 +26326,7 @@
</span><span class="cx">                                 6EBF0E5512A8929800DB1709 /* WebGLExtension.h in Headers */,
</span><span class="cx">                                 49C7B9CF1042D32F0009D447 /* WebGLFramebuffer.h in Headers */,
</span><span class="cx">                                 6E47E66110B7944B00B186C8 /* WebGLGetInfo.h in Headers */,
</span><ins>+                                0FEA3E7B191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.h in Headers */,
</ins><span class="cx">                                 49FFBF3F11C93EE3006A7118 /* WebGLLayer.h in Headers */,
</span><span class="cx">                                 93F1D5BB12D532C400832BEC /* WebGLLoseContext.h in Headers */,
</span><span class="cx">                                 49C7B9D51042D32F0009D447 /* WebGLObject.h in Headers */,
</span><span class="lines">@@ -27198,6 +27226,7 @@
</span><span class="cx">                                 85032DE00AA8C9BE007D3B7D /* DOMCSSPageRule.mm in Sources */,
</span><span class="cx">                                 858C382D0AA8E40500B187A4 /* DOMCSSPrimitiveValue.mm in Sources */,
</span><span class="cx">                                 85032DE20AA8C9BE007D3B7D /* DOMCSSRule.mm in Sources */,
</span><ins>+                                0FEA3E87191B3BD7000F1B55 /* ScrollingTreeFrameScrollingNode.cpp in Sources */,
</ins><span class="cx">                                 85032DE40AA8C9BE007D3B7D /* DOMCSSRuleList.mm in Sources */,
</span><span class="cx">                                 85032DE60AA8C9BE007D3B7D /* DOMCSSStyleDeclaration.mm in Sources */,
</span><span class="cx">                                 85032DE80AA8C9BE007D3B7D /* DOMCSSStyleRule.mm in Sources */,
</span><span class="lines">@@ -27342,6 +27371,7 @@
</span><span class="cx">                                 2E37DFDA12DBAFB800A6B233 /* DOMURL.cpp in Sources */,
</span><span class="cx">                                 CD9DE18117AAD6A400EA386D /* DOMURLMediaSource.cpp in Sources */,
</span><span class="cx">                                 BC1A37BF097C715F0019F3D8 /* DOMUtility.mm in Sources */,
</span><ins>+                                0FEA3E7C191B2FC5000F1B55 /* ScrollingStateFrameScrollingNode.cpp in Sources */,
</ins><span class="cx">                                 15C770A5100D41CD005BA267 /* DOMValidityState.mm in Sources */,
</span><span class="cx">                                 31C0FF4A0E4CEFDD007D6FE5 /* DOMWebKitAnimationEvent.mm in Sources */,
</span><span class="cx">                                 3106037A143281CD00ABF4BA /* DOMWebKitCSSFilterValue.mm in Sources */,
</span><span class="lines">@@ -28228,6 +28258,7 @@
</span><span class="cx">                                 B59DD6A611902A62007E9684 /* JSSQLStatementCallback.cpp in Sources */,
</span><span class="cx">                                 B59DD6AA11902A71007E9684 /* JSSQLStatementErrorCallback.cpp in Sources */,
</span><span class="cx">                                 514C76380CE9225E007EF3CD /* JSSQLTransaction.cpp in Sources */,
</span><ins>+                                0FEA3E7F191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.cpp in Sources */,
</ins><span class="cx">                                 B59DD69E11902A42007E9684 /* JSSQLTransactionCallback.cpp in Sources */,
</span><span class="cx">                                 1AD2316E0CD269E700C1F194 /* JSSQLTransactionCustom.cpp in Sources */,
</span><span class="cx">                                 B59DD6A211902A52007E9684 /* JSSQLTransactionErrorCallback.cpp in Sources */,
</span><span class="lines">@@ -28262,6 +28293,7 @@
</span><span class="cx">                                 B2FA3D4C0AB75A6F000E5AC4 /* JSSVGAnimatedRect.cpp in Sources */,
</span><span class="cx">                                 B2FA3D4E0AB75A6F000E5AC4 /* JSSVGAnimatedString.cpp in Sources */,
</span><span class="cx">                                 B2FA3D500AB75A6F000E5AC4 /* JSSVGAnimatedTransformList.cpp in Sources */,
</span><ins>+                                0FEA3E83191B31BF000F1B55 /* ScrollingStateOverflowScrollingNode.cpp in Sources */,
</ins><span class="cx">                                 B2FA3D520AB75A6F000E5AC4 /* JSSVGAnimateElement.cpp in Sources */,
</span><span class="cx">                                 4496E39D1398136C003EE32A /* JSSVGAnimateMotionElement.cpp in Sources */,
</span><span class="cx">                                 B2FA3D540AB75A6F000E5AC4 /* JSSVGAnimateTransformElement.cpp in Sources */,
</span><span class="lines">@@ -29011,7 +29043,7 @@
</span><span class="cx">                                 931CBD0C161A44E900E4C874 /* ScrollingStateNode.cpp in Sources */,
</span><span class="cx">                                 931CBD13161A44F800E4C874 /* ScrollingStateNodeMac.mm in Sources */,
</span><span class="cx">                                 931CBD0E161A44E900E4C874 /* ScrollingStateScrollingNode.cpp in Sources */,
</span><del>-                                0FA88EBD16A8D1BD00F99984 /* ScrollingStateScrollingNodeMac.mm in Sources */,
</del><ins>+                                0FA88EBD16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm in Sources */,
</ins><span class="cx">                                 0FB8890E167D30160010CDA5 /* ScrollingStateStickyNode.cpp in Sources */,
</span><span class="cx">                                 931CBD10161A44E900E4C874 /* ScrollingStateTree.cpp in Sources */,
</span><span class="cx">                                 1AF62F2514DAFE9E0041556C /* ScrollingThread.cpp in Sources */,
</span><span class="lines">@@ -29021,8 +29053,8 @@
</span><span class="cx">                                 0FC4E40F187F82E10045882C /* ScrollingTreeIOS.cpp in Sources */,
</span><span class="cx">                                 1AAADDE314DC8C8F00AF64B3 /* ScrollingTreeNode.cpp in Sources */,
</span><span class="cx">                                 9391A99C1629D70000297330 /* ScrollingTreeScrollingNode.cpp in Sources */,
</span><del>-                                0FC4E412187F82E10045882C /* ScrollingTreeScrollingNodeIOS.mm in Sources */,
-                                93C4A4161629DF5A00C3EB6E /* ScrollingTreeScrollingNodeMac.mm in Sources */,
</del><ins>+                                0FC4E412187F82E10045882C /* ScrollingTreeFrameScrollingNodeIOS.mm in Sources */,
+                                93C4A4161629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm in Sources */,
</ins><span class="cx">                                 0FB8890B167D2FA10010CDA5 /* ScrollingTreeStickyNode.mm in Sources */,
</span><span class="cx">                                 BC2441C40E8B65D00055320F /* ScrollView.cpp in Sources */,
</span><span class="cx">                                 E45390450EAFD637003695C8 /* ScrollViewIOS.mm in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -35,7 +35,8 @@
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;ScrollingConstraints.h&quot;
</span><span class="cx"> #include &quot;ScrollingStateFixedNode.h&quot;
</span><del>-#include &quot;ScrollingStateScrollingNode.h&quot;
</del><ins>+#include &quot;ScrollingStateFrameScrollingNode.h&quot;
+#include &quot;ScrollingStateOverflowScrollingNode.h&quot;
</ins><span class="cx"> #include &quot;ScrollingStateStickyNode.h&quot;
</span><span class="cx"> #include &quot;ScrollingStateTree.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -76,21 +77,21 @@
</span><span class="cx">     if (!coordinatesScrollingForFrameView(frameView))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</del><ins>+    ScrollingStateFrameScrollingNode* node = toScrollingStateFrameScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</ins><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     Scrollbar* verticalScrollbar = frameView-&gt;verticalScrollbar();
</span><span class="cx">     Scrollbar* horizontalScrollbar = frameView-&gt;horizontalScrollbar();
</span><del>-    setScrollbarPaintersFromScrollbarsForNode(verticalScrollbar, horizontalScrollbar, node);
-
</del><ins>+    node-&gt;setScrollbarPaintersFromScrollbars(verticalScrollbar, horizontalScrollbar);
+    
</ins><span class="cx">     node-&gt;setFrameScaleFactor(frameView-&gt;frame().frameScaleFactor());
</span><span class="cx">     node-&gt;setHeaderHeight(frameView-&gt;headerHeight());
</span><span class="cx">     node-&gt;setFooterHeight(frameView-&gt;footerHeight());
</span><span class="cx">     node-&gt;setTopContentInset(frameView-&gt;topContentInset());
</span><span class="cx"> 
</span><span class="cx">     node-&gt;setScrollOrigin(frameView-&gt;scrollOrigin());
</span><del>-    node-&gt;setViewportSize(frameView-&gt;visibleContentRect().size());
</del><ins>+    node-&gt;setScrollableAreaSize(frameView-&gt;visibleContentRect().size());
</ins><span class="cx">     node-&gt;setTotalContentsSize(frameView-&gt;totalContentsSize());
</span><span class="cx"> 
</span><span class="cx">     ScrollableAreaParameters scrollParameters;
</span><span class="lines">@@ -131,7 +132,7 @@
</span><span class="cx"> 
</span><span class="cx">     ScrollingCoordinator::frameViewRootLayerDidChange(frameView);
</span><span class="cx"> 
</span><del>-    ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</del><ins>+    ScrollingStateFrameScrollingNode* node = toScrollingStateFrameScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</ins><span class="cx">     node-&gt;setLayer(scrollLayerForFrameView(frameView));
</span><span class="cx">     node-&gt;setCounterScrollingLayer(counterScrollingLayerForFrameView(frameView));
</span><span class="cx">     node-&gt;setInsetClipLayer(insetClipLayerForFrameView(frameView));
</span><span class="lines">@@ -327,15 +328,14 @@
</span><span class="cx">     attachToStateTree(FrameScrollingNode, frameView-&gt;scrollLayerID(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AsyncScrollingCoordinator::updateScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* layer, GraphicsLayer* scrolledContentsLayer, GraphicsLayer* counterScrollingLayer, GraphicsLayer* insetClipLayer, const ScrollingGeometry* scrollingGeometry)
</del><ins>+void AsyncScrollingCoordinator::updateFrameScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* layer, GraphicsLayer* counterScrollingLayer, GraphicsLayer* insetClipLayer, const ScrollingGeometry* scrollingGeometry)
</ins><span class="cx"> {
</span><del>-    ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(nodeID));
</del><ins>+    ScrollingStateFrameScrollingNode* node = toScrollingStateFrameScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(nodeID));
</ins><span class="cx">     ASSERT(node);
</span><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     node-&gt;setLayer(layer);
</span><del>-    node-&gt;setScrolledContentsLayer(scrolledContentsLayer);
</del><span class="cx">     node-&gt;setInsetClipLayer(insetClipLayer);
</span><span class="cx">     node-&gt;setCounterScrollingLayer(counterScrollingLayer);
</span><span class="cx"> 
</span><span class="lines">@@ -343,9 +343,28 @@
</span><span class="cx">         node-&gt;setScrollOrigin(scrollingGeometry-&gt;scrollOrigin);
</span><span class="cx">         node-&gt;setScrollPosition(scrollingGeometry-&gt;scrollPosition);
</span><span class="cx">         node-&gt;setTotalContentsSize(scrollingGeometry-&gt;contentSize);
</span><ins>+        node-&gt;setScrollableAreaSize(scrollingGeometry-&gt;scrollableAreaSize);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><ins>+    
+void AsyncScrollingCoordinator::updateOverflowScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* layer, GraphicsLayer* scrolledContentsLayer, const ScrollingGeometry* scrollingGeometry)
+{
+    ScrollingStateOverflowScrollingNode* node = toScrollingStateOverflowScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(nodeID));
+    ASSERT(node);
+    if (!node)
+        return;
</ins><span class="cx"> 
</span><ins>+    node-&gt;setLayer(layer);
+    node-&gt;setScrolledContentsLayer(scrolledContentsLayer);
+    
+    if (scrollingGeometry) {
+        node-&gt;setScrollOrigin(scrollingGeometry-&gt;scrollOrigin);
+        node-&gt;setScrollPosition(scrollingGeometry-&gt;scrollPosition);
+        node-&gt;setTotalContentsSize(scrollingGeometry-&gt;contentSize);
+        node-&gt;setScrollableAreaSize(scrollingGeometry-&gt;scrollableAreaSize);
+    }
+}
+
</ins><span class="cx"> void AsyncScrollingCoordinator::updateViewportConstrainedNode(ScrollingNodeID nodeID, const ViewportConstraints&amp; constraints, GraphicsLayer* graphicsLayer)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(supportsFixedPositionLayers());
</span><span class="lines">@@ -370,12 +389,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// FIXME: not sure if this belongs here.
-void AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode* node)
-{
-    node-&gt;setScrollbarPaintersFromScrollbars(verticalScrollbar, horizontalScrollbar);
-}
-
</del><span class="cx"> void AsyncScrollingCoordinator::setSynchronousScrollingReasons(SynchronousScrollingReasons reasons)
</span><span class="cx"> {
</span><span class="cx">     if (!m_scrollingStateTree-&gt;rootStateNode())
</span><span class="lines">@@ -406,7 +419,7 @@
</span><span class="cx"> 
</span><span class="cx"> void AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView(FrameView* frameView)
</span><span class="cx"> {
</span><del>-    ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</del><ins>+    ScrollingStateFrameScrollingNode* node = toScrollingStateFrameScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</ins><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx">     node-&gt;setWheelEventHandlerCount(computeCurrentWheelEventHandlerCount());
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -85,9 +85,12 @@
</span><span class="cx">     virtual ScrollingNodeID attachToStateTree(ScrollingNodeType, ScrollingNodeID newNodeID, ScrollingNodeID parentID) override;
</span><span class="cx">     virtual void detachFromStateTree(ScrollingNodeID) override;
</span><span class="cx">     virtual void clearStateTree() override;
</span><del>-
</del><ins>+    
</ins><span class="cx">     virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&amp;, GraphicsLayer*) override;
</span><del>-    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer*, GraphicsLayer* scrolledContentsLayer, GraphicsLayer* counterScrollingLayer, GraphicsLayer* insetClipLayer, const ScrollingGeometry* = nullptr) override;
</del><ins>+    
+    virtual void updateFrameScrollingNode(ScrollingNodeID, GraphicsLayer* scrollLayer, GraphicsLayer* counterScrollingLayer, GraphicsLayer* insetClipLayer, const ScrollingGeometry* = nullptr);
+    virtual void updateOverflowScrollingNode(ScrollingNodeID, GraphicsLayer* scrollLayer, GraphicsLayer* scrolledContentsLayer, const ScrollingGeometry* = nullptr);
+    
</ins><span class="cx">     virtual String scrollingStateTreeAsText() const override;
</span><span class="cx">     virtual bool isRubberBandInProgress() const override;
</span><span class="cx">     virtual void setScrollPinningBehavior(ScrollPinningBehavior) override;
</span><span class="lines">@@ -103,9 +106,6 @@
</span><span class="cx">     void ensureRootStateNodeForFrameView(FrameView*);
</span><span class="cx">     void updateMainFrameScrollLayerPosition();
</span><span class="cx"> 
</span><del>-    // FIXME: move somewhere else?
-    void setScrollbarPaintersFromScrollbarsForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode*);
-
</del><span class="cx">     void updateScrollPositionAfterAsyncScrollTimerFired(Timer&lt;AsyncScrollingCoordinator&gt;*);
</span><span class="cx"> 
</span><span class="cx">     Timer&lt;AsyncScrollingCoordinator&gt; m_updateNodeScrollPositionTimer;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -159,12 +159,14 @@
</span><span class="cx">     virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&amp;, GraphicsLayer*) { }
</span><span class="cx"> 
</span><span class="cx">     struct ScrollingGeometry {
</span><del>-        IntSize contentSize;
</del><ins>+        FloatSize scrollableAreaSize;
+        FloatSize contentSize;
</ins><span class="cx">         FloatPoint scrollPosition;
</span><span class="cx">         IntPoint scrollOrigin;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*scrolledContentsLayer*/, GraphicsLayer* /*counterScrollingLayer*/, GraphicsLayer* /*insetClipLayer*/, const ScrollingGeometry* = nullptr) { }
</del><ins>+    virtual void updateFrameScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*counterScrollingLayer*/, GraphicsLayer* /*insetClipLayer*/, const ScrollingGeometry* = nullptr) { }
+    virtual void updateOverflowScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*scrolledContentsLayer*/, const ScrollingGeometry* = nullptr) { }
</ins><span class="cx">     virtual void syncChildPositions(const LayoutRect&amp;) { }
</span><span class="cx">     virtual String scrollingStateTreeAsText() const;
</span><span class="cx">     virtual bool isRubberBandInProgress() const { return false; }
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateFrameScrollingNodecppfromrev169054trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp (from rev 169054, trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,246 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ScrollingStateFrameScrollingNode.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#include &quot;ScrollingStateTree.h&quot;
+#include &quot;TextStream.h&quot;
+#include &lt;wtf/OwnPtr.h&gt;
+
+namespace WebCore {
+
+PassOwnPtr&lt;ScrollingStateFrameScrollingNode&gt; ScrollingStateFrameScrollingNode::create(ScrollingStateTree&amp; stateTree, ScrollingNodeID nodeID)
+{
+    return adoptPtr(new ScrollingStateFrameScrollingNode(stateTree, nodeID));
+}
+
+ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode(ScrollingStateTree&amp; stateTree, ScrollingNodeID nodeID)
+    : ScrollingStateScrollingNode(stateTree, FrameScrollingNode, nodeID)
+#if PLATFORM(MAC)
+    , m_verticalScrollbarPainter(0)
+    , m_horizontalScrollbarPainter(0)
+#endif
+    , m_frameScaleFactor(1)
+    , m_wheelEventHandlerCount(0)
+    , m_synchronousScrollingReasons(0)
+    , m_behaviorForFixed(StickToDocumentBounds)
+    , m_headerHeight(0)
+    , m_footerHeight(0)
+    , m_requestedScrollPositionRepresentsProgrammaticScroll(false)
+    , m_topContentInset(0)
+{
+}
+
+ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&amp; stateNode, ScrollingStateTree&amp; adoptiveTree)
+    : ScrollingStateScrollingNode(stateNode, adoptiveTree)
+#if PLATFORM(MAC)
+    , m_verticalScrollbarPainter(stateNode.verticalScrollbarPainter())
+    , m_horizontalScrollbarPainter(stateNode.horizontalScrollbarPainter())
+#endif
+    , m_nonFastScrollableRegion(stateNode.nonFastScrollableRegion())
+    , m_frameScaleFactor(stateNode.frameScaleFactor())
+    , m_wheelEventHandlerCount(stateNode.wheelEventHandlerCount())
+    , m_synchronousScrollingReasons(stateNode.synchronousScrollingReasons())
+    , m_behaviorForFixed(stateNode.scrollBehaviorForFixedElements())
+    , m_headerHeight(stateNode.headerHeight())
+    , m_footerHeight(stateNode.footerHeight())
+    , m_requestedScrollPosition(stateNode.requestedScrollPosition())
+    , m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll())
+    , m_topContentInset(stateNode.topContentInset())
+{
+    if (hasChangedProperty(CounterScrollingLayer))
+        setCounterScrollingLayer(stateNode.counterScrollingLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+    if (hasChangedProperty(InsetClipLayer))
+        setInsetClipLayer(stateNode.insetClipLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+    if (hasChangedProperty(ContentShadowLayer))
+        setContentShadowLayer(stateNode.contentShadowLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+    if (hasChangedProperty(HeaderLayer))
+        setHeaderLayer(stateNode.headerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+    if (hasChangedProperty(FooterLayer))
+        setFooterLayer(stateNode.footerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+}
+
+ScrollingStateFrameScrollingNode::~ScrollingStateFrameScrollingNode()
+{
+}
+
+PassOwnPtr&lt;ScrollingStateNode&gt; ScrollingStateFrameScrollingNode::clone(ScrollingStateTree&amp; adoptiveTree)
+{
+    return adoptPtr(new ScrollingStateFrameScrollingNode(*this, adoptiveTree));
+}
+
+void ScrollingStateFrameScrollingNode::setFrameScaleFactor(float scaleFactor)
+{
+    if (m_frameScaleFactor == scaleFactor)
+        return;
+
+    m_frameScaleFactor = scaleFactor;
+
+    setPropertyChanged(FrameScaleFactor);
+}
+
+void ScrollingStateFrameScrollingNode::setNonFastScrollableRegion(const Region&amp; nonFastScrollableRegion)
+{
+    if (m_nonFastScrollableRegion == nonFastScrollableRegion)
+        return;
+
+    m_nonFastScrollableRegion = nonFastScrollableRegion;
+    setPropertyChanged(NonFastScrollableRegion);
+}
+
+void ScrollingStateFrameScrollingNode::setWheelEventHandlerCount(unsigned wheelEventHandlerCount)
+{
+    if (m_wheelEventHandlerCount == wheelEventHandlerCount)
+        return;
+
+    m_wheelEventHandlerCount = wheelEventHandlerCount;
+    setPropertyChanged(WheelEventHandlerCount);
+}
+
+void ScrollingStateFrameScrollingNode::setSynchronousScrollingReasons(SynchronousScrollingReasons reasons)
+{
+    if (m_synchronousScrollingReasons == reasons)
+        return;
+
+    m_synchronousScrollingReasons = reasons;
+    setPropertyChanged(ReasonsForSynchronousScrolling);
+}
+
+void ScrollingStateFrameScrollingNode::setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements behaviorForFixed)
+{
+    if (m_behaviorForFixed == behaviorForFixed)
+        return;
+
+    m_behaviorForFixed = behaviorForFixed;
+    setPropertyChanged(BehaviorForFixedElements);
+}
+    
+void ScrollingStateFrameScrollingNode::setHeaderHeight(int headerHeight)
+{
+    if (m_headerHeight == headerHeight)
+        return;
+
+    m_headerHeight = headerHeight;
+    setPropertyChanged(HeaderHeight);
+}
+
+void ScrollingStateFrameScrollingNode::setFooterHeight(int footerHeight)
+{
+    if (m_footerHeight == footerHeight)
+        return;
+
+    m_footerHeight = footerHeight;
+    setPropertyChanged(FooterHeight);
+}
+
+void ScrollingStateFrameScrollingNode::setTopContentInset(float topContentInset)
+{
+    if (m_topContentInset == topContentInset)
+        return;
+
+    m_topContentInset = topContentInset;
+    setPropertyChanged(TopContentInset);
+}
+
+void ScrollingStateFrameScrollingNode::setCounterScrollingLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_counterScrollingLayer)
+        return;
+    
+    m_counterScrollingLayer = layerRepresentation;
+    setPropertyChanged(CounterScrollingLayer);
+}
+
+void ScrollingStateFrameScrollingNode::setInsetClipLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_insetClipLayer)
+        return;
+    
+    m_insetClipLayer = layerRepresentation;
+    setPropertyChanged(InsetClipLayer);
+}
+
+void ScrollingStateFrameScrollingNode::setContentShadowLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_contentShadowLayer)
+        return;
+    
+    m_contentShadowLayer = layerRepresentation;
+    setPropertyChanged(ContentShadowLayer);
+}
+
+void ScrollingStateFrameScrollingNode::setHeaderLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_headerLayer)
+        return;
+    
+    m_headerLayer = layerRepresentation;
+    setPropertyChanged(HeaderLayer);
+}
+
+void ScrollingStateFrameScrollingNode::setFooterLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_footerLayer)
+        return;
+    
+    m_footerLayer = layerRepresentation;
+    setPropertyChanged(FooterLayer);
+}
+
+#if !PLATFORM(MAC)
+void ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars(Scrollbar*, Scrollbar*)
+{
+}
+#endif
+
+void ScrollingStateFrameScrollingNode::dumpProperties(TextStream&amp; ts, int indent) const
+{
+    ts &lt;&lt; &quot;(Frame scrolling node&quot; &lt;&lt; &quot;\n&quot;;
+    
+    ScrollingStateScrollingNode::dumpProperties(ts, indent);
+    
+    if (m_frameScaleFactor != 1) {
+        writeIndent(ts, indent + 1);
+        ts &lt;&lt; &quot;(frame scale factor &quot; &lt;&lt; m_frameScaleFactor &lt;&lt; &quot;)\n&quot;;
+    }
+
+    if (m_synchronousScrollingReasons) {
+        writeIndent(ts, indent + 1);
+        ts &lt;&lt; &quot;(Scrolling on main thread because: &quot; &lt;&lt; ScrollingCoordinator::synchronousScrollingReasonsAsText(m_synchronousScrollingReasons) &lt;&lt; &quot;)\n&quot;;
+    }
+    
+    // FIXME: dump more properties.
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateFrameScrollingNodehfromrev169054trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h (from rev 169054, trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,154 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingStateFrameScrollingNode_h
+#define ScrollingStateFrameScrollingNode_h
+
+#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#include &quot;Region.h&quot;
+#include &quot;ScrollTypes.h&quot;
+#include &quot;ScrollbarThemeComposite.h&quot;
+#include &quot;ScrollingCoordinator.h&quot;
+#include &quot;ScrollingStateScrollingNode.h&quot;
+#include &lt;wtf/PassOwnPtr.h&gt;
+
+namespace WebCore {
+
+class Scrollbar;
+
+class ScrollingStateFrameScrollingNode final : public ScrollingStateScrollingNode {
+public:
+    static PassOwnPtr&lt;ScrollingStateFrameScrollingNode&gt; create(ScrollingStateTree&amp;, ScrollingNodeID);
+
+    virtual PassOwnPtr&lt;ScrollingStateNode&gt; clone(ScrollingStateTree&amp;);
+
+    virtual ~ScrollingStateFrameScrollingNode();
+
+    enum ChangedProperty {
+        FrameScaleFactor = NumScrollingStateNodeBits,
+        NonFastScrollableRegion,
+        WheelEventHandlerCount,
+        ReasonsForSynchronousScrolling,
+        CounterScrollingLayer,
+        InsetClipLayer,
+        ContentShadowLayer,
+        HeaderHeight,
+        FooterHeight,
+        HeaderLayer,
+        FooterLayer,
+        PainterForScrollbar,
+        BehaviorForFixedElements,
+        TopContentInset
+    };
+
+    float frameScaleFactor() const { return m_frameScaleFactor; }
+    void setFrameScaleFactor(float);
+
+    const Region&amp; nonFastScrollableRegion() const { return m_nonFastScrollableRegion; }
+    void setNonFastScrollableRegion(const Region&amp;);
+
+    unsigned wheelEventHandlerCount() const { return m_wheelEventHandlerCount; }
+    void setWheelEventHandlerCount(unsigned);
+
+    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
+    void setSynchronousScrollingReasons(SynchronousScrollingReasons);
+
+    ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
+    void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
+
+    int headerHeight() const { return m_headerHeight; }
+    void setHeaderHeight(int);
+
+    int footerHeight() const { return m_footerHeight; }
+    void setFooterHeight(int);
+
+    float topContentInset() const { return m_topContentInset; }
+    void setTopContentInset(float);
+    
+    // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
+    const LayerRepresentation&amp; counterScrollingLayer() const { return m_counterScrollingLayer; }
+    void setCounterScrollingLayer(const LayerRepresentation&amp;);
+
+    // This is a clipping layer that will scroll with the page for all y-delta scroll values between 0
+    // and topContentInset(). Once the y-deltas get beyond the content inset point, this layer no longer
+    // needs to move. If the topContentInset() is 0, this layer does not need to move at all. This is
+    // only used on the Mac.
+    const LayerRepresentation&amp; insetClipLayer() const { return m_insetClipLayer; }
+    void setInsetClipLayer(const LayerRepresentation&amp;);
+
+    const LayerRepresentation&amp; contentShadowLayer() const { return m_contentShadowLayer; }
+    void setContentShadowLayer(const LayerRepresentation&amp;);
+
+    // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
+    const LayerRepresentation&amp; headerLayer() const { return m_headerLayer; }
+    void setHeaderLayer(const LayerRepresentation&amp;);
+
+    // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
+    const LayerRepresentation&amp; footerLayer() const { return m_footerLayer; }
+    void setFooterLayer(const LayerRepresentation&amp;);
+
+#if PLATFORM(MAC)
+    ScrollbarPainter verticalScrollbarPainter() const { return m_verticalScrollbarPainter.get(); }
+    ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter.get(); }
+#endif
+    void setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
+
+    virtual void dumpProperties(TextStream&amp;, int indent) const override;
+
+private:
+    ScrollingStateFrameScrollingNode(ScrollingStateTree&amp;, ScrollingNodeID);
+    ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&amp;, ScrollingStateTree&amp;);
+
+    LayerRepresentation m_counterScrollingLayer;
+    LayerRepresentation m_insetClipLayer;
+    LayerRepresentation m_contentShadowLayer;
+    LayerRepresentation m_headerLayer;
+    LayerRepresentation m_footerLayer;
+
+#if PLATFORM(MAC)
+    RetainPtr&lt;ScrollbarPainter&gt; m_verticalScrollbarPainter;
+    RetainPtr&lt;ScrollbarPainter&gt; m_horizontalScrollbarPainter;
+#endif
+
+    Region m_nonFastScrollableRegion;
+    float m_frameScaleFactor;
+    unsigned m_wheelEventHandlerCount;
+    SynchronousScrollingReasons m_synchronousScrollingReasons;
+    ScrollBehaviorForFixedElements m_behaviorForFixed;
+    int m_headerHeight;
+    int m_footerHeight;
+    FloatPoint m_requestedScrollPosition;
+    bool m_requestedScrollPositionRepresentsProgrammaticScroll;
+    float m_topContentInset;
+};
+
+SCROLLING_STATE_NODE_TYPE_CASTS(ScrollingStateFrameScrollingNode, isFrameScrollingNode());
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#endif // ScrollingStateFrameScrollingNode_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -90,6 +90,11 @@
</span><span class="cx">         ASSERT(m_representation == PlatformLayerRepresentation);
</span><span class="cx">         return m_platformLayer;
</span><span class="cx">     }
</span><ins>+    
+    GraphicsLayer::PlatformLayerID layerID() const
+    {
+        return m_layerID;
+    }
</ins><span class="cx"> 
</span><span class="cx">     operator GraphicsLayer::PlatformLayerID() const
</span><span class="cx">     {
</span><span class="lines">@@ -156,6 +161,8 @@
</span><span class="cx">     bool isFixedNode() const { return m_nodeType == FixedNode; }
</span><span class="cx">     bool isStickyNode() const { return m_nodeType == StickyNode; }
</span><span class="cx">     bool isScrollingNode() const { return m_nodeType == FrameScrollingNode || m_nodeType == OverflowScrollingNode; }
</span><ins>+    bool isFrameScrollingNode() const { return m_nodeType == FrameScrollingNode; }
+    bool isOverflowScrollingNode() const { return m_nodeType == OverflowScrollingNode; }
</ins><span class="cx"> 
</span><span class="cx">     virtual PassOwnPtr&lt;ScrollingStateNode&gt; clone(ScrollingStateTree&amp; adoptiveTree) = 0;
</span><span class="cx">     PassOwnPtr&lt;ScrollingStateNode&gt; cloneAndReset(ScrollingStateTree&amp; adoptiveTree);
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateOverflowScrollingNodecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ScrollingStateOverflowScrollingNode.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#include &quot;ScrollingStateTree.h&quot;
+#include &quot;TextStream.h&quot;
+#include &lt;wtf/OwnPtr.h&gt;
+
+namespace WebCore {
+
+PassOwnPtr&lt;ScrollingStateOverflowScrollingNode&gt; ScrollingStateOverflowScrollingNode::create(ScrollingStateTree&amp; stateTree, ScrollingNodeID nodeID)
+{
+    return adoptPtr(new ScrollingStateOverflowScrollingNode(stateTree, nodeID));
+}
+
+ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode(ScrollingStateTree&amp; stateTree, ScrollingNodeID nodeID)
+    : ScrollingStateScrollingNode(stateTree, OverflowScrollingNode, nodeID)
+{
+}
+
+ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode(const ScrollingStateOverflowScrollingNode&amp; stateNode, ScrollingStateTree&amp; adoptiveTree)
+    : ScrollingStateScrollingNode(stateNode, adoptiveTree)
+{
+    if (hasChangedProperty(ScrolledContentsLayer))
+        setScrolledContentsLayer(stateNode.scrolledContentsLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+}
+
+ScrollingStateOverflowScrollingNode::~ScrollingStateOverflowScrollingNode()
+{
+}
+
+PassOwnPtr&lt;ScrollingStateNode&gt; ScrollingStateOverflowScrollingNode::clone(ScrollingStateTree&amp; adoptiveTree)
+{
+    return adoptPtr(new ScrollingStateOverflowScrollingNode(*this, adoptiveTree));
+}
+    
+void ScrollingStateOverflowScrollingNode::setScrolledContentsLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_scrolledContentsLayer)
+        return;
+    
+    m_scrolledContentsLayer = layerRepresentation;
+    setPropertyChanged(ScrolledContentsLayer);
+}
+
+void ScrollingStateOverflowScrollingNode::dumpProperties(TextStream&amp; ts, int indent) const
+{
+    ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;Overflow scrolling node&quot; &lt;&lt; &quot;\n&quot;;
+    
+    ScrollingStateScrollingNode::dumpProperties(ts, indent);
+    
+    if (m_scrolledContentsLayer.layerID()) {
+        writeIndent(ts, indent + 1);
+        ts &lt;&lt; &quot;(scrolled contents layer &quot; &lt;&lt; m_scrolledContentsLayer.layerID() &lt;&lt; &quot;)\n&quot;;
+    }
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateOverflowScrollingNodehfromrev169054trunkSourceWebCorepagescrollingmacScrollingStateScrollingNodeMacmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.h (from rev 169054, trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateOverflowScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingStateOverflowScrollingNode_h
+#define ScrollingStateOverflowScrollingNode_h
+
+#if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#include &quot;ScrollingStateScrollingNode.h&quot;
+
+namespace WebCore {
+
+class ScrollingStateOverflowScrollingNode : public ScrollingStateScrollingNode {
+public:
+    static PassOwnPtr&lt;ScrollingStateOverflowScrollingNode&gt; create(ScrollingStateTree&amp;, ScrollingNodeID);
+
+    virtual PassOwnPtr&lt;ScrollingStateNode&gt; clone(ScrollingStateTree&amp;);
+
+    virtual ~ScrollingStateOverflowScrollingNode();
+
+    enum ChangedProperty {
+        ScrolledContentsLayer = NumScrollingStateNodeBits
+    };
+
+    // This is a layer with the contents that move.
+    const LayerRepresentation&amp; scrolledContentsLayer() const { return m_scrolledContentsLayer; }
+    void setScrolledContentsLayer(const LayerRepresentation&amp;);
+    
+    virtual void dumpProperties(TextStream&amp;, int indent) const override;
+
+private:
+    ScrollingStateOverflowScrollingNode(ScrollingStateTree&amp;, ScrollingNodeID);
+    ScrollingStateOverflowScrollingNode(const ScrollingStateOverflowScrollingNode&amp;, ScrollingStateTree&amp;);
+    
+    LayerRepresentation m_scrolledContentsLayer;    
+};
+
+SCROLLING_STATE_NODE_TYPE_CASTS(ScrollingStateOverflowScrollingNode, isOverflowScrollingNode());
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
+
+#endif // ScrollingStateScrollingNode_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -34,88 +34,38 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-PassOwnPtr&lt;ScrollingStateScrollingNode&gt; ScrollingStateScrollingNode::create(ScrollingStateTree&amp; stateTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
-{
-    return adoptPtr(new ScrollingStateScrollingNode(stateTree, nodeType, nodeID));
-}
-
</del><span class="cx"> ScrollingStateScrollingNode::ScrollingStateScrollingNode(ScrollingStateTree&amp; stateTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
</span><span class="cx">     : ScrollingStateNode(nodeType, stateTree, nodeID)
</span><del>-#if PLATFORM(MAC)
-    , m_verticalScrollbarPainter(0)
-    , m_horizontalScrollbarPainter(0)
-#endif
-    , m_frameScaleFactor(1)
-    , m_wheelEventHandlerCount(0)
-    , m_synchronousScrollingReasons(0)
-    , m_behaviorForFixed(StickToDocumentBounds)
-    , m_headerHeight(0)
-    , m_footerHeight(0)
</del><span class="cx">     , m_requestedScrollPositionRepresentsProgrammaticScroll(false)
</span><del>-    , m_topContentInset(0)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ScrollingStateScrollingNode::ScrollingStateScrollingNode(const ScrollingStateScrollingNode&amp; stateNode, ScrollingStateTree&amp; adoptiveTree)
</span><span class="cx">     : ScrollingStateNode(stateNode, adoptiveTree)
</span><del>-#if PLATFORM(MAC)
-    , m_verticalScrollbarPainter(stateNode.verticalScrollbarPainter())
-    , m_horizontalScrollbarPainter(stateNode.horizontalScrollbarPainter())
-#endif
-    , m_viewportSize(stateNode.viewportSize())
</del><ins>+    , m_scrollableAreaSize(stateNode.scrollableAreaSize())
</ins><span class="cx">     , m_totalContentsSize(stateNode.totalContentsSize())
</span><span class="cx">     , m_scrollPosition(stateNode.scrollPosition())
</span><ins>+    , m_requestedScrollPosition(stateNode.requestedScrollPosition())
</ins><span class="cx">     , m_scrollOrigin(stateNode.scrollOrigin())
</span><span class="cx">     , m_scrollableAreaParameters(stateNode.scrollableAreaParameters())
</span><del>-    , m_nonFastScrollableRegion(stateNode.nonFastScrollableRegion())
-    , m_frameScaleFactor(stateNode.frameScaleFactor())
-    , m_wheelEventHandlerCount(stateNode.wheelEventHandlerCount())
-    , m_synchronousScrollingReasons(stateNode.synchronousScrollingReasons())
-    , m_behaviorForFixed(stateNode.scrollBehaviorForFixedElements())
-    , m_headerHeight(stateNode.headerHeight())
-    , m_footerHeight(stateNode.footerHeight())
-    , m_requestedScrollPosition(stateNode.requestedScrollPosition())
</del><span class="cx">     , m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll())
</span><del>-    , m_topContentInset(stateNode.topContentInset())
</del><span class="cx"> {
</span><del>-    if (hasChangedProperty(ScrolledContentsLayer))
-        setScrolledContentsLayer(stateNode.scrolledContentsLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
-    if (hasChangedProperty(CounterScrollingLayer))
-        setCounterScrollingLayer(stateNode.counterScrollingLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
-    if (hasChangedProperty(InsetClipLayer))
-        setInsetClipLayer(stateNode.insetClipLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
-    if (hasChangedProperty(ContentShadowLayer))
-        setContentShadowLayer(stateNode.contentShadowLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
-    if (hasChangedProperty(HeaderLayer))
-        setHeaderLayer(stateNode.headerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
-    if (hasChangedProperty(FooterLayer))
-        setFooterLayer(stateNode.footerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ScrollingStateScrollingNode::~ScrollingStateScrollingNode()
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassOwnPtr&lt;ScrollingStateNode&gt; ScrollingStateScrollingNode::clone(ScrollingStateTree&amp; adoptiveTree)
</del><ins>+void ScrollingStateScrollingNode::setScrollableAreaSize(const FloatSize&amp; size)
</ins><span class="cx"> {
</span><del>-    return adoptPtr(new ScrollingStateScrollingNode(*this, adoptiveTree));
-}
-
-void ScrollingStateScrollingNode::setViewportSize(const FloatSize&amp; size)
-{
-    if (m_viewportSize == size)
</del><ins>+    if (m_scrollableAreaSize == size)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_viewportSize = size;
-    setPropertyChanged(ViewportSize);
</del><ins>+    m_scrollableAreaSize = size;
+    setPropertyChanged(ScrollableAreaSize);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ScrollingStateScrollingNode::setTotalContentsSize(const IntSize&amp; totalContentsSize)
</del><ins>+void ScrollingStateScrollingNode::setTotalContentsSize(const FloatSize&amp; totalContentsSize)
</ins><span class="cx"> {
</span><span class="cx">     if (m_totalContentsSize == totalContentsSize)
</span><span class="cx">         return;
</span><span class="lines">@@ -151,52 +101,6 @@
</span><span class="cx">     setPropertyChanged(ScrollableAreaParams);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ScrollingStateScrollingNode::setFrameScaleFactor(float scaleFactor)
-{
-    if (m_frameScaleFactor == scaleFactor)
-        return;
-
-    m_frameScaleFactor = scaleFactor;
-
-    setPropertyChanged(FrameScaleFactor);
-}
-
-void ScrollingStateScrollingNode::setNonFastScrollableRegion(const Region&amp; nonFastScrollableRegion)
-{
-    if (m_nonFastScrollableRegion == nonFastScrollableRegion)
-        return;
-
-    m_nonFastScrollableRegion = nonFastScrollableRegion;
-    setPropertyChanged(NonFastScrollableRegion);
-}
-
-void ScrollingStateScrollingNode::setWheelEventHandlerCount(unsigned wheelEventHandlerCount)
-{
-    if (m_wheelEventHandlerCount == wheelEventHandlerCount)
-        return;
-
-    m_wheelEventHandlerCount = wheelEventHandlerCount;
-    setPropertyChanged(WheelEventHandlerCount);
-}
-
-void ScrollingStateScrollingNode::setSynchronousScrollingReasons(SynchronousScrollingReasons reasons)
-{
-    if (m_synchronousScrollingReasons == reasons)
-        return;
-
-    m_synchronousScrollingReasons = reasons;
-    setPropertyChanged(ReasonsForSynchronousScrolling);
-}
-
-void ScrollingStateScrollingNode::setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements behaviorForFixed)
-{
-    if (m_behaviorForFixed == behaviorForFixed)
-        return;
-
-    m_behaviorForFixed = behaviorForFixed;
-    setPropertyChanged(BehaviorForFixedElements);
-}
-
</del><span class="cx"> void ScrollingStateScrollingNode::setRequestedScrollPosition(const FloatPoint&amp; requestedScrollPosition, bool representsProgrammaticScroll)
</span><span class="cx"> {
</span><span class="cx">     m_requestedScrollPosition = requestedScrollPosition;
</span><span class="lines">@@ -204,105 +108,8 @@
</span><span class="cx">     setPropertyChanged(RequestedScrollPosition);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ScrollingStateScrollingNode::setHeaderHeight(int headerHeight)
-{
-    if (m_headerHeight == headerHeight)
-        return;
-
-    m_headerHeight = headerHeight;
-    setPropertyChanged(HeaderHeight);
-}
-
-void ScrollingStateScrollingNode::setFooterHeight(int footerHeight)
-{
-    if (m_footerHeight == footerHeight)
-        return;
-
-    m_footerHeight = footerHeight;
-    setPropertyChanged(FooterHeight);
-}
-
-void ScrollingStateScrollingNode::setTopContentInset(float topContentInset)
-{
-    if (m_topContentInset == topContentInset)
-        return;
-
-    m_topContentInset = topContentInset;
-    setPropertyChanged(TopContentInset);
-}
-
-void ScrollingStateScrollingNode::setScrolledContentsLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_scrolledContentsLayer)
-        return;
-    
-    m_scrolledContentsLayer = layerRepresentation;
-    setPropertyChanged(ScrolledContentsLayer);
-}
-
-void ScrollingStateScrollingNode::setCounterScrollingLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_counterScrollingLayer)
-        return;
-    
-    m_counterScrollingLayer = layerRepresentation;
-    setPropertyChanged(CounterScrollingLayer);
-}
-
-void ScrollingStateScrollingNode::setInsetClipLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_insetClipLayer)
-        return;
-    
-    m_insetClipLayer = layerRepresentation;
-    setPropertyChanged(InsetClipLayer);
-}
-
-void ScrollingStateScrollingNode::setContentShadowLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_contentShadowLayer)
-        return;
-    
-    m_contentShadowLayer = layerRepresentation;
-    setPropertyChanged(ContentShadowLayer);
-}
-
-void ScrollingStateScrollingNode::setHeaderLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_headerLayer)
-        return;
-    
-    m_headerLayer = layerRepresentation;
-    setPropertyChanged(HeaderLayer);
-}
-
-
-void ScrollingStateScrollingNode::setFooterLayer(const LayerRepresentation&amp; layerRepresentation)
-{
-    if (layerRepresentation == m_footerLayer)
-        return;
-    
-    m_footerLayer = layerRepresentation;
-    setPropertyChanged(FooterLayer);
-}
-
-#if !PLATFORM(MAC)
-void ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars(Scrollbar*, Scrollbar*)
-{
-}
-#endif
-
</del><span class="cx"> void ScrollingStateScrollingNode::dumpProperties(TextStream&amp; ts, int indent) const
</span><span class="cx"> {
</span><del>-    ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;Scrolling node&quot; &lt;&lt; &quot;\n&quot;;
-
-    if (!m_viewportSize.isEmpty()) {
-        writeIndent(ts, indent + 1);
-        ts &lt;&lt; &quot;(viewport rect &quot;
-            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_viewportSize.width()) &lt;&lt; &quot; &quot;
-            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_viewportSize.height()) &lt;&lt; &quot;)\n&quot;;
-    }
-
</del><span class="cx">     if (m_scrollPosition != FloatPoint()) {
</span><span class="cx">         writeIndent(ts, indent + 1);
</span><span class="cx">         ts &lt;&lt; &quot;(scroll position &quot;
</span><span class="lines">@@ -310,24 +117,25 @@
</span><span class="cx">             &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_scrollPosition.y()) &lt;&lt; &quot;)\n&quot;;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (!m_totalContentsSize.isEmpty()) {
</del><ins>+    if (!m_scrollableAreaSize.isEmpty()) {
</ins><span class="cx">         writeIndent(ts, indent + 1);
</span><del>-        ts &lt;&lt; &quot;(contents size &quot; &lt;&lt; m_totalContentsSize.width() &lt;&lt; &quot; &quot; &lt;&lt; m_totalContentsSize.height() &lt;&lt; &quot;)\n&quot;;
</del><ins>+        ts &lt;&lt; &quot;(scrollable area size &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_scrollableAreaSize.width()) &lt;&lt; &quot; &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_scrollableAreaSize.height()) &lt;&lt; &quot;)\n&quot;;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_frameScaleFactor != 1) {
</del><ins>+    if (!m_totalContentsSize.isEmpty()) {
</ins><span class="cx">         writeIndent(ts, indent + 1);
</span><del>-        ts &lt;&lt; &quot;(frame scale factor &quot; &lt;&lt; m_frameScaleFactor &lt;&lt; &quot;)\n&quot;;
</del><ins>+        ts &lt;&lt; &quot;(contents size &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_totalContentsSize.width()) &lt;&lt; &quot; &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_totalContentsSize.height()) &lt;&lt; &quot;)\n&quot;;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_synchronousScrollingReasons) {
-        writeIndent(ts, indent + 1);
-        ts &lt;&lt; &quot;(Scrolling on main thread because: &quot; &lt;&lt; ScrollingCoordinator::synchronousScrollingReasonsAsText(m_synchronousScrollingReasons) &lt;&lt; &quot;)\n&quot;;
-    }
-
</del><span class="cx">     if (m_requestedScrollPosition != IntPoint()) {
</span><span class="cx">         writeIndent(ts, indent + 1);
</span><del>-        ts &lt;&lt; &quot;(requested scroll position &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.x()) &lt;&lt; &quot; &quot; &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.y()) &lt;&lt; &quot;)\n&quot;;
</del><ins>+        ts &lt;&lt; &quot;(requested scroll position &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.x()) &lt;&lt; &quot; &quot;
+            &lt;&lt; TextStream::FormatNumberRespectingIntegers(m_requestedScrollPosition.y()) &lt;&lt; &quot;)\n&quot;;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_scrollOrigin != IntPoint()) {
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -28,56 +28,32 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
</span><span class="cx"> 
</span><del>-#include &quot;GraphicsLayer.h&quot;
-#include &quot;IntRect.h&quot;
-#include &quot;Region.h&quot;
</del><span class="cx"> #include &quot;ScrollTypes.h&quot;
</span><del>-#include &quot;ScrollbarThemeComposite.h&quot;
</del><span class="cx"> #include &quot;ScrollingCoordinator.h&quot;
</span><span class="cx"> #include &quot;ScrollingStateNode.h&quot;
</span><span class="cx"> #include &lt;wtf/PassOwnPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class Scrollbar;
-
-class ScrollingStateScrollingNode final : public ScrollingStateNode {
</del><ins>+class ScrollingStateScrollingNode : public ScrollingStateNode {
</ins><span class="cx"> public:
</span><del>-    static PassOwnPtr&lt;ScrollingStateScrollingNode&gt; create(ScrollingStateTree&amp;, ScrollingNodeType, ScrollingNodeID);
-
-    virtual PassOwnPtr&lt;ScrollingStateNode&gt; clone(ScrollingStateTree&amp;);
-
</del><span class="cx">     virtual ~ScrollingStateScrollingNode();
</span><span class="cx"> 
</span><span class="cx">     enum ChangedProperty {
</span><del>-        ViewportSize = NumStateNodeBits,
</del><ins>+        ScrollableAreaSize = NumStateNodeBits,
</ins><span class="cx">         TotalContentsSize,
</span><span class="cx">         ScrollPosition,
</span><span class="cx">         ScrollOrigin,
</span><span class="cx">         ScrollableAreaParams,
</span><del>-        FrameScaleFactor,
-        NonFastScrollableRegion,
-        WheelEventHandlerCount,
-        ReasonsForSynchronousScrolling,
</del><span class="cx">         RequestedScrollPosition,
</span><del>-        ScrolledContentsLayer,
-        CounterScrollingLayer,
-        InsetClipLayer,
-        ContentShadowLayer,
-        HeaderHeight,
-        FooterHeight,
-        HeaderLayer,
-        FooterLayer,
-        PainterForScrollbar,
-        BehaviorForFixedElements,
-        TopContentInset
</del><ins>+        NumScrollingStateNodeBits,
</ins><span class="cx">     };
</span><span class="cx"> 
</span><del>-    const FloatSize&amp; viewportSize() const { return m_viewportSize; }
-    void setViewportSize(const FloatSize&amp;);
</del><ins>+    const FloatSize&amp; scrollableAreaSize() const { return m_scrollableAreaSize; }
+    void setScrollableAreaSize(const FloatSize&amp;);
</ins><span class="cx"> 
</span><del>-    const IntSize&amp; totalContentsSize() const { return m_totalContentsSize; }
-    void setTotalContentsSize(const IntSize&amp;);
</del><ins>+    const FloatSize&amp; totalContentsSize() const { return m_totalContentsSize; }
+    void setTotalContentsSize(const FloatSize&amp;);
</ins><span class="cx"> 
</span><span class="cx">     const FloatPoint&amp; scrollPosition() const { return m_scrollPosition; }
</span><span class="cx">     void setScrollPosition(const FloatPoint&amp;);
</span><span class="lines">@@ -85,103 +61,27 @@
</span><span class="cx">     const IntPoint&amp; scrollOrigin() const { return m_scrollOrigin; }
</span><span class="cx">     void setScrollOrigin(const IntPoint&amp;);
</span><span class="cx"> 
</span><del>-    float frameScaleFactor() const { return m_frameScaleFactor; }
-    void setFrameScaleFactor(float);
-
-    const Region&amp; nonFastScrollableRegion() const { return m_nonFastScrollableRegion; }
-    void setNonFastScrollableRegion(const Region&amp;);
-
-    unsigned wheelEventHandlerCount() const { return m_wheelEventHandlerCount; }
-    void setWheelEventHandlerCount(unsigned);
-
-    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
-    void setSynchronousScrollingReasons(SynchronousScrollingReasons);
-
</del><span class="cx">     const ScrollableAreaParameters&amp; scrollableAreaParameters() const { return m_scrollableAreaParameters; }
</span><span class="cx">     void setScrollableAreaParameters(const ScrollableAreaParameters&amp; params);
</span><span class="cx"> 
</span><del>-    ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
-    void setScrollBehaviorForFixedElements(ScrollBehaviorForFixedElements);
-
</del><span class="cx">     const FloatPoint&amp; requestedScrollPosition() const { return m_requestedScrollPosition; }
</span><span class="cx">     bool requestedScrollPositionRepresentsProgrammaticScroll() const { return m_requestedScrollPositionRepresentsProgrammaticScroll; }
</span><span class="cx">     void setRequestedScrollPosition(const FloatPoint&amp;, bool representsProgrammaticScroll);
</span><span class="cx">     
</span><del>-    int headerHeight() const { return m_headerHeight; }
-    void setHeaderHeight(int);
-
-    int footerHeight() const { return m_footerHeight; }
-    void setFooterHeight(int);
-
-    float topContentInset() const { return m_topContentInset; }
-    void setTopContentInset(float);
-
-    // This is a layer with the contents that move.
-    const LayerRepresentation&amp; scrolledContentsLayer() const { return m_scrolledContentsLayer; }
-    void setScrolledContentsLayer(const LayerRepresentation&amp;);
-
-    // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
-    const LayerRepresentation&amp; counterScrollingLayer() const { return m_counterScrollingLayer; }
-    void setCounterScrollingLayer(const LayerRepresentation&amp;);
-
-    // This is a clipping layer that will scroll with the page for all y-delta scroll values between 0
-    // and topContentInset(). Once the y-deltas get beyond the content inset point, this layer no longer
-    // needs to move. If the topContentInset() is 0, this layer does not need to move at all. This is
-    // only used on the Mac.
-    const LayerRepresentation&amp; insetClipLayer() const { return m_insetClipLayer; }
-    void setInsetClipLayer(const LayerRepresentation&amp;);
-
-    const LayerRepresentation&amp; contentShadowLayer() const { return m_contentShadowLayer; }
-    void setContentShadowLayer(const LayerRepresentation&amp;);
-
-    // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
-    const LayerRepresentation&amp; headerLayer() const { return m_headerLayer; }
-    void setHeaderLayer(const LayerRepresentation&amp;);
-
-    // The header and footer layers scroll vertically with the page, they should remain fixed when scrolling horizontally.
-    const LayerRepresentation&amp; footerLayer() const { return m_footerLayer; }
-    void setFooterLayer(const LayerRepresentation&amp;);
-
-#if PLATFORM(MAC)
-    ScrollbarPainter verticalScrollbarPainter() const { return m_verticalScrollbarPainter.get(); }
-    ScrollbarPainter horizontalScrollbarPainter() const { return m_horizontalScrollbarPainter.get(); }
-#endif
-    void setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
-
</del><span class="cx">     virtual void dumpProperties(TextStream&amp;, int indent) const override;
</span><del>-
-private:
</del><ins>+    
+protected:
</ins><span class="cx">     ScrollingStateScrollingNode(ScrollingStateTree&amp;, ScrollingNodeType, ScrollingNodeID);
</span><span class="cx">     ScrollingStateScrollingNode(const ScrollingStateScrollingNode&amp;, ScrollingStateTree&amp;);
</span><del>-
-    LayerRepresentation m_scrolledContentsLayer;
-    LayerRepresentation m_counterScrollingLayer;
-    LayerRepresentation m_insetClipLayer;
-    LayerRepresentation m_contentShadowLayer;
-    LayerRepresentation m_headerLayer;
-    LayerRepresentation m_footerLayer;
-
-#if PLATFORM(MAC)
-    RetainPtr&lt;ScrollbarPainter&gt; m_verticalScrollbarPainter;
-    RetainPtr&lt;ScrollbarPainter&gt; m_horizontalScrollbarPainter;
-#endif
-
-    FloatSize m_viewportSize;
-    IntSize m_totalContentsSize;
</del><ins>+    
+private:
+    FloatSize m_scrollableAreaSize;
+    FloatSize m_totalContentsSize;
</ins><span class="cx">     FloatPoint m_scrollPosition;
</span><ins>+    FloatPoint m_requestedScrollPosition;
</ins><span class="cx">     IntPoint m_scrollOrigin;
</span><del>-    
</del><span class="cx">     ScrollableAreaParameters m_scrollableAreaParameters;
</span><del>-    Region m_nonFastScrollableRegion;
-    float m_frameScaleFactor;
-    unsigned m_wheelEventHandlerCount;
-    SynchronousScrollingReasons m_synchronousScrollingReasons;
-    ScrollBehaviorForFixedElements m_behaviorForFixed;
-    int m_headerHeight;
-    int m_footerHeight;
-    FloatPoint m_requestedScrollPosition;
</del><span class="cx">     bool m_requestedScrollPositionRepresentsProgrammaticScroll;
</span><del>-    float m_topContentInset;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> SCROLLING_STATE_NODE_TYPE_CASTS(ScrollingStateScrollingNode, isScrollingNode());
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -30,7 +30,8 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AsyncScrollingCoordinator.h&quot;
</span><span class="cx"> #include &quot;ScrollingStateFixedNode.h&quot;
</span><del>-#include &quot;ScrollingStateScrollingNode.h&quot;
</del><ins>+#include &quot;ScrollingStateFrameScrollingNode.h&quot;
+#include &quot;ScrollingStateOverflowScrollingNode.h&quot;
</ins><span class="cx"> #include &quot;ScrollingStateStickyNode.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -86,7 +87,7 @@
</span><span class="cx">         // If we're resetting the root node, we should clear the HashMap and destroy the current children.
</span><span class="cx">         clear();
</span><span class="cx"> 
</span><del>-        setRootStateNode(ScrollingStateScrollingNode::create(*this, FrameScrollingNode, newNodeID));
</del><ins>+        setRootStateNode(ScrollingStateFrameScrollingNode::create(*this, newNodeID));
</ins><span class="cx">         newNode = rootStateNode();
</span><span class="cx">         m_hasNewRootStateNode = true;
</span><span class="cx">     } else {
</span><span class="lines">@@ -107,9 +108,14 @@
</span><span class="cx">             parent-&gt;appendChild(stickyNode.release());
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case FrameScrollingNode:
</del><ins>+        case FrameScrollingNode: {
+            OwnPtr&lt;ScrollingStateFrameScrollingNode&gt; scrollingNode = ScrollingStateFrameScrollingNode::create(*this, newNodeID);
+            newNode = scrollingNode.get();
+            parent-&gt;appendChild(scrollingNode.release());
+            break;
+        }
</ins><span class="cx">         case OverflowScrollingNode: {
</span><del>-            OwnPtr&lt;ScrollingStateScrollingNode&gt; scrollingNode = ScrollingStateScrollingNode::create(*this, nodeType, newNodeID);
</del><ins>+            OwnPtr&lt;ScrollingStateOverflowScrollingNode&gt; scrollingNode = ScrollingStateOverflowScrollingNode::create(*this, newNodeID);
</ins><span class="cx">             newNode = scrollingNode.get();
</span><span class="cx">             parent-&gt;appendChild(scrollingNode.release());
</span><span class="cx">             break;
</span><span class="lines">@@ -147,7 +153,7 @@
</span><span class="cx">     treeStateClone-&gt;setPreferredLayerRepresentation(preferredLayerRepresentation);
</span><span class="cx"> 
</span><span class="cx">     if (m_rootStateNode)
</span><del>-        treeStateClone-&gt;setRootStateNode(static_pointer_cast&lt;ScrollingStateScrollingNode&gt;(m_rootStateNode-&gt;cloneAndReset(*treeStateClone)));
</del><ins>+        treeStateClone-&gt;setRootStateNode(static_pointer_cast&lt;ScrollingStateFrameScrollingNode&gt;(m_rootStateNode-&gt;cloneAndReset(*treeStateClone)));
</ins><span class="cx"> 
</span><span class="cx">     // Copy the IDs of the nodes that have been removed since the last commit into the clone.
</span><span class="cx">     treeStateClone-&gt;m_nodesRemovedSinceLastCommit.swap(m_nodesRemovedSinceLastCommit);
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateTreeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING) || USE(COORDINATED_GRAPHICS)
</span><span class="cx"> 
</span><del>-#include &quot;ScrollingStateScrollingNode.h&quot;
</del><ins>+#include &quot;ScrollingStateFrameScrollingNode.h&quot;
</ins><span class="cx"> #include &lt;wtf/OwnPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/PassOwnPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx">     static PassOwnPtr&lt;ScrollingStateTree&gt; create(AsyncScrollingCoordinator* = 0);
</span><span class="cx">     ~ScrollingStateTree();
</span><span class="cx"> 
</span><del>-    ScrollingStateScrollingNode* rootStateNode() const { return m_rootStateNode.get(); }
</del><ins>+    ScrollingStateFrameScrollingNode* rootStateNode() const { return m_rootStateNode.get(); }
</ins><span class="cx">     ScrollingStateNode* stateNodeForID(ScrollingNodeID);
</span><span class="cx"> 
</span><span class="cx">     ScrollingNodeID attachNode(ScrollingNodeType, ScrollingNodeID, ScrollingNodeID parentID);
</span><span class="lines">@@ -79,14 +79,14 @@
</span><span class="cx"> private:
</span><span class="cx">     ScrollingStateTree(AsyncScrollingCoordinator*);
</span><span class="cx"> 
</span><del>-    void setRootStateNode(PassOwnPtr&lt;ScrollingStateScrollingNode&gt; rootStateNode) { m_rootStateNode = rootStateNode; }
</del><ins>+    void setRootStateNode(PassOwnPtr&lt;ScrollingStateFrameScrollingNode&gt; rootStateNode) { m_rootStateNode = rootStateNode; }
</ins><span class="cx">     void addNode(ScrollingStateNode*);
</span><span class="cx">     void removeNode(ScrollingStateNode*);
</span><span class="cx">     void didRemoveNode(ScrollingNodeID);
</span><span class="cx"> 
</span><span class="cx">     AsyncScrollingCoordinator* m_scrollingCoordinator;
</span><span class="cx">     StateNodeMap m_stateNodeMap;
</span><del>-    OwnPtr&lt;ScrollingStateScrollingNode&gt; m_rootStateNode;
</del><ins>+    OwnPtr&lt;ScrollingStateFrameScrollingNode&gt; m_rootStateNode;
</ins><span class="cx">     Vector&lt;ScrollingNodeID&gt; m_nodesRemovedSinceLastCommit;
</span><span class="cx">     bool m_hasChangedProperties;
</span><span class="cx">     bool m_hasNewRootStateNode;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -133,16 +133,16 @@
</span><span class="cx">     ScrollingStateScrollingNode* rootNode = scrollingStateTree-&gt;rootStateNode();
</span><span class="cx">     if (rootNode
</span><span class="cx">         &amp;&amp; (rootStateNodeChanged
</span><del>-            || rootNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)
-            || rootNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::NonFastScrollableRegion)
</del><ins>+            || rootNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::WheelEventHandlerCount)
+            || rootNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::NonFastScrollableRegion)
</ins><span class="cx">             || rootNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))) {
</span><span class="cx">         MutexLocker lock(m_mutex);
</span><span class="cx"> 
</span><span class="cx">         if (rootStateNodeChanged || rootNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx">             m_mainFrameScrollPosition = FloatPoint();
</span><del>-        if (rootStateNodeChanged || rootNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount))
</del><ins>+        if (rootStateNodeChanged || rootNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::WheelEventHandlerCount))
</ins><span class="cx">             m_hasWheelEventHandlers = scrollingStateTree-&gt;rootStateNode()-&gt;wheelEventHandlerCount();
</span><del>-        if (rootStateNodeChanged || rootNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::NonFastScrollableRegion))
</del><ins>+        if (rootStateNodeChanged || rootNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::NonFastScrollableRegion))
</ins><span class="cx">             m_nonFastScrollableRegion = scrollingStateTree-&gt;rootStateNode()-&gt;nonFastScrollableRegion();
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeFrameScrollingNodecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,78 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ScrollingTreeFrameScrollingNode.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING)
+
+#include &quot;ScrollingStateTree.h&quot;
+#include &quot;ScrollingTree.h&quot;
+
+namespace WebCore {
+
+ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+    : ScrollingTreeScrollingNode(scrollingTree, FrameScrollingNode, nodeID)
+    , m_frameScaleFactor(1)
+    , m_headerHeight(0)
+    , m_footerHeight(0)
+    , m_topContentInset(0)
+    , m_synchronousScrollingReasons(0)
+    , m_behaviorForFixed(StickToDocumentBounds)
+{
+}
+
+ScrollingTreeFrameScrollingNode::~ScrollingTreeFrameScrollingNode()
+{
+}
+
+void ScrollingTreeFrameScrollingNode::updateBeforeChildren(const ScrollingStateNode&amp; stateNode)
+{
+    ScrollingTreeScrollingNode::updateBeforeChildren(stateNode);
+    
+    const ScrollingStateFrameScrollingNode&amp; state = toScrollingStateFrameScrollingNode(stateNode);
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::FrameScaleFactor))
+        m_frameScaleFactor = state.frameScaleFactor();
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling))
+        m_synchronousScrollingReasons = state.synchronousScrollingReasons();
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderHeight))
+        m_headerHeight = state.headerHeight();
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterHeight))
+        m_footerHeight = state.footerHeight();
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::BehaviorForFixedElements))
+        m_behaviorForFixed = state.scrollBehaviorForFixedElements();
+
+    if (state.hasChangedProperty(ScrollingStateFrameScrollingNode::TopContentInset))
+        m_topContentInset = state.topContentInset();
+}
+    
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeFrameScrollingNodehfromrev169054trunkSourceWebCorepagescrollingScrollingTreeScrollingNodeh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h (from rev 169054, trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingTreeFrameScrollingNode_h
+#define ScrollingTreeFrameScrollingNode_h
+
+#if ENABLE(ASYNC_SCROLLING)
+
+#include &quot;ScrollingTreeScrollingNode.h&quot;
+
+namespace WebCore {
+
+class PlatformWheelEvent;
+class ScrollingTree;
+class ScrollingStateScrollingNode;
+
+class ScrollingTreeFrameScrollingNode : public ScrollingTreeScrollingNode {
+public:
+    virtual ~ScrollingTreeFrameScrollingNode();
+
+    virtual void updateBeforeChildren(const ScrollingStateNode&amp;) override;
+    
+    // FIXME: We should implement this when we support ScrollingTreeScrollingNodes as children.
+    virtual void parentScrollPositionDidChange(const FloatRect&amp; /*viewportRect*/, const FloatSize&amp; /*cumulativeDelta*/) override { }
+
+    virtual void handleWheelEvent(const PlatformWheelEvent&amp;) = 0;
+    virtual void setScrollPosition(const FloatPoint&amp;) = 0;
+    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) = 0;
+
+    virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale) = 0;
+    virtual void updateLayersAfterDelegatedScroll(const FloatPoint&amp;) { }
+
+    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
+    bool shouldUpdateScrollLayerPositionSynchronously() const { return m_synchronousScrollingReasons; }
+
+protected:
+    ScrollingTreeFrameScrollingNode(ScrollingTree&amp;, ScrollingNodeID);
+
+    float frameScaleFactor() const { return m_frameScaleFactor; }
+    int headerHeight() const { return m_headerHeight; }
+    int footerHeight() const { return m_footerHeight; }
+    float topContentInset() const { return m_topContentInset; }
+    
+    ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
+    
+private:
+    float m_frameScaleFactor;
+
+    int m_headerHeight;
+    int m_footerHeight;
+    float m_topContentInset;
+    
+    SynchronousScrollingReasons m_synchronousScrollingReasons;
+    ScrollBehaviorForFixedElements m_behaviorForFixed;
+};
+
+SCROLLING_NODE_TYPE_CASTS(ScrollingTreeFrameScrollingNode, isFrameScrollingNode());
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING)
+
+#endif // ScrollingTreeScrollingNode_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -49,6 +49,8 @@
</span><span class="cx">     bool isFixedNode() const { return nodeType() == FixedNode; }
</span><span class="cx">     bool isStickyNode() const { return nodeType() == StickyNode; }
</span><span class="cx">     bool isScrollingNode() const { return nodeType() == FrameScrollingNode || nodeType() == OverflowScrollingNode; }
</span><ins>+    bool isFrameScrollingNode() const { return nodeType() == FrameScrollingNode; }
+    bool isOverflowScrollingNode() const { return nodeType() == OverflowScrollingNode; }
</ins><span class="cx"> 
</span><span class="cx">     virtual void updateBeforeChildren(const ScrollingStateNode&amp;) = 0;
</span><span class="cx">     virtual void updateAfterChildren(const ScrollingStateNode&amp;) { }
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeOverflowScrollingNodecppfromrev169054trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.cpp (from rev 169054, trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ScrollingTreeOverflowScrollingNode.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING)
+
+#include &quot;ScrollingStateTree.h&quot;
+#include &quot;ScrollingTree.h&quot;
+
+namespace WebCore {
+
+ScrollingTreeOverflowScrollingNode::ScrollingTreeOverflowScrollingNode(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+    : ScrollingTreeScrollingNode(scrollingTree, OverflowScrollingNode, nodeID)
+{
+}
+
+ScrollingTreeOverflowScrollingNode::~ScrollingTreeOverflowScrollingNode()
+{
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeOverflowScrollingNodehfromrev169054trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.h (from rev 169054, trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingTreeOverflowScrollingNode_h
+#define ScrollingTreeOverflowScrollingNode_h
+
+#if ENABLE(ASYNC_SCROLLING)
+
+#include &quot;ScrollingTreeScrollingNode.h&quot;
+
+namespace WebCore {
+
+class ScrollingTreeOverflowScrollingNode : public ScrollingTreeScrollingNode {
+public:
+    virtual ~ScrollingTreeOverflowScrollingNode();
+
+    
+protected:
+    ScrollingTreeOverflowScrollingNode(ScrollingTree&amp;, ScrollingNodeID);
+};
+
+SCROLLING_NODE_TYPE_CASTS(ScrollingTreeOverflowScrollingNode, isOverflowScrollingNode());
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING)
+
+#endif // ScrollingTreeOverflowScrollingNode_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeScrollingNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -35,12 +35,6 @@
</span><span class="cx"> 
</span><span class="cx"> ScrollingTreeScrollingNode::ScrollingTreeScrollingNode(ScrollingTree&amp; scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
</span><span class="cx">     : ScrollingTreeNode(scrollingTree, nodeType, nodeID)
</span><del>-    , m_frameScaleFactor(1)
-    , m_headerHeight(0)
-    , m_footerHeight(0)
-    , m_synchronousScrollingReasons(0)
-    , m_behaviorForFixed(StickToDocumentBounds)
-    , m_topContentInset(0)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -52,14 +46,15 @@
</span><span class="cx"> {
</span><span class="cx">     const ScrollingStateScrollingNode&amp; state = toScrollingStateScrollingNode(stateNode);
</span><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::ViewportSize))
-        m_viewportSize = state.viewportSize();
</del><ins>+    if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaSize))
+        m_scrollableAreaSize = state.scrollableAreaSize();
</ins><span class="cx"> 
</span><span class="cx">     if (state.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)) {
</span><span class="cx">         if (scrollingTree().isRubberBandInProgress())
</span><span class="cx">             m_totalContentsSizeForRubberBand = m_totalContentsSize;
</span><span class="cx">         else
</span><span class="cx">             m_totalContentsSizeForRubberBand = state.totalContentsSize();
</span><ins>+
</ins><span class="cx">         m_totalContentsSize = state.totalContentsSize();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -71,33 +66,42 @@
</span><span class="cx"> 
</span><span class="cx">     if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams))
</span><span class="cx">         m_scrollableAreaParameters = state.scrollableAreaParameters();
</span><ins>+}
</ins><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor))
-        m_frameScaleFactor = state.frameScaleFactor();
</del><ins>+void ScrollingTreeScrollingNode::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
+{
+    const ScrollingStateScrollingNode&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
+        scrollingTree().scrollingTreeNodeRequestsScroll(scrollingNodeID(), scrollingStateNode.requestedScrollPosition(), scrollingStateNode.requestedScrollPositionRepresentsProgrammaticScroll());
+}
</ins><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling))
-        m_synchronousScrollingReasons = state.synchronousScrollingReasons();
</del><ins>+void ScrollingTreeScrollingNode::setScrollPosition(const FloatPoint&amp; scrollPosition)
+{
+    FloatPoint newScrollPosition = scrollPosition;
+    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
+    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
</ins><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight))
-        m_headerHeight = state.headerHeight();
</del><ins>+    setScrollPositionWithoutContentEdgeConstraints(newScrollPosition);
+}
</ins><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::FooterHeight))
-        m_footerHeight = state.footerHeight();
</del><ins>+void ScrollingTreeScrollingNode::setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp; scrollPosition)
+{
+    setScrollLayerPosition(scrollPosition);
+    scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition);
+}
</ins><span class="cx"> 
</span><del>-    if (state.hasChangedProperty(ScrollingStateScrollingNode::BehaviorForFixedElements))
-        m_behaviorForFixed = state.scrollBehaviorForFixedElements();
-
-    if (state.hasChangedProperty(ScrollingStateScrollingNode::TopContentInset))
-        m_topContentInset = state.topContentInset();
</del><ins>+FloatPoint ScrollingTreeScrollingNode::minimumScrollPosition() const
+{
+    return FloatPoint();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ScrollingTreeScrollingNode::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
</del><ins>+FloatPoint ScrollingTreeScrollingNode::maximumScrollPosition() const
</ins><span class="cx"> {
</span><del>-    const ScrollingStateScrollingNode&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
-        scrollingTree().scrollingTreeNodeRequestsScroll(scrollingNodeID(), scrollingStateNode.requestedScrollPosition(), scrollingStateNode.requestedScrollPositionRepresentsProgrammaticScroll());
</del><ins>+    FloatPoint contentSizePoint(totalContentsSize());
+    return FloatPoint(contentSizePoint - scrollableAreaSize()).expandedTo(FloatPoint());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(ASYNC_SCROLLING)
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeScrollingNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -36,7 +36,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class PlatformWheelEvent;
</del><span class="cx"> class ScrollingTree;
</span><span class="cx"> class ScrollingStateScrollingNode;
</span><span class="cx"> 
</span><span class="lines">@@ -51,31 +50,31 @@
</span><span class="cx">     virtual void parentScrollPositionDidChange(const FloatRect&amp; /*viewportRect*/, const FloatSize&amp; /*cumulativeDelta*/) override { }
</span><span class="cx"> 
</span><span class="cx">     virtual void handleWheelEvent(const PlatformWheelEvent&amp;) = 0;
</span><del>-    virtual void setScrollPosition(const FloatPoint&amp;) = 0;
-    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) = 0;
</del><ins>+    virtual void setScrollPosition(const FloatPoint&amp;);
+    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;);
</ins><span class="cx"> 
</span><span class="cx">     virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale) = 0;
</span><span class="cx">     virtual void updateLayersAfterDelegatedScroll(const FloatPoint&amp;) { }
</span><span class="cx"> 
</span><del>-    SynchronousScrollingReasons synchronousScrollingReasons() const { return m_synchronousScrollingReasons; }
-    bool shouldUpdateScrollLayerPositionSynchronously() const { return m_synchronousScrollingReasons; }
-
</del><span class="cx"> protected:
</span><span class="cx">     ScrollingTreeScrollingNode(ScrollingTree&amp;, ScrollingNodeType, ScrollingNodeID);
</span><span class="cx"> 
</span><ins>+    virtual FloatPoint minimumScrollPosition() const;
+    virtual FloatPoint maximumScrollPosition() const;
+
+    virtual void setScrollLayerPosition(const FloatPoint&amp;) = 0;
+
</ins><span class="cx">     const FloatPoint&amp; scrollPosition() const { return m_scrollPosition; }
</span><del>-    const FloatSize&amp; viewportSize() const { return m_viewportSize; }
-    const IntSize&amp; totalContentsSize() const { return m_totalContentsSize; }
</del><ins>+    const FloatSize&amp; scrollableAreaSize() const { return m_scrollableAreaSize; }
+    const FloatSize&amp; totalContentsSize() const { return m_totalContentsSize; }
</ins><span class="cx">     const IntPoint&amp; scrollOrigin() const { return m_scrollOrigin; }
</span><span class="cx"> 
</span><span class="cx">     // If the totalContentsSize changes in the middle of a rubber-band, we still want to use the old totalContentsSize for the sake of
</span><span class="cx">     // computing the stretchAmount(). Using the old value will keep the animation smooth. When there is no rubber-band in progress at
</span><span class="cx">     // all, m_totalContentsSizeForRubberBand should be equivalent to m_totalContentsSize.
</span><del>-    const IntSize&amp; totalContentsSizeForRubberBand() const { return m_totalContentsSizeForRubberBand; }
-    void setTotalContentsSizeForRubberBand(const IntSize&amp; totalContentsSizeForRubberBand) { m_totalContentsSizeForRubberBand = totalContentsSizeForRubberBand; }
</del><ins>+    const FloatSize&amp; totalContentsSizeForRubberBand() const { return m_totalContentsSizeForRubberBand; }
+    void setTotalContentsSizeForRubberBand(const FloatSize&amp; totalContentsSizeForRubberBand) { m_totalContentsSizeForRubberBand = totalContentsSizeForRubberBand; }
</ins><span class="cx"> 
</span><del>-    float frameScaleFactor() const { return m_frameScaleFactor; }
-
</del><span class="cx">     ScrollElasticity horizontalScrollElasticity() const { return m_scrollableAreaParameters.horizontalScrollElasticity; }
</span><span class="cx">     ScrollElasticity verticalScrollElasticity() const { return m_scrollableAreaParameters.verticalScrollElasticity; }
</span><span class="cx"> 
</span><span class="lines">@@ -84,31 +83,14 @@
</span><span class="cx"> 
</span><span class="cx">     bool canHaveScrollbars() const { return m_scrollableAreaParameters.horizontalScrollbarMode != ScrollbarAlwaysOff || m_scrollableAreaParameters.verticalScrollbarMode != ScrollbarAlwaysOff; }
</span><span class="cx"> 
</span><del>-    int headerHeight() const { return m_headerHeight; }
-    int footerHeight() const { return m_footerHeight; }
-
-    ScrollBehaviorForFixedElements scrollBehaviorForFixedElements() const { return m_behaviorForFixed; }
-
-    float topContentInset() const { return m_topContentInset; }
-
</del><span class="cx"> private:
</span><del>-    FloatSize m_viewportSize;
-    IntSize m_totalContentsSize;
-    IntSize m_totalContentsSizeForRubberBand;
</del><ins>+    FloatSize m_scrollableAreaSize;
+    FloatSize m_totalContentsSize;
+    FloatSize m_totalContentsSizeForRubberBand;
</ins><span class="cx">     FloatPoint m_scrollPosition;
</span><span class="cx">     IntPoint m_scrollOrigin;
</span><span class="cx">     
</span><span class="cx">     ScrollableAreaParameters m_scrollableAreaParameters;
</span><del>-    
-    float m_frameScaleFactor;
-
-    int m_headerHeight;
-    int m_footerHeight;
-
-    SynchronousScrollingReasons m_synchronousScrollingReasons;
-    ScrollBehaviorForFixedElements m_behaviorForFixed;
-
-    float m_topContentInset;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> SCROLLING_NODE_TYPE_CASTS(ScrollingTreeScrollingNode, isScrollingNode());
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingCoordinatorIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ios/ScrollingCoordinatorIOS.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingCoordinatorIOS.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingCoordinatorIOS.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> #include &quot;ScrollingStateTree.h&quot;
</span><span class="cx"> #include &quot;ScrollingThread.h&quot;
</span><span class="cx"> #include &quot;ScrollingTreeFixedNode.h&quot;
</span><del>-#include &quot;ScrollingTreeScrollingNodeIOS.h&quot;
</del><ins>+#include &quot;ScrollingTreeFrameScrollingNodeIOS.h&quot;
</ins><span class="cx"> #include &quot;ScrollingTreeStickyNode.h&quot;
</span><span class="cx"> #include &quot;ScrollingTreeIOS.h&quot;
</span><span class="cx"> #include &lt;wtf/Functional.h&gt;
</span><span class="lines">@@ -110,8 +110,10 @@
</span><span class="cx"> 
</span><span class="cx">     switch (nodeType) {
</span><span class="cx">     case FrameScrollingNode:
</span><ins>+        return ScrollingTreeFrameScrollingNodeIOS::create(*scrollingTree(), nodeID);
</ins><span class="cx">     case OverflowScrollingNode:
</span><del>-        return ScrollingTreeScrollingNodeIOS::create(*scrollingTree(), nodeType, nodeID);
</del><ins>+        ASSERT_NOT_REACHED();
+        return nullptr;
</ins><span class="cx">     case FixedNode:
</span><span class="cx">         return ScrollingTreeFixedNode::create(*scrollingTree(), nodeID);
</span><span class="cx">     case StickyNode:
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeFrameScrollingNodeIOShfromrev169054trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h (from rev 169054, trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,81 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingTreeFrameScrollingNodeIOS_h
+#define ScrollingTreeFrameScrollingNodeIOS_h
+
+#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
+
+#include &quot;ScrollingTreeFrameScrollingNode.h&quot;
+#include &lt;wtf/RetainPtr.h&gt;
+
+OBJC_CLASS CALayer;
+
+namespace WebCore {
+
+class ScrollingTreeFrameScrollingNodeIOS : public ScrollingTreeFrameScrollingNode {
+public:
+    static PassOwnPtr&lt;ScrollingTreeFrameScrollingNodeIOS&gt; create(ScrollingTree&amp;, ScrollingNodeID);
+    virtual ~ScrollingTreeFrameScrollingNodeIOS();
+
+protected:
+    ScrollingTreeFrameScrollingNodeIOS(ScrollingTree&amp;, ScrollingNodeID);
+
+    // ScrollingTreeNode member functions.
+    virtual void updateBeforeChildren(const ScrollingStateNode&amp;) override;
+    virtual void updateAfterChildren(const ScrollingStateNode&amp;) override;
+    virtual void handleWheelEvent(const PlatformWheelEvent&amp;) override { }
+
+    FloatPoint scrollPosition() const;
+    virtual void setScrollPosition(const FloatPoint&amp;) override;
+    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) override;
+
+    virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale);
+    virtual void updateLayersAfterDelegatedScroll(const FloatPoint&amp;) override;
+
+    virtual void setScrollLayerPosition(const FloatPoint&amp;) override;
+
+    FloatPoint minimumScrollPosition() const;
+    FloatPoint maximumScrollPosition() const;
+
+    void scrollBy(const IntSize&amp;);
+    void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
+
+private:
+    void updateChildNodesAfterScroll(const FloatPoint&amp;);
+    CALayer *scrollLayer() const { return m_scrollLayer.get(); }
+
+    RetainPtr&lt;CALayer&gt; m_scrollLayer;
+    RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
+    RetainPtr&lt;CALayer&gt; m_headerLayer;
+    RetainPtr&lt;CALayer&gt; m_footerLayer;
+    FloatPoint m_probableMainThreadScrollPosition;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
+
+#endif // ScrollingTreeFrameScrollingNodeIOS_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeFrameScrollingNodeIOSmmfromrev169054trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm (from rev 169054, trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,226 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;ScrollingTreeFrameScrollingNodeIOS.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING)
+
+#import &quot;FrameView.h&quot;
+#import &quot;ScrollingCoordinator.h&quot;
+#import &quot;ScrollingTree.h&quot;
+#import &quot;ScrollingStateTree.h&quot;
+#import &quot;Settings.h&quot;
+#import &quot;TileController.h&quot;
+#import &quot;WebLayer.h&quot;
+
+#import &lt;QuartzCore/QuartzCore.h&gt;
+
+namespace WebCore {
+
+PassOwnPtr&lt;ScrollingTreeFrameScrollingNodeIOS&gt; ScrollingTreeFrameScrollingNodeIOS::create(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+{
+    return adoptPtr(new ScrollingTreeFrameScrollingNodeIOS(scrollingTree, nodeID));
+}
+
+ScrollingTreeFrameScrollingNodeIOS::ScrollingTreeFrameScrollingNodeIOS(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+    : ScrollingTreeFrameScrollingNode(scrollingTree, nodeID)
+{
+}
+
+ScrollingTreeFrameScrollingNodeIOS::~ScrollingTreeFrameScrollingNodeIOS()
+{
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::updateBeforeChildren(const ScrollingStateNode&amp; stateNode)
+{
+    ScrollingTreeFrameScrollingNode::updateBeforeChildren(stateNode);
+    
+    const auto&amp; scrollingStateNode = toScrollingStateFrameScrollingNode(stateNode);
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
+        m_scrollLayer = scrollingStateNode.layer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer))
+        m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
+        m_headerLayer = scrollingStateNode.headerLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
+        m_footerLayer = scrollingStateNode.footerLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling)) {
+        if (shouldUpdateScrollLayerPositionSynchronously()) {
+            // We're transitioning to the slow &quot;update scroll layer position on the main thread&quot; mode.
+            // Initialize the probable main thread scroll position with the current scroll layer position.
+            if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
+                m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition();
+            else {
+                CGPoint scrollLayerPosition = m_scrollLayer.get().position;
+                m_probableMainThreadScrollPosition = IntPoint(-scrollLayerPosition.x, -scrollLayerPosition.y);
+            }
+        }
+    }
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
+{
+    ScrollingTreeFrameScrollingNode::updateAfterChildren(stateNode);
+
+    const auto&amp; scrollingStateNode = toScrollingStateFrameScrollingNode(stateNode);
+
+    // Update the scroll position after child nodes have been updated, because they need to have updated their constraints before any scrolling happens.
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
+        setScrollPosition(scrollingStateNode.requestedScrollPosition());
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeIOS::scrollPosition() const
+{
+    if (shouldUpdateScrollLayerPositionSynchronously())
+        return m_probableMainThreadScrollPosition;
+
+    CGPoint scrollLayerPosition = m_scrollLayer.get().position;
+    return IntPoint(-scrollLayerPosition.x + scrollOrigin().x(), -scrollLayerPosition.y + scrollOrigin().y());
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::setScrollPosition(const FloatPoint&amp; scrollPosition)
+{
+    FloatPoint newScrollPosition = scrollPosition;
+    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
+    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
+
+    setScrollPositionWithoutContentEdgeConstraints(newScrollPosition);
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp; scrollPosition)
+{
+    if (shouldUpdateScrollLayerPositionSynchronously()) {
+        m_probableMainThreadScrollPosition = scrollPosition;
+        scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition, SetScrollingLayerPosition);
+        return;
+    }
+
+    setScrollLayerPosition(scrollPosition);
+    scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition);
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition(const FloatPoint&amp; scrollPosition)
+{
+    ASSERT(!shouldUpdateScrollLayerPositionSynchronously());
+    [m_scrollLayer setPosition:CGPointMake(-scrollPosition.x() + scrollOrigin().x(), -scrollPosition.y() + scrollOrigin().y())];
+
+    updateChildNodesAfterScroll(scrollPosition);
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double /*scale*/)
+{
+    [m_counterScrollingLayer setPosition:viewportRect.location()];
+
+    if (!m_children)
+        return;
+
+    size_t size = m_children-&gt;size();
+    for (size_t i = 0; i &lt; size; ++i)
+        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportRect, FloatSize());
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterDelegatedScroll(const FloatPoint&amp; scrollPosition)
+{
+    updateChildNodesAfterScroll(scrollPosition);
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll(const FloatPoint&amp; scrollPosition)
+{
+    ScrollBehaviorForFixedElements behaviorForFixed = scrollBehaviorForFixedElements();
+    FloatPoint scrollOffset = scrollPosition - toIntSize(scrollOrigin());
+    FloatRect viewportRect(FloatPoint(), scrollableAreaSize());
+    FloatSize scrollOffsetForFixedChildren = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), roundedLayoutSize(totalContentsSize()), roundedLayoutPoint(scrollOffset), scrollOrigin(), frameScaleFactor(), false, behaviorForFixed, headerHeight(), footerHeight());
+
+    [m_counterScrollingLayer setPosition:FloatPoint(scrollOffsetForFixedChildren)];
+
+    if (m_headerLayer || m_footerLayer) {
+        // Generally the banners should have the same horizontal-position computation as a fixed element. However,
+        // the banners are not affected by the frameScaleFactor(), so if there is currently a non-1 frameScaleFactor()
+        // then we should recompute scrollOffsetForFixedChildren for the banner with a scale factor of 1.
+        float horizontalScrollOffsetForBanner = scrollOffsetForFixedChildren.width();
+        if (frameScaleFactor() != 1)
+            horizontalScrollOffsetForBanner = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), roundedLayoutSize(totalContentsSize()), roundedLayoutPoint(scrollOffset), scrollOrigin(), 1, false, behaviorForFixed, headerHeight(), footerHeight()).width();
+
+        if (m_headerLayer)
+            [m_headerLayer setPosition:FloatPoint(horizontalScrollOffsetForBanner, 0)];
+
+        if (m_footerLayer)
+            [m_footerLayer setPosition:FloatPoint(horizontalScrollOffsetForBanner, totalContentsSize().height() - footerHeight())];
+    }
+    
+    if (!m_children)
+        return;
+    
+    viewportRect.setLocation(scrollOffset);
+    
+    FloatRect viewportConstrainedObjectsRect = FrameView::rectForViewportConstrainedObjects(enclosingLayoutRect(viewportRect), roundedLayoutSize(totalContentsSize()), frameScaleFactor(), false, behaviorForFixed);
+    
+    size_t size = m_children-&gt;size();
+    for (size_t i = 0; i &lt; size; ++i)
+        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportConstrainedObjectsRect, FloatSize());
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeIOS::minimumScrollPosition() const
+{
+    FloatPoint position;
+    
+    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToBottom)
+        position.setY(maximumScrollPosition().y());
+
+    return position;
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeIOS::maximumScrollPosition() const
+{
+    FloatPoint position(totalContentsSizeForRubberBand().width() - scrollableAreaSize().width(),
+        totalContentsSizeForRubberBand().height() - scrollableAreaSize().height());
+
+    position = position.expandedTo(FloatPoint());
+
+    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToTop)
+        position.setY(minimumScrollPosition().y());
+
+    return position;
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::scrollBy(const IntSize&amp; offset)
+{
+    setScrollPosition(scrollPosition() + offset);
+}
+
+void ScrollingTreeFrameScrollingNodeIOS::scrollByWithoutContentEdgeConstraints(const IntSize&amp; offset)
+{
+    setScrollPositionWithoutContentEdgeConstraints(scrollPosition() + offset);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,83 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ScrollingTreeScrollingNodeIOS_h
-#define ScrollingTreeScrollingNodeIOS_h
-
-#if ENABLE(ASYNC_SCROLLING)
-
-#include &quot;ScrollingTreeScrollingNode.h&quot;
-#include &lt;wtf/RetainPtr.h&gt;
-
-OBJC_CLASS CALayer;
-
-namespace WebCore {
-
-class ScrollingTreeScrollingNodeIOS : public ScrollingTreeScrollingNode {
-public:
-    static PassOwnPtr&lt;ScrollingTreeScrollingNode&gt; create(ScrollingTree&amp;, ScrollingNodeType, ScrollingNodeID);
-    virtual ~ScrollingTreeScrollingNodeIOS();
-
-protected:
-    ScrollingTreeScrollingNodeIOS(ScrollingTree&amp;, ScrollingNodeType, ScrollingNodeID);
-
-    // ScrollingTreeNode member functions.
-    virtual void updateBeforeChildren(const ScrollingStateNode&amp;) override;
-    virtual void updateAfterChildren(const ScrollingStateNode&amp;) override;
-    virtual void handleWheelEvent(const PlatformWheelEvent&amp;) override { }
-
-    CALayer *scrollLayer() const { return m_scrollLayer.get(); }
-
-    FloatPoint scrollPosition() const;
-    virtual void setScrollPosition(const FloatPoint&amp;) override;
-    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) override;
-
-    virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale);
-    virtual void updateLayersAfterDelegatedScroll(const FloatPoint&amp;) override;
-
-    void setScrollLayerPosition(const FloatPoint&amp;);
-
-    FloatPoint minimumScrollPosition() const;
-    FloatPoint maximumScrollPosition() const;
-
-    void scrollBy(const IntSize&amp;);
-    void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
-
-private:
-    void updateChildNodesAfterScroll(const FloatPoint&amp;);
-
-    RetainPtr&lt;CALayer&gt; m_scrollLayer;
-    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
-    RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
-    RetainPtr&lt;CALayer&gt; m_headerLayer;
-    RetainPtr&lt;CALayer&gt; m_footerLayer;
-    FloatPoint m_probableMainThreadScrollPosition;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING)
-
-#endif // ScrollingTreeScrollingNodeIOS_h
</del></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSmm"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,228 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import &quot;config.h&quot;
-#import &quot;ScrollingTreeScrollingNodeIOS.h&quot;
-
-#if ENABLE(ASYNC_SCROLLING)
-
-#import &quot;FrameView.h&quot;
-#import &quot;ScrollingCoordinator.h&quot;
-#import &quot;ScrollingTree.h&quot;
-#import &quot;ScrollingStateTree.h&quot;
-#import &quot;Settings.h&quot;
-#import &quot;TileController.h&quot;
-#import &quot;WebLayer.h&quot;
-
-#import &lt;QuartzCore/QuartzCore.h&gt;
-
-namespace WebCore {
-
-PassOwnPtr&lt;ScrollingTreeScrollingNode&gt; ScrollingTreeScrollingNodeIOS::create(ScrollingTree&amp; scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
-{
-    return adoptPtr(new ScrollingTreeScrollingNodeIOS(scrollingTree, nodeType, nodeID));
-}
-
-ScrollingTreeScrollingNodeIOS::ScrollingTreeScrollingNodeIOS(ScrollingTree&amp; scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
-    : ScrollingTreeScrollingNode(scrollingTree, nodeType, nodeID)
-{
-}
-
-ScrollingTreeScrollingNodeIOS::~ScrollingTreeScrollingNodeIOS()
-{
-}
-
-void ScrollingTreeScrollingNodeIOS::updateBeforeChildren(const ScrollingStateNode&amp; stateNode)
-{
-    ScrollingTreeScrollingNode::updateBeforeChildren(stateNode);
-    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
-        m_scrollLayer = scrollingStateNode.layer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
-        m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
-        m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))
-        m_headerLayer = scrollingStateNode.headerLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))
-        m_footerLayer = scrollingStateNode.footerLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling)) {
-        if (shouldUpdateScrollLayerPositionSynchronously()) {
-            // We're transitioning to the slow &quot;update scroll layer position on the main thread&quot; mode.
-            // Initialize the probable main thread scroll position with the current scroll layer position.
-            if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
-                m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition();
-            else {
-                CGPoint scrollLayerPosition = m_scrollLayer.get().position;
-                m_probableMainThreadScrollPosition = IntPoint(-scrollLayerPosition.x, -scrollLayerPosition.y);
-            }
-        }
-    }
-}
-
-void ScrollingTreeScrollingNodeIOS::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
-{
-    ScrollingTreeScrollingNode::updateAfterChildren(stateNode);
-
-    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
-
-    // Update the scroll position after child nodes have been updated, because they need to have updated their constraints before any scrolling happens.
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
-        setScrollPosition(scrollingStateNode.requestedScrollPosition());
-}
-
-FloatPoint ScrollingTreeScrollingNodeIOS::scrollPosition() const
-{
-    if (shouldUpdateScrollLayerPositionSynchronously())
-        return m_probableMainThreadScrollPosition;
-
-    CGPoint scrollLayerPosition = m_scrollLayer.get().position;
-    return IntPoint(-scrollLayerPosition.x + scrollOrigin().x(), -scrollLayerPosition.y + scrollOrigin().y());
-}
-
-void ScrollingTreeScrollingNodeIOS::setScrollPosition(const FloatPoint&amp; scrollPosition)
-{
-    FloatPoint newScrollPosition = scrollPosition;
-    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
-    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
-
-    setScrollPositionWithoutContentEdgeConstraints(newScrollPosition);
-}
-
-void ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp; scrollPosition)
-{
-    if (shouldUpdateScrollLayerPositionSynchronously()) {
-        m_probableMainThreadScrollPosition = scrollPosition;
-        scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition, SetScrollingLayerPosition);
-        return;
-    }
-
-    setScrollLayerPosition(scrollPosition);
-    scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition);
-}
-
-void ScrollingTreeScrollingNodeIOS::setScrollLayerPosition(const FloatPoint&amp; scrollPosition)
-{
-    ASSERT(!shouldUpdateScrollLayerPositionSynchronously());
-    [m_scrollLayer setPosition:CGPointMake(-scrollPosition.x() + scrollOrigin().x(), -scrollPosition.y() + scrollOrigin().y())];
-
-    updateChildNodesAfterScroll(scrollPosition);
-}
-
-void ScrollingTreeScrollingNodeIOS::updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double /*scale*/)
-{
-    [m_counterScrollingLayer setPosition:viewportRect.location()];
-
-    if (!m_children)
-        return;
-
-    size_t size = m_children-&gt;size();
-    for (size_t i = 0; i &lt; size; ++i)
-        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportRect, FloatSize());
-}
-
-void ScrollingTreeScrollingNodeIOS::updateLayersAfterDelegatedScroll(const FloatPoint&amp; scrollPosition)
-{
-    updateChildNodesAfterScroll(scrollPosition);
-}
-
-void ScrollingTreeScrollingNodeIOS::updateChildNodesAfterScroll(const FloatPoint&amp; scrollPosition)
-{
-    ScrollBehaviorForFixedElements behaviorForFixed = scrollBehaviorForFixedElements();
-    FloatPoint scrollOffset = scrollPosition - toIntSize(scrollOrigin());
-    FloatRect viewportRect(FloatPoint(), viewportSize());
-    FloatSize scrollOffsetForFixedChildren = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), totalContentsSize(), flooredIntPoint(scrollOffset), scrollOrigin(), frameScaleFactor(), false, behaviorForFixed, headerHeight(), footerHeight());
-
-    [m_counterScrollingLayer setPosition:FloatPoint(scrollOffsetForFixedChildren)];
-
-    if (m_headerLayer || m_footerLayer) {
-        // Generally the banners should have the same horizontal-position computation as a fixed element. However,
-        // the banners are not affected by the frameScaleFactor(), so if there is currently a non-1 frameScaleFactor()
-        // then we should recompute scrollOffsetForFixedChildren for the banner with a scale factor of 1.
-        float horizontalScrollOffsetForBanner = scrollOffsetForFixedChildren.width();
-        if (frameScaleFactor() != 1)
-            horizontalScrollOffsetForBanner = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), totalContentsSize(), flooredIntPoint(scrollOffset), scrollOrigin(), 1, false, behaviorForFixed, headerHeight(), footerHeight()).width();
-
-        if (m_headerLayer)
-            [m_headerLayer setPosition:FloatPoint(horizontalScrollOffsetForBanner, 0)];
-
-        if (m_footerLayer)
-            [m_footerLayer setPosition:FloatPoint(horizontalScrollOffsetForBanner, totalContentsSize().height() - footerHeight())];
-    }
-    
-    if (!m_children)
-        return;
-    
-    viewportRect.setLocation(scrollOffset);
-    
-    FloatRect viewportConstrainedObjectsRect = FrameView::rectForViewportConstrainedObjects(enclosingLayoutRect(viewportRect), totalContentsSize(), frameScaleFactor(), false, behaviorForFixed);
-    
-    size_t size = m_children-&gt;size();
-    for (size_t i = 0; i &lt; size; ++i)
-        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportConstrainedObjectsRect, FloatSize());
-}
-
-FloatPoint ScrollingTreeScrollingNodeIOS::minimumScrollPosition() const
-{
-    FloatPoint position;
-    
-    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToBottom)
-        position.setY(maximumScrollPosition().y());
-
-    return position;
-}
-
-FloatPoint ScrollingTreeScrollingNodeIOS::maximumScrollPosition() const
-{
-    FloatPoint position(totalContentsSizeForRubberBand().width() - viewportSize().width(),
-        totalContentsSizeForRubberBand().height() - viewportSize().height());
-
-    position = position.expandedTo(FloatPoint());
-
-    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToTop)
-        position.setY(minimumScrollPosition().y());
-
-    return position;
-}
-
-void ScrollingTreeScrollingNodeIOS::scrollBy(const IntSize&amp; offset)
-{
-    setScrollPosition(scrollPosition() + offset);
-}
-
-void ScrollingTreeScrollingNodeIOS::scrollByWithoutContentEdgeConstraints(const IntSize&amp; offset)
-{
-    setScrollPositionWithoutContentEdgeConstraints(scrollPosition() + offset);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING)
</del></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingCoordinatorMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> #include &quot;ScrollingStateTree.h&quot;
</span><span class="cx"> #include &quot;ScrollingThread.h&quot;
</span><span class="cx"> #include &quot;ScrollingTreeFixedNode.h&quot;
</span><del>-#include &quot;ScrollingTreeScrollingNodeMac.h&quot;
</del><ins>+#include &quot;ScrollingTreeFrameScrollingNodeMac.h&quot;
</ins><span class="cx"> #include &quot;ScrollingTreeStickyNode.h&quot;
</span><span class="cx"> #include &quot;ThreadedScrollingTree.h&quot;
</span><span class="cx"> #include &quot;TiledBacking.h&quot;
</span><span class="lines">@@ -148,7 +148,7 @@
</span><span class="cx"> 
</span><span class="cx">     switch (nodeType) {
</span><span class="cx">     case FrameScrollingNode:
</span><del>-        return ScrollingTreeScrollingNodeMac::create(*scrollingTree(), nodeType, nodeID);
</del><ins>+        return ScrollingTreeFrameScrollingNodeMac::create(*scrollingTree(), nodeID);
</ins><span class="cx">     case OverflowScrollingNode:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingStateFrameScrollingNodeMacmmfromrev169054trunkSourceWebCorepagescrollingmacScrollingStateScrollingNodeMacmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm (from rev 169054, trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;ScrollingStateFrameScrollingNode.h&quot;
+
+#include &quot;GraphicsLayer.h&quot;
+#include &quot;Scrollbar.h&quot;
+#include &quot;ScrollbarThemeMac.h&quot;
+#include &quot;ScrollingStateTree.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
+
+namespace WebCore {
+    
+void ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar)
+{
+    ScrollbarTheme* scrollbarTheme = ScrollbarTheme::theme();
+    if (scrollbarTheme-&gt;isMockTheme())
+        return;
+    ScrollbarThemeMac* macTheme = static_cast&lt;ScrollbarThemeMac*&gt;(scrollbarTheme);
+
+    ScrollbarPainter verticalPainter = verticalScrollbar &amp;&amp; verticalScrollbar-&gt;supportsUpdateOnSecondaryThread()
+        ? macTheme-&gt;painterForScrollbar(verticalScrollbar) : 0;
+    ScrollbarPainter horizontalPainter = horizontalScrollbar &amp;&amp; horizontalScrollbar-&gt;supportsUpdateOnSecondaryThread()
+        ? macTheme-&gt;painterForScrollbar(horizontalScrollbar) : 0;
+
+    if (m_verticalScrollbarPainter == verticalPainter &amp;&amp; m_horizontalScrollbarPainter == horizontalPainter)
+        return;
+
+    m_verticalScrollbarPainter = verticalPainter;
+    m_horizontalScrollbarPainter = horizontalPainter;
+
+    setPropertyChanged(PainterForScrollbar);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingStateScrollingNodeMacmm"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,60 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include &quot;config.h&quot;
-#include &quot;ScrollingStateScrollingNode.h&quot;
-
-#include &quot;GraphicsLayer.h&quot;
-#include &quot;Scrollbar.h&quot;
-#include &quot;ScrollbarThemeMac.h&quot;
-#include &quot;ScrollingStateTree.h&quot;
-
-#if ENABLE(ASYNC_SCROLLING)
-
-namespace WebCore {
-void ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar)
-{
-    ScrollbarTheme* scrollbarTheme = ScrollbarTheme::theme();
-    if (scrollbarTheme-&gt;isMockTheme())
-        return;
-    ScrollbarThemeMac* macTheme = static_cast&lt;ScrollbarThemeMac*&gt;(scrollbarTheme);
-
-    ScrollbarPainter verticalPainter = verticalScrollbar &amp;&amp; verticalScrollbar-&gt;supportsUpdateOnSecondaryThread()
-        ? macTheme-&gt;painterForScrollbar(verticalScrollbar) : 0;
-    ScrollbarPainter horizontalPainter = horizontalScrollbar &amp;&amp; horizontalScrollbar-&gt;supportsUpdateOnSecondaryThread()
-        ? macTheme-&gt;painterForScrollbar(horizontalScrollbar) : 0;
-
-    if (m_verticalScrollbarPainter == verticalPainter &amp;&amp; m_horizontalScrollbarPainter == horizontalPainter)
-        return;
-
-    m_verticalScrollbarPainter = verticalPainter;
-    m_horizontalScrollbarPainter = horizontalPainter;
-
-    setPropertyChanged(PainterForScrollbar);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING)
</del></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMachfromrev169054trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMach"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (from rev 169054, trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,106 @@
</span><ins>+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ScrollingTreeFrameScrollingNodeMac_h
+#define ScrollingTreeFrameScrollingNodeMac_h
+
+#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
+
+#include &quot;ScrollElasticityController.h&quot;
+#include &quot;ScrollbarThemeMac.h&quot;
+#include &quot;ScrollingTreeFrameScrollingNode.h&quot;
+#include &lt;wtf/RetainPtr.h&gt;
+
+OBJC_CLASS CALayer;
+
+namespace WebCore {
+
+class ScrollingTreeFrameScrollingNodeMac : public ScrollingTreeFrameScrollingNode, private ScrollElasticityControllerClient {
+public:
+    static PassOwnPtr&lt;ScrollingTreeFrameScrollingNode&gt; create(ScrollingTree&amp;, ScrollingNodeID);
+    virtual ~ScrollingTreeFrameScrollingNodeMac();
+
+private:
+    ScrollingTreeFrameScrollingNodeMac(ScrollingTree&amp;, ScrollingNodeID);
+
+    // ScrollingTreeNode member functions.
+    virtual void updateBeforeChildren(const ScrollingStateNode&amp;) override;
+    virtual void updateAfterChildren(const ScrollingStateNode&amp;) override;
+    virtual void handleWheelEvent(const PlatformWheelEvent&amp;) override;
+
+    // ScrollElasticityController member functions.
+    virtual bool allowsHorizontalStretching() override;
+    virtual bool allowsVerticalStretching() override;
+    virtual IntSize stretchAmount() override;
+    virtual bool pinnedInDirection(const FloatSize&amp;) override;
+    virtual bool canScrollHorizontally() override;
+    virtual bool canScrollVertically() override;
+    virtual bool shouldRubberBandInDirection(ScrollDirection) override;
+    virtual IntPoint absoluteScrollPosition() override;
+    virtual void immediateScrollBy(const FloatSize&amp;) override;
+    virtual void immediateScrollByWithoutContentEdgeConstraints(const FloatSize&amp;) override;
+    virtual void startSnapRubberbandTimer() override;
+    virtual void stopSnapRubberbandTimer() override;
+    virtual void adjustScrollPositionToBoundsIfNecessary() override;
+
+    FloatPoint scrollPosition() const;
+    virtual void setScrollPosition(const FloatPoint&amp;) override;
+    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) override;
+
+    virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale) override;
+
+    virtual void setScrollLayerPosition(const FloatPoint&amp;) override;
+
+    virtual FloatPoint minimumScrollPosition() const override;
+    virtual FloatPoint maximumScrollPosition() const override;
+
+    void scrollBy(const IntSize&amp;);
+    void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
+
+    void updateMainFramePinState(const FloatPoint&amp; scrollPosition);
+
+    void logExposedUnfilledArea();
+
+    ScrollElasticityController m_scrollElasticityController;
+    RetainPtr&lt;CFRunLoopTimerRef&gt; m_snapRubberbandTimer;
+
+    RetainPtr&lt;CALayer&gt; m_scrollLayer;
+    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
+    RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
+    RetainPtr&lt;CALayer&gt; m_insetClipLayer;
+    RetainPtr&lt;CALayer&gt; m_contentShadowLayer;
+    RetainPtr&lt;CALayer&gt; m_headerLayer;
+    RetainPtr&lt;CALayer&gt; m_footerLayer;
+    RetainPtr&lt;ScrollbarPainter&gt; m_verticalScrollbarPainter;
+    RetainPtr&lt;ScrollbarPainter&gt; m_horizontalScrollbarPainter;
+    FloatPoint m_probableMainThreadScrollPosition;
+    bool m_lastScrollHadUnfilledPixels;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
+
+#endif // ScrollingTreeFrameScrollingNodeMac_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeFrameScrollingNodeMacmmfromrev169054trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMacmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (from rev 169054, trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm) (0 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm                                (rev 0)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -0,0 +1,528 @@
</span><ins>+/*
+ * Copyright (C) 2012, 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;ScrollingTreeFrameScrollingNodeMac.h&quot;
+
+#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
+
+#import &quot;FrameView.h&quot;
+#import &quot;NSScrollerImpDetails.h&quot;
+#import &quot;PlatformWheelEvent.h&quot;
+#import &quot;ScrollingCoordinator.h&quot;
+#import &quot;ScrollingTree.h&quot;
+#import &quot;ScrollingStateTree.h&quot;
+#import &quot;Settings.h&quot;
+#import &quot;TileController.h&quot;
+#import &quot;WebLayer.h&quot;
+
+#import &lt;QuartzCore/QuartzCore.h&gt;
+#import &lt;wtf/CurrentTime.h&gt;
+#import &lt;wtf/Deque.h&gt;
+#import &lt;wtf/text/StringBuilder.h&gt;
+#import &lt;wtf/text/CString.h&gt;
+
+namespace WebCore {
+
+static void logThreadedScrollingMode(unsigned synchronousScrollingReasons);
+static void logWheelEventHandlerCountChanged(unsigned);
+
+
+PassOwnPtr&lt;ScrollingTreeFrameScrollingNode&gt; ScrollingTreeFrameScrollingNodeMac::create(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+{
+    return adoptPtr(new ScrollingTreeFrameScrollingNodeMac(scrollingTree, nodeID));
+}
+
+ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac(ScrollingTree&amp; scrollingTree, ScrollingNodeID nodeID)
+    : ScrollingTreeFrameScrollingNode(scrollingTree, nodeID)
+    , m_scrollElasticityController(this)
+    , m_verticalScrollbarPainter(0)
+    , m_horizontalScrollbarPainter(0)
+    , m_lastScrollHadUnfilledPixels(false)
+{
+}
+
+ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac()
+{
+    if (m_snapRubberbandTimer)
+        CFRunLoopTimerInvalidate(m_snapRubberbandTimer.get());
+}
+
+void ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren(const ScrollingStateNode&amp; stateNode)
+{
+    ScrollingTreeFrameScrollingNode::updateBeforeChildren(stateNode);
+    const auto&amp; scrollingStateNode = toScrollingStateFrameScrollingNode(stateNode);
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
+        m_scrollLayer = scrollingStateNode.layer();
+    
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer))
+        m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer))
+        m_insetClipLayer = scrollingStateNode.insetClipLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
+        m_contentShadowLayer = scrollingStateNode.contentShadowLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
+        m_headerLayer = scrollingStateNode.headerLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
+        m_footerLayer = scrollingStateNode.footerLayer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::PainterForScrollbar)) {
+        m_verticalScrollbarPainter = scrollingStateNode.verticalScrollbarPainter();
+        m_horizontalScrollbarPainter = scrollingStateNode.horizontalScrollbarPainter();
+    }
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling)) {
+        if (shouldUpdateScrollLayerPositionSynchronously()) {
+            // We're transitioning to the slow &quot;update scroll layer position on the main thread&quot; mode.
+            // Initialize the probable main thread scroll position with the current scroll layer position.
+            if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
+                m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition();
+            else {
+                CGPoint scrollLayerPosition = m_scrollLayer.get().position;
+                m_probableMainThreadScrollPosition = IntPoint(-scrollLayerPosition.x, -scrollLayerPosition.y);
+            }
+        }
+
+        if (scrollingTree().scrollingPerformanceLoggingEnabled())
+            logThreadedScrollingMode(synchronousScrollingReasons());
+    }
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::WheelEventHandlerCount)) {
+        if (scrollingTree().scrollingPerformanceLoggingEnabled())
+            logWheelEventHandlerCountChanged(scrollingStateNode.wheelEventHandlerCount());
+    }
+}
+
+void ScrollingTreeFrameScrollingNodeMac::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
+{
+    ScrollingTreeFrameScrollingNode::updateAfterChildren(stateNode);
+
+    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
+
+    // Update the scroll position after child nodes have been updated, because they need to have updated their constraints before any scrolling happens.
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
+        setScrollPosition(scrollingStateNode.requestedScrollPosition());
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)
+        || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)
+        || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaSize))
+        updateMainFramePinState(scrollPosition());
+}
+
+void ScrollingTreeFrameScrollingNodeMac::handleWheelEvent(const PlatformWheelEvent&amp; wheelEvent)
+{
+    if (!canHaveScrollbars())
+        return;
+
+    if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseBegan) {
+        [m_verticalScrollbarPainter setUsePresentationValue:YES];
+        [m_horizontalScrollbarPainter setUsePresentationValue:YES];
+    }
+    if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseEnded || wheelEvent.momentumPhase() == PlatformWheelEventPhaseCancelled) {
+        [m_verticalScrollbarPainter setUsePresentationValue:NO];
+        [m_horizontalScrollbarPainter setUsePresentationValue:NO];
+    }
+
+    m_scrollElasticityController.handleWheelEvent(wheelEvent);
+    scrollingTree().setOrClearLatchedNode(wheelEvent, scrollingNodeID());
+    scrollingTree().handleWheelEventPhase(wheelEvent.phase());
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::allowsHorizontalStretching()
+{
+    switch (horizontalScrollElasticity()) {
+    case ScrollElasticityAutomatic:
+        return hasEnabledHorizontalScrollbar() || !hasEnabledVerticalScrollbar();
+    case ScrollElasticityNone:
+        return false;
+    case ScrollElasticityAllowed:
+        return true;
+    }
+
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::allowsVerticalStretching()
+{
+    switch (verticalScrollElasticity()) {
+    case ScrollElasticityAutomatic:
+        return hasEnabledVerticalScrollbar() || !hasEnabledHorizontalScrollbar();
+    case ScrollElasticityNone:
+        return false;
+    case ScrollElasticityAllowed:
+        return true;
+    }
+
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
+IntSize ScrollingTreeFrameScrollingNodeMac::stretchAmount()
+{
+    IntSize stretch;
+
+    if (scrollPosition().y() &lt; minimumScrollPosition().y())
+        stretch.setHeight(scrollPosition().y() - minimumScrollPosition().y());
+    else if (scrollPosition().y() &gt; maximumScrollPosition().y())
+        stretch.setHeight(scrollPosition().y() - maximumScrollPosition().y());
+
+    if (scrollPosition().x() &lt; minimumScrollPosition().x())
+        stretch.setWidth(scrollPosition().x() - minimumScrollPosition().x());
+    else if (scrollPosition().x() &gt; maximumScrollPosition().x())
+        stretch.setWidth(scrollPosition().x() - maximumScrollPosition().x());
+
+    if (scrollingTree().rootNode() == this) {
+        if (stretch.isZero())
+            scrollingTree().setMainFrameIsRubberBanding(false);
+        else
+            scrollingTree().setMainFrameIsRubberBanding(true);
+    }
+
+    return stretch;
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::pinnedInDirection(const FloatSize&amp; delta)
+{
+    FloatSize limitDelta;
+
+    if (fabsf(delta.height()) &gt;= fabsf(delta.width())) {
+        if (delta.height() &lt; 0) {
+            // We are trying to scroll up. Make sure we are not pinned to the top.
+            limitDelta.setHeight(scrollPosition().y() - minimumScrollPosition().y());
+        } else {
+            // We are trying to scroll down. Make sure we are not pinned to the bottom.
+            limitDelta.setHeight(maximumScrollPosition().y() - scrollPosition().y());
+        }
+    } else if (delta.width()) {
+        if (delta.width() &lt; 0) {
+            // We are trying to scroll left. Make sure we are not pinned to the left.
+            limitDelta.setWidth(scrollPosition().x() - minimumScrollPosition().x());
+        } else {
+            // We are trying to scroll right. Make sure we are not pinned to the right.
+            limitDelta.setWidth(maximumScrollPosition().x() - scrollPosition().x());
+        }
+    }
+
+    if ((delta.width() || delta.height()) &amp;&amp; (limitDelta.width() &lt; 1 &amp;&amp; limitDelta.height() &lt; 1))
+        return true;
+
+    return false;
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::canScrollHorizontally()
+{
+    return hasEnabledHorizontalScrollbar();
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::canScrollVertically()
+{
+    return hasEnabledVerticalScrollbar();
+}
+
+bool ScrollingTreeFrameScrollingNodeMac::shouldRubberBandInDirection(ScrollDirection)
+{
+    return true;
+}
+
+IntPoint ScrollingTreeFrameScrollingNodeMac::absoluteScrollPosition()
+{
+    return roundedIntPoint(scrollPosition());
+}
+
+void ScrollingTreeFrameScrollingNodeMac::immediateScrollBy(const FloatSize&amp; offset)
+{
+    scrollBy(roundedIntSize(offset));
+}
+
+void ScrollingTreeFrameScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints(const FloatSize&amp; offset)
+{
+    scrollByWithoutContentEdgeConstraints(roundedIntSize(offset));
+}
+
+void ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer()
+{
+    ASSERT(!m_snapRubberbandTimer);
+
+    CFTimeInterval timerInterval = 1.0 / 60.0;
+
+    m_snapRubberbandTimer = adoptCF(CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + timerInterval, timerInterval, 0, 0, ^(CFRunLoopTimerRef) {
+        m_scrollElasticityController.snapRubberBandTimerFired();
+    }));
+    CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_snapRubberbandTimer.get(), kCFRunLoopDefaultMode);
+}
+
+void ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer()
+{
+    if (!m_snapRubberbandTimer)
+        return;
+
+    scrollingTree().setMainFrameIsRubberBanding(false);
+
+    // Since the rubberband timer has stopped, totalContentsSizeForRubberBand can be synchronized with totalContentsSize.
+    setTotalContentsSizeForRubberBand(totalContentsSize());
+
+    CFRunLoopTimerInvalidate(m_snapRubberbandTimer.get());
+    m_snapRubberbandTimer = nullptr;
+}
+
+void ScrollingTreeFrameScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary()
+{
+    FloatPoint currentScrollPosition = absoluteScrollPosition();
+    FloatPoint minPosition = minimumScrollPosition();
+    FloatPoint maxPosition = maximumScrollPosition();
+
+    float nearestXWithinBounds = std::max(std::min(currentScrollPosition.x(), maxPosition.x()), minPosition.x());
+    float nearestYWithinBounds = std::max(std::min(currentScrollPosition.y(), maxPosition.y()), minPosition.y());
+
+    FloatPoint nearestPointWithinBounds(nearestXWithinBounds, nearestYWithinBounds);
+    immediateScrollBy(nearestPointWithinBounds - currentScrollPosition);
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeMac::scrollPosition() const
+{
+    if (shouldUpdateScrollLayerPositionSynchronously())
+        return m_probableMainThreadScrollPosition;
+
+    CGPoint scrollLayerPosition = m_scrollLayer.get().position;
+    return IntPoint(-scrollLayerPosition.x + scrollOrigin().x(), -scrollLayerPosition.y + scrollOrigin().y());
+}
+
+void ScrollingTreeFrameScrollingNodeMac::setScrollPosition(const FloatPoint&amp; scrollPosition)
+{
+    FloatPoint newScrollPosition = scrollPosition;
+    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
+    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
+
+    setScrollPositionWithoutContentEdgeConstraints(newScrollPosition);
+
+    if (scrollingTree().scrollingPerformanceLoggingEnabled())
+        logExposedUnfilledArea();
+}
+
+void ScrollingTreeFrameScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp; scrollPosition)
+{
+    updateMainFramePinState(scrollPosition);
+
+    if (shouldUpdateScrollLayerPositionSynchronously()) {
+        m_probableMainThreadScrollPosition = scrollPosition;
+        scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition, SetScrollingLayerPosition);
+        return;
+    }
+
+    setScrollLayerPosition(scrollPosition);
+    scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition);
+}
+
+void ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition(const FloatPoint&amp; position)
+{
+    ASSERT(!shouldUpdateScrollLayerPositionSynchronously());
+    m_scrollLayer.get().position = CGPointMake(-position.x() + scrollOrigin().x(), -position.y() + scrollOrigin().y());
+
+    ScrollBehaviorForFixedElements behaviorForFixed = scrollBehaviorForFixedElements();
+    FloatPoint scrollOffset = position - toFloatSize(scrollOrigin());
+    FloatRect viewportRect(FloatPoint(), scrollableAreaSize());
+    
+    // FIXME: scrollOffsetForFixedPosition() needs to do float math.
+    FloatSize scrollOffsetForFixedChildren = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect),
+        roundedLayoutSize(totalContentsSize()), roundedLayoutPoint(scrollOffset), scrollOrigin(), frameScaleFactor(), false, behaviorForFixed, headerHeight(), footerHeight());
+    
+    if (m_counterScrollingLayer)
+        m_counterScrollingLayer.get().position = FloatPoint(scrollOffsetForFixedChildren);
+
+    float topContentInset = this-&gt;topContentInset();
+    if (m_insetClipLayer &amp;&amp; m_scrolledContentsLayer &amp;&amp; topContentInset) {
+        m_insetClipLayer.get().position = FloatPoint(0, FrameView::yPositionForInsetClipLayer(position, topContentInset));
+        m_scrolledContentsLayer.get().position = FloatPoint(m_scrolledContentsLayer.get().position.x,
+            FrameView::yPositionForRootContentLayer(position, topContentInset, headerHeight()));
+        if (m_contentShadowLayer)
+            m_contentShadowLayer.get().position = m_scrolledContentsLayer.get().position;
+    }
+
+    if (m_headerLayer || m_footerLayer) {
+        // Generally the banners should have the same horizontal-position computation as a fixed element. However,
+        // the banners are not affected by the frameScaleFactor(), so if there is currently a non-1 frameScaleFactor()
+        // then we should recompute scrollOffsetForFixedChildren for the banner with a scale factor of 1.
+        float horizontalScrollOffsetForBanner = scrollOffsetForFixedChildren.width();
+        if (frameScaleFactor() != 1)
+            horizontalScrollOffsetForBanner = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), roundedLayoutSize(totalContentsSize()), roundedLayoutPoint(scrollOffset), scrollOrigin(), 1, false, behaviorForFixed, headerHeight(), footerHeight()).width();
+
+        if (m_headerLayer)
+            m_headerLayer.get().position = FloatPoint(horizontalScrollOffsetForBanner, FrameView::yPositionForHeaderLayer(position, topContentInset));
+
+        if (m_footerLayer) {
+            m_footerLayer.get().position = FloatPoint(horizontalScrollOffsetForBanner,
+                FrameView::yPositionForFooterLayer(position, topContentInset, totalContentsSize().height(), footerHeight()));
+        }
+    }
+
+    if (m_verticalScrollbarPainter || m_horizontalScrollbarPainter) {
+        [CATransaction begin];
+        [CATransaction lock];
+
+        if ([m_verticalScrollbarPainter shouldUsePresentationValue]) {
+            float presentationValue;
+            float overhangAmount;
+            ScrollableArea::computeScrollbarValueAndOverhang(position.y(), totalContentsSize().height(), viewportRect.height(), presentationValue, overhangAmount);
+            [m_verticalScrollbarPainter setPresentationValue:presentationValue];
+        }
+
+        if ([m_horizontalScrollbarPainter shouldUsePresentationValue]) {
+            float presentationValue;
+            float overhangAmount;
+            ScrollableArea::computeScrollbarValueAndOverhang(position.x(), totalContentsSize().width(), viewportRect.width(), presentationValue, overhangAmount);
+            [m_horizontalScrollbarPainter setPresentationValue:presentationValue];
+        }
+        [CATransaction unlock];
+        [CATransaction commit];
+    }
+
+    if (!m_children)
+        return;
+
+    viewportRect.setLocation(FloatPoint() + scrollOffsetForFixedChildren);
+
+    size_t size = m_children-&gt;size();
+    for (size_t i = 0; i &lt; size; ++i)
+        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportRect, FloatSize());
+}
+
+void ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange(const FloatRect&amp;, double)
+{
+    ASSERT_NOT_REACHED();
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition() const
+{
+    FloatPoint position;
+    
+    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToBottom)
+        position.setY(maximumScrollPosition().y());
+
+    return position;
+}
+
+FloatPoint ScrollingTreeFrameScrollingNodeMac::maximumScrollPosition() const
+{
+    FloatPoint position(totalContentsSizeForRubberBand() - scrollableAreaSize());
+    position = position.expandedTo(FloatPoint());
+
+    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToTop)
+        position.setY(minimumScrollPosition().y());
+
+    return position;
+}
+
+void ScrollingTreeFrameScrollingNodeMac::scrollBy(const IntSize&amp; offset)
+{
+    setScrollPosition(scrollPosition() + offset);
+}
+
+void ScrollingTreeFrameScrollingNodeMac::scrollByWithoutContentEdgeConstraints(const IntSize&amp; offset)
+{
+    setScrollPositionWithoutContentEdgeConstraints(scrollPosition() + offset);
+}
+
+void ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState(const FloatPoint&amp; scrollPosition)
+{
+    bool pinnedToTheLeft = scrollPosition.x() &lt;= minimumScrollPosition().x();
+    bool pinnedToTheRight = scrollPosition.x() &gt;= maximumScrollPosition().x();
+    bool pinnedToTheTop = scrollPosition.y() &lt;= minimumScrollPosition().y();
+    bool pinnedToTheBottom = scrollPosition.y() &gt;= maximumScrollPosition().y();
+
+    scrollingTree().setMainFramePinState(pinnedToTheLeft, pinnedToTheRight, pinnedToTheTop, pinnedToTheBottom);
+}
+
+void ScrollingTreeFrameScrollingNodeMac::logExposedUnfilledArea()
+{
+    Region paintedVisibleTiles;
+
+    Deque&lt;CALayer*&gt; layerQueue;
+    layerQueue.append(m_scrollLayer.get());
+    PlatformLayerList tiles;
+
+    while (!layerQueue.isEmpty() &amp;&amp; tiles.isEmpty()) {
+        CALayer* layer = layerQueue.takeFirst();
+        NSArray* sublayers = [[layer sublayers] copy];
+
+        // If this layer is the parent of a tile, it is the parent of all of the tiles and nothing else.
+        if ([[[sublayers objectAtIndex:0] valueForKey:@&quot;isTile&quot;] boolValue]) {
+            for (CALayer* sublayer in sublayers)
+                tiles.append(sublayer);
+        } else {
+            for (CALayer* sublayer in sublayers)
+                layerQueue.append(sublayer);
+        }
+
+        [sublayers release];
+    }
+
+    FloatPoint scrollPosition = this-&gt;scrollPosition();
+    FloatRect viewPortRect(FloatPoint(), scrollableAreaSize());
+    unsigned unfilledArea = TileController::blankPixelCountForTiles(tiles, viewPortRect, IntPoint(-scrollPosition.x(), -scrollPosition.y()));
+
+    if (unfilledArea || m_lastScrollHadUnfilledPixels)
+        WTFLogAlways(&quot;SCROLLING: Exposed tileless area. Time: %f Unfilled Pixels: %u\n&quot;, WTF::monotonicallyIncreasingTime(), unfilledArea);
+
+    m_lastScrollHadUnfilledPixels = unfilledArea;
+}
+
+static void logThreadedScrollingMode(unsigned synchronousScrollingReasons)
+{
+    if (synchronousScrollingReasons) {
+        StringBuilder reasonsDescription;
+
+        if (synchronousScrollingReasons &amp; ScrollingCoordinator::ForcedOnMainThread)
+            reasonsDescription.append(&quot;forced,&quot;);
+        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasSlowRepaintObjects)
+            reasonsDescription.append(&quot;slow-repaint objects,&quot;);
+        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
+            reasonsDescription.append(&quot;viewport-constrained objects,&quot;);
+        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
+            reasonsDescription.append(&quot;non-layer viewport-constrained objects,&quot;);
+        if (synchronousScrollingReasons &amp; ScrollingCoordinator::IsImageDocument)
+            reasonsDescription.append(&quot;image document,&quot;);
+
+        // Strip the trailing comma.
+        String reasonsDescriptionTrimmed = reasonsDescription.toString().left(reasonsDescription.length() - 1);
+
+        WTFLogAlways(&quot;SCROLLING: Switching to main-thread scrolling mode. Time: %f Reason(s): %s\n&quot;, WTF::monotonicallyIncreasingTime(), reasonsDescriptionTrimmed.ascii().data());
+    } else
+        WTFLogAlways(&quot;SCROLLING: Switching to threaded scrolling mode. Time: %f\n&quot;, WTF::monotonicallyIncreasingTime());
+}
+
+void logWheelEventHandlerCountChanged(unsigned count)
+{
+    WTFLogAlways(&quot;SCROLLING: Wheel event handler count changed. Time: %f Count: %u\n&quot;, WTF::monotonicallyIncreasingTime(), count);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(MAC)
</ins></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMach"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,106 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ScrollingTreeScrollingNodeMac_h
-#define ScrollingTreeScrollingNodeMac_h
-
-#if ENABLE(ASYNC_SCROLLING)
-
-#include &quot;ScrollElasticityController.h&quot;
-#include &quot;ScrollbarThemeMac.h&quot;
-#include &quot;ScrollingTreeScrollingNode.h&quot;
-#include &lt;wtf/RetainPtr.h&gt;
-
-OBJC_CLASS CALayer;
-
-namespace WebCore {
-
-class ScrollingTreeScrollingNodeMac : public ScrollingTreeScrollingNode, private ScrollElasticityControllerClient {
-public:
-    static PassOwnPtr&lt;ScrollingTreeScrollingNode&gt; create(ScrollingTree&amp;, ScrollingNodeType, ScrollingNodeID);
-    virtual ~ScrollingTreeScrollingNodeMac();
-
-private:
-    ScrollingTreeScrollingNodeMac(ScrollingTree&amp;, ScrollingNodeType, ScrollingNodeID);
-
-    // ScrollingTreeNode member functions.
-    virtual void updateBeforeChildren(const ScrollingStateNode&amp;) override;
-    virtual void updateAfterChildren(const ScrollingStateNode&amp;) override;
-    virtual void handleWheelEvent(const PlatformWheelEvent&amp;) override;
-
-    // ScrollElasticityController member functions.
-    virtual bool allowsHorizontalStretching() override;
-    virtual bool allowsVerticalStretching() override;
-    virtual IntSize stretchAmount() override;
-    virtual bool pinnedInDirection(const FloatSize&amp;) override;
-    virtual bool canScrollHorizontally() override;
-    virtual bool canScrollVertically() override;
-    virtual bool shouldRubberBandInDirection(ScrollDirection) override;
-    virtual IntPoint absoluteScrollPosition() override;
-    virtual void immediateScrollBy(const FloatSize&amp;) override;
-    virtual void immediateScrollByWithoutContentEdgeConstraints(const FloatSize&amp;) override;
-    virtual void startSnapRubberbandTimer() override;
-    virtual void stopSnapRubberbandTimer() override;
-    virtual void adjustScrollPositionToBoundsIfNecessary() override;
-
-    FloatPoint scrollPosition() const;
-    virtual void setScrollPosition(const FloatPoint&amp;) override;
-    virtual void setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp;) override;
-
-    virtual void updateLayersAfterViewportChange(const FloatRect&amp; viewportRect, double scale) override;
-
-    void setScrollLayerPosition(const FloatPoint&amp;);
-
-    FloatPoint minimumScrollPosition() const;
-    FloatPoint maximumScrollPosition() const;
-
-    void scrollBy(const IntSize&amp;);
-    void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
-
-    void updateMainFramePinState(const FloatPoint&amp; scrollPosition);
-
-    void logExposedUnfilledArea();
-
-    ScrollElasticityController m_scrollElasticityController;
-    RetainPtr&lt;CFRunLoopTimerRef&gt; m_snapRubberbandTimer;
-
-    RetainPtr&lt;CALayer&gt; m_scrollLayer;
-    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
-    RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
-    RetainPtr&lt;CALayer&gt; m_insetClipLayer;
-    RetainPtr&lt;CALayer&gt; m_contentShadowLayer;
-    RetainPtr&lt;CALayer&gt; m_headerLayer;
-    RetainPtr&lt;CALayer&gt; m_footerLayer;
-    RetainPtr&lt;ScrollbarPainter&gt; m_verticalScrollbarPainter;
-    RetainPtr&lt;ScrollbarPainter&gt; m_horizontalScrollbarPainter;
-    FloatPoint m_probableMainThreadScrollPosition;
-    bool m_lastScrollHadUnfilledPixels;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING)
-
-#endif // ScrollingTreeScrollingNodeMac_h
</del></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMacmm"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,530 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012, 2014 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import &quot;config.h&quot;
-#import &quot;ScrollingTreeScrollingNodeMac.h&quot;
-
-#if ENABLE(ASYNC_SCROLLING)
-
-#import &quot;FrameView.h&quot;
-#import &quot;NSScrollerImpDetails.h&quot;
-#import &quot;PlatformWheelEvent.h&quot;
-#import &quot;ScrollingCoordinator.h&quot;
-#import &quot;ScrollingTree.h&quot;
-#import &quot;ScrollingStateTree.h&quot;
-#import &quot;Settings.h&quot;
-#import &quot;TileController.h&quot;
-#import &quot;WebLayer.h&quot;
-
-#import &lt;QuartzCore/QuartzCore.h&gt;
-#import &lt;wtf/CurrentTime.h&gt;
-#import &lt;wtf/Deque.h&gt;
-#import &lt;wtf/text/StringBuilder.h&gt;
-#import &lt;wtf/text/CString.h&gt;
-
-namespace WebCore {
-
-static void logThreadedScrollingMode(unsigned synchronousScrollingReasons);
-static void logWheelEventHandlerCountChanged(unsigned);
-
-
-PassOwnPtr&lt;ScrollingTreeScrollingNode&gt; ScrollingTreeScrollingNodeMac::create(ScrollingTree&amp; scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
-{
-    return adoptPtr(new ScrollingTreeScrollingNodeMac(scrollingTree, nodeType, nodeID));
-}
-
-ScrollingTreeScrollingNodeMac::ScrollingTreeScrollingNodeMac(ScrollingTree&amp; scrollingTree, ScrollingNodeType nodeType, ScrollingNodeID nodeID)
-    : ScrollingTreeScrollingNode(scrollingTree, nodeType, nodeID)
-    , m_scrollElasticityController(this)
-    , m_verticalScrollbarPainter(0)
-    , m_horizontalScrollbarPainter(0)
-    , m_lastScrollHadUnfilledPixels(false)
-{
-}
-
-ScrollingTreeScrollingNodeMac::~ScrollingTreeScrollingNodeMac()
-{
-    if (m_snapRubberbandTimer)
-        CFRunLoopTimerInvalidate(m_snapRubberbandTimer.get());
-}
-
-void ScrollingTreeScrollingNodeMac::updateBeforeChildren(const ScrollingStateNode&amp; stateNode)
-{
-    ScrollingTreeScrollingNode::updateBeforeChildren(stateNode);
-    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
-        m_scrollLayer = scrollingStateNode.layer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
-        m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
-        m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::InsetClipLayer))
-        m_insetClipLayer = scrollingStateNode.insetClipLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ContentShadowLayer))
-        m_contentShadowLayer = scrollingStateNode.contentShadowLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))
-        m_headerLayer = scrollingStateNode.headerLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))
-        m_footerLayer = scrollingStateNode.footerLayer();
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::PainterForScrollbar)) {
-        m_verticalScrollbarPainter = scrollingStateNode.verticalScrollbarPainter();
-        m_horizontalScrollbarPainter = scrollingStateNode.horizontalScrollbarPainter();
-    }
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling)) {
-        if (shouldUpdateScrollLayerPositionSynchronously()) {
-            // We're transitioning to the slow &quot;update scroll layer position on the main thread&quot; mode.
-            // Initialize the probable main thread scroll position with the current scroll layer position.
-            if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
-                m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition();
-            else {
-                CGPoint scrollLayerPosition = m_scrollLayer.get().position;
-                m_probableMainThreadScrollPosition = IntPoint(-scrollLayerPosition.x, -scrollLayerPosition.y);
-            }
-        }
-
-        if (scrollingTree().scrollingPerformanceLoggingEnabled())
-            logThreadedScrollingMode(synchronousScrollingReasons());
-    }
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)) {
-        if (scrollingTree().scrollingPerformanceLoggingEnabled())
-            logWheelEventHandlerCountChanged(scrollingStateNode.wheelEventHandlerCount());
-    }
-}
-
-void ScrollingTreeScrollingNodeMac::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
-{
-    ScrollingTreeScrollingNode::updateAfterChildren(stateNode);
-
-    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
-
-    // Update the scroll position after child nodes have been updated, because they need to have updated their constraints before any scrolling happens.
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))
-        setScrollPosition(scrollingStateNode.requestedScrollPosition());
-
-    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ViewportSize))
-        updateMainFramePinState(scrollPosition());
-}
-
-void ScrollingTreeScrollingNodeMac::handleWheelEvent(const PlatformWheelEvent&amp; wheelEvent)
-{
-    if (!canHaveScrollbars())
-        return;
-
-    if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseBegan) {
-        [m_verticalScrollbarPainter setUsePresentationValue:YES];
-        [m_horizontalScrollbarPainter setUsePresentationValue:YES];
-    }
-    if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseEnded || wheelEvent.momentumPhase() == PlatformWheelEventPhaseCancelled) {
-        [m_verticalScrollbarPainter setUsePresentationValue:NO];
-        [m_horizontalScrollbarPainter setUsePresentationValue:NO];
-    }
-
-    m_scrollElasticityController.handleWheelEvent(wheelEvent);
-    scrollingTree().setOrClearLatchedNode(wheelEvent, scrollingNodeID());
-    scrollingTree().handleWheelEventPhase(wheelEvent.phase());
-}
-
-bool ScrollingTreeScrollingNodeMac::allowsHorizontalStretching()
-{
-    switch (horizontalScrollElasticity()) {
-    case ScrollElasticityAutomatic:
-        return hasEnabledHorizontalScrollbar() || !hasEnabledVerticalScrollbar();
-    case ScrollElasticityNone:
-        return false;
-    case ScrollElasticityAllowed:
-        return true;
-    }
-
-    ASSERT_NOT_REACHED();
-    return false;
-}
-
-bool ScrollingTreeScrollingNodeMac::allowsVerticalStretching()
-{
-    switch (verticalScrollElasticity()) {
-    case ScrollElasticityAutomatic:
-        return hasEnabledVerticalScrollbar() || !hasEnabledHorizontalScrollbar();
-    case ScrollElasticityNone:
-        return false;
-    case ScrollElasticityAllowed:
-        return true;
-    }
-
-    ASSERT_NOT_REACHED();
-    return false;
-}
-
-IntSize ScrollingTreeScrollingNodeMac::stretchAmount()
-{
-    IntSize stretch;
-
-    if (scrollPosition().y() &lt; minimumScrollPosition().y())
-        stretch.setHeight(scrollPosition().y() - minimumScrollPosition().y());
-    else if (scrollPosition().y() &gt; maximumScrollPosition().y())
-        stretch.setHeight(scrollPosition().y() - maximumScrollPosition().y());
-
-    if (scrollPosition().x() &lt; minimumScrollPosition().x())
-        stretch.setWidth(scrollPosition().x() - minimumScrollPosition().x());
-    else if (scrollPosition().x() &gt; maximumScrollPosition().x())
-        stretch.setWidth(scrollPosition().x() - maximumScrollPosition().x());
-
-    if (scrollingTree().rootNode() == this) {
-        if (stretch.isZero())
-            scrollingTree().setMainFrameIsRubberBanding(false);
-        else
-            scrollingTree().setMainFrameIsRubberBanding(true);
-    }
-
-    return stretch;
-}
-
-bool ScrollingTreeScrollingNodeMac::pinnedInDirection(const FloatSize&amp; delta)
-{
-    FloatSize limitDelta;
-
-    if (fabsf(delta.height()) &gt;= fabsf(delta.width())) {
-        if (delta.height() &lt; 0) {
-            // We are trying to scroll up.  Make sure we are not pinned to the top
-            limitDelta.setHeight(scrollPosition().y() - minimumScrollPosition().y());
-        } else {
-            // We are trying to scroll down.  Make sure we are not pinned to the bottom
-            limitDelta.setHeight(maximumScrollPosition().y() - scrollPosition().y());
-        }
-    } else if (delta.width()) {
-        if (delta.width() &lt; 0) {
-            // We are trying to scroll left.  Make sure we are not pinned to the left
-            limitDelta.setWidth(scrollPosition().x() - minimumScrollPosition().x());
-        } else {
-            // We are trying to scroll right.  Make sure we are not pinned to the right
-            limitDelta.setWidth(maximumScrollPosition().x() - scrollPosition().x());
-        }
-    }
-
-    if ((delta.width() || delta.height()) &amp;&amp; (limitDelta.width() &lt; 1 &amp;&amp; limitDelta.height() &lt; 1))
-        return true;
-
-    return false;
-}
-
-bool ScrollingTreeScrollingNodeMac::canScrollHorizontally()
-{
-    return hasEnabledHorizontalScrollbar();
-}
-
-bool ScrollingTreeScrollingNodeMac::canScrollVertically()
-{
-    return hasEnabledVerticalScrollbar();
-}
-
-bool ScrollingTreeScrollingNodeMac::shouldRubberBandInDirection(ScrollDirection)
-{
-    return true;
-}
-
-IntPoint ScrollingTreeScrollingNodeMac::absoluteScrollPosition()
-{
-    return roundedIntPoint(scrollPosition());
-}
-
-void ScrollingTreeScrollingNodeMac::immediateScrollBy(const FloatSize&amp; offset)
-{
-    scrollBy(roundedIntSize(offset));
-}
-
-void ScrollingTreeScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints(const FloatSize&amp; offset)
-{
-    scrollByWithoutContentEdgeConstraints(roundedIntSize(offset));
-}
-
-void ScrollingTreeScrollingNodeMac::startSnapRubberbandTimer()
-{
-    ASSERT(!m_snapRubberbandTimer);
-
-    CFTimeInterval timerInterval = 1.0 / 60.0;
-
-    m_snapRubberbandTimer = adoptCF(CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + timerInterval, timerInterval, 0, 0, ^(CFRunLoopTimerRef) {
-        m_scrollElasticityController.snapRubberBandTimerFired();
-    }));
-    CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_snapRubberbandTimer.get(), kCFRunLoopDefaultMode);
-}
-
-void ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer()
-{
-    if (!m_snapRubberbandTimer)
-        return;
-
-    scrollingTree().setMainFrameIsRubberBanding(false);
-
-    // Since the rubberband timer has stopped, totalContentsSizeForRubberBand can be synchronized with totalContentsSize.
-    setTotalContentsSizeForRubberBand(totalContentsSize());
-
-    CFRunLoopTimerInvalidate(m_snapRubberbandTimer.get());
-    m_snapRubberbandTimer = nullptr;
-}
-
-void ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary()
-{
-    FloatPoint currentScrollPosition = absoluteScrollPosition();
-    FloatPoint minPosition = minimumScrollPosition();
-    FloatPoint maxPosition = maximumScrollPosition();
-
-    float nearestXWithinBounds = std::max(std::min(currentScrollPosition.x(), maxPosition.x()), minPosition.x());
-    float nearestYWithinBounds = std::max(std::min(currentScrollPosition.y(), maxPosition.y()), minPosition.y());
-
-    FloatPoint nearestPointWithinBounds(nearestXWithinBounds, nearestYWithinBounds);
-    immediateScrollBy(nearestPointWithinBounds - currentScrollPosition);
-}
-
-FloatPoint ScrollingTreeScrollingNodeMac::scrollPosition() const
-{
-    if (shouldUpdateScrollLayerPositionSynchronously())
-        return m_probableMainThreadScrollPosition;
-
-    CGPoint scrollLayerPosition = m_scrollLayer.get().position;
-    return IntPoint(-scrollLayerPosition.x + scrollOrigin().x(), -scrollLayerPosition.y + scrollOrigin().y());
-}
-
-void ScrollingTreeScrollingNodeMac::setScrollPosition(const FloatPoint&amp; scrollPosition)
-{
-    FloatPoint newScrollPosition = scrollPosition;
-    newScrollPosition = newScrollPosition.shrunkTo(maximumScrollPosition());
-    newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition());
-
-    setScrollPositionWithoutContentEdgeConstraints(newScrollPosition);
-
-    if (scrollingTree().scrollingPerformanceLoggingEnabled())
-        logExposedUnfilledArea();
-}
-
-void ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints(const FloatPoint&amp; scrollPosition)
-{
-    updateMainFramePinState(scrollPosition);
-
-    if (shouldUpdateScrollLayerPositionSynchronously()) {
-        m_probableMainThreadScrollPosition = scrollPosition;
-        scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition, SetScrollingLayerPosition);
-        return;
-    }
-
-    setScrollLayerPosition(scrollPosition);
-    scrollingTree().scrollingTreeNodeDidScroll(scrollingNodeID(), scrollPosition);
-}
-
-void ScrollingTreeScrollingNodeMac::setScrollLayerPosition(const FloatPoint&amp; position)
-{
-    ASSERT(!shouldUpdateScrollLayerPositionSynchronously());
-    m_scrollLayer.get().position = CGPointMake(-position.x() + scrollOrigin().x(), -position.y() + scrollOrigin().y());
-
-    ScrollBehaviorForFixedElements behaviorForFixed = scrollBehaviorForFixedElements();
-    FloatPoint scrollOffset = position - toFloatSize(scrollOrigin());
-    FloatRect viewportRect(FloatPoint(), viewportSize());
-    
-    // FIXME: scrollOffsetForFixedPosition() needs to do float math.
-    FloatSize scrollOffsetForFixedChildren = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect),
-        totalContentsSize(), flooredIntPoint(scrollOffset), scrollOrigin(), frameScaleFactor(), false, behaviorForFixed, headerHeight(), footerHeight());
-    
-    if (m_counterScrollingLayer)
-        m_counterScrollingLayer.get().position = FloatPoint(scrollOffsetForFixedChildren);
-
-    float topContentInset = this-&gt;topContentInset();
-    if (m_insetClipLayer &amp;&amp; m_scrolledContentsLayer &amp;&amp; topContentInset) {
-        m_insetClipLayer.get().position = FloatPoint(0, FrameView::yPositionForInsetClipLayer(position, topContentInset));
-        m_scrolledContentsLayer.get().position = FloatPoint(m_scrolledContentsLayer.get().position.x,
-            FrameView::yPositionForRootContentLayer(position, topContentInset, headerHeight()));
-        if (m_contentShadowLayer)
-            m_contentShadowLayer.get().position = m_scrolledContentsLayer.get().position;
-    }
-
-    if (m_headerLayer || m_footerLayer) {
-        // Generally the banners should have the same horizontal-position computation as a fixed element. However,
-        // the banners are not affected by the frameScaleFactor(), so if there is currently a non-1 frameScaleFactor()
-        // then we should recompute scrollOffsetForFixedChildren for the banner with a scale factor of 1.
-        float horizontalScrollOffsetForBanner = scrollOffsetForFixedChildren.width();
-        if (frameScaleFactor() != 1)
-            horizontalScrollOffsetForBanner = FrameView::scrollOffsetForFixedPosition(enclosingLayoutRect(viewportRect), totalContentsSize(), flooredIntPoint(scrollOffset), scrollOrigin(), 1, false, behaviorForFixed, headerHeight(), footerHeight()).width();
-
-        if (m_headerLayer)
-            m_headerLayer.get().position = FloatPoint(horizontalScrollOffsetForBanner, FrameView::yPositionForHeaderLayer(position, topContentInset));
-
-        if (m_footerLayer)
-            m_footerLayer.get().position = FloatPoint(horizontalScrollOffsetForBanner,
-                FrameView::yPositionForFooterLayer(position, topContentInset, totalContentsSize().height(), footerHeight()));
-    }
-
-    if (m_verticalScrollbarPainter || m_horizontalScrollbarPainter) {
-        [CATransaction begin];
-        [CATransaction lock];
-
-        if ([m_verticalScrollbarPainter shouldUsePresentationValue]) {
-            float presentationValue;
-            float overhangAmount;
-            ScrollableArea::computeScrollbarValueAndOverhang(position.y(), totalContentsSize().height(), viewportRect.height(), presentationValue, overhangAmount);
-            [m_verticalScrollbarPainter setPresentationValue:presentationValue];
-        }
-
-        if ([m_horizontalScrollbarPainter shouldUsePresentationValue]) {
-            float presentationValue;
-            float overhangAmount;
-            ScrollableArea::computeScrollbarValueAndOverhang(position.x(), totalContentsSize().width(), viewportRect.width(), presentationValue, overhangAmount);
-            [m_horizontalScrollbarPainter setPresentationValue:presentationValue];
-        }
-        [CATransaction unlock];
-        [CATransaction commit];
-    }
-
-    if (!m_children)
-        return;
-
-    viewportRect.setLocation(FloatPoint() + scrollOffsetForFixedChildren);
-
-    size_t size = m_children-&gt;size();
-    for (size_t i = 0; i &lt; size; ++i)
-        m_children-&gt;at(i)-&gt;parentScrollPositionDidChange(viewportRect, FloatSize());
-}
-
-void ScrollingTreeScrollingNodeMac::updateLayersAfterViewportChange(const FloatRect&amp;, double)
-{
-    ASSERT_NOT_REACHED();
-}
-
-FloatPoint ScrollingTreeScrollingNodeMac::minimumScrollPosition() const
-{
-    IntPoint position;
-    
-    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToBottom)
-        position.setY(maximumScrollPosition().y());
-
-    return position;
-}
-
-FloatPoint ScrollingTreeScrollingNodeMac::maximumScrollPosition() const
-{
-    FloatPoint position(totalContentsSizeForRubberBand().width() - viewportSize().width(),
-        totalContentsSizeForRubberBand().height() - viewportSize().height());
-
-    position = position.expandedTo(FloatPoint());
-
-    if (scrollingTree().rootNode() == this &amp;&amp; scrollingTree().scrollPinningBehavior() == PinToTop)
-        position.setY(minimumScrollPosition().y());
-
-    return position;
-}
-
-void ScrollingTreeScrollingNodeMac::scrollBy(const IntSize&amp; offset)
-{
-    setScrollPosition(scrollPosition() + offset);
-}
-
-void ScrollingTreeScrollingNodeMac::scrollByWithoutContentEdgeConstraints(const IntSize&amp; offset)
-{
-    setScrollPositionWithoutContentEdgeConstraints(scrollPosition() + offset);
-}
-
-void ScrollingTreeScrollingNodeMac::updateMainFramePinState(const FloatPoint&amp; scrollPosition)
-{
-    bool pinnedToTheLeft = scrollPosition.x() &lt;= minimumScrollPosition().x();
-    bool pinnedToTheRight = scrollPosition.x() &gt;= maximumScrollPosition().x();
-    bool pinnedToTheTop = scrollPosition.y() &lt;= minimumScrollPosition().y();
-    bool pinnedToTheBottom = scrollPosition.y() &gt;= maximumScrollPosition().y();
-
-    scrollingTree().setMainFramePinState(pinnedToTheLeft, pinnedToTheRight, pinnedToTheTop, pinnedToTheBottom);
-}
-
-void ScrollingTreeScrollingNodeMac::logExposedUnfilledArea()
-{
-    Region paintedVisibleTiles;
-
-    Deque&lt;CALayer*&gt; layerQueue;
-    layerQueue.append(m_scrollLayer.get());
-    PlatformLayerList tiles;
-
-    while (!layerQueue.isEmpty() &amp;&amp; tiles.isEmpty()) {
-        CALayer* layer = layerQueue.takeFirst();
-        NSArray* sublayers = [[layer sublayers] copy];
-
-        // If this layer is the parent of a tile, it is the parent of all of the tiles and nothing else.
-        if ([[[sublayers objectAtIndex:0] valueForKey:@&quot;isTile&quot;] boolValue]) {
-            for (CALayer* sublayer in sublayers)
-                tiles.append(sublayer);
-        } else {
-            for (CALayer* sublayer in sublayers)
-                layerQueue.append(sublayer);
-        }
-
-        [sublayers release];
-    }
-
-    FloatPoint scrollPosition = this-&gt;scrollPosition();
-    FloatRect viewPortRect(FloatPoint(), viewportSize());
-    unsigned unfilledArea = TileController::blankPixelCountForTiles(tiles, viewPortRect, IntPoint(-scrollPosition.x(), -scrollPosition.y()));
-
-    if (unfilledArea || m_lastScrollHadUnfilledPixels)
-        WTFLogAlways(&quot;SCROLLING: Exposed tileless area. Time: %f Unfilled Pixels: %u\n&quot;, WTF::monotonicallyIncreasingTime(), unfilledArea);
-
-    m_lastScrollHadUnfilledPixels = unfilledArea;
-}
-
-static void logThreadedScrollingMode(unsigned synchronousScrollingReasons)
-{
-    if (synchronousScrollingReasons) {
-        StringBuilder reasonsDescription;
-
-        if (synchronousScrollingReasons &amp; ScrollingCoordinator::ForcedOnMainThread)
-            reasonsDescription.append(&quot;forced,&quot;);
-        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasSlowRepaintObjects)
-            reasonsDescription.append(&quot;slow-repaint objects,&quot;);
-        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
-            reasonsDescription.append(&quot;viewport-constrained objects,&quot;);
-        if (synchronousScrollingReasons &amp; ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
-            reasonsDescription.append(&quot;non-layer viewport-constrained objects,&quot;);
-        if (synchronousScrollingReasons &amp; ScrollingCoordinator::IsImageDocument)
-            reasonsDescription.append(&quot;image document,&quot;);
-
-        // Strip the trailing comma.
-        String reasonsDescriptionTrimmed = reasonsDescription.toString().left(reasonsDescription.length() - 1);
-
-        WTFLogAlways(&quot;SCROLLING: Switching to main-thread scrolling mode. Time: %f Reason(s): %s\n&quot;, WTF::monotonicallyIncreasingTime(), reasonsDescriptionTrimmed.ascii().data());
-    } else
-        WTFLogAlways(&quot;SCROLLING: Switching to threaded scrolling mode. Time: %f\n&quot;, WTF::monotonicallyIncreasingTime());
-}
-
-void logWheelEventHandlerCountChanged(unsigned count)
-{
-    WTFLogAlways(&quot;SCROLLING: Wheel event handler count changed. Time: %f Count: %u\n&quot;, WTF::monotonicallyIncreasingTime(), count);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING)
</del></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -3664,13 +3664,14 @@
</span><span class="cx">             scrolledContentsLayer = m_rootContentLayer.get();
</span><span class="cx">             counterScrollingLayer = fixedRootBackgroundLayer();
</span><span class="cx">             insetClipLayer = clipLayer();
</span><del>-            scrollingCoordinator-&gt;updateScrollingNode(nodeID, scrollingLayer, scrolledContentsLayer, counterScrollingLayer, insetClipLayer);
</del><ins>+            scrollingCoordinator-&gt;updateFrameScrollingNode(nodeID, scrollingLayer, counterScrollingLayer, insetClipLayer);
</ins><span class="cx">         } else {
</span><span class="cx">             ScrollingCoordinator::ScrollingGeometry scrollingGeometry;
</span><span class="cx">             scrollingGeometry.scrollOrigin = layer.scrollOrigin();
</span><span class="cx">             scrollingGeometry.scrollPosition = layer.scrollPosition();
</span><ins>+            scrollingGeometry.scrollableAreaSize = layer.visibleSize();
</ins><span class="cx">             scrollingGeometry.contentSize = layer.contentsSize();
</span><del>-            scrollingCoordinator-&gt;updateScrollingNode(nodeID, scrollingLayer, scrolledContentsLayer, counterScrollingLayer, insetClipLayer, &amp;scrollingGeometry);
</del><ins>+            scrollingCoordinator-&gt;updateOverflowScrollingNode(nodeID, scrollingLayer, scrolledContentsLayer, &amp;scrollingGeometry);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -1,3 +1,45 @@
</span><ins>+2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
+        https://bugs.webkit.org/show_bug.cgi?id=133022
+
+        Reviewed by Sam Weinig.
+        
+        In both the scrolling state tree and the scrolling tree, split the &quot;scrolling nodes&quot;
+        into FrameScrolling and OverflowScrolling nodes.
+        
+        Move what was the &quot;viewportSize&quot; property onto the base class for the scrolling
+        nodes, calling it &quot;scrollableAreaSize&quot;.
+        
+        Make minimum/maximumScrollPosition() virtual so we can share more code (and there
+        is more code sharing to be done in future).
+
+        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
+        (ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::encode):
+        (ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::encode):
+        (ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::encode):
+        (ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::decode):
+        (ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::decode):
+        (ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::decode):
+        (WebKit::encodeNodeAndDescendants):
+        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
+        (WebKit::RemoteScrollingTreeTextStream::dump):
+        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
+        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
+        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
+        (WebKit::RemoteScrollingTree::createNode):
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollLayer):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterViewportChange):
+        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition):
+        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll):
+        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
+        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
+
</ins><span class="cx"> 2014-05-19  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac] Fix a typo in plug-in sandbox
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedScrollingRemoteScrollingCoordinatorTransactioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -32,7 +32,8 @@
</span><span class="cx"> #include &quot;WebCoreArgumentCoders.h&quot;
</span><span class="cx"> #include &lt;WebCore/GraphicsLayer.h&gt;
</span><span class="cx"> #include &lt;WebCore/ScrollingStateFixedNode.h&gt;
</span><del>-#include &lt;WebCore/ScrollingStateScrollingNode.h&gt;
</del><ins>+#include &lt;WebCore/ScrollingStateFrameScrollingNode.h&gt;
+#include &lt;WebCore/ScrollingStateOverflowScrollingNode.h&gt;
</ins><span class="cx"> #include &lt;WebCore/ScrollingStateStickyNode.h&gt;
</span><span class="cx"> #include &lt;WebCore/ScrollingStateTree.h&gt;
</span><span class="cx"> #include &lt;WebCore/TextStream.h&gt;
</span><span class="lines">@@ -56,7 +57,17 @@
</span><span class="cx">     static void encode(ArgumentEncoder&amp;, const ScrollingStateScrollingNode&amp;);
</span><span class="cx">     static bool decode(ArgumentDecoder&amp;, ScrollingStateScrollingNode&amp;);
</span><span class="cx"> };
</span><del>-
</del><ins>+    
+template&lt;&gt; struct ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt; {
+    static void encode(ArgumentEncoder&amp;, const ScrollingStateFrameScrollingNode&amp;);
+    static bool decode(ArgumentDecoder&amp;, ScrollingStateFrameScrollingNode&amp;);
+};
+    
+template&lt;&gt; struct ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt; {
+    static void encode(ArgumentEncoder&amp;, const ScrollingStateOverflowScrollingNode&amp;);
+    static bool decode(ArgumentDecoder&amp;, ScrollingStateOverflowScrollingNode&amp;);
+};
+    
</ins><span class="cx"> template&lt;&gt; struct ArgumentCoder&lt;ScrollingStateFixedNode&gt; {
</span><span class="cx">     static void encode(ArgumentEncoder&amp;, const ScrollingStateFixedNode&amp;);
</span><span class="cx">     static bool decode(ArgumentDecoder&amp;, ScrollingStateFixedNode&amp;);
</span><span class="lines">@@ -101,48 +112,59 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #define SCROLLING_NODE_ENCODE(property, getter) \
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::property)) \
</del><ins>+    if (node.hasChangedProperty(property)) \
</ins><span class="cx">         encoder &lt;&lt; node.getter();
</span><span class="cx"> 
</span><span class="cx"> #define SCROLLING_NODE_ENCODE_ENUM(property, getter) \
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::property)) \
</del><ins>+    if (node.hasChangedProperty(property)) \
</ins><span class="cx">         encoder.encodeEnum(node.getter());
</span><span class="cx"> 
</span><span class="cx"> void ArgumentCoder&lt;ScrollingStateScrollingNode&gt;::encode(ArgumentEncoder&amp; encoder, const ScrollingStateScrollingNode&amp; node)
</span><span class="cx"> {
</span><span class="cx">     encoder &lt;&lt; static_cast&lt;const ScrollingStateNode&amp;&gt;(node);
</span><span class="cx">     
</span><del>-    SCROLLING_NODE_ENCODE(ViewportSize, viewportSize)
-    SCROLLING_NODE_ENCODE(TotalContentsSize, totalContentsSize)
-    SCROLLING_NODE_ENCODE(ScrollPosition, scrollPosition)
-    SCROLLING_NODE_ENCODE(ScrollOrigin, scrollOrigin)
-    SCROLLING_NODE_ENCODE(FrameScaleFactor, frameScaleFactor)
-    SCROLLING_NODE_ENCODE(NonFastScrollableRegion, nonFastScrollableRegion)
-    SCROLLING_NODE_ENCODE(WheelEventHandlerCount, wheelEventHandlerCount)
-    SCROLLING_NODE_ENCODE(ReasonsForSynchronousScrolling, synchronousScrollingReasons)
-    SCROLLING_NODE_ENCODE(ScrollableAreaParams, scrollableAreaParameters)
-    SCROLLING_NODE_ENCODE_ENUM(BehaviorForFixedElements, scrollBehaviorForFixedElements)
-    SCROLLING_NODE_ENCODE(RequestedScrollPosition, requestedScrollPosition)
-    SCROLLING_NODE_ENCODE(RequestedScrollPosition, requestedScrollPositionRepresentsProgrammaticScroll)
-    SCROLLING_NODE_ENCODE(HeaderHeight, headerHeight)
-    SCROLLING_NODE_ENCODE(FooterHeight, footerHeight)
-    SCROLLING_NODE_ENCODE(TopContentInset, topContentInset)
</del><ins>+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollableAreaSize, scrollableAreaSize)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::TotalContentsSize, totalContentsSize)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollPosition, scrollPosition)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollOrigin, scrollOrigin)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollableAreaParams, scrollableAreaParameters)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::RequestedScrollPosition, requestedScrollPosition)
+    SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::RequestedScrollPosition, requestedScrollPositionRepresentsProgrammaticScroll)
+}
</ins><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
-        encoder &lt;&lt; static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer());
</del><ins>+void ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::encode(ArgumentEncoder&amp; encoder, const ScrollingStateFrameScrollingNode&amp; node)
+{
+    encoder &lt;&lt; static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node);
+    
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::FrameScaleFactor, frameScaleFactor)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::NonFastScrollableRegion, nonFastScrollableRegion)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::WheelEventHandlerCount, wheelEventHandlerCount)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling, synchronousScrollingReasons)
+    SCROLLING_NODE_ENCODE_ENUM(ScrollingStateFrameScrollingNode::BehaviorForFixedElements, scrollBehaviorForFixedElements)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::HeaderHeight, headerHeight)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::FooterHeight, footerHeight)
+    SCROLLING_NODE_ENCODE(ScrollingStateFrameScrollingNode::TopContentInset, topContentInset)
</ins><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</del><ins>+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer))
</ins><span class="cx">         encoder &lt;&lt; static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.counterScrollingLayer());
</span><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::InsetClipLayer))
</del><ins>+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer))
</ins><span class="cx">         encoder &lt;&lt; static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.insetClipLayer());
</span><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::ContentShadowLayer))
</del><ins>+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
</ins><span class="cx">         encoder &lt;&lt; static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.contentShadowLayer());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::encode(ArgumentEncoder&amp; encoder, const ScrollingStateOverflowScrollingNode&amp; node)
+{
+    encoder &lt;&lt; static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node);
+    
+    if (node.hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
+        encoder &lt;&lt; static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer());
+}
+
</ins><span class="cx"> #define SCROLLING_NODE_DECODE(property, type, setter) \
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::property)) { \
</del><ins>+    if (node.hasChangedProperty(property)) { \
</ins><span class="cx">         type decodedValue; \
</span><span class="cx">         if (!decoder.decode(decodedValue)) \
</span><span class="cx">             return false; \
</span><span class="lines">@@ -150,7 +172,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #define SCROLLING_NODE_DECODE_ENUM(property, type, setter) \
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::property)) { \
</del><ins>+    if (node.hasChangedProperty(property)) { \
</ins><span class="cx">         type decodedValue; \
</span><span class="cx">         if (!decoder.decodeEnum(decodedValue)) \
</span><span class="cx">             return false; \
</span><span class="lines">@@ -162,17 +184,12 @@
</span><span class="cx">     if (!decoder.decode(static_cast&lt;ScrollingStateNode&amp;&gt;(node)))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    SCROLLING_NODE_DECODE(ViewportSize, FloatSize, setViewportSize);
-    SCROLLING_NODE_DECODE(TotalContentsSize, IntSize, setTotalContentsSize);
-    SCROLLING_NODE_DECODE(ScrollPosition, FloatPoint, setScrollPosition);
-    SCROLLING_NODE_DECODE(ScrollOrigin, IntPoint, setScrollOrigin);
-    SCROLLING_NODE_DECODE(FrameScaleFactor, float, setFrameScaleFactor);
-    SCROLLING_NODE_DECODE(NonFastScrollableRegion, Region, setNonFastScrollableRegion);
-    SCROLLING_NODE_DECODE(WheelEventHandlerCount, int, setWheelEventHandlerCount);
-    SCROLLING_NODE_DECODE(ReasonsForSynchronousScrolling, SynchronousScrollingReasons, setSynchronousScrollingReasons);
-    SCROLLING_NODE_DECODE(ScrollableAreaParams, ScrollableAreaParameters, setScrollableAreaParameters);
-    SCROLLING_NODE_DECODE_ENUM(BehaviorForFixedElements, ScrollBehaviorForFixedElements, setScrollBehaviorForFixedElements);
-
</del><ins>+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollableAreaSize, FloatSize, setScrollableAreaSize);
+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::TotalContentsSize, FloatSize, setTotalContentsSize);
+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollPosition, FloatPoint, setScrollPosition);
+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollOrigin, IntPoint, setScrollOrigin);
+    SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollableAreaParams, ScrollableAreaParameters, setScrollableAreaParameters);
+    
</ins><span class="cx">     if (node.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) {
</span><span class="cx">         FloatPoint scrollPosition;
</span><span class="cx">         if (!decoder.decode(scrollPosition))
</span><span class="lines">@@ -185,36 +202,58 @@
</span><span class="cx">         node.setRequestedScrollPosition(scrollPosition, representsProgrammaticScroll);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SCROLLING_NODE_DECODE(HeaderHeight, int, setHeaderHeight);
-    SCROLLING_NODE_DECODE(FooterHeight, int, setFooterHeight);
-    SCROLLING_NODE_DECODE(TopContentInset, float, setTopContentInset);
</del><ins>+    return true;
+}
</ins><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) {
</del><ins>+bool ArgumentCoder&lt;ScrollingStateFrameScrollingNode&gt;::decode(ArgumentDecoder&amp; decoder, ScrollingStateFrameScrollingNode&amp; node)
+{
+    if (!decoder.decode(static_cast&lt;ScrollingStateScrollingNode&amp;&gt;(node)))
+        return false;
+
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::FrameScaleFactor, float, setFrameScaleFactor);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::NonFastScrollableRegion, Region, setNonFastScrollableRegion);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::WheelEventHandlerCount, int, setWheelEventHandlerCount);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling, SynchronousScrollingReasons, setSynchronousScrollingReasons);
+    SCROLLING_NODE_DECODE_ENUM(ScrollingStateFrameScrollingNode::BehaviorForFixedElements, ScrollBehaviorForFixedElements, setScrollBehaviorForFixedElements);
+
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::HeaderHeight, int, setHeaderHeight);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::FooterHeight, int, setFooterHeight);
+    SCROLLING_NODE_DECODE(ScrollingStateFrameScrollingNode::TopContentInset, float, setTopContentInset);
+
+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer)) {
</ins><span class="cx">         GraphicsLayer::PlatformLayerID layerID;
</span><span class="cx">         if (!decoder.decode(layerID))
</span><span class="cx">             return false;
</span><del>-        node.setScrolledContentsLayer(layerID);
</del><ins>+        node.setCounterScrollingLayer(layerID);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer)) {
</del><ins>+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer)) {
</ins><span class="cx">         GraphicsLayer::PlatformLayerID layerID;
</span><span class="cx">         if (!decoder.decode(layerID))
</span><span class="cx">             return false;
</span><del>-        node.setCounterScrollingLayer(layerID);
</del><ins>+        node.setInsetClipLayer(layerID);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::InsetClipLayer)) {
</del><ins>+    if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer)) {
</ins><span class="cx">         GraphicsLayer::PlatformLayerID layerID;
</span><span class="cx">         if (!decoder.decode(layerID))
</span><span class="cx">             return false;
</span><del>-        node.setInsetClipLayer(layerID);
</del><ins>+        node.setContentShadowLayer(layerID);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (node.hasChangedProperty(ScrollingStateScrollingNode::ContentShadowLayer)) {
</del><ins>+    return true;
+}
+
+bool ArgumentCoder&lt;ScrollingStateOverflowScrollingNode&gt;::decode(ArgumentDecoder&amp; decoder, ScrollingStateOverflowScrollingNode&amp; node)
+{
+    if (!decoder.decode(static_cast&lt;ScrollingStateScrollingNode&amp;&gt;(node)))
+        return false;
+
+    if (node.hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer)) {
</ins><span class="cx">         GraphicsLayer::PlatformLayerID layerID;
</span><span class="cx">         if (!decoder.decode(layerID))
</span><span class="cx">             return false;
</span><del>-        node.setContentShadowLayer(layerID);
</del><ins>+        node.setScrolledContentsLayer(layerID);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="lines">@@ -272,8 +311,10 @@
</span><span class="cx"> {
</span><span class="cx">     switch (stateNode.nodeType()) {
</span><span class="cx">     case FrameScrollingNode:
</span><ins>+        encoder &lt;&lt; toScrollingStateFrameScrollingNode(stateNode);
+        break;
</ins><span class="cx">     case OverflowScrollingNode:
</span><del>-        encoder &lt;&lt; toScrollingStateScrollingNode(stateNode);
</del><ins>+        encoder &lt;&lt; toScrollingStateOverflowScrollingNode(stateNode);
</ins><span class="cx">         break;
</span><span class="cx">     case FixedNode:
</span><span class="cx">         encoder &lt;&lt; toScrollingStateFixedNode(stateNode);
</span><span class="lines">@@ -354,8 +395,11 @@
</span><span class="cx">         
</span><span class="cx">         switch (nodeType) {
</span><span class="cx">         case FrameScrollingNode:
</span><ins>+            if (!decoder.decode(*toScrollingStateFrameScrollingNode(newNode)))
+                return false;
+            break;
</ins><span class="cx">         case OverflowScrollingNode:
</span><del>-            if (!decoder.decode(*toScrollingStateScrollingNode(newNode)))
</del><ins>+            if (!decoder.decode(*toScrollingStateOverflowScrollingNode(newNode)))
</ins><span class="cx">                 return false;
</span><span class="cx">             break;
</span><span class="cx">         case FixedNode:
</span><span class="lines">@@ -403,6 +447,8 @@
</span><span class="cx"> 
</span><span class="cx">     void dump(const ScrollingStateNode&amp;, bool changedPropertiesOnly = true);
</span><span class="cx">     void dump(const ScrollingStateScrollingNode&amp;, bool changedPropertiesOnly = true);
</span><ins>+    void dump(const ScrollingStateFrameScrollingNode&amp;, bool changedPropertiesOnly = true);
+    void dump(const ScrollingStateOverflowScrollingNode&amp;, bool changedPropertiesOnly = true);
</ins><span class="cx">     void dump(const ScrollingStateFixedNode&amp;, bool changedPropertiesOnly = true);
</span><span class="cx">     void dump(const ScrollingStateStickyNode&amp;, bool changedPropertiesOnly = true);
</span><span class="cx"> 
</span><span class="lines">@@ -488,8 +534,10 @@
</span><span class="cx">     
</span><span class="cx">     switch (node.nodeType()) {
</span><span class="cx">     case FrameScrollingNode:
</span><ins>+        dump(toScrollingStateFrameScrollingNode(node), changedPropertiesOnly);
+        break;
</ins><span class="cx">     case OverflowScrollingNode:
</span><del>-        dump(toScrollingStateScrollingNode(node), changedPropertiesOnly);
</del><ins>+        dump(toScrollingStateOverflowScrollingNode(node), changedPropertiesOnly);
</ins><span class="cx">         break;
</span><span class="cx">     case FixedNode:
</span><span class="cx">         dump(toScrollingStateFixedNode(node), changedPropertiesOnly);
</span><span class="lines">@@ -499,14 +547,14 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><del>-
</del><ins>+    
</ins><span class="cx"> void RemoteScrollingTreeTextStream::dump(const ScrollingStateScrollingNode&amp; node, bool changedPropertiesOnly)
</span><span class="cx"> {
</span><span class="cx">     RemoteScrollingTreeTextStream&amp; ts = *this;
</span><ins>+    
+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaSize))
+        dumpProperty(ts, &quot;scrollable-area-size&quot;, node.totalContentsSize());
</ins><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ViewportSize))
-        dumpProperty(ts, &quot;viewport-size&quot;, node.viewportSize());
-
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize))
</span><span class="cx">         dumpProperty(ts, &quot;total-contents-size&quot;, node.totalContentsSize());
</span><span class="cx"> 
</span><span class="lines">@@ -516,7 +564,20 @@
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin))
</span><span class="cx">         dumpProperty(ts, &quot;scroll-origin&quot;, node.scrollOrigin());
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FrameScaleFactor))
+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) {
+        dumpProperty(ts, &quot;requested-scroll-position&quot;, node.requestedScrollPosition());
+        dumpProperty(ts, &quot;requested-scroll-position-is-programatic&quot;, node.requestedScrollPositionRepresentsProgrammaticScroll());
+    }
+}
+    
+void RemoteScrollingTreeTextStream::dump(const ScrollingStateFrameScrollingNode&amp; node, bool changedPropertiesOnly)
+{
+    RemoteScrollingTreeTextStream&amp; ts = *this;
+    
+    dump(static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
+    
+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FrameScaleFactor))
</ins><span class="cx">         dumpProperty(ts, &quot;frame-scale-factor&quot;, node.frameScaleFactor());
</span><span class="cx"> 
</span><span class="cx">     // FIXME: dump nonFastScrollableRegion
</span><span class="lines">@@ -525,38 +586,38 @@
</span><span class="cx">     // FIXME: dump scrollableAreaParameters
</span><span class="cx">     // FIXME: dump scrollBehaviorForFixedElements
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) {
-        dumpProperty(ts, &quot;requested-scroll-position&quot;, node.requestedScrollPosition());
-        dumpProperty(ts, &quot;requested-scroll-position-is-programatic&quot;, node.requestedScrollPositionRepresentsProgrammaticScroll());
-    }
-
-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderHeight))
</ins><span class="cx">         dumpProperty(ts, &quot;header-height&quot;, node.headerHeight());
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::FooterHeight))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterHeight))
</ins><span class="cx">         dumpProperty(ts, &quot;footer-height&quot;, node.footerHeight());
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::TopContentInset))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::TopContentInset))
</ins><span class="cx">         dumpProperty(ts, &quot;top-content-inset&quot;, node.topContentInset());
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
-        dumpProperty(ts, &quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer))
+        dumpProperty(ts, &quot;clip-inset-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.insetClipLayer()));
</ins><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
-        dumpProperty(ts, &quot;counter-scrolling-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.counterScrollingLayer()));
</del><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::InsetClipLayer))
-        dumpProperty(ts, &quot;clip-inset-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.insetClipLayer()));
-
-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ContentShadowLayer))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
</ins><span class="cx">         dumpProperty(ts, &quot;content-shadow-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.contentShadowLayer()));
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
</ins><span class="cx">         dumpProperty(ts, &quot;header-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.headerLayer()));
</span><span class="cx"> 
</span><del>-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
</ins><span class="cx">         dumpProperty(ts, &quot;footer-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.footerLayer()));
</span><span class="cx"> }
</span><ins>+    
+void RemoteScrollingTreeTextStream::dump(const ScrollingStateOverflowScrollingNode&amp; node, bool changedPropertiesOnly)
+{
+    RemoteScrollingTreeTextStream&amp; ts = *this;
+    
+    dump(static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
+    
+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
+        dumpProperty(ts, &quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
+}
</ins><span class="cx"> 
</span><span class="cx"> void RemoteScrollingTreeTextStream::dump(const ScrollingStateFixedNode&amp; node, bool changedPropertiesOnly)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> #include &quot;RemoteScrollingTree.h&quot;
</span><span class="cx"> #include &quot;WebPageProxy.h&quot;
</span><span class="cx"> #include &quot;WebProcessProxy.h&quot;
</span><ins>+#include &lt;WebCore/ScrollingStateFrameScrollingNode.h&gt;
+#include &lt;WebCore/ScrollingStateOverflowScrollingNode.h&gt;
</ins><span class="cx"> #include &lt;WebCore/ScrollingStateTree.h&gt;
</span><span class="cx"> #include &lt;WebCore/ScrollingTreeScrollingNode.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -94,45 +96,44 @@
</span><span class="cx"> void RemoteScrollingCoordinatorProxy::connectStateNodeLayers(ScrollingStateTree&amp; stateTree, const RemoteLayerTreeHost&amp; layerTreeHost, bool&amp; fixedOrStickyLayerChanged)
</span><span class="cx"> {
</span><span class="cx">     for (auto&amp; currNode : stateTree.nodeMap().values()) {
</span><ins>+        if (currNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
+            currNode-&gt;setLayer(layerTreeHost.getLayer(currNode-&gt;layer()));
+
</ins><span class="cx">         switch (currNode-&gt;nodeType()) {
</span><del>-        case FrameScrollingNode:
-        case OverflowScrollingNode: {
-            ScrollingStateScrollingNode* scrollingStateNode = toScrollingStateScrollingNode(currNode);
</del><ins>+        case FrameScrollingNode: {
+            ScrollingStateFrameScrollingNode* scrollingStateNode = toScrollingStateFrameScrollingNode(currNode);
</ins><span class="cx">             
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
-                scrollingStateNode-&gt;setLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;layer()));
-
-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
-                scrollingStateNode-&gt;setScrolledContentsLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;scrolledContentsLayer()));
-
-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setCounterScrollingLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;counterScrollingLayer()));
</span><span class="cx"> 
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::InsetClipLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setInsetClipLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;insetClipLayer()));
</span><span class="cx"> 
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::ContentShadowLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setContentShadowLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;contentShadowLayer()));
</span><span class="cx"> 
</span><span class="cx">             // FIXME: we should never have header and footer layers coming from the WebProcess.
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setHeaderLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;headerLayer()));
</span><span class="cx"> 
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setFooterLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;footerLayer()));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><ins>+        case OverflowScrollingNode: {
+            ScrollingStateOverflowScrollingNode* scrollingStateNode = toScrollingStateOverflowScrollingNode(currNode);
+
+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
+                scrollingStateNode-&gt;setScrolledContentsLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;scrolledContentsLayer()));
+            break;
+        }
</ins><span class="cx">         case FixedNode:
</span><del>-            if (currNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer)) {
-                currNode-&gt;setLayer(layerTreeHost.getLayer(currNode-&gt;layer()));
</del><ins>+            if (currNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
</ins><span class="cx">                 fixedOrStickyLayerChanged = true;
</span><del>-            }
</del><span class="cx">             break;
</span><span class="cx">         case StickyNode:
</span><del>-            if (currNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer)) {
-                currNode-&gt;setLayer(layerTreeHost.getLayer(currNode-&gt;layer()));
</del><ins>+            if (currNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
</ins><span class="cx">                 fixedOrStickyLayerChanged = true;
</span><del>-            }
</del><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.cpp        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -35,9 +35,9 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> #include &quot;ScrollingTreeOverflowScrollingNodeIOS.h&quot;
</span><del>-#include &lt;WebCore/ScrollingTreeScrollingNodeIOS.h&gt;
</del><ins>+#include &lt;WebCore/ScrollingTreeFrameScrollingNodeIOS.h&gt;
</ins><span class="cx"> #else
</span><del>-#include &lt;WebCore/ScrollingTreeScrollingNodeMac.h&gt;
</del><ins>+#include &lt;WebCore/ScrollingTreeFrameScrollingNodeMac.h&gt;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="lines">@@ -92,15 +92,16 @@
</span><span class="cx">     switch (nodeType) {
</span><span class="cx">     case FrameScrollingNode:
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-        return ScrollingTreeScrollingNodeIOS::create(*this, nodeType, nodeID);
</del><ins>+        return ScrollingTreeFrameScrollingNodeIOS::create(*this, nodeID);
</ins><span class="cx"> #else
</span><del>-        return ScrollingTreeScrollingNodeMac::create(*this, nodeType, nodeID);
</del><ins>+        return ScrollingTreeFrameScrollingNodeMac::create(*this, nodeID);
</ins><span class="cx"> #endif
</span><span class="cx">     case OverflowScrollingNode:
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">         return ScrollingTreeOverflowScrollingNodeIOS::create(*this, nodeID);
</span><span class="cx"> #else
</span><del>-        return ScrollingTreeScrollingNodeMac::create(*this, nodeType, nodeID);
</del><ins>+        ASSERT_NOT_REACHED();
+        return nullptr;
</ins><span class="cx"> #endif
</span><span class="cx">     case FixedNode:
</span><span class="cx">         return ScrollingTreeFixedNode::create(*this, nodeID);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -26,35 +26,45 @@
</span><span class="cx"> #ifndef ScrollingTreeOverflowScrollingNodeIOS_h
</span><span class="cx"> #define ScrollingTreeOverflowScrollingNodeIOS_h
</span><span class="cx"> 
</span><del>-#if PLATFORM(IOS)
-#if ENABLE(ASYNC_SCROLLING)
</del><ins>+#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
</ins><span class="cx"> 
</span><span class="cx"> #include &lt;WebCore/ScrollingCoordinator.h&gt;
</span><del>-#include &lt;WebCore/ScrollingTreeScrollingNodeIOS.h&gt;
</del><ins>+#include &lt;WebCore/ScrollingTreeOverflowScrollingNode.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> OBJC_CLASS WKOverflowScrollViewDelegate;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-class ScrollingTreeOverflowScrollingNodeIOS : public WebCore::ScrollingTreeScrollingNodeIOS {
</del><ins>+class ScrollingTreeOverflowScrollingNodeIOS : public WebCore::ScrollingTreeOverflowScrollingNode {
</ins><span class="cx"> public:
</span><span class="cx">     static PassOwnPtr&lt;ScrollingTreeOverflowScrollingNodeIOS&gt; create(WebCore::ScrollingTree&amp;, WebCore::ScrollingNodeID);
</span><span class="cx">     virtual ~ScrollingTreeOverflowScrollingNodeIOS();
</span><span class="cx"> 
</span><span class="cx">     void scrollViewDidScroll(const WebCore::FloatPoint&amp;, bool inUserInteration);
</span><ins>+    
+    CALayer *scrollLayer() const { return m_scrollLayer.get(); }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     ScrollingTreeOverflowScrollingNodeIOS(WebCore::ScrollingTree&amp;, WebCore::ScrollingNodeID);
</span><span class="cx"> 
</span><span class="cx">     virtual void updateBeforeChildren(const WebCore::ScrollingStateNode&amp;) override;
</span><span class="cx">     virtual void updateAfterChildren(const WebCore::ScrollingStateNode&amp;) override;
</span><ins>+    
+    virtual void setScrollLayerPosition(const WebCore::FloatPoint&amp;) override;
</ins><span class="cx"> 
</span><ins>+    virtual void updateLayersAfterViewportChange(const WebCore::FloatRect&amp; viewportRect, double scale) { }
+    virtual void handleWheelEvent(const WebCore::PlatformWheelEvent&amp;) override { }
+
+    void updateChildNodesAfterScroll(const WebCore::FloatPoint&amp;);
+    
+    RetainPtr&lt;CALayer&gt; m_scrollLayer;
+    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
+
</ins><span class="cx">     RetainPtr&lt;WKOverflowScrollViewDelegate&gt; m_scrollViewDelegate;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><del>-#endif // ENABLE(ASYNC_SCROLLING)
-#endif // PLATFORM(IOS)
</del><ins>+#endif // ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
</ins><span class="cx"> 
</span><span class="cx"> #endif // ScrollingTreeOverflowScrollingNodeIOS_h
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingiosScrollingTreeOverflowScrollingNodeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -29,8 +29,9 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> 
</span><ins>+#import &lt;QuartzCore/QuartzCore.h&gt;
</ins><span class="cx"> #import &lt;WebCore/BlockExceptions.h&gt;
</span><del>-#import &lt;WebCore/ScrollingStateScrollingNode.h&gt;
</del><ins>+#import &lt;WebCore/ScrollingStateOverflowScrollingNode.h&gt;
</ins><span class="cx"> #import &lt;WebCore/ScrollingTree.h&gt;
</span><span class="cx"> #import &lt;UIKit/UIScrollView.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -92,7 +93,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS(WebCore::ScrollingTree&amp; scrollingTree, WebCore::ScrollingNodeID nodeID)
</span><del>-    : ScrollingTreeScrollingNodeIOS(scrollingTree, OverflowScrollingNode, nodeID)
</del><ins>+    : ScrollingTreeOverflowScrollingNode(scrollingTree, nodeID)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -117,14 +118,21 @@
</span><span class="cx">         END_BLOCK_OBJC_EXCEPTIONS
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ScrollingTreeScrollingNodeIOS::updateBeforeChildren(stateNode);
</del><ins>+    ScrollingTreeOverflowScrollingNode::updateBeforeChildren(stateNode);
+
+    const auto&amp; scrollingStateNode = toScrollingStateOverflowScrollingNode(stateNode);
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
+        m_scrollLayer = scrollingStateNode.layer();
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
+        m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren(const ScrollingStateNode&amp; stateNode)
</span><span class="cx"> {
</span><del>-    ScrollingTreeScrollingNodeIOS::updateAfterChildren(stateNode);
</del><ins>+    ScrollingTreeOverflowScrollingNode::updateAfterChildren(stateNode);
</ins><span class="cx"> 
</span><del>-    const auto&amp; scrollingStateNode = toScrollingStateScrollingNode(stateNode);
</del><ins>+    const auto&amp; scrollingStateNode = toScrollingStateOverflowScrollingNode(stateNode);
</ins><span class="cx"> 
</span><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollLayer)
</span><span class="cx">         || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)
</span><span class="lines">@@ -150,6 +158,21 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition(const FloatPoint&amp; scrollPosition)
+{
+    [m_scrollLayer setPosition:CGPointMake(-scrollPosition.x() + scrollOrigin().x(), -scrollPosition.y() + scrollOrigin().y())];
+
+    updateChildNodesAfterScroll(scrollPosition);
+}
+
+void ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll(const FloatPoint&amp;)
+{
+    if (!m_children)
+        return;
+
+    // FIXME: this needs to adjust child fixed/sticky nodes.
+}
+
</ins><span class="cx"> void ScrollingTreeOverflowScrollingNodeIOS::scrollViewDidScroll(const FloatPoint&amp; scrollPosition, bool inUserInteration)
</span><span class="cx"> {
</span><span class="cx">     scrollingTree().scrollPositionChangedViaDelegatedScrolling(scrollingNodeID(), scrollPosition, inUserInteration);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosRemoteScrollingCoordinatorProxyIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm (169062 => 169063)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm        2014-05-19 20:13:11 UTC (rev 169062)
+++ trunk/Source/WebKit2/UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm        2014-05-19 20:23:10 UTC (rev 169063)
</span><span class="lines">@@ -31,6 +31,8 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;LayerRepresentation.h&quot;
</span><span class="cx"> #include &quot;RemoteLayerTreeHost.h&quot;
</span><ins>+#include &lt;WebCore/ScrollingStateFrameScrollingNode.h&gt;
+#include &lt;WebCore/ScrollingStateOverflowScrollingNode.h&gt;
</ins><span class="cx"> #include &lt;WebCore/ScrollingStateTree.h&gt;
</span><span class="cx"> #include &lt;UIKit/UIView.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -47,24 +49,30 @@
</span><span class="cx"> {
</span><span class="cx">     for (auto&amp; currNode : stateTree.nodeMap().values()) {
</span><span class="cx">         switch (currNode-&gt;nodeType()) {
</span><del>-        case FrameScrollingNode:
</del><span class="cx">         case OverflowScrollingNode: {
</span><del>-            ScrollingStateScrollingNode* scrollingStateNode = toScrollingStateScrollingNode(currNode);
</del><ins>+            ScrollingStateOverflowScrollingNode* scrollingStateNode = toScrollingStateOverflowScrollingNode(currNode);
</ins><span class="cx">             
</span><span class="cx">             if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx">                 scrollingStateNode-&gt;setLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;layer())));
</span><del>-
-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
</del><ins>+            
+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setScrolledContentsLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;scrolledContentsLayer())));
</span><ins>+            break;
+        };
+        case FrameScrollingNode: {
+            ScrollingStateFrameScrollingNode* scrollingStateNode = toScrollingStateFrameScrollingNode(currNode);
+            
+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
+                scrollingStateNode-&gt;setLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;layer())));
</ins><span class="cx"> 
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setCounterScrollingLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;counterScrollingLayer())));
</span><span class="cx"> 
</span><span class="cx">             // FIXME: we should never have header and footer layers coming from the WebProcess.
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setHeaderLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;headerLayer())));
</span><span class="cx"> 
</span><del>-            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))
</del><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
</ins><span class="cx">                 scrollingStateNode-&gt;setFooterLayer(layerRepresentationFromLayerOrView(layerTreeHost.getLayer(scrollingStateNode-&gt;footerLayer())));
</span><span class="cx">             break;
</span><span class="cx">         }
</span></span></pre>
</div>
</div>

</body>
</html>