83 lines
2.8 KiB
HTML
83 lines
2.8 KiB
HTML
<!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>
|