blob: 0b787ef08db9bc8ab890072f703c9a5019c07dcc [file] [log] [blame]
<!DOCTYPE html>
<title>Tests mouse interactions on a non-custom composited div scrollbar thumb.</title>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/gesture-util.js"></script>
<script src="../../../resources/scrollbar-util.js"></script>
<style>
.appearance {
width: 100px;
height: 100px;
overflow: scroll;
border: 1px solid black;
}
.standardLocation {
position: absolute;
top: 100px;
left: 100px;
}
.space {
height: 1000px;
width: 1000px;
}
</style>
<!-- Composited non-custom scroller -->
<div id="standard" class="appearance standardLocation">
<div class="space"></div>
</div>
<script>
if (window.internals)
internals.settings.setScrollAnimatorEnabled(false);
let platform = navigator.userAgent.includes("Linux") ? "linux" :
navigator.userAgent.includes("Windows") ? "win" :
navigator.userAgent.includes("Mac OS X") ? "mac" :
(() => { throw "Platform unsupported. See crbug.com/953847"; })();
window.onload = () => {
const standardDivFast = document.getElementById("standard");
const standardRectFast = standardDivFast.getBoundingClientRect();
const TRACK_WIDTH = calculateScrollbarThickness();
const BUTTON_WIDTH = TRACK_WIDTH;
const SCROLL_CORNER = TRACK_WIDTH;
const SCROLL_DELTA = 50;
promise_test (async () => {
await waitForCompositorCommit();
resetScrollOffset(standardDivFast);
// Testing the vertical scrollbar thumb.
let x = standardRectFast.right - TRACK_WIDTH / 2;
let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
await mouseMoveTo(x, y);
await mouseDownAt(x, y);
assert_equals(standardDivFast.scrollTop, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
await mouseMoveTo(x, y-10);
assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
await mouseMoveTo(x, y);
assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
await mouseUpAt(x, y);
}, "Test thumb drags beyond scrollbar track.");
promise_test (async () => {
await waitForCompositorCommit();
resetScrollOffset(standardDivFast);
// Testing the vertical scrollbar thumb.
let x = standardRectFast.right - TRACK_WIDTH / 2;
let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
let asc_increments = [15, 10, 7, 6, 2];
let asc_offsets = {linux: [549, 915, 915, 915, 915], win: [361, 601, 770, 915, 915], mac: [211, 351, 450, 534, 563]}[platform];
let desc_increments = [3, 2, 5, 9, 21];
let desc_offsets = {linux: [915, 915, 915, 768, 0], win: [890, 842, 722, 505, 0], mac: [520, 492, 422, 295, 0]}[platform];
await mouseMoveTo(x, y);
await mouseDownAt(x, y);
// Scroll down
for (var i = 0; i < 5; i++){
y += asc_increments[i];
await mouseMoveTo(x, y);
// TODO(crbug.com/1009892): Sometimes there is 1px difference in threaded scrollbar scrolling mode.
// Change assert_approx_equals(..., 1, ...) to assert_equals(...) when the bug is fixed.
assert_approx_equals(standardDivFast.scrollTop, asc_offsets[i], 1, "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
};
// Scroll up
for (var i = 0; i < 5; i++){
y -= desc_increments[i];
await mouseMoveTo(x, y);
// TODO(crbug.com/1009892): Ditto.
assert_approx_equals(standardDivFast.scrollTop, desc_offsets[i], 1, "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
};
await mouseUpAt(x, y);
assert_equals(standardDivFast.scrollTop, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");
// Since the horizontal scrolling is essentially the same codepath as vertical,
// this need not be tested in the interest of making the test run faster.
}, "Test mouse drags in intervals on non-custom composited div scrollbar thumb.");
}
</script>