112 lines
3.7 KiB
HTML
112 lines
3.7 KiB
HTML
<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
|
|
<html>
|
|
<head>
|
|
<style>
|
|
body {
|
|
height: 2000px;
|
|
}
|
|
select {
|
|
margin-top: 100px;
|
|
font-size: 12pt;
|
|
}
|
|
</style>
|
|
<script src="../../../resources/js-test-pre.js"></script>
|
|
<script src="../../../resources/ui-helper.js"></script>
|
|
<script>
|
|
jsTestIsAsync = true;
|
|
|
|
let selectScrollCount = 0;
|
|
let pageScrollCount = 0;
|
|
|
|
async function scrollTest()
|
|
{
|
|
let select = document.getElementsByTagName('select')[0];
|
|
select.addEventListener('scroll', () => {
|
|
++selectScrollCount;
|
|
});
|
|
|
|
window.addEventListener('scroll', () => {
|
|
++pageScrollCount;
|
|
});
|
|
|
|
debug('Checking wheel event over the select');
|
|
await UIHelper.mouseWheelScrollAt(50, 200);
|
|
|
|
shouldBeTrue('selectScrollCount > 0');
|
|
shouldBeTrue('pageScrollCount == 0');
|
|
|
|
selectScrollCount = 0;
|
|
|
|
debug('Triggering main page latch; scrolling down');
|
|
await UIHelper.mouseWheelScrollAt(400, 200);
|
|
|
|
await UIHelper.animationFrame();
|
|
|
|
debug('Triggering main page latch; scrolling up');
|
|
|
|
eventSender.mouseMoveTo(400, 200);
|
|
eventSender.monitorWheelEvents({ resetLatching: false });
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 2, 'began', 'none');
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 11, 'changed', 'none');
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
|
|
await UIHelper.waitForScrollCompletion();
|
|
|
|
shouldBeTrue('selectScrollCount == 0');
|
|
shouldBeTrue('pageScrollCount > 0');
|
|
|
|
shouldBeTrue('document.scrollingElement.scrollTop == 0');
|
|
|
|
// Stupid hack to reset the select back to the top (webkit.org/b/215898).
|
|
pageScrollCount = 0;
|
|
select.style.display = 'none';
|
|
document.body.offsetWidth;
|
|
select.style.display = 'inline';
|
|
|
|
// Delay for longer than resetLatchedStateTimeout.
|
|
await UIHelper.delayFor(150);
|
|
|
|
debug('Checking wheel event over the select again');
|
|
eventSender.mouseMoveTo(50, 200);
|
|
eventSender.monitorWheelEvents({ resetLatching: false });
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'changed', 'none');
|
|
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
|
|
await UIHelper.waitForScrollCompletion();
|
|
|
|
shouldBeTrue('selectScrollCount > 0');
|
|
shouldBeTrue('pageScrollCount == 0');
|
|
|
|
finishJSTest();
|
|
}
|
|
|
|
window.addEventListener('load', () => {
|
|
description("Tests that scrolling doesn't get wrongly latched to the main page.");
|
|
setTimeout(scrollTest, 0);
|
|
}, false);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<select size="10">
|
|
<option>first first first</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>one one one one</option>
|
|
<option>two two two two</option>
|
|
<option>last last last</option>
|
|
</select>
|
|
<div id="console"></div>
|
|
<script src="../../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|