<!DOCTYPE html>
<title>Scrollbar forward button must not scroll ancestor</title>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/gesture-util.js"></script>
<style>
.subscroller {
width:100px;
height:100px;
overflow:auto;
position:absolute;
top:0px;
left:0px;
}
.subscroller>.child {
height:400px;
}
.talldiv {
height:4000px;
}
</style>
<div class="subscroller">
<div class="child">subscroller</div>
</div>
<div class="talldiv">talldiv</div>
<script>
promise_test(async (test) => {
// This specifically tests the impact of clicking the scrollbar button
// when scroller is at max offset. Since Mac scrollbars don't have any
// buttons, this test is irrelevant.
if(navigator.userAgent.search(/\bMac OS X\b/) != -1)
return;
// Scroll the subscroller to the end, on the y-axis
let subscroller = document.querySelector(".subscroller");
subscroller.scrollTo(0, 400);
assert_equals(subscroller.scrollTop, 300);
// Click down for a period of time, but grow the content inside the
// subscroller to ensure autoscrolling of the pressed part works.
await mouseDownAt(95, 95);
window.requestAnimationFrame(function() {
document.querySelector('.child').style.height = "1000px";
});
let pointerPauseThenUp = new Promise((resolve, reject) => {
chrome.gpuBenchmarking.pointerActionSequence([{
source: 'mouse',
// The autoscroll time begins 250ms after the mouse down so we add a
// bit of buffer.
actions: [{ 'name': 'pause', duration: 300 },
{ 'name': 'pointerUp' }]
}], resolve);
});
await pointerPauseThenUp;
assert_equals(window.scrollY, 0, "Root scroller must not scroll when " +
"subscroller is scrolled with scrollbars");
assert_greater_than(subscroller.scrollTop, 300, "Subscroller must continue " +
"scrolling when mouse is held down and it grows in height");
}, "Clicking a scrollbar that is at its maximum offset must not scroll " +
"its parent in the scroll chain");
</script>