blob: e4e87308d088fd740ebd9c1a5d2d75190bb2f5c2 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../../../resources/js-test.js"></script>
<style>
body {
height: 2000px;
width: 2000px;
}
</style>
<script>
window.jsTestIsAsync = true;
description("This test ensures that input driven user scrolls get cancelled\
by non-input driven scrolls.");
// From ScrollAnimatorCompositorCoordinator::RunState.
var IDLE = "Idle";
var RUNNING_ON_COMPOSITOR = "RunningOnCompositor";
var WAITING_TO_CANCEL_ON_COMPOSITOR = "WaitingToCancelOnCompositor";
function isOrWillBeCancelled(node) {
var state = internals.getScrollAnimationState(node);
return state == WAITING_TO_CANCEL_ON_COMPOSITOR || state == IDLE;
}
function runTest() {
if (document.scrollingElement.scrollTop == 0) {
requestAnimationFrame(runTest);
} else {
shouldBe("internals.getScrollAnimationState(document)",
"RUNNING_ON_COMPOSITOR");
// Programmatic scroll should cancel smooth scroll.
document.scrollingElement.scrollBy({top: 1, behavior: "smooth"});
shouldBeTrue("isOrWillBeCancelled(document)");
shouldBecomeEqual("document.scrollingElement.scrollTop < 40 && " +
"document.scrollingElement.scrollLeft == 0", "true", finishJSTest);
}
}
onload = function() {
if (!window.eventSender || !window.internals) {
finishJSTest();
return;
}
// Turn on smooth scrolling.
internals.settings.setScrollAnimatorEnabled(true);
document.scrollingElement.scrollTop = 0;
// Scroll down 1 tick (40px).
eventSender.mouseMoveTo(20, 20);
eventSender.mouseScrollBy(0, -1);
requestAnimationFrame(runTest);
}
</script>