<!DOCTYPE html>
<html>
<head>
<title>CSSOM View - Smooth scrollIntoView + smooth scroll to fragment</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/dom/events/scrolling/scroll_support.js"></script>
</head>
<body>
<style>
iframe {
width: 100vw;
height: 100vh;
}
</style>
<script>
let frame = null;
async function test_smooth_scrollintoview_with_smooth_fragment() {
return new Promise((resolve) => {
window.addEventListener("message", (evt) => {
assert_equals(evt.data, "ready");
// Check that the fragment scroll completed.
const fragment_scroll_container =
frame.contentDocument.getElementById("fragment_scroll_container");
const fragment_scroll_target =
frame.contentDocument.getElementById("fragment_scroll_target");
assert_approx_equals(fragment_scroll_container.scrollTop,
fragment_scroll_target.offsetTop, 1,
"scroll to fragment was completed");
// Check that the scrollIntoView completed.
const scrollintoview_container =
frame.contentDocument.getElementById("scrollintoview_container");
const scrollintoview_target =
frame.contentDocument.getElementById("scrollintoview_target");
assert_approx_equals(scrollintoview_container.scrollTop,
scrollintoview_target.offsetTop, 1,
"scrollIntoView was completed");
resolve();
});
});
}
promise_test(async (t) => {
frame = document.createElement("iframe");
let test_complete_promise =
test_smooth_scrollintoview_with_smooth_fragment();
frame.src =
"smooth-scrollIntoView-with-smooth-fragment-scroll-iframe.html" +
"#fragment_scroll_target";
document.documentElement.appendChild(frame);
await test_complete_promise;
frame.src = "";
frame.remove();
}, "Smooth scroll to hash fragment (on pageload) alongside smooth " +
"scrollIntoView runs to completion.");
promise_test(async (t) => {
frame = document.createElement("iframe");
const iframe_load_promise = new Promise((resolve) => {
frame.addEventListener("load", resolve);
});
const test_complete_promise =
test_smooth_scrollintoview_with_smooth_fragment();
frame.src =
"smooth-scrollIntoView-with-smooth-fragment-scroll-iframe.html";
document.documentElement.appendChild(frame);
await iframe_load_promise;
const link = frame.contentDocument.getElementById("fragment_link");
link.click();
await test_complete_promise;
frame.src = "";
frame.remove();
}, "Smooth scroll to hash fragment (on click) alongside smooth " +
"scrollIntoView runs to completion.");
</script>
</body>