blob: 19ec8b4752fd7a07bdd9e2beed570994870eabb0 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>
if (window.internals)
internals.settings.setScrollAnimatorEnabled(false);
</script>
<style>
::-webkit-scrollbar {
width: 0px;
height: 0px;
}
body, html {
width: 100%;
height: 100%;
margin: 0;
}
#rootscroller {
width: 100%;
height: 100%;
overflow: auto;
position: absolute;
left: 0;
top: 0;
z-index: -1;
background-color: red;
}
.spacer {
width: 200%;
height: 200%;
}
#inflow {
width: 200%;
height: 200%;
background-color: lightgreen;
z-index: 1;
}
</style>
<div id="rootscroller">
<div class="spacer">
</div>
</div>
<!--This element overflows the viewport and appears over the root scroller.
Therefore, scrolling it should scroll the document rather than the root
scroller -->
<div id="inflow">
This test ensures that when the document is not the root scroller, i.e.
another element has been set as document.rootScroller, it can still be
scrolled via the keyboard.
</div>
<script>
function click(x, y) {
return new Promise((resolve, reject) => {
var pointerActions =
[{source: "mouse",
actions: [
{ name: "pointerMove", x: x, y: y },
{ name: "pointerDown", x: x, y: y, button: 'left'},
{ name: "pointerUp", x: x, y: y, button: 'left' }]}];
chrome.gpuBenchmarking.pointerActionSequence(pointerActions, resolve);
});
}
window.onload = function() {
var rootscroller = document.querySelector('#rootscroller');
document.rootScroller = rootscroller;
promise_test( t => {
// Ensure the "inflow" element/document is focused to receive keyboard
// events.
return click(100, 100).then( () => {
if (window.internals) {
assert_equals(internals.effectiveRootScroller(document),
rootscroller,
"Failed to set root scroller");
}
eventSender.keyDown('ArrowDown');
assert_greater_than(
document.scrollingElement.scrollTop, 0, "Document must be scrolled");
assert_equals(
rootscroller.scrollTop, 0, "RootScroller must not be scrolled");
})
}, "Arrow keys should scroll document.");
}
</script>