Skip to content

Commit 487c9df

Browse files
committed
overscroll-behavior: none doesn't prevent overscroll when page is too small to scroll
https://bugs.webkit.org/show_bug.cgi?id=244232 rdar://99018981 Reviewed by Simon Fraser. We should not disallow overscroll behavior on a non-scrollable document since it should prevent rubberbanding if overscroll behavior ia none * Source/WebCore/page/FrameView.cpp: (WebCore::FrameView::horizontalOverscrollBehavior const): (WebCore::FrameView::verticalOverscrollBehavior const): * Source/WebCore/rendering/RenderLayerScrollableArea.cpp: (WebCore::RenderLayerScrollableArea::horizontalOverscrollBehavior const): (WebCore::RenderLayerScrollableArea::verticalOverscrollBehavior const): Canonical link: https://commits.webkit.org/259227@main
1 parent d152759 commit 487c9df

File tree

5 files changed

+52
-6
lines changed

5 files changed

+52
-6
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Top
2+
PASS window.pageYOffset is 0
3+
PASS window.pageXOffset is 0
4+
PASS window.pageYOffset is 0
5+
PASS window.pageXOffset is 0
6+
PASS successfullyParsed is true
7+
8+
TEST COMPLETE
9+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ]-->
2+
<html>
3+
<head>
4+
<meta name="viewport" content="width=device-width, initial-scale=1">
5+
<style>
6+
html {
7+
overscroll-behavior: none;
8+
}
9+
</style>
10+
<script src="../../../resources/js-test-pre.js"></script>
11+
<script src="../../../resources/ui-helper.js"></script>
12+
<script>
13+
var jsTestIsAsync = true;
14+
15+
async function doTest()
16+
{
17+
shouldBe('window.pageYOffset', '0');
18+
shouldBe('window.pageXOffset', '0');
19+
20+
await UIHelper.dragFromPointToPoint(150, 150, 200, 200, 0.1);
21+
shouldBe('window.pageYOffset', '0');
22+
shouldBe('window.pageXOffset', '0');
23+
finishJSTest();
24+
}
25+
26+
window.addEventListener('load', () => {
27+
doTest();
28+
}, false);
29+
</script>
30+
</head>
31+
<body>
32+
Top
33+
<div class="content"></div>
34+
<div id="console"></div>
35+
<script src="../../../resources/js-test-post.js"></script>
36+
</body>
37+
</html>

LayoutTests/fast/scrolling/sync-scroll-overscroll-behavior-unscrollable-iframe.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
var y = scroller.clientHeight / 2;
4848
var delta = getDeltas("right");
4949
return mouseWheelScrollAndWait(x, y, delta.X, delta.Y, delta.X, delta.Y).then(() => {
50-
assert_equals(root.scrollLeft > 0, true, 'Propagate horizontal scroll');
50+
assert_equals(root.scrollLeft == 0, true, 'Should not propagate horizontal scroll');
5151
});
5252
}, 'Unscrollable iframe horizontal scroll test with overscroll-behavior: none.');
5353

@@ -57,7 +57,7 @@
5757
var y = scroller.clientHeight / 2;
5858
var delta = getDeltas("down");
5959
return mouseWheelScrollAndWait(x, y, delta.X, delta.Y, delta.X, delta.Y).then(() => {
60-
assert_equals(root.scrollTop > 0, true, 'Propagate vertical scroll');
60+
assert_equals(root.scrollTop == 0, true, 'Should not propagate vertical scroll');
6161
});
6262
}, 'Unscrollable iframe vertical scroll test with overscroll-behavior: none.');
6363
}

Source/WebCore/page/FrameView.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6206,7 +6206,7 @@ OverscrollBehavior FrameView::horizontalOverscrollBehavior() const
62066206
{
62076207
auto* document = m_frame->document();
62086208
auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
6209-
if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
6209+
if (scrollingObject && renderView())
62106210
return scrollingObject->style().overscrollBehaviorX();
62116211
return OverscrollBehavior::Auto;
62126212
}
@@ -6215,7 +6215,7 @@ OverscrollBehavior FrameView::verticalOverscrollBehavior() const
62156215
{
62166216
auto* document = m_frame->document();
62176217
auto scrollingObject = document && document->documentElement() ? document->documentElement()->renderer() : nullptr;
6218-
if (scrollingObject && renderView() && renderView()->canBeScrolledAndHasScrollableArea())
6218+
if (scrollingObject && renderView())
62196219
return scrollingObject->style().overscrollBehaviorY();
62206220
return OverscrollBehavior::Auto;
62216221
}

Source/WebCore/rendering/RenderLayerScrollableArea.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -992,14 +992,14 @@ int RenderLayerScrollableArea::horizontalScrollbarHeight(OverlayScrollbarSizeRel
992992

993993
OverscrollBehavior RenderLayerScrollableArea::horizontalOverscrollBehavior() const
994994
{
995-
if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
995+
if (m_layer.renderBox())
996996
return m_layer.renderer().style().overscrollBehaviorX();
997997
return OverscrollBehavior::Auto;
998998
}
999999

10001000
OverscrollBehavior RenderLayerScrollableArea::verticalOverscrollBehavior() const
10011001
{
1002-
if (m_layer.renderBox() && m_layer.renderBox()->canBeScrolledAndHasScrollableArea())
1002+
if (m_layer.renderBox())
10031003
return m_layer.renderer().style().overscrollBehaviorY();
10041004
return OverscrollBehavior::Auto;
10051005
}

0 commit comments

Comments
 (0)