blob: 00e52a965e4f49af86e9dbf941540cce597fc03d [file] [log] [blame]
<!DOCTYPE html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script src='../../resources/gesture-util.js'></script>
<style>
body, html {
margin: 0;
}
#fixed {
position: fixed;
width: 80%;
height: 80%;
top: 10%;
left: 10%;
padding: 20px;
box-sizing: border-box;
background-color: PaleTurquoise;
overflow-y: scroll;
}
#instructions {
width: 100%;
height: 100px;
text-align: center;
}
#scroller {
position: absolute;
border: 5px solid salmon;
clip: rect(0px, 1000px, 500px, 0px);
width: 90%;
height: 300px;
overflow-y: scroll;
}
.spacer {
height: 400%;
background:repeating-linear-gradient(#FFF 0%, #FFF 10%, #000 10%, #000 20%);
}
</style>
<div id="fixed">
<div id="instructions">
This turquoise box is a position: fixed scroller. The black-and-white
scroller beelow has a clip region so should be non-composited. Attempt to
scroll over the black-and-white scroller with wheel or touch. If the box
scrolls, the test passes. This turquoise scroller must not scroll.
</div>
<div id="scroller">
<div class="spacer"></div>
</div>
<div style="height:1000px"></div>
</div>
<script>
window.onload = async () => {
await waitForCompositorCommit();
const scroller = document.getElementById('scroller');
const fixed = document.getElementById('fixed');
promise_test(async () => {
assert_equals(scroller.scrollTop, 0, "Scroller starts off unscrolled.");
assert_equals(fixed.scrollTop, 0, "Fixed starts off unscrolled.");
const delta = 100;
const location = elementCenter(scroller);
await smoothScroll(delta,
location.x,
location.y,
GestureSourceType.TOUCH_INPUT,
'down',
SPEED_INSTANT);
assert_greater_than(scroller.scrollTop, 0,
"Scroller should be scrolled by events over it.");
assert_equals(fixed.scrollTop, 0, "Fixed must not have scrolled.");
}, 'Scrolling over an uncomposited scrolling inside a fixed-composited ' +
'scroller.');
}
</script>