<!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>[280807] 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/280807">280807</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2021-08-09 16:41:29 -0700 (Mon, 09 Aug 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Vertical scroll with mouse wheel in horizontal scroller fails to propagate to the document
https://bugs.webkit.org/show_bug.cgi?id=228891
<rdar://81640239>

Reviewed by Antti Koivisto.

Source/WebCore:

If a page has a horizontal scrolling carousel with a non-passive wheel event handler, and a
user with a clicky scroll wheel mouse tries to vertically scroll over that carousel, then
we'd fail to propagate the scroll to the page. This affects apple.com/store.

This happened because we don't do latching for legacy mouse wheel events, so we hit the code
in EventHandler::handleWheelEventInAppropriateEnclosingBox(); this finds the carousel and
calls handleWheelEventInScrollableArea(), but that dispatches to the scrolling thread in way
that does not propagate the event to the nearest ancestor that can handle it.

The fix is to check that the ScrollableArea can handle the event, sharing some code that
already exists and was used by findEnclosingScrollableContainer(). This is a conservative
fix; it's possible that scrollableAreaCanHandleEvent() could be called down in
handleWheelEventInScrollableArea() but that will affect other call sites.

Test: fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html

* page/EventHandler.cpp:
(WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
(WebCore::EventHandler::scrollableAreaCanHandleEvent):
* page/EventHandler.h:
* page/mac/EventHandlerMac.mm:
(WebCore::findEnclosingScrollableContainer):

LayoutTests:

* fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt: Added.
* fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html: Added.
* tiled-drawing/scrolling/overflow-scroll-reduced-content.html: Convert this test to use
async scrolling. webkit.org/b/228898 tracks an existing problem that caused the test
to fail with non-async scrolling.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingoverflowscrollreducedcontenthtml">trunk/LayoutTests/tiled-drawing/scrolling/overflow-scroll-reduced-content.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlercpp">trunk/Source/WebCore/page/EventHandler.cpp</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlerh">trunk/Source/WebCore/page/EventHandler.h</a></li>
<li><a href="#trunkSourceWebCorepagemacEventHandlerMacmm">trunk/Source/WebCore/page/mac/EventHandlerMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerScrollableAreacpp">trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastscrollingmacverticalscrollinhorizontalscrollerexpectedtxt">trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastscrollingmacverticalscrollinhorizontalscrollerhtml">trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/LayoutTests/ChangeLog 2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2021-08-09  Simon Fraser  <simon.fraser@apple.com>
+
+        Vertical scroll with mouse wheel in horizontal scroller fails to propagate to the document
+        https://bugs.webkit.org/show_bug.cgi?id=228891
+        <rdar://81640239>
+
+        Reviewed by Antti Koivisto.
+
+        * fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt: Added.
+        * fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html: Added.
+        * tiled-drawing/scrolling/overflow-scroll-reduced-content.html: Convert this test to use 
+        async scrolling. webkit.org/b/228898 tracks an existing problem that caused the test
+        to fail with non-async scrolling.
+
</ins><span class="cx"> 2021-08-09  Ayumi Kojima  <ayumi_kojima@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [ MacOS wk2 ] tiled-drawing/scrolling/scroll-snap/scroll-snap-momentum-in-non-snapping-axis.html is a flaky timeout.
</span></span></pre></div>
<a id="trunkLayoutTestsfastscrollingmacverticalscrollinhorizontalscrollerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt (0 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt                         (rev 0)
+++ trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller-expected.txt    2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+
+Test that a non-momentum scroll over a horizontal scroller with a non-passive wheel event listener scrolls the document.
+Received wheel event
+PASS overflowScrollEventCount is 0
+PASS windowScrollEventCount > 0 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastscrollingmacverticalscrollinhorizontalscrollerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html (0 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html                         (rev 0)
+++ trunk/LayoutTests/fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html    2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -0,0 +1,83 @@
</span><ins>+<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <style>
+        body {
+            height: 2000px;
+        }
+        .scroller {
+            margin: 50px;
+            height: 300px;
+            width: 300px;
+            border: 20px solid gray;
+            padding: 5px;
+            overflow: scroll;
+        }
+        .content {
+            width: 500%;
+            height: 100%;
+            background-image: repeating-linear-gradient(to right, silver, white 250px);
+        }
+    </style>
+    <script src="../../../resources/js-test-pre.js"></script>
+    <script src="../../../resources/ui-helper.js"></script>
+    <script>
+        var jsTestIsAsync = true;
+
+        let overflowScrollEventCount = 0;
+        let windowScrollEventCount = 0;
+
+        async function mouseWheelScrollAt(x, y, deltaX, deltaY)
+        {
+            eventSender.monitorWheelEvents();
+            eventSender.mouseMoveTo(x, y);
+            eventSender.mouseScrollByWithWheelAndMomentumPhases(deltaX, deltaY, "none", "none");
+            return new Promise(resolve => {
+                eventSender.callAfterScrollingCompletes(() => {
+                    requestAnimationFrame(resolve);
+                });
+            });
+        }
+
+        async function testScrollOverContent()
+        {
+            debug('');
+            debug('Test that a non-momentum scroll over a horizontal scroller with a non-passive wheel event listener scrolls the document.');
+            await mouseWheelScrollAt(100, 100, 0, -10);
+
+            shouldBe('overflowScrollEventCount', '0');
+            shouldBe('windowScrollEventCount > 0', 'true');
+        }
+
+        async function scrollTest()
+        {
+            await testScrollOverContent();
+            finishJSTest();
+        }
+
+        window.addEventListener('load', () => {
+            let scroller = document.querySelector('.scroller');
+            scroller.addEventListener('scroll', () => {
+                ++overflowScrollEventCount;
+            }, false);
+
+            scroller.addEventListener('wheel', () => {
+                debug('Received wheel event');
+            }, { passive: false });
+
+            window.addEventListener('scroll', () => {
+                ++windowScrollEventCount;
+            }, false);
+
+            setTimeout(scrollTest, 0);
+        }, false);
+    </script>
+</head>
+<body>
+    <div class="scroller">
+        <div class="content"></div>
+    </div>
+    <div id='console'></div>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingoverflowscrollreducedcontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/overflow-scroll-reduced-content.html (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/overflow-scroll-reduced-content.html   2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/LayoutTests/tiled-drawing/scrolling/overflow-scroll-reduced-content.html      2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-<html>
</del><ins>+<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
</ins><span class="cx"> <head>
</span><span class="cx"> <style>
</span><span class="cx"> .outer {
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/Source/WebCore/ChangeLog      2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2021-08-09  Simon Fraser  <simon.fraser@apple.com>
+
+        Vertical scroll with mouse wheel in horizontal scroller fails to propagate to the document
+        https://bugs.webkit.org/show_bug.cgi?id=228891
+        <rdar://81640239>
+
+        Reviewed by Antti Koivisto.
+
+        If a page has a horizontal scrolling carousel with a non-passive wheel event handler, and a
+        user with a clicky scroll wheel mouse tries to vertically scroll over that carousel, then
+        we'd fail to propagate the scroll to the page. This affects apple.com/store.
+
+        This happened because we don't do latching for legacy mouse wheel events, so we hit the code
+        in EventHandler::handleWheelEventInAppropriateEnclosingBox(); this finds the carousel and
+        calls handleWheelEventInScrollableArea(), but that dispatches to the scrolling thread in way
+        that does not propagate the event to the nearest ancestor that can handle it.
+
+        The fix is to check that the ScrollableArea can handle the event, sharing some code that
+        already exists and was used by findEnclosingScrollableContainer(). This is a conservative
+        fix; it's possible that scrollableAreaCanHandleEvent() could be called down in
+        handleWheelEventInScrollableArea() but that will affect other call sites.
+
+        Test: fast/scrolling/mac/vertical-scroll-in-horizontal-scroller.html
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleWheelEventInAppropriateEnclosingBox):
+        (WebCore::EventHandler::scrollableAreaCanHandleEvent):
+        * page/EventHandler.h:
+        * page/mac/EventHandlerMac.mm:
+        (WebCore::findEnclosingScrollableContainer):
+
</ins><span class="cx"> 2021-08-09  Kate Cheney  <katherine_cheney@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Add console logging to encourage the use of authenticated encryption in WebCrypto
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.cpp (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.cpp       2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/Source/WebCore/page/EventHandler.cpp  2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -3051,14 +3051,14 @@
</span><span class="cx"> 
</span><span class="cx">     RenderBox* currentEnclosingBox = &initialEnclosingBox;
</span><span class="cx">     while (currentEnclosingBox) {
</span><del>-        if (auto* boxLayer = currentEnclosingBox->layer() ? currentEnclosingBox->layer()->scrollableArea() : nullptr) {
</del><ins>+        if (auto* boxScrollableArea = currentEnclosingBox->layer() ? currentEnclosingBox->layer()->scrollableArea() : nullptr) {
</ins><span class="cx">             auto platformEvent = wheelEvent.underlyingPlatformEvent();
</span><span class="cx">             bool scrollingWasHandled;
</span><span class="cx">             if (platformEvent) {
</span><span class="cx">                 auto copiedEvent = platformEvent->copyWithDeltasAndVelocity(filteredPlatformDelta.width(), filteredPlatformDelta.height(), filteredVelocity);
</span><del>-                scrollingWasHandled = handleWheelEventInScrollableArea(copiedEvent, *boxLayer, eventHandling);
</del><ins>+                scrollingWasHandled = scrollableAreaCanHandleEvent(copiedEvent, *boxScrollableArea) && handleWheelEventInScrollableArea(copiedEvent, *boxScrollableArea, eventHandling);
</ins><span class="cx">             } else
</span><del>-                scrollingWasHandled = didScrollInScrollableArea(*boxLayer, wheelEvent);
</del><ins>+                scrollingWasHandled = didScrollInScrollableArea(*boxScrollableArea, wheelEvent);
</ins><span class="cx"> 
</span><span class="cx">             if (scrollingWasHandled)
</span><span class="cx">                 return true;
</span><span class="lines">@@ -3071,6 +3071,23 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool EventHandler::scrollableAreaCanHandleEvent(const PlatformWheelEvent& wheelEvent, ScrollableArea& scrollableArea)
+{
+#if PLATFORM(MAC)
+    auto biasedDelta = ScrollController::wheelDeltaBiasingTowardsVertical(wheelEvent);
+#else
+    auto biasedDelta = wheelEvent.delta();
+#endif
+
+    if (biasedDelta.height() && !scrollableArea.isPinnedForScrollDeltaOnAxis(-biasedDelta.height(), ScrollEventAxis::Vertical))
+        return true;
+
+    if (biasedDelta.width() && !scrollableArea.isPinnedForScrollDeltaOnAxis(-biasedDelta.width(), ScrollEventAxis::Horizontal))
+        return true;
+
+    return false;
+}
+
</ins><span class="cx"> bool EventHandler::handleWheelEventInScrollableArea(const PlatformWheelEvent& wheelEvent, ScrollableArea& scrollableArea, OptionSet<EventHandling> eventHandling)
</span><span class="cx"> {
</span><span class="cx">     auto gestureState = updateWheelGestureState(wheelEvent, eventHandling);
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.h (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.h 2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/Source/WebCore/page/EventHandler.h    2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -355,6 +355,8 @@
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void invalidateClick();
</span><span class="cx"> 
</span><ins>+    static bool scrollableAreaCanHandleEvent(const PlatformWheelEvent&, ScrollableArea&);
+
</ins><span class="cx"> private:
</span><span class="cx"> #if ENABLE(DRAG_SUPPORT)
</span><span class="cx">     static DragState& dragState();
</span></span></pre></div>
<a id="trunkSourceWebCorepagemacEventHandlerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/mac/EventHandlerMac.mm (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/mac/EventHandlerMac.mm 2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/Source/WebCore/page/mac/EventHandlerMac.mm    2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -799,8 +799,6 @@
</span><span class="cx"> // FIXME: This could be written in terms of ScrollableArea::enclosingScrollableArea().
</span><span class="cx"> static ContainerNode* findEnclosingScrollableContainer(ContainerNode* node, const PlatformWheelEvent& wheelEvent)
</span><span class="cx"> {
</span><del>-    auto biasedDelta = ScrollController::wheelDeltaBiasingTowardsVertical(wheelEvent);
-
</del><span class="cx">     // Find the first node with a valid scrollable area starting with the current
</span><span class="cx">     // node and traversing its parents (or shadow hosts).
</span><span class="cx">     for (ContainerNode* candidate = node; candidate; candidate = candidate->parentOrShadowHostNode()) {
</span><span class="lines">@@ -821,11 +819,8 @@
</span><span class="cx">         if (wheelEvent.phase() == PlatformWheelEventPhase::MayBegin || wheelEvent.phase() == PlatformWheelEventPhase::Cancelled)
</span><span class="cx">             return candidate;
</span><span class="cx"> 
</span><del>-        if (biasedDelta.height() && !scrollableArea->isPinnedForScrollDeltaOnAxis(-biasedDelta.height(), ScrollEventAxis::Vertical))
</del><ins>+        if (EventHandler::scrollableAreaCanHandleEvent(wheelEvent, *scrollableArea))
</ins><span class="cx">             return candidate;
</span><del>-
-        if (biasedDelta.width() && !scrollableArea->isPinnedForScrollDeltaOnAxis(-biasedDelta.width(), ScrollEventAxis::Horizontal))
-            return candidate;
</del><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     return nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerScrollableAreacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp (280806 => 280807)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp     2021-08-09 23:32:03 UTC (rev 280806)
+++ trunk/Source/WebCore/rendering/RenderLayerScrollableArea.cpp        2021-08-09 23:41:29 UTC (rev 280807)
</span><span class="lines">@@ -286,7 +286,7 @@
</span><span class="cx">     if (!box)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    LOG_WITH_STREAM(Scrolling, stream << "RenderLayerScrollableArea  [" << scrollingNodeID() << "] scrollTo " << position << " from " << m_scrollPosition << " (is user scroll " << (currentScrollType() == ScrollType::User) << ")");
</del><ins>+    LOG_WITH_STREAM(Scrolling, stream << "RenderLayerScrollableArea [" << scrollingNodeID() << "] scrollTo " << position << " from " << m_scrollPosition << " (is user scroll " << (currentScrollType() == ScrollType::User) << ")");
</ins><span class="cx"> 
</span><span class="cx">     ScrollPosition newPosition = position;
</span><span class="cx">     if (!box->isHTMLMarquee()) {
</span><span class="lines">@@ -1246,6 +1246,9 @@
</span><span class="cx"> 
</span><span class="cx">     updateScrollbarsAfterLayout();
</span><span class="cx"> 
</span><ins>+    LOG_WITH_STREAM(Scrolling, stream << "RenderLayerScrollableArea [" << scrollingNodeID() << "] updateScrollInfoAfterLayout - new scroll width " << m_scrollWidth << " scroll height " << m_scrollHeight
+        << " rubber banding " << isRubberBandInProgress() << " user scrolling " << isUserScrollInProgress() << " scroll position updated from " << originalScrollPosition << " to " << scrollPosition());
+
</ins><span class="cx">     if (originalScrollPosition != scrollPosition())
</span><span class="cx">         scrollToPositionWithoutAnimation(IntPoint(scrollPosition()));
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>