<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/gesture-util.js"></script>
<script>
let numScrolls;
const pageHeight = 2000;
const pageWidth = 2000;
if (testRunner)
testRunner.waitUntilDone();
const document_test = async_test("Document scrolling commands scroll visual viewport");
const page_test = async_test("Page scrolling commands scroll visual viewport");
const line_test = async_test("Line scrolling commands scroll visual viewport");
function reset()
{
window.scrollTo(0, 0);
internals.setPageScaleFactor(2);
}
// Test Document scroll separately so we ensure it scrolls all the way in one
// shot.
function testDocumentScroll(test) {
test.step( () => {
internals.executeCommand(document, 'ScrollToEndOfDocument', '');
assert_equals(window.scrollY, pageHeight - window.innerHeight);
assert_equals(window.visualViewport.pageTop, pageHeight - window.visualViewport.height);
assert_equals(window.scrollX, 0);
internals.executeCommand(document, 'ScrollToBeginningOfDocument', '');
assert_equals(window.scrollY, 0);
assert_equals(window.visualViewport.pageTop, 0);
assert_equals(window.scrollX, 0);
test.done();
});
}
function testScroll(test, forwardCmd, backwardCmd) {
test.step( () => {
internals.executeCommand(document, forwardCmd, '');
assert_greater_than(window.visualViewport.pageTop,
0,
'Command ' + forwardCmd + ' failed to scroll page at all.');
numScrolls = Math.ceil((pageHeight - window.visualViewport.height) / window.visualViewport.pageTop);
for(let i = 0; i < numScrolls - 1; ++i) {
internals.executeCommand(document, forwardCmd, '');
}
assert_equals(window.visualViewport.pageTop, pageHeight - window.visualViewport.height);
assert_equals(window.visualViewport.pageLeft, 0);
for(let i = 0; i < numScrolls; ++i) {
internals.executeCommand(document, backwardCmd, '');
}
assert_equals(window.visualViewport.pageTop, 0);
assert_equals(window.visualViewport.pageLeft, 0);
test.done();
});
}
async function runTest()
{
if (window.internals) {
await waitForCompositorCommit();
internals.settings.setScrollAnimatorEnabled(false);
reset();
testDocumentScroll(document_test);
reset();
testScroll(page_test, 'ScrollPageForward', 'ScrollPageBackward');
reset();
testScroll(line_test, 'ScrollLineDown', 'ScrollLineUp');
}
}
addEventListener('load', runTest);
</script>
<style>
::-webkit-scrollbar {
width: 0px;
height: 0px;
}
div {
width: 200px;
height: 20px;
background-color: red;
}
html{
padding: 0px;
margin: 0px;
width: 2000px;
height: 2000px;
}
.top {
position: absolute;
top: 0px;
left: 300px;
}
.middle{
position: absolute;
top: 975px;
left: 300px;
}
.bottom {
position: absolute;
top: 1980px;
left: 300px;
}
.left {
position: absolute;
top: 275px;
left: 0px;
}
.right {
position: absolute;
top: 275px;
left: 1800px;
}
</style>
<p id="description" style="width: 800px">
Test that scrolling editor commands while pinch-zoomed scrolls both
viewports. To test manually, pinch zoom into the page and use the arrow keys,
page up/down, home/end to scroll the page. You should be able to reach the
end of the page bounds (i.e. scroll to see the divs at the bounds.
</p>
<div class="top">Top of page</div>
<div class="bottom">Bottom of page</div>
<div class="left">Left of page</div>
<div class="right">Right of page</div>
<div class="middle">Middle of page</div>