blob: 1f7f087180df8377130b8284e5c3a50a186e280d [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/dom/events/scrolling/scroll_support.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/common.js"></script>
</head>
<body>
<style>
.iframe {
width: 1000px;
height: 1000px;
}
</style>
<script>
window.onload = async () => {
await waitForCompositorCommit();
// This test sets up a 3x3 grid within scroller:
// -------------------------
// | Box 1 | Box 2 | Box 3 |
// ------------------------
// | Box 4 | Box 5 | Box 6 |
// -------------------------
// | Box 7 | Box 8 | Box 9 |
// -------------------------
// within an iframe.
// This function just gets the numbers beside |box_number| on each row.
// E.g. 4: 4%3 = 1; so the nmubers we want are 5 (4+1) and 6 (4+2).
function getAlignedNumbers(n) {
const mod_3 = n % 3;
if (mod_3 == 1) {
return [n + 1, n + 2];
} else if (mod_3 == 2) {
return [n - 1, n + 1];
}
return [n - 1, n - 2];
}
async function test(box_number) {
return promise_test(async (t) => {
let [other_box_1, other_box_2] = getAlignedNumbers(box_number);
let finish = null;
const finished = new Promise((res) => {
finish = res;
});
var iframe = document.createElement("iframe");
iframe.classList.add("iframe");
iframe.onload = async () => {
let boxes = iframe.contentDocument.getElementsByClassName("box");
const box = (i) => {
return boxes[i - 1];
}
let scroller = iframe.contentDocument.getElementById("scroller");
assert_equals(boxes.length, 9);
await runScrollSnapSelectionVerificationTest(t, scroller,
/*aligned_elements_x=*/[],
/*aligned_elements_y=*/[box(box_number),
box(other_box_1),
box(other_box_2)],
/*axis=*/"y",
/*expected_target_x*/null,
/*expected_target_y*/box(box_number));
// Let scroller no longer be a scroll container.
scroller.style.overflow = "visible";
assert_equals(scroller.scrollTop, 0);
// Let scroller be a scroll container once again.
scroller.style.overflow = "scroll";
// Run the test again.
await runScrollSnapSelectionVerificationTest(t, scroller,
/*aligned_elements_x=*/[],
/*aligned_elements_y=*/[box(box_number),
box(other_box_1),
box(other_box_2)],
/*axis=*/"y",
/*expected_target_x*/null,
/*expected_target_y*/box(box_number));
finish();
};
iframe.src = `prefer-targeted-element-iframe.html#box${box_number}`;
document.body.appendChild(iframe);
await finished;
document.body.removeChild(iframe);
}, `scroller selects targeted area box${box_number} among multiple` +
` aligned areas.`);
}
await test(1);
await test(2);
await test(3);
await test(4);
await test(5);
await test(6);
await test(7);
await test(8);
await test(9);
}
</script>
</body>
</html>