<!doctype html>
<head>
<meta charset=utf-8>
<title>Use focusout and click events to test ancestors' activeElements are cleared and updated correctly when nested child loses focus</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
</head>
<body>
<h1 id="my-h1">text</h1>
<iframe
id="first-iframe"
src="about:blank"
srcdoc="
<!DOCTYPE html>
<html>
<body id='iframe-body' contentEditable='true'>
lorem ipsum
<iframe
id='nested-iframe'
srcdoc='
<html>
<body id="iframe-body-2" contentEditable="true">
nested lorem ipsum
</body>
</html>'>
</iframe>
</body>
</html>
">
</iframe>
<script>
async_test(t => {
window.onload = function() {
const iframe = document.querySelector("iframe");
const nestedIframe = iframe.contentDocument.getElementById("nested-iframe");
nestedIframe.contentDocument.getElementById("iframe-body-2").addEventListener('focusout', () => {
t.step(function() {
assert_equals(
nestedIframe.contentDocument.activeElement,
nestedIframe.contentDocument.body,
"nestedIframe should still have focus on its body");
assert_equals(
iframe.contentDocument.activeElement, nestedIframe,
"iframe should still think the nestedIframe is focused");
assert_equals(
document.activeElement, iframe,
"top level document should still think the iframe is focused");
});
});
const h1 = document.getElementById("my-h1");
h1.addEventListener("click", t.step_func_done(function() {
assert_equals(
nestedIframe.contentDocument.activeElement,
nestedIframe.contentDocument.body,
"nestedIframe originally has the focus on its body, and should still have the focus on its body after it loses the focus");
assert_equals(
iframe.contentDocument.activeElement,
iframe.contentDocument.body,
"Since nestedIframe loses the focus, iframe's activeElement should move from the nestedIframe to be its body"
);
assert_equals(
document.activeElement, document.body,
"top level document gains the focus");
}));
// Step 1: Focus the body of the nestedIframe
nestedIframe.contentDocument.body.focus();
// Step 2: Click focus the <h1> in the top level document
test_driver.click(h1);
// Now the focusout event for nestedIframe, and the
// click event for h1 should be triggered.
}
})
</script>
</body>