blob: d9af7e52d432757a3a2663540dfad37dce30e309 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
}
#topTarget {
position: absolute;
top: 0;
left: 0;
border: 1px black solid;
}
#bottomTarget {
position: absolute;
top: 400px;
left: 0;
border: 1px black solid;
}
.gallery {
width: 400px;
height: 400px;
overflow-y: hidden;
overflow-x: auto;
margin-bottom: 2px;
scroll-snap-type: x mandatory;
opacity: 0.5;
}
.galleryDrawer {
width: 2400px;
height: 400px;
}
.colorBox {
height: 400px;
width: 400px;
float: left;
scroll-snap-align: start;
}
#itemH0, #itemV0 { background-color: red; }
#itemH1, #itemV1 { background-color: green; }
#itemH2, #itemV2 { background-color: blue; }
#itemH3, #itemV3 { background-color: aqua; }
#itemH4, #itemV4 { background-color: yellow; }
#itemH5, #itemV5 { background-color: fuchsia; }
</style>
<script>
function locationInWindowCoordinates(element)
{
var position = {};
position.x = element.offsetLeft;
position.y = element.offsetTop;
while (element.offsetParent) {
position.x = position.x + element.offsetParent.offsetLeft;
position.y = position.y + element.offsetParent.offsetTop;
if (element == document.getElementsByTagName("body")[0])
break;
element = element.offsetParent;
}
return position;
}
let swipeWithMomentum = (element) => swipeInElement(element, true);
let swipeWithoutMomentum = (element) => swipeInElement(element, false);
function swipeInElement(element, momentum)
{
return new Promise(resolve => {
write(`* Swiping ${momentum ? "with" : "without"} momentum in ${element.id} with scroll offset ${element.scrollLeft}`);
let location = locationInWindowCoordinates(element);
internals.setPlatformMomentumScrollingPredictionEnabled(false);
eventSender.monitorWheelEvents();
eventSender.mouseMoveTo(location.x, location.y);
eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "began", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "changed", "none");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");
if (momentum) {
eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "none", "begin");
eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "none", "continue");
eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "none", "end");
}
eventSender.callAfterScrollingCompletes(() => {
write(` topTarget now has scroll offset ${topTarget.scrollLeft}`);
write(` bottomTarget now has scroll offset ${bottomTarget.scrollLeft}`);
write("");
resolve();
});
});
}
function run()
{
if (!window.eventSender)
return;
swipeWithMomentum(topTarget)
.then(() => swipeWithoutMomentum(topTarget))
.then(() => swipeWithMomentum(bottomTarget))
.then(() => swipeWithoutMomentum(bottomTarget))
.then(() => testRunner.notifyDone());
}
</script>
</head>
<body onload=run()>
<div style="position: relative; width: 400px">
<p>Manually test with the following steps:</p>
<p>1. Scroll with momentum to the green box in the first div.</p>
<p>2. In the first div, drag so the blue box is partially visible, then let go so the div snaps back to show green.</p>
<p>3. Scroll with momentum to the green box in the second div.</p>
<p>4. In the second div, drag so the blue box is partially visible, then let go so the div snaps back to show green.</p>
<div class="gallery" id="topTarget">
<div class="galleryDrawer">
<div id="itemH0" class="colorBox"></div>
<div id="itemH1" class="colorBox"></div>
<div id="itemH2" class="colorBox"></div>
<div id="itemH3" class="colorBox"></div>
<div id="itemH4" class="colorBox"></div>
<div id="itemH5" class="colorBox"></div>
</div>
</div>
<div class="gallery" id="bottomTarget">
<div class="galleryDrawer">
<div id="itemV0" class="colorBox"></div>
<div id="itemV1" class="colorBox"></div>
<div id="itemV2" class="colorBox"></div>
<div id="itemV3" class="colorBox"></div>
<div id="itemV4" class="colorBox"></div>
<div id="itemV5" class="colorBox"></div>
</div>
</div>
<div id="output"></div>
<script>
let write = s => output.innerHTML += s + "<br>";
testRunner.dumpAsText();
testRunner.waitUntilDone();
</script>
</div>
</body>
</html>