blob: dc22def7d83391dbc6fad034536731388de5eb4e [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../resources/gesture-util.js"></script>
<style type="text/css">
::-webkit-scrollbar {
width: 0px;
height: 0px;
}
#contents {
width:500px;
height:150px;
border-right:700px solid black;
background:red;
}
#horizontal {
width:600px;
height:600px;
overflow:scroll;
background:green;
}
#vertical {
height:300px;
overflow:scroll;
}
</style>
<body style="margin:0">
<div id="vertical">
<div id="horizontal">
<div id="contents"></div>
</div>
</div>
</body>
<script type="text/javascript">
promise_test (async () => {
var x = 10;
var y = 10;
// Scroll diagonally, since the child div scrolls horizontally the unused
// delta y does not propagate to the parent div.
await smoothScroll(15, x, y, GestureSourceType.TOUCH_INPUT, "downright",
SPEED_INSTANT);
await waitFor( () => {
return approx_equals(horizontal.scrollLeft, 15, 2);
});
assert_equals(vertical.scrollTop, 0);
// Scroll the horizontal div to extents.
await smoothScroll(1000, x, y, GestureSourceType.TOUCH_INPUT, "downright",
SPEED_INSTANT);
await waitFor( () => { return horizontal.scrollLeft == 600; });
// Wait for 100 RAFs to make sure the scroll does not propagate to the
// vertical div.
await conditionHolds(() => { return vertical.scrollTop == 0; });
// Since the horizontal div cannot consume any scroll delta, scrolling
// propagates to its parent div.
await smoothScroll(15, x, y, GestureSourceType.TOUCH_INPUT, "downright",
SPEED_INSTANT);
await waitFor( () => {
return approx_equals(vertical.scrollTop, 15, 2);
});
assert_equals(horizontal.scrollLeft, 600);
}, 'This tests that a gesture scroll isn\'t propagated from an ' +
'inner div to an outer div when the inner div has ' +
'remaining scroll offset on one axis but not on the other, unless ' +
'the inner div starts at its scroll extent');
</script>