<!DOCTYPE html>
<title>Tests "thumb snap back" on a non-custom composited div scrollbar.</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;
}
.ltrLocation {
position: absolute;
top: 100px;
left: 100px;
}
.space {
height: 1000px;
width: 1000px;
}
.rtlLocation {
position: absolute;
top: 100px;
left: 300px;
}
.direction_rtl {
direction: rtl;
}
</style>
<!-- Non-custom ltr scroller -->
<div id="standard_ltr" class="appearance ltrLocation">
<div class="space"></div>
</div>
<!-- Non-custom rtl scroller -->
<div id="standard_rtl" class="appearance rtlLocation direction_rtl">
<div class="space"></div>
</div>
<script>
window.onload = () => {
const TRACK_WIDTH = calculateScrollbarThickness();
const BUTTON_WIDTH = TRACK_WIDTH;
const MSG = "Horizontal thumb drag beyond the gutter (around the track)" +
" should cause the thumb to snap back to the drag origin.";
promise_test (async () => {
// Scrollbar thumb snapping is a Windows only feature.
if(!navigator.userAgent.includes("Windows"))
return;
const ltrDiv = document.getElementById("standard_ltr");
const ltrRect = ltrDiv.getBoundingClientRect();
await waitForCompositorCommit();
const DRAG_ORIGIN = 10;
ltrDiv.scrollLeft = DRAG_ORIGIN;
// Testing the horizontal scrollbar thumb.
const x = ltrRect.left + BUTTON_WIDTH + 2;
const y = ltrRect.bottom - TRACK_WIDTH / 2;
await mouseMoveTo(x, y);
await mouseDownAt(x, y);
await mouseMoveTo(x + 10, y);
assert_true(ltrDiv.scrollLeft > 200, "Thumb drag should cause a scroll.");
await mouseMoveTo(x + 10, y + 200);
assert_equals(ltrDiv.scrollLeft, DRAG_ORIGIN, MSG);
await mouseUpAt(x + 10, y + 200);
}, "Tests that the thumb snaps back for ltr direction.");
promise_test (async () => {
// Scrollbar thumb snapping is a Windows only feature.
if(!navigator.userAgent.includes("Windows"))
return;
const rtlDiv = document.getElementById("standard_rtl");
const rtlRect = rtlDiv.getBoundingClientRect();
await waitForCompositorCommit();
const DRAG_ORIGIN = -40;
rtlDiv.scrollLeft = DRAG_ORIGIN;
// Testing the horizontal scrollbar thumb.
const x = rtlRect.right - BUTTON_WIDTH - 5;
const y = rtlRect.bottom - TRACK_WIDTH / 2;
await mouseMoveTo(x, y);
await mouseDownAt(x, y);
await mouseMoveTo(x - 10, y);
assert_true(rtlDiv.scrollLeft < -200, "Thumb drag should cause a scroll.");
await mouseMoveTo(x - 10, y + 200);
assert_equals(rtlDiv.scrollLeft, DRAG_ORIGIN, MSG);
await mouseUpAt(x - 10, y + 200);
}, "Tests that the thumb snaps back for rtl direction.");
}
</script>