blob: cf2df5ed5d535f707b09af0ad301276f2488f4d4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<p>This tests removing a focused element from a document and calling activeElement on a shadow tree in the same document.<br>
WebKit should clear the focused element even if the removed element was focused during removal and should not crash or hit an assertion.</p>
<script>
if (window.testRunner)
testRunner.dumpAsText();
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
var doc = iframe.contentDocument;
var host = doc.createElement('div');
var shadowRoot = host.attachShadow({mode: 'closed'});
doc.body.appendChild(host);
var input = doc.createElement('input');
doc.body.appendChild(input);
input.focus();
input.addEventListener('DOMNodeRemovedFromDocument', function () {
input.focus();
});
// 1. ContainerNode::removeChild
document.body.appendChild(input);
shadowRoot.activeElement;
// 2. ContainerNode::removeChildren
doc.body.appendChild(input);
input.focus();
doc.body.innerHTML = '';
document.body.appendChild(input);
shadowRoot.activeElement;
// 3. ContainerNode::removeChild for disconnecting frames
var focusableIframe = document.createElement('iframe');
doc.body.appendChild(host);
doc.body.appendChild(focusableIframe);
focusableIframe.focus();
focusableIframe.contentWindow.addEventListener('unload', function () {
focusableIframe.focus();
});
document.body.appendChild(focusableIframe);
shadowRoot.activeElement;
// 4. ContainerNode::removeChildren for disconnecting frames
focusableIframe = document.createElement('iframe');
doc.body.appendChild(host);
doc.body.appendChild(focusableIframe);
focusableIframe.focus();
focusableIframe.contentWindow.addEventListener('unload', function () {
focusableIframe.focus();
});
doc.body.innerHTML = '';
document.body.appendChild(focusableIframe);
shadowRoot.activeElement;
document.write('PASS - did not crash');
</script>
</body>
</html>