blob: fc9107b0f296007878431d574df8f7d5e881728f [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
body {
overflow: hidden;
margin: 0;
}
#container {
width: 300px;
height: 300px;
display: inline-block;
overflow-x: hidden;
overflow-y: auto;
scroll-snap-type: y mandatory;
}
.child {
height: 300px;
width: 300px;
float: left;
scroll-snap-align: start;
}
</style>
<script>
let write = s => output.innerHTML += s + "<br>";
function run() {
container.scrollTop = 300;
write(`The scroll position is: ${container.scrollTop}`);
if (!window.eventSender || !window.testRunner)
return;
testRunner.dumpAsText();
testRunner.waitUntilDone();
eventSender.monitorWheelEvents();
internals.setPlatformMomentumScrollingPredictionEnabled(false);
eventSender.mouseMoveTo(container.offsetLeft + container.clientWidth / 2, container.offsetTop + container.clientHeight / 2);
write("Scrolling without momentum to the same position several times")
for (let i = 0; i < 10; i++) {
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "began", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 1, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");
}
setTimeout(() => {
eventSender.callAfterScrollingCompletes(() => {
write(`The scroll position is now: ${container.scrollTop}`);
testRunner.notifyDone();
});
}, 0);
}
</script>
</head>
<body onload=run()>
<p>To manually test, scroll so the green box exactly fills the container, and let go.</p>
<p>The scroll position should not jump to the top.</p>
<div id="container">
<div style="background-color: red;" class="child"></div>
<div style="background-color: green;" class="child"></div>
</div>
<div id="output"></div>
</body>
</html>