<!DOCTYPE HTML>
<html>
<head>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
.container {
padding: 100px;
margin: 100px;
border: 1px solid #000;
height: 900px;
overflow: scroll;
}
.bigbutton {
display:block;
width: 600px;
height: 600px;
}
</style>
</head>
<body>
<div id="container" class="container" role="group">
<button class="bigbutton">One</button>
<button class="bigbutton">Two</button>
<button class="bigbutton">Three</button>
</div>
<script>
function scrollPromise(scroller, scrollPosition) {
return new Promise(resolve => {
scroller.addEventListener('scrollend', resolve, { once: true });
// Ensure page is rendered before adjusting the scroll position.
requestAnimationFrame(() => {
requestAnimationFrame(() => {
scroller.scrollTop = scrollPosition;
});
});
});
}
function scrollNotificationPromise(expectedScroll) {
return new Promise(resolve => {
accessibilityController.addNotificationListener(target => {
if (target.role == 'AXRole: AXGroup' &&
target.scrollY() == expectedScroll) {
accessibilityController.removeNotificationListener();
resolve();
}
});
});
}
promise_test(async (t) => {
const container = document.getElementById('container');
const scrollPosition = 500;
return Promise.all([
scrollNotificationPromise(scrollPosition),
scrollPromise(container, scrollPosition)
]).then(results => {
assert_equals(container.scrollTop, scrollPosition);
});
}, "This test ensures that scrolling the window sends a notification.");
</script>
</body>
</html>