<!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>[196688] 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/196688">196688</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-02-16 23:16:40 -0800 (Tue, 16 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add a way to test ScrollAnimator
https://bugs.webkit.org/show_bug.cgi?id=153479

Reviewed by Michael Catanzaro.

Source/WebCore:

Tests: fast/scrolling/overlay-scrollbars-scroll-corner.html
       fast/scrolling/scroll-animator-basic-events.html
       fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html
       fast/scrolling/scroll-animator-select-list-events.html

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* page/FrameView.cpp:
(WebCore::FrameView::usesMockScrollAnimator):
(WebCore::FrameView::logMockScrollAnimatorMessage):
* page/FrameView.h:
* page/Settings.cpp:
(WebCore::Settings::setUsesMockScrollAnimator):
(WebCore::Settings::usesMockScrollAnimator):
* page/Settings.h:
* platform/ScrollableArea.cpp:
(WebCore::ScrollableArea::scrollAnimator):
* platform/ScrollableArea.h:
(WebCore::ScrollableArea::usesMockScrollAnimator):
(WebCore::ScrollableArea::logMockScrollAnimatorMessage):
* platform/mock/ScrollAnimatorMock.cpp: Added.
(WebCore::ScrollAnimatorMock::create):
(WebCore::ScrollAnimatorMock::ScrollAnimatorMock):
(WebCore::ScrollAnimatorMock::~ScrollAnimatorMock):
(WebCore::ScrollAnimatorMock::didAddVerticalScrollbar):
(WebCore::ScrollAnimatorMock::didAddHorizontalScrollbar):
(WebCore::ScrollAnimatorMock::willRemoveVerticalScrollbar):
(WebCore::ScrollAnimatorMock::willRemoveHorizontalScrollbar):
(WebCore::ScrollAnimatorMock::mouseEnteredContentArea):
(WebCore::ScrollAnimatorMock::mouseMovedInContentArea):
(WebCore::ScrollAnimatorMock::mouseExitedContentArea):
(WebCore::ScrollAnimatorMock::mouseEnteredScrollbar):
(WebCore::ScrollAnimatorMock::mouseExitedScrollbar):
(WebCore::ScrollAnimatorMock::mouseIsDownInScrollbar):
* platform/mock/ScrollAnimatorMock.h: Added.
* platform/mock/ScrollbarThemeMock.cpp:
(WebCore::ScrollbarThemeMock::usesOverlayScrollbars):
* platform/mock/ScrollbarThemeMock.h:
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::usesMockScrollAnimator):
(WebCore::RenderLayer::logMockScrollAnimatorMessage):
* rendering/RenderLayer.h:
* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::usesMockScrollAnimator):
(WebCore::RenderListBox::logMockScrollAnimatorMessage):
* rendering/RenderListBox.h:
* testing/Internals.cpp:
(WebCore::Internals::resetToConsistentState):
(WebCore::Internals::setUsesMockScrollAnimator):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

* compositing/overflow/overflow-scrollbar-layer-positions-expected.txt:
* fast/scrolling/overlay-scrollbars-scroll-corner-expected.html: Added.
* fast/scrolling/overlay-scrollbars-scroll-corner.html: Added.
* fast/scrolling/scroll-animator-basic-events-expected.txt: Added.
* fast/scrolling/scroll-animator-basic-events.html: Added.
* fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt: Added.
* fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html: Added.
* fast/scrolling/scroll-animator-select-list-events-expected.txt: Added.
* fast/scrolling/scroll-animator-select-list-events.html: Added.
* fast/scrolling/scrollbar-tickmarks-hittest.html:
* platform/mac-wk1/TestExpectations:
* platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt: Added.
* platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionsexpectedtxt">trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollbartickmarkshittesthtml">trunk/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</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="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorepageFrameViewcpp">trunk/Source/WebCore/page/FrameView.cpp</a></li>
<li><a href="#trunkSourceWebCorepageFrameViewh">trunk/Source/WebCore/page/FrameView.h</a></li>
<li><a href="#trunkSourceWebCorepageSettingscpp">trunk/Source/WebCore/page/Settings.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSettingsh">trunk/Source/WebCore/page/Settings.h</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollableAreacpp">trunk/Source/WebCore/platform/ScrollableArea.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollableAreah">trunk/Source/WebCore/platform/ScrollableArea.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockScrollbarThemeMockcpp">trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockScrollbarThemeMockh">trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerh">trunk/Source/WebCore/rendering/RenderLayer.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderListBoxcpp">trunk/Source/WebCore/rendering/RenderListBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderListBoxh">trunk/Source/WebCore/rendering/RenderListBox.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsh">trunk/Source/WebCore/testing/Internals.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsidl">trunk/Source/WebCore/testing/Internals.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastscrollingoverlayscrollbarsscrollcornerexpectedhtml">trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastscrollingoverlayscrollbarsscrollcornerhtml">trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner.html</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatorbasiceventsexpectedtxt">trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatorbasiceventshtml">trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events.html</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatoroverlayscrollbarshoveredexpectedtxt">trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatoroverlayscrollbarshoveredhtml">trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatorselectlisteventsexpectedtxt">trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastscrollingscrollanimatorselectlisteventshtml">trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events.html</a></li>
<li>trunk/LayoutTests/platform/mac-wk1/fast/scrolling/</li>
<li><a href="#trunkLayoutTestsplatformmacwk1fastscrollingscrollanimatorbasiceventsexpectedtxt">trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1fastscrollingscrollanimatorselectlisteventsexpectedtxt">trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreplatformmockScrollAnimatorMockcpp">trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockScrollAnimatorMockh">trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/LayoutTests/ChangeLog        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2016-02-16  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        Add a way to test ScrollAnimator
+        https://bugs.webkit.org/show_bug.cgi?id=153479
+
+        Reviewed by Michael Catanzaro.
+
+        * compositing/overflow/overflow-scrollbar-layer-positions-expected.txt:
+        * fast/scrolling/overlay-scrollbars-scroll-corner-expected.html: Added.
+        * fast/scrolling/overlay-scrollbars-scroll-corner.html: Added.
+        * fast/scrolling/scroll-animator-basic-events-expected.txt: Added.
+        * fast/scrolling/scroll-animator-basic-events.html: Added.
+        * fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt: Added.
+        * fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html: Added.
+        * fast/scrolling/scroll-animator-select-list-events-expected.txt: Added.
+        * fast/scrolling/scroll-animator-select-list-events.html: Added.
+        * fast/scrolling/scrollbar-tickmarks-hittest.html:
+        * platform/mac-wk1/TestExpectations:
+        * platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt: Added.
+        * platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt: Added.
+
</ins><span class="cx"> 2016-02-16  Gavin Barraclough  &lt;barraclough@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         JSDOMWindow::getOwnPropertySlot should not search photo chain
</span></span></pre></div>
<a id="trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -11,6 +11,13 @@
</span><span class="cx">           (position 2.00 -6.00)
</span><span class="cx">           (bounds 244.00 244.00)
</span><span class="cx">           (drawsContent 1)
</span><ins>+          (children 1
+            (GraphicsLayer
+              (position 207.00 22.00)
+              (bounds 15.00 200.00)
+              (drawsContent 1)
+            )
+          )
</ins><span class="cx">         )
</span><span class="cx">       )
</span><span class="cx">     )
</span></span></pre></div>
<a id="trunkLayoutTestsfastscrollingoverlayscrollbarsscrollcornerexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner-expected.html (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner-expected.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+&lt;html&gt;
+&lt;style&gt;
+    #scrollme {
+        width: 100px;
+        height: 100px;
+        overflow: auto;
+    }
+    #scrollme p {
+        height: 1000px;
+        width: 1000px;
+    }
+    ::-webkit-scrollbar {
+        width: 15px;
+        height: 15px;
+        background-color: #C0C0C0;
+    }
+    ::-webkit-scrollbar-thumb {
+        background-color: #808080;
+    }
+    ::-webkit-scrollbar-corner {
+        background-color: #C0C0C0;
+    }
+&lt;/style&gt;
+&lt;script&gt;
+  if (window.internals) {
+      window.internals.setUsesOverlayScrollbars(false);
+  }
+&lt;/script&gt;
+&lt;body&gt;
+  &lt;p&gt;This is a test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=153352&quot;&gt;https://bugs.webkit.org/show_bug.cgi?id=153352&lt;/a&gt;&lt;/p&gt;
+  &lt;div id=&quot;scrollme&quot;&gt;&lt;p&gt;This is a scrollable div.&lt;/p&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingoverlayscrollbarsscrollcornerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner.html (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/overlay-scrollbars-scroll-corner.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+&lt;html&gt;
+&lt;style&gt;
+    #scrollme {
+        width: 100px;
+        height: 100px;
+        overflow: auto;
+    }
+    #scrollme p {
+        width: 1000px;
+        height: 1000px;
+    }
+&lt;/style&gt;
+&lt;script&gt;
+  if (window.internals) {
+      window.internals.setUsesOverlayScrollbars(true);
+  }
+&lt;/script&gt;
+&lt;body&gt;
+  &lt;p&gt;This is a test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=153352&quot;&gt;https://bugs.webkit.org/show_bug.cgi?id=153352&lt;/a&gt;&lt;/p&gt;
+  &lt;div id=&quot;scrollme&quot;&gt;&lt;p&gt;This is a scrollable div.&lt;/p&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatorbasiceventsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events-expected.txt (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+CONSOLE MESSAGE: line 24: MainFrameView: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 24: RenderLayer: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 24: MainFrameView: mouseEnteredContentArea
+CONSOLE MESSAGE: line 24: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 25: RenderLayer: mouseEnteredContentArea
+CONSOLE MESSAGE: line 25: RenderLayer: mouseMovedInContentArea
+CONSOLE MESSAGE: line 25: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 26: RenderLayer: mouseEnteredVerticalScrollbar
+CONSOLE MESSAGE: line 26: RenderLayer: mouseMovedInContentArea
+CONSOLE MESSAGE: line 26: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 27: RenderLayer: mouseIsDownInVerticalScrollbar
+CONSOLE MESSAGE: line 28: RenderLayer: mouseIsUpInVerticalScrollbar
+CONSOLE MESSAGE: line 29: RenderLayer: mouseExitedVerticalScrollbar
+CONSOLE MESSAGE: line 29: RenderLayer: mouseExitedContentArea
+CONSOLE MESSAGE: line 29: MainFrameView: mouseMovedInContentArea
+PASS successfullyParsed is true
+
+TEST COMPLETE
+This is a scrollable div.
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatorbasiceventshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events.html (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-basic-events.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+&lt;html&gt;
+&lt;style&gt;
+    #scrollme {
+        width: 100px;
+        height: 100px;
+        overflow: auto;
+    }
+    #scrollme p {
+        height: 1000px;
+    }
+&lt;/style&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+  if (window.internals) {
+      window.internals.setUsesMockScrollAnimator(true);
+  }
+  if (window.testRunner) {
+      testRunner.waitUntilDone();
+      testRunner.dumpAsText();
+  }
+  window.onload = function () {
+      var div = document.querySelector('#scrollme');
+      if (window.eventSender) {
+          eventSender.mouseMoveTo(0, 0);
+          eventSender.mouseMoveTo(div.offsetLeft + 1, div.offsetTop + 1);
+          eventSender.mouseMoveTo(div.offsetLeft + div.offsetWidth - 4, div.offsetTop + 1);
+          eventSender.mouseDown();
+          eventSender.mouseUp();
+          eventSender.mouseMoveTo(0, 0);
+      }
+      if (window.testRunner)
+          testRunner.notifyDone();
+  };
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+  &lt;div id=&quot;scrollme&quot;&gt;&lt;p&gt;This is a scrollable div.&lt;/p&gt;&lt;/div&gt;
+  &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatoroverlayscrollbarshoveredexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+CONSOLE MESSAGE: line 15: MainFrameView: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 15: FrameView: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 15: FrameView: didAddHorizontalScrollbar
+CONSOLE MESSAGE: line 15: FrameView: willRemoveVerticalScrollbar
+CONSOLE MESSAGE: line 15: MainFrameView: mouseEnteredContentArea
+CONSOLE MESSAGE: line 15: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 16: FrameView: mouseEnteredHorizontalScrollbar
+CONSOLE MESSAGE: line 16: FrameView: mouseEnteredContentArea
+CONSOLE MESSAGE: line 16: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 17: FrameView: mouseExitedHorizontalScrollbar
+CONSOLE MESSAGE: line 17: FrameView: mouseExitedContentArea
+CONSOLE MESSAGE: line 17: MainFrameView: mouseMovedInContentArea
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Test for https://bugs.webkit.org/show_bug.cgi?id=153304.
+
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatoroverlayscrollbarshoveredhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+&lt;html&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+  if (window.internals) {
+      window.internals.setUsesMockScrollAnimator(true);
+      window.internals.setUsesOverlayScrollbars(true);
+  }
+  if (window.testRunner) {
+      testRunner.waitUntilDone();
+      testRunner.dumpAsText();
+  }
+  window.onload = function () {
+      var frame = document.getElementById(&quot;frame&quot;);
+      if (window.eventSender) {
+          eventSender.mouseMoveTo(0, 0);
+          eventSender.mouseMoveTo(frame.offsetLeft + 4, frame.offsetTop + frame.offsetHeight - 4);
+          eventSender.mouseMoveTo(0, 0);
+      }
+      if (window.testRunner)
+          testRunner.notifyDone();
+  };
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+  &lt;p&gt;Test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=153304&quot;&gt;https://bugs.webkit.org/show_bug.cgi?id=153304&lt;/a&gt;.&lt;/p&gt;
+  &lt;iframe width=120 scrolling=yes id=&quot;frame&quot; src=&quot;data:text/html,
+      &lt;p style='white-space: nowrap'&gt;Scroll animator should be notified when overlay scrollbars in main frame are hovered&lt;/p&gt;
+      &quot;&gt;
+  &lt;/iframe&gt;
+  &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatorselectlisteventsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events-expected.txt (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+CONSOLE MESSAGE: RenderListBox: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 14: MainFrameView: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 14: MainFrameView: mouseEnteredContentArea
+CONSOLE MESSAGE: line 14: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 15: RenderListBox: mouseEnteredContentArea
+CONSOLE MESSAGE: line 15: RenderListBox: mouseMovedInContentArea
+CONSOLE MESSAGE: line 15: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 16: RenderListBox: mouseEnteredVerticalScrollbar
+CONSOLE MESSAGE: line 16: RenderListBox: mouseMovedInContentArea
+CONSOLE MESSAGE: line 16: MainFrameView: mouseMovedInContentArea
+CONSOLE MESSAGE: line 17: RenderListBox: mouseIsDownInVerticalScrollbar
+CONSOLE MESSAGE: line 18: RenderListBox: mouseIsUpInVerticalScrollbar
+CONSOLE MESSAGE: line 19: RenderListBox: mouseExitedVerticalScrollbar
+CONSOLE MESSAGE: line 19: RenderListBox: mouseExitedContentArea
+CONSOLE MESSAGE: line 19: MainFrameView: mouseMovedInContentArea
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Test for https://bugs.webkit.org/show_bug.cgi?id=153398.
+
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollanimatorselectlisteventshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events.html (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events.html                                (rev 0)
+++ trunk/LayoutTests/fast/scrolling/scroll-animator-select-list-events.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+&lt;html&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+  if (window.internals) {
+      window.internals.setUsesMockScrollAnimator(true);
+  }
+  if (window.testRunner) {
+      testRunner.waitUntilDone();
+      testRunner.dumpAsText();
+  }
+  window.onload = function () {
+      var list = document.getElementById(&quot;list&quot;);
+      if (window.eventSender) {
+          eventSender.mouseMoveTo(0, 0);
+          eventSender.mouseMoveTo(list.offsetLeft + 1, list.offsetTop + 1);
+          eventSender.mouseMoveTo(list.offsetLeft + list.offsetWidth - 4, list.offsetTop + 1);
+          eventSender.mouseDown();
+          eventSender.mouseUp();
+          eventSender.mouseMoveTo(0, 0);
+      }
+      if (window.testRunner)
+          testRunner.notifyDone();
+  };
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;body&gt;
+  &lt;p&gt;Test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=153398&quot;&gt;https://bugs.webkit.org/show_bug.cgi?id=153398&lt;/a&gt;.&lt;/p&gt;
+  &lt;select id=&quot;list&quot; size=&quot;2&quot;&gt;
+    &lt;option&gt;content1&lt;/option&gt;
+    &lt;option&gt;content2&lt;/option&gt;
+    &lt;option&gt;content3&lt;/option&gt;
+    &lt;option&gt;content4&lt;/option&gt;
+    &lt;option&gt;content5&lt;/option&gt;
+    &lt;option&gt;content6&lt;/option&gt;
+    &lt;option&gt;content7&lt;/option&gt;
+    &lt;option&gt;content8&lt;/option&gt;
+    &lt;option&gt;content9&lt;/option&gt;
+    &lt;option&gt;content10&lt;/option&gt;
+  &lt;/select&gt;
+  &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingscrollbartickmarkshittesthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/LayoutTests/fast/scrolling/scrollbar-tickmarks-hittest.html        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -13,7 +13,6 @@
</span><span class="cx">     var elt = document.getElementById('elt');
</span><span class="cx">     range.selectNodeContents(elt);
</span><span class="cx">     if (window.internals) {
</span><del>-        window.internals.setUsesOverlayScrollbars(true);
</del><span class="cx">         window.internals.addTextMatchMarker(range, true);
</span><span class="cx">     }
</span><span class="cx">     if (window.testRunner)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -253,6 +253,9 @@
</span><span class="cx"> # Lacking WK1 TestRunner API that evaluates JavaScript through JSC APIs and not WebCore APIs
</span><span class="cx"> inspector/script-profiler/event-type-API.html
</span><span class="cx"> 
</span><ins>+# This test checks ScrollAnimator events only for main frame scrollbars that use native widgets in WK1.
+fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html [ Skip ]
+
</ins><span class="cx"> ########################################
</span><span class="cx"> ### START OF (3) IndexedDB failures with SQLite
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1fastscrollingscrollanimatorbasiceventsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-basic-events-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+CONSOLE MESSAGE: line 25: RenderLayer: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 25: RenderLayer: mouseMovedInContentArea
+CONSOLE MESSAGE: line 26: RenderLayer: mouseEnteredVerticalScrollbar
+CONSOLE MESSAGE: line 26: RenderLayer: mouseMovedInContentArea
+CONSOLE MESSAGE: line 27: RenderLayer: mouseIsDownInVerticalScrollbar
+CONSOLE MESSAGE: line 28: RenderLayer: mouseIsUpInVerticalScrollbar
+CONSOLE MESSAGE: line 28: RenderLayer: mouseMovedInContentArea
+CONSOLE MESSAGE: line 29: RenderLayer: mouseExitedVerticalScrollbar
+CONSOLE MESSAGE: line 29: RenderLayer: mouseExitedContentArea
+PASS successfullyParsed is true
+
+TEST COMPLETE
+This is a scrollable div.
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1fastscrollingscrollanimatorselectlisteventsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac-wk1/fast/scrolling/scroll-animator-select-list-events-expected.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+CONSOLE MESSAGE: RenderListBox: didAddVerticalScrollbar
+CONSOLE MESSAGE: line 15: RenderListBox: mouseMovedInContentArea
+CONSOLE MESSAGE: line 16: RenderListBox: mouseEnteredVerticalScrollbar
+CONSOLE MESSAGE: line 16: RenderListBox: mouseMovedInContentArea
+CONSOLE MESSAGE: line 17: RenderListBox: mouseIsDownInVerticalScrollbar
+CONSOLE MESSAGE: line 18: RenderListBox: mouseIsUpInVerticalScrollbar
+CONSOLE MESSAGE: line 18: RenderListBox: mouseMovedInContentArea
+CONSOLE MESSAGE: line 19: RenderListBox: mouseExitedVerticalScrollbar
+CONSOLE MESSAGE: line 19: RenderListBox: mouseExitedContentArea
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Test for https://bugs.webkit.org/show_bug.cgi?id=153398.
+
+
+
</ins></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -2314,6 +2314,7 @@
</span><span class="cx">     platform/mock/RTCDataChannelHandlerMock.cpp
</span><span class="cx">     platform/mock/RTCNotifiersMock.cpp
</span><span class="cx">     platform/mock/RTCPeerConnectionHandlerMock.cpp
</span><ins>+    platform/mock/ScrollAnimatorMock.cpp
</ins><span class="cx">     platform/mock/ScrollbarThemeMock.cpp
</span><span class="cx"> 
</span><span class="cx">     platform/network/AuthenticationChallengeBase.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/ChangeLog        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -1,5 +1,64 @@
</span><span class="cx"> 2016-02-16  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><ins>+        Add a way to test ScrollAnimator
+        https://bugs.webkit.org/show_bug.cgi?id=153479
+
+        Reviewed by Michael Catanzaro.
+
+        Tests: fast/scrolling/overlay-scrollbars-scroll-corner.html
+               fast/scrolling/scroll-animator-basic-events.html
+               fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html
+               fast/scrolling/scroll-animator-select-list-events.html
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * page/FrameView.cpp:
+        (WebCore::FrameView::usesMockScrollAnimator):
+        (WebCore::FrameView::logMockScrollAnimatorMessage):
+        * page/FrameView.h:
+        * page/Settings.cpp:
+        (WebCore::Settings::setUsesMockScrollAnimator):
+        (WebCore::Settings::usesMockScrollAnimator):
+        * page/Settings.h:
+        * platform/ScrollableArea.cpp:
+        (WebCore::ScrollableArea::scrollAnimator):
+        * platform/ScrollableArea.h:
+        (WebCore::ScrollableArea::usesMockScrollAnimator):
+        (WebCore::ScrollableArea::logMockScrollAnimatorMessage):
+        * platform/mock/ScrollAnimatorMock.cpp: Added.
+        (WebCore::ScrollAnimatorMock::create):
+        (WebCore::ScrollAnimatorMock::ScrollAnimatorMock):
+        (WebCore::ScrollAnimatorMock::~ScrollAnimatorMock):
+        (WebCore::ScrollAnimatorMock::didAddVerticalScrollbar):
+        (WebCore::ScrollAnimatorMock::didAddHorizontalScrollbar):
+        (WebCore::ScrollAnimatorMock::willRemoveVerticalScrollbar):
+        (WebCore::ScrollAnimatorMock::willRemoveHorizontalScrollbar):
+        (WebCore::ScrollAnimatorMock::mouseEnteredContentArea):
+        (WebCore::ScrollAnimatorMock::mouseMovedInContentArea):
+        (WebCore::ScrollAnimatorMock::mouseExitedContentArea):
+        (WebCore::ScrollAnimatorMock::mouseEnteredScrollbar):
+        (WebCore::ScrollAnimatorMock::mouseExitedScrollbar):
+        (WebCore::ScrollAnimatorMock::mouseIsDownInScrollbar):
+        * platform/mock/ScrollAnimatorMock.h: Added.
+        * platform/mock/ScrollbarThemeMock.cpp:
+        (WebCore::ScrollbarThemeMock::usesOverlayScrollbars):
+        * platform/mock/ScrollbarThemeMock.h:
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::usesMockScrollAnimator):
+        (WebCore::RenderLayer::logMockScrollAnimatorMessage):
+        * rendering/RenderLayer.h:
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::usesMockScrollAnimator):
+        (WebCore::RenderListBox::logMockScrollAnimatorMessage):
+        * rendering/RenderListBox.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::resetToConsistentState):
+        (WebCore::Internals::setUsesMockScrollAnimator):
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
+2016-02-16  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
</ins><span class="cx">         Unreviewed. Enable overlay scrollbars in GTK+ after r196641.
</span><span class="cx"> 
</span><span class="cx">         This was blocked by bug #153404, but the commit that introduced
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -2372,6 +2372,8 @@
</span><span class="cx">                 5C9A7A751AA0F6EA00958ACF /* DFABytecodeCompiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C39305E1AA0F6A90029C816 /* DFABytecodeCompiler.cpp */; };
</span><span class="cx">                 5C9A7A761AA0F6ED00958ACF /* DFABytecodeInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C3930601AA0F6A90029C816 /* DFABytecodeInterpreter.cpp */; };
</span><span class="cx">                 5C9B860C1C21E3C900110F36 /* ResourceLoadTiming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9B860B1C21E3C600110F36 /* ResourceLoadTiming.mm */; };
</span><ins>+                5CB37FFE1C62D28C00F20188 /* ScrollAnimatorMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */; };
+                5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; };
</ins><span class="cx">                 5CBC8DAC1AAA302200E1C803 /* MediaAccessibilitySoftLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CBC8DAA1AAA302200E1C803 /* MediaAccessibilitySoftLink.cpp */; };
</span><span class="cx">                 5CBC8DAD1AAA302200E1C803 /* MediaAccessibilitySoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBC8DAB1AAA302200E1C803 /* MediaAccessibilitySoftLink.h */; };
</span><span class="cx">                 5CD9F5661AA0F73C00DA45FF /* DFABytecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C39305D1AA0F6A90029C816 /* DFABytecode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -9934,6 +9936,8 @@
</span><span class="cx">                 5C4304B3191AEF46000E2BC0 /* JSEXTShaderTextureLOD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEXTShaderTextureLOD.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C4304B4191AEF46000E2BC0 /* JSEXTShaderTextureLOD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSEXTShaderTextureLOD.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C9B860B1C21E3C600110F36 /* ResourceLoadTiming.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceLoadTiming.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimatorMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 5CBC8DAA1AAA302200E1C803 /* MediaAccessibilitySoftLink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaAccessibilitySoftLink.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5CBC8DAB1AAA302200E1C803 /* MediaAccessibilitySoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaAccessibilitySoftLink.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5CDFA6C71AA4F2DA00EA8746 /* ContentExtensionActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentExtensionActions.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -17411,6 +17415,8 @@
</span><span class="cx">                 59C77F101054591C00506104 /* mock */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */,
+                                5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */,
</ins><span class="cx">                                 CDF2B005182053DF00F2B424 /* mediasource */,
</span><span class="cx">                                 59309A1011F4AE5800250603 /* DeviceOrientationClientMock.cpp */,
</span><span class="cx">                                 59309A1211F4AE6A00250603 /* DeviceOrientationClientMock.h */,
</span><span class="lines">@@ -24965,6 +24971,7 @@
</span><span class="cx">                                 FD31608312B026F700C1A359 /* AudioFileReader.h in Headers */,
</span><span class="cx">                                 CD5596921475B678001D0BD0 /* AudioFileReaderIOS.h in Headers */,
</span><span class="cx">                                 FD3160BF12B0272A00C1A359 /* AudioFileReaderMac.h in Headers */,
</span><ins>+                                5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */,
</ins><span class="cx">                                 CD2F4A2418D89F700063746D /* AudioHardwareListener.h in Headers */,
</span><span class="cx">                                 CD2F4A2818D8A3490063746D /* AudioHardwareListenerMac.h in Headers */,
</span><span class="cx">                                 FDE2D55B159E66EB00DCCCF8 /* AudioIOCallback.h in Headers */,
</span><span class="lines">@@ -31374,6 +31381,7 @@
</span><span class="cx">                                 14C9A5EA0B3D105F005A0232 /* Settings.cpp in Sources */,
</span><span class="cx">                                 A182D5B71BE722670087A7CC /* SettingsCocoa.mm in Sources */,
</span><span class="cx">                                 0F3DD44F12F5EA1B000D9190 /* ShadowBlur.cpp in Sources */,
</span><ins>+                                5CB37FFE1C62D28C00F20188 /* ScrollAnimatorMock.cpp in Sources */,
</ins><span class="cx">                                 BC5EB8C30E82031B00B25965 /* ShadowData.cpp in Sources */,
</span><span class="cx">                                 A6D169621346B49B000EB770 /* ShadowRoot.cpp in Sources */,
</span><span class="cx">                                 FD45A953175D3FB800C21EC8 /* Shape.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/FrameView.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/FrameView.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/page/FrameView.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -1631,6 +1631,24 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool FrameView::usesMockScrollAnimator() const
+{
+    return Settings::usesMockScrollAnimator();
+}
+
+void FrameView::logMockScrollAnimatorMessage(const String&amp; message) const
+{
+    Document* document = frame().document();
+    if (!document)
+        return;
+    StringBuilder builder;
+    if (frame().isMainFrame())
+        builder.appendLiteral(&quot;Main&quot;);
+    builder.appendLiteral(&quot;FrameView: &quot;);
+    builder.append(message);
+    document-&gt;addConsoleMessage(MessageSource::Other, MessageLevel::Debug, builder.toString());
+}
+
</ins><span class="cx"> void FrameView::setCannotBlitToWindow()
</span><span class="cx"> {
</span><span class="cx">     m_cannotBlitToWindow = true;
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/FrameView.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/FrameView.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/page/FrameView.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -636,6 +636,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool usesCompositedScrolling() const override;
</span><span class="cx">     virtual bool usesAsyncScrolling() const override;
</span><ins>+    bool usesMockScrollAnimator() const override;
+    void logMockScrollAnimatorMessage(const String&amp;) const override;
</ins><span class="cx"> 
</span><span class="cx">     // Override scrollbar notifications to update the AXObject cache.
</span><span class="cx">     virtual void didAddScrollbar(Scrollbar*, ScrollbarOrientation) override;
</span></span></pre></div>
<a id="trunkSourceWebCorepageSettingscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Settings.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Settings.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/page/Settings.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -84,6 +84,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool Settings::gMockScrollbarsEnabled = false;
</span><span class="cx"> bool Settings::gUsesOverlayScrollbars = false;
</span><ins>+bool Settings::gMockScrollAnimatorEnabled = false;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MEDIA_STREAM)
</span><span class="cx"> bool Settings::gMockCaptureDevicesEnabled = false;
</span><span class="lines">@@ -655,6 +656,16 @@
</span><span class="cx">     return gUsesOverlayScrollbars;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void Settings::setUsesMockScrollAnimator(bool flag)
+{
+    gMockScrollAnimatorEnabled = flag;
+}
+
+bool Settings::usesMockScrollAnimator()
+{
+    return gMockScrollAnimatorEnabled;
+}
+
</ins><span class="cx"> void Settings::setShouldRespectPriorityInCSSAttributeSetters(bool flag)
</span><span class="cx"> {
</span><span class="cx">     gShouldRespectPriorityInCSSAttributeSetters = flag;
</span></span></pre></div>
<a id="trunkSourceWebCorepageSettingsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Settings.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Settings.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/page/Settings.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -216,6 +216,9 @@
</span><span class="cx">     WEBCORE_EXPORT static void setUsesOverlayScrollbars(bool flag);
</span><span class="cx">     static bool usesOverlayScrollbars();
</span><span class="cx"> 
</span><ins>+    WEBCORE_EXPORT static void setUsesMockScrollAnimator(bool);
+    static bool usesMockScrollAnimator();
+
</ins><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">     void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
</span><span class="cx">     bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
</span><span class="lines">@@ -357,6 +360,7 @@
</span><span class="cx"> 
</span><span class="cx">     static bool gMockScrollbarsEnabled;
</span><span class="cx">     static bool gUsesOverlayScrollbars;
</span><ins>+    static bool gMockScrollAnimatorEnabled;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(WIN)
</span><span class="cx">     static bool gShouldUseHighResolutionTimers;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollableAreacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollableArea.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollableArea.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/platform/ScrollableArea.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;PlatformWheelEvent.h&quot;
</span><span class="cx"> #include &quot;ScrollAnimator.h&quot;
</span><ins>+#include &quot;ScrollAnimatorMock.h&quot;
</ins><span class="cx"> #include &quot;ScrollbarTheme.h&quot;
</span><span class="cx"> #include &quot;TextStream.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -75,8 +76,14 @@
</span><span class="cx"> 
</span><span class="cx"> ScrollAnimator&amp; ScrollableArea::scrollAnimator() const
</span><span class="cx"> {
</span><del>-    if (!m_scrollAnimator)
-        m_scrollAnimator = ScrollAnimator::create(const_cast&lt;ScrollableArea&amp;&gt;(*this));
</del><ins>+    if (!m_scrollAnimator) {
+        if (usesMockScrollAnimator()) {
+            m_scrollAnimator = std::make_unique&lt;ScrollAnimatorMock&gt;(const_cast&lt;ScrollableArea&amp;&gt;(*this), [this](const String&amp; message) {
+                logMockScrollAnimatorMessage(message);
+            });
+        } else
+            m_scrollAnimator = ScrollAnimator::create(const_cast&lt;ScrollableArea&amp;&gt;(*this));
+    }
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(m_scrollAnimator);
</span><span class="cx">     return *m_scrollAnimator.get();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollableAreah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollableArea.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollableArea.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/platform/ScrollableArea.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -307,6 +307,9 @@
</span><span class="cx">     void verticalScrollbarLayerDidChange();
</span><span class="cx">     void horizontalScrollbarLayerDidChange();
</span><span class="cx"> 
</span><ins>+    virtual bool usesMockScrollAnimator() const { return false; }
+    virtual void logMockScrollAnimatorMessage(const String&amp;) const { };
+
</ins><span class="cx"> protected:
</span><span class="cx">     WEBCORE_EXPORT ScrollableArea();
</span><span class="cx">     WEBCORE_EXPORT virtual ~ScrollableArea();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockScrollAnimatorMockcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.cpp (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.cpp                                (rev 0)
+++ trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,145 @@
</span><ins>+/*
+ * Copyright (c) 2016 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; 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 THE COPYRIGHT
+ * OWNER OR 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;ScrollAnimatorMock.h&quot;
+
+#include &quot;ScrollableArea.h&quot;
+#include &lt;wtf/text/StringBuilder.h&gt;
+
+namespace WebCore {
+
+ScrollAnimatorMock::ScrollAnimatorMock(ScrollableArea&amp; scrollableArea, std::function&lt;void(const String&amp;)&gt;&amp;&amp; logger)
+    : ScrollAnimator(scrollableArea)
+    , m_logger(WTFMove(logger))
+{
+}
+
+ScrollAnimatorMock::~ScrollAnimatorMock()
+{
+}
+
+void ScrollAnimatorMock::didAddVerticalScrollbar(Scrollbar* scrollbar)
+{
+    m_verticalScrollbar = scrollbar;
+    m_logger(&quot;didAddVerticalScrollbar&quot;);
+    ScrollAnimator::didAddVerticalScrollbar(scrollbar);
+}
+
+void ScrollAnimatorMock::didAddHorizontalScrollbar(Scrollbar* scrollbar)
+{
+    m_horizontalScrollbar = scrollbar;
+    m_logger(&quot;didAddHorizontalScrollbar&quot;);
+    ScrollAnimator::didAddHorizontalScrollbar(scrollbar);
+}
+
+void ScrollAnimatorMock::willRemoveVerticalScrollbar(Scrollbar* scrollbar)
+{
+    m_logger(&quot;willRemoveVerticalScrollbar&quot;);
+    ScrollAnimator::willRemoveVerticalScrollbar(scrollbar);
+    m_verticalScrollbar = nullptr;
+}
+
+void ScrollAnimatorMock::willRemoveHorizontalScrollbar(Scrollbar* scrollbar)
+{
+    m_logger(&quot;willRemoveHorizontalScrollbar&quot;);
+    ScrollAnimator::willRemoveHorizontalScrollbar(scrollbar);
+    m_horizontalScrollbar = nullptr;
+}
+
+void ScrollAnimatorMock::mouseEnteredContentArea()
+{
+    m_logger(&quot;mouseEnteredContentArea&quot;);
+    ScrollAnimator::mouseEnteredContentArea();
+}
+
+void ScrollAnimatorMock::mouseMovedInContentArea()
+{
+    m_logger(&quot;mouseMovedInContentArea&quot;);
+    ScrollAnimator::mouseMovedInContentArea();
+}
+
+void ScrollAnimatorMock::mouseExitedContentArea()
+{
+    m_logger(&quot;mouseExitedContentArea&quot;);
+    ScrollAnimator::mouseExitedContentArea();
+}
+
+void ScrollAnimatorMock::mouseEnteredScrollbar(Scrollbar* scrollbar) const
+{
+    StringBuilder message;
+    message.appendLiteral(&quot;mouseEntered&quot;);
+    if (scrollbar == m_verticalScrollbar)
+        message.appendLiteral(&quot;Vertical&quot;);
+    else if (scrollbar == m_horizontalScrollbar)
+        message.appendLiteral(&quot;Horizontal&quot;);
+    else
+        message.appendLiteral(&quot;Unknown&quot;);
+    message.appendLiteral(&quot;Scrollbar&quot;);
+    m_logger(message.toString());
+    ScrollAnimator::mouseEnteredScrollbar(scrollbar);
+}
+
+void ScrollAnimatorMock::mouseExitedScrollbar(Scrollbar* scrollbar) const
+{
+    StringBuilder message;
+    message.appendLiteral(&quot;mouseExited&quot;);
+    if (scrollbar == m_verticalScrollbar)
+        message.appendLiteral(&quot;Vertical&quot;);
+    else if (scrollbar == m_horizontalScrollbar)
+        message.appendLiteral(&quot;Horizontal&quot;);
+    else
+        message.appendLiteral(&quot;Unknown&quot;);
+    message.appendLiteral(&quot;Scrollbar&quot;);
+    m_logger(message.toString());
+    ScrollAnimator::mouseExitedScrollbar(scrollbar);
+}
+
+void ScrollAnimatorMock::mouseIsDownInScrollbar(Scrollbar* scrollbar, bool isPressed) const
+{
+    StringBuilder message;
+    message.appendLiteral(&quot;mouseIs&quot;);
+    if (isPressed)
+        message.appendLiteral(&quot;Down&quot;);
+    else
+        message.appendLiteral(&quot;Up&quot;);
+    message.appendLiteral(&quot;In&quot;);
+    if (scrollbar == m_verticalScrollbar)
+        message.appendLiteral(&quot;Vertical&quot;);
+    else if (scrollbar == m_horizontalScrollbar)
+        message.appendLiteral(&quot;Horizontal&quot;);
+    else
+        message.appendLiteral(&quot;Unknown&quot;);
+    message.appendLiteral(&quot;Scrollbar&quot;);
+    m_logger(message.toString());
+    ScrollAnimator::mouseIsDownInScrollbar(scrollbar, isPressed);
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformmockScrollAnimatorMockh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.h (0 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.h                                (rev 0)
+++ trunk/Source/WebCore/platform/mock/ScrollAnimatorMock.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -0,0 +1,78 @@
</span><ins>+/*
+ * Copyright (c) 2016 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; 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 THE COPYRIGHT
+ * OWNER OR 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 ScrollAnimatorMock_h
+#define ScrollAnimatorMock_h
+
+#include &quot;ScrollAnimator.h&quot;
+
+namespace WebCore {
+
+// A Mock implementation of ScrollAnimator used to test the scroll events
+// received by the scroll animator. Tests can enable this scroll animator using
+// the internal setting enableMockScrollAnimator.
+class ScrollAnimatorMock final : public ScrollAnimator {
+public:
+    ScrollAnimatorMock(ScrollableArea&amp;, std::function&lt;void(const String&amp;)&gt;&amp;&amp;);
+    virtual ~ScrollAnimatorMock();
+
+#if ENABLE(RUBBER_BANDING)
+    bool allowsHorizontalStretching(const PlatformWheelEvent&amp;) override { return false; }
+    bool allowsVerticalStretching(const PlatformWheelEvent&amp;) override { return false; }
+    IntSize stretchAmount() override { return IntSize(); }
+    bool pinnedInDirection(const FloatSize&amp;) override { return false; }
+    bool canScrollHorizontally() override { return false; }
+    bool canScrollVertically() override { return false; }
+    bool shouldRubberBandInDirection(ScrollDirection) override { return false; }
+    void immediateScrollBy(const FloatSize&amp;) override { }
+    void immediateScrollByWithoutContentEdgeConstraints(const FloatSize&amp;) override { }
+    void adjustScrollPositionToBoundsIfNecessary() override { }
+#endif
+
+private:
+    void didAddVerticalScrollbar(Scrollbar*) override;
+    void didAddHorizontalScrollbar(Scrollbar*) override;
+    void willRemoveVerticalScrollbar(Scrollbar*) override;
+    void willRemoveHorizontalScrollbar(Scrollbar*) override;
+    void mouseEnteredContentArea() override;
+    void mouseMovedInContentArea() override;
+    void mouseExitedContentArea() override;
+    void mouseEnteredScrollbar(Scrollbar*) const override;
+    void mouseExitedScrollbar(Scrollbar*) const override;
+    void mouseIsDownInScrollbar(Scrollbar*, bool) const override;
+
+    std::function&lt;void(const String&amp;)&gt; m_logger;
+    Scrollbar* m_verticalScrollbar { nullptr };
+    Scrollbar* m_horizontalScrollbar { nullptr };
+};
+
+} // namespace WebCore
+
+#endif // ScrollAnimatorMock_h
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformmockScrollbarThemeMockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -27,6 +27,8 @@
</span><span class="cx"> #include &quot;ScrollbarThemeMock.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Scrollbar.h&quot;
</span><ins>+// FIXME: This is a layering violation.
+#include &quot;Settings.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -53,5 +55,12 @@
</span><span class="cx">         context.fillRect(thumbRect, Color::darkGray);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool ScrollbarThemeMock::usesOverlayScrollbars() const
+{
+    // FIXME: This is a layering violation, but ScrollbarThemeMock is also created depending on settings in platform layer,
+    // we should fix it in both places.
+    return Settings::usesOverlayScrollbars();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+}
+
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformmockScrollbarThemeMockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/platform/mock/ScrollbarThemeMock.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -46,7 +46,8 @@
</span><span class="cx">     virtual void paintTrackBackground(GraphicsContext&amp;, Scrollbar&amp;, const IntRect&amp;) override;
</span><span class="cx">     virtual void paintThumb(GraphicsContext&amp;, Scrollbar&amp;, const IntRect&amp;) override;
</span><span class="cx">     virtual int maxOverlapBetweenPages() override { return 40; }
</span><del>-    
</del><ins>+
+    virtual bool usesOverlayScrollbars() const override;
</ins><span class="cx"> private:
</span><span class="cx">     virtual bool isMockTheme() const override { return true; }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -3226,6 +3226,16 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+bool RenderLayer::usesMockScrollAnimator() const
+{
+    return Settings::usesMockScrollAnimator();
+}
+
+void RenderLayer::logMockScrollAnimatorMessage(const String&amp; message) const
+{
+    renderer().document().addConsoleMessage(MessageSource::Other, MessageLevel::Debug, &quot;RenderLayer: &quot; + message);
+}
+
</ins><span class="cx"> int RenderLayer::verticalScrollbarWidth(OverlayScrollbarSizeRelevancy relevancy) const
</span><span class="cx"> {
</span><span class="cx">     if (!m_vBar
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/rendering/RenderLayer.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -884,6 +884,8 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx">     bool isScrollSnapInProgress() const override;
</span><span class="cx"> #endif
</span><ins>+    bool usesMockScrollAnimator() const override;
+    void logMockScrollAnimatorMessage(const String&amp;) const override;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     void registerAsTouchEventListenerForScrolling();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderListBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderListBox.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderListBox.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/rendering/RenderListBox.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -819,6 +819,16 @@
</span><span class="cx">     return absoluteBoundingBoxRect();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool RenderListBox::usesMockScrollAnimator() const
+{
+    return Settings::usesMockScrollAnimator();
+}
+
+void RenderListBox::logMockScrollAnimatorMessage(const String&amp; message) const
+{
+    document().addConsoleMessage(MessageSource::Other, MessageLevel::Debug, &quot;RenderListBox: &quot; + message);
+}
+
</ins><span class="cx"> PassRefPtr&lt;Scrollbar&gt; RenderListBox::createScrollbar()
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;Scrollbar&gt; widget;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderListBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderListBox.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderListBox.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/rendering/RenderListBox.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -136,6 +136,8 @@
</span><span class="cx">     virtual bool isScrollableOrRubberbandable() override;
</span><span class="cx">     virtual bool hasScrollableOrRubberbandableAncestor() override;
</span><span class="cx">     virtual IntRect scrollableAreaBoundingBox(bool* = nullptr) const override;
</span><ins>+    bool usesMockScrollAnimator() const override;
+    void logMockScrollAnimatorMessage(const String&amp;) const override;
</ins><span class="cx"> 
</span><span class="cx">     // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea.
</span><span class="cx">     void scrollTo(int newOffset);
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/testing/Internals.cpp        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -374,6 +374,7 @@
</span><span class="cx"> 
</span><span class="cx">     WebCore::overrideUserPreferredLanguages(Vector&lt;String&gt;());
</span><span class="cx">     WebCore::Settings::setUsesOverlayScrollbars(false);
</span><ins>+    WebCore::Settings::setUsesMockScrollAnimator(false);
</ins><span class="cx">     page-&gt;inspectorController().setLegacyProfilerEnabled(false);
</span><span class="cx"> #if ENABLE(VIDEO_TRACK)
</span><span class="cx">     page-&gt;group().captionPreferences().setCaptionsStyleSheetOverride(emptyString());
</span><span class="lines">@@ -2675,6 +2676,11 @@
</span><span class="cx">     WebCore::Settings::setUsesOverlayScrollbars(enabled);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void Internals::setUsesMockScrollAnimator(bool enabled)
+{
+    WebCore::Settings::setUsesMockScrollAnimator(enabled);
+}
+
</ins><span class="cx"> void Internals::forceReload(bool endToEnd)
</span><span class="cx"> {
</span><span class="cx">     frame()-&gt;loader().reload(endToEnd);
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.h (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.h        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/testing/Internals.h        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -346,6 +346,7 @@
</span><span class="cx">     bool isFromCurrentWorld(Deprecated::ScriptValue) const;
</span><span class="cx"> 
</span><span class="cx">     void setUsesOverlayScrollbars(bool enabled);
</span><ins>+    void setUsesMockScrollAnimator(bool enabled);
</ins><span class="cx"> 
</span><span class="cx">     String getCurrentCursorInfo(ExceptionCode&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.idl (196687 => 196688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.idl        2016-02-17 06:54:03 UTC (rev 196687)
+++ trunk/Source/WebCore/testing/Internals.idl        2016-02-17 07:16:40 UTC (rev 196688)
</span><span class="lines">@@ -347,6 +347,7 @@
</span><span class="cx">     boolean isFromCurrentWorld(any obj);
</span><span class="cx"> 
</span><span class="cx">     void setUsesOverlayScrollbars(boolean enabled);
</span><ins>+    void setUsesMockScrollAnimator(boolean enabled);
</ins><span class="cx"> 
</span><span class="cx">     void forceReload(boolean endToEnd);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>