blob: 63b1a3dccc284f56ca609643df12e09c320dc9f7 [file] [log] [blame]
<!DOCTYPE HTML>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/run-after-layout-and-paint.js"></script>
<script src="../../resources/gesture-util.js"></script>
<style>
body {
height: 200vh;
width: 200vw;
margin: 0;
}
#subframe {
width: 100px;
height: 100px;
background-color: black;
overflow: scroll;
}
#subframe-content {
width: 200px;
height: 200px;
background-color: black;
}
</style>
<div id="subframe">
<div id="subframe-content"></div>
</div>
<script>
if (window.internals)
internals.settings.setScrollAnimatorEnabled(false);
var receivedMousedownEvent = false;
document.addEventListener('mousedown', function(e) {
e.preventDefault();
receivedMousedownEvent = true;
});
function testFrameScrollbar() {
window.scrollTo(0, 10);
return mouseClickOn(window.innerWidth - 5, 1);
}
function testDivScrollbar() {
receivedMousedownEvent = false;
var subframe = document.getElementById('subframe');
subframe.scrollTop = 10;
return mouseClickOn(100 - 5, 1);
}
promise_test(async () => {
// Wait for the promise that gets resloved in runAfterLayoutAndPaint's callback.
await WaitForlayoutAndPaint();
// Test the frame scrollbar.
await testFrameScrollbar();
waitFor(() => { return receivedMousedownEvent; } );
waitFor(() => { return window.scrollY == 0; } );
// Test the div scrollbar.
await testDivScrollbar();
waitFor(() => { return receivedMousedownEvent; } );
waitFor(() => { return subframe.scrollTop == 0; } );
}, 'This tests that scrollbars always receive events even when there is an ' +
'element underneath the scrollbar which swallows the event. In this case ' +
'an event handler is added to the window which swallows the event but ' +
'this may also happen with elements underneath of overlay scrollbars.');
</script>