blob: f18c5d619640500f3336dfb61c331d646e6d2578 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
<style>
body {
height: 2000px;
}
.scroller {
margin: 10px;
width: 500px;
height: 400px;
overflow: auto;
border: 2px solid black;
}
.horizontal .scroller {
width: 400px;
height: 400px;
margin: 10px;
}
.filler {
height: 200px;
width: 100%;
margin: 10px;
background-color: silver;
}
.horizontal .filler {
height: 80%;
width: 200%;
background-color: silver;
}
</style>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../../../resources/ui-helper.js"></script>
<script>
jsTestIsAsync = true;
var minXOffset = 0;
var maxXOffset = -1000;
async function onScrollCompletion(x, y)
{
eventSender.monitorWheelEvents();
eventSender.mouseMoveTo(x, y);
eventSender.mouseScrollByWithWheelAndMomentumPhases(1, 0, "began", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(10, 0, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(10, 0, "changed", "none");
await UIHelper.animationFrame();
eventSender.mouseScrollByWithWheelAndMomentumPhases(10, 0, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");
return UIHelper.waitForScrollCompletion();
}
async function onSwipeCallback()
{
return new Promise(resolve => {
testRunner.installDidBeginSwipeCallback(resolve);
});
}
async function scrollTest()
{
description('A back swipe, over a scrolled-to-left overflow, should start a navigation gesture.');
if (window.testRunner) {
testRunner.setNavigationGesturesEnabled(true);
}
history.pushState({ name: 'backstate' }, 'back');
window.addEventListener('scroll', () => {
minXOffset = Math.min(minXOffset, window.pageXOffset);
maxXOffset = Math.max(maxXOffset, window.pageXOffset);
}, false);
if (!window.eventSender) {
finishJSTest();
return;
}
const mouseLocationX = 150; // Over the horizontally scrollable overflow.
const mouseLocationY = 300;
debug('Swipe to the left');
await Promise.all([onSwipeCallback(), onScrollCompletion(mouseLocationX, mouseLocationY)]);
// Should not have received any scroll events.
shouldBe('minXOffset', '0');
shouldBe('maxXOffset', '-1000');
finishJSTest();
}
window.addEventListener('load', () => {
scrollTest();
}, false);
</script>
</head>
<body>
<div id="outer" class="scroller">
<div class="filler">Scrolls vertically</div>
<div id="inner" class="horizontal scroller">
<div class="filler">Scrolls horizontally</div>
</div>
<div class="filler"></div>
</div>
<div id="console"></div>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>