(all tiles repaint)
https://bugs.webkit.org/show_bug.cgi?id=136433
-and corresponding-
rdar://problem/
18193942
Reviewed by Tim Horton.
Source/WebCore:
We should ensure that we are only setting scroll elasticity for layers that return
true for scrollsOverflow(). When overflow:scroll is set on the root element, we
wound up setting the ScrollElasticity for the root, which messed up with the
special way that the root is meant to scroll. Even though overflow:scroll has been
set on the root, scrollsOverflow() is still false because we knew not to set
hasOverflowClip() since it’s the root, which is why this check works.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::setHasHorizontalScrollbar):
(WebCore::RenderLayer::setHasVerticalScrollbar):
Really, we should have never even called RenderLayer::setHasVerticalScrollbar or
RenderLayer::setHasHorizontalScrollbar since it’s wrong to be creating a scrollbar
on RenderLayer for the root. We should make sure, in addition to the other
requirements consulted, that the renderer has an overflow clip before we create
the scrollbars.
(WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
LayoutTests:
* platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt: Added.
* platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html: Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@173275
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2014-09-04 Beth Dakin <bdakin@apple.com>
+
+ REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles
+ (all tiles repaint)
+ https://bugs.webkit.org/show_bug.cgi?id=136433
+ -and corresponding-
+ rdar://problem/18193942
+
+ Reviewed by Tim Horton.
+
+ * platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt: Added.
+ * platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html: Added.
+
2014-09-04 Eva Balazsfalvi <evab.u-szeged@partner.samsung.com>
Remove CSS_FILTERS flag
--- /dev/null
+<html>
+<head>
+<style>
+html {
+ height: 2000px;
+ overflow: scroll;
+}
+</style>
+
+<script>
+function checkForScroll()
+{
+ var pageScrollPositionAfter = document.body.scrollTop;
+ var finishLog = document.getElementById("finishLog");
+ if (pageScrollPositionAfter > 50)
+ finishLog.innerHTML = "Success!";
+ else
+ finishLog.innerHTML = "Failure. Try running the test manually. If this proves to be flakey, and we might have to skip it.";
+ testRunner.notifyDone();
+}
+
+function scrollTest()
+{
+ eventSender.mouseMoveTo(50, 50);
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
+ checkForScroll();
+}
+
+function onLoad() {
+ window.addEventListener('mousewheel', function() { }, false);
+
+ if (window.eventSender) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ setTimeout(scrollTest, 0);
+ }
+}
+</script>
+</head>
+
+<body onload="onLoad();">
+ <pre id="finishLog">This test passes if you can scroll the page.</pre>
+</body>
+</html>
+2014-09-04 Beth Dakin <bdakin@apple.com>
+
+ REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles
+ (all tiles repaint)
+ https://bugs.webkit.org/show_bug.cgi?id=136433
+ -and corresponding-
+ rdar://problem/18193942
+
+ Reviewed by Tim Horton.
+
+ We should ensure that we are only setting scroll elasticity for layers that return
+ true for scrollsOverflow(). When overflow:scroll is set on the root element, we
+ wound up setting the ScrollElasticity for the root, which messed up with the
+ special way that the root is meant to scroll. Even though overflow:scroll has been
+ set on the root, scrollsOverflow() is still false because we knew not to set
+ hasOverflowClip() since it’s the root, which is why this check works.
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::setHasHorizontalScrollbar):
+ (WebCore::RenderLayer::setHasVerticalScrollbar):
+
+ Really, we should have never even called RenderLayer::setHasVerticalScrollbar or
+ RenderLayer::setHasHorizontalScrollbar since it’s wrong to be creating a scrollbar
+ on RenderLayer for the root. We should make sure, in addition to the other
+ requirements consulted, that the renderer has an overflow clip before we create
+ the scrollbars.
+ (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
+
2014-09-04 Antti Koivisto <antti@apple.com>
Remove ResourceResponse::m_suggestedFilename
if (hasScrollbar) {
m_hBar = createScrollbar(HorizontalScrollbar);
#if ENABLE(RUBBER_BANDING)
- ScrollableArea::setHorizontalScrollElasticity(renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone);
+ ScrollElasticity elasticity = scrollsOverflow() && renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone;
+ ScrollableArea::setHorizontalScrollElasticity(elasticity);
#endif
} else {
destroyScrollbar(HorizontalScrollbar);
if (hasScrollbar) {
m_vBar = createScrollbar(VerticalScrollbar);
#if ENABLE(RUBBER_BANDING)
- ScrollableArea::setVerticalScrollElasticity((renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone));
+ ScrollElasticity elasticity = scrollsOverflow() && renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone;
+ ScrollableArea::setVerticalScrollElasticity(elasticity);
#endif
} else {
destroyScrollbar(VerticalScrollbar);
EOverflow overflowY = box->style().overflowY();
// To avoid doing a relayout in updateScrollbarsAfterLayout, we try to keep any automatic scrollbar that was already present.
- bool needsHorizontalScrollbar = (hasHorizontalScrollbar() && overflowDefinesAutomaticScrollbar(overflowX)) || overflowRequiresScrollbar(overflowX);
- bool needsVerticalScrollbar = (hasVerticalScrollbar() && overflowDefinesAutomaticScrollbar(overflowY)) || overflowRequiresScrollbar(overflowY);
+ bool needsHorizontalScrollbar = box->hasOverflowClip() && ((hasHorizontalScrollbar() && overflowDefinesAutomaticScrollbar(overflowX)) || overflowRequiresScrollbar(overflowX));
+ bool needsVerticalScrollbar = box->hasOverflowClip() && ((hasVerticalScrollbar() && overflowDefinesAutomaticScrollbar(overflowY)) || overflowRequiresScrollbar(overflowY));
setHasHorizontalScrollbar(needsHorizontalScrollbar);
setHasVerticalScrollbar(needsVerticalScrollbar);