haikuwebkit/LayoutTests/scrollbars/scrolling-by-page-accountin...

84 lines
3.0 KiB
HTML
Raw Permalink Normal View History

Scrolling with spacebar on a page with fixed header breaks reading flow https://bugs.webkit.org/show_bug.cgi?id=135506 Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-08-28 Reviewed by Simon Fraser. Source/WebCore: When scrolling by page, find the height of any bar that is obscuring the top or bottom of the page, and substract that height from the step to scroll. Tests: scrollbars/scrolling-backward-by-page-accounting-bottom-fixed-elements-on-keyboard-spacebar.html scrollbars/scrolling-backward-by-page-on-keyboard-spacebar.html scrollbars/scrolling-by-page-accounting-oversized-fixed-elements-on-keyboard-spacebar.html scrollbars/scrolling-by-page-accounting-top-fixed-elements-on-keyboard-spacebar.html scrollbars/scrolling-by-page-accounting-top-fixed-elements-with-negative-top-on-keyboard-spacebar.html scrollbars/scrolling-by-page-ignoring-hidden-fixed-elements-on-keyboard-spacebar.html scrollbars/scrolling-by-page-ignoring-transparent-fixed-elements-on-keyboard-spacebar.html scrollbars/scrolling-by-page-on-keyboard-spacebar.html * WebCore.exp.in: * page/FrameView.cpp: (WebCore::FrameView::adjustScrollStepForFixedContent): * page/FrameView.h: * platform/ScrollableArea.cpp: (WebCore::ScrollableArea::adjustScrollStepForFixedContent): (WebCore::ScrollableArea::scroll): * platform/ScrollableArea.h: LayoutTests: There was pretty much no test coverage for scrolling by page, add some tests. * fast/events/scrollbar-double-click-expected.txt: * platform/mac-wk1/TestExpectations: * scrollbars/scrolling-backward-by-page-accounting-bottom-fixed-elements-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-backward-by-page-accounting-bottom-fixed-elements-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-backward-by-page-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-backward-by-page-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-accounting-oversized-fixed-elements-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-accounting-oversized-fixed-elements-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-accounting-top-fixed-elements-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-accounting-top-fixed-elements-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-accounting-top-fixed-elements-with-negative-top-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-accounting-top-fixed-elements-with-negative-top-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-ignoring-hidden-fixed-elements-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-ignoring-hidden-fixed-elements-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-ignoring-transparent-fixed-elements-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-ignoring-transparent-fixed-elements-on-keyboard-spacebar.html: Added. * scrollbars/scrolling-by-page-on-keyboard-spacebar-expected.txt: Added. * scrollbars/scrolling-by-page-on-keyboard-spacebar.html: Added. Canonical link: https://commits.webkit.org/154176@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@173074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-08-28 20:01:18 +00:00
<html>
<head>
<style>
body {
height: 10000px;
}
#top-bar {
position: fixed;
width: 100%;
height: 120px;
background-color: green;
top: 0;
left: 0;
}
#bottom-bar {
position: fixed;
width: 100%;
height: 120px;
background-color: green;
bottom: 0;
left: 0;
}
/* This fixed element does not cover the entire width and should be ignored. */
#ignored-left {
position: fixed;
width: 20px;
height: 5000px;
background-color: red;
left: 0;
top: 0;
}
/* This fixed element does not cover an edge and should be ignored. */
#ignored-center {
position: fixed;
width: 100%;
height: 150px;
background-color: red;
left: 0;
top: 50%;
}
</style>
<script src="../resources/js-test-pre.js"></script>
</head>
<body>
<div id="top-bar"></div>
<div id="bottom-bar"></div>
<div id="ignored-left"></div>
<div id="ignored-center"></div>
<script>
description("Test scrolling with page granularity by using the space bar excludes the height of fixed element covering the full page width. In this case, the cumulative size of both bars is larger than the threshold, and only 120px are removed from the 240px fixed height.");
jsTestIsAsync = true;
var failTimeoutId;
function test() {
if (window.eventSender) {
// Force the first layout to avoid the suppressed scrollbar cases.
scratch = document.documentElement.offsetWidth;
// Avoid special cases for being "onload".
setTimeout(function() {
eventSender.keyDown(' ');
} , 0);
failTimeoutId = setTimeout(function() {
testFailed("The scrollview failed to scroll in response to the event.");
debug("window.scrollY = " + window.scrollY + " excepted value around " + (window.innerHeight - 120));
finishJSTest();
}, 1000);
}
}
window.addEventListener("scroll", function() {
if (window.scrollY == window.innerHeight - 120) {
testPassed("Scrolled to " + window.scrollY);
clearTimeout(failTimeoutId);
finishJSTest();
}
})
window.addEventListener("load", test);
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>