blob: 4cef2a235099cdda5f427e8db76574fb58c7a9f5 [file] [log] [blame]
<!DOCTYPE html>
<title>Tests mouse interactions.</title>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../resources/gesture-util.js"></script>
<script src="../../../../resources/blink-coordinates-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: 200px;
width: 200px;
}
</style>
<!-- Standard scroller -->
<div id="standard" class="appearance standardLocation">
<div class="space"></div>
</div>
<script>
if (window.internals)
internals.settings.setScrollAnimatorEnabled(false);
window.onload = () => {
// http://crrev.com/c/1856359 disables mock theme and makes tests use the
// native theme. Hence, values will differ between platforms for both, main
// and compositor thread scrolling.
const onLinuxPlatform = navigator.userAgent.search(/\bLinux\b/) != -1;
const onMacPlatform = navigator.userAgent.search(/\bMac OS X\b/) != -1;
const standardDivFast = document.getElementById("standard");
const standardRectFast = standardDivFast.getBoundingClientRect();
const TRACK_WIDTH = calculateScrollbarThickness();
const BUTTON_WIDTH = TRACK_WIDTH;
const SCROLL_CORNER = TRACK_WIDTH;
const SCROLLBAR_BUTTON_FWD = {
x: standardRectFast.right - BUTTON_WIDTH / 2,
y: standardRectFast.bottom - SCROLL_CORNER - BUTTON_WIDTH / 2
}
const SCROLLBAR_THUMB = {
x: standardRectFast.right - TRACK_WIDTH / 2,
y: standardRectFast.top + BUTTON_WIDTH + 5
}
promise_test (async () => {
resetScrollOffset(standardDivFast);
// Click on the track part just above the down arrow.
await mouseClickOn(SCROLLBAR_BUTTON_FWD.x, SCROLLBAR_BUTTON_FWD.y - 10);
await waitForAnimationEndTimeBased(() => {return standardDivFast.scrollTop;});
if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
assert_approx_equals(standardDivFast.scrollTop, 74, 1/window.devicePixelRatio,
"Pressing the down trackpart didn't scroll.");
} else {
assert_equals(standardDivFast.scrollTop, 74,
"Pressing the down trackpart didn't scroll.");
}
}, "Test mouse click on non-custom composited div scrollbar empty trackparts.");
promise_test (async () => {
resetScrollOffset(standardDivFast);
// Testing the vertical scrollbar thumb.
await mouseDragAndDrop(SCROLLBAR_THUMB.x, SCROLLBAR_THUMB.y, SCROLLBAR_THUMB.x, SCROLLBAR_THUMB.y + 20);
let expected_offset = 0;
if (onLinuxPlatform)
expected_offset = 92;
else if (onMacPlatform)
expected_offset = 46.5;
else
expected_offset = window.devicePixelRatio == 1 ? 71 : 73;
await waitForAnimationEndTimeBased(() => {return standardDivFast.scrollTop;});
if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
assert_approx_equals(standardDivFast.scrollTop, expected_offset, 1/window.devicePixelRatio,
"Vertical thumb drag downwards did not scroll as expected.");
} else {
assert_equals(standardDivFast.scrollTop, expected_offset,
"Vertical thumb drag downwards did not scroll as expected.");
}
}, "Test mouse drags on non-custom composited div scrollbar thumb.");
promise_test (async () => {
// Since scrollbars on Mac don't have buttons, this test is irrelevant.
if(onMacPlatform)
return;
resetScrollOffset(standardDivFast);
// Click on the Down arrow for standardRectFast.
await mouseClickOn(SCROLLBAR_BUTTON_FWD.x, SCROLLBAR_BUTTON_FWD.y);
await waitForAnimationEndTimeBased(() => {return standardDivFast.scrollTop;});
const EXPECTED_SCROLL = getScrollbarButtonScrollDelta(standardDivFast).y;
if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
assert_approx_equals(standardDivFast.scrollTop, EXPECTED_SCROLL, 1/window.devicePixelRatio,
"Pressing the down arrow didn't scroll.");
} else {
assert_equals(standardDivFast.scrollTop, EXPECTED_SCROLL,
"Pressing the down arrow didn't scroll.");
}
}, "Test mouse click on non-custom composited div scrollbar arrows.");
promise_test (async () => {
resetScrollOffset(standardDivFast);
// Testing forward scroll on vertical scrollbar. Mac uses "Option" key
// instead of "Shift". The Option key is mapped to "Alt" in GPUbenchmarking.
const modifier = onMacPlatform ? "Alt" : "Shift";
await mouseClickOn(SCROLLBAR_BUTTON_FWD.x, standardRectFast.top + 50, /*left_click*/0, modifier);
let expected_offset = 0;
if (onLinuxPlatform)
expected_offset = 87;
else if (onMacPlatform)
expected_offset = 72.5;
else
expected_offset = 82;
if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
assert_approx_equals(standardDivFast.scrollTop, expected_offset, 1/window.devicePixelRatio,
modifier + " + click forward didn't scroll.");
} else {
assert_equals(standardDivFast.scrollTop, expected_offset,
modifier + " + click forward didn't scroll.");
}
await mouseClickOn(SCROLLBAR_BUTTON_FWD.x, standardRectFast.top +
((onMacPlatform ? 0 : BUTTON_WIDTH) + 2), /*left_click*/0, modifier);
assert_equals(standardDivFast.scrollTop, 0, modifier + " + click backward didn't scroll.");
}, "Test non-animated click scroll on non-custom composited scrollbars.");
}
</script>