<!DOCTYPE html><!-- webkit-test-runner [ KeygenElementEnabled=true ] -->
<html>
<div>Tests for a crash due to adopting a DOM node when unfocusing. Test passes if it doesn't crash.</div>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}
</script>
<div id="div1"></div>
<div id="div2">
  <applet>
    <iframe srcdoc="<iframe srcdoc=''>">
    </iframe>
  </applet>
  <header id="header1">
    <keygen id="keygen" autofocus>
  </header>
</div>
<div id="logs"></div>
<script>
function assert_true(assert, text) {
    const div = document.createElement("div");
    if (assert)
        div.textContent = "PASS: " + text;
    else
        div.textContent = "FAIL: " + text;
    logs.append(div);
}

function doit() {
    assert_true(document.activeElement == keygen, "Focused node should be keygen");
    div1.outerHTML = header1.outerHTML;
    assert_true(document.activeElement != keygen, "Focused node should no longer be keygen");
    document.implementation.createDocument("", "", null).adoptNode(div2);
    if (window.internals)
        internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
    if (window.testRunner)
        testRunner.notifyDone();
}
window.onload = function() {
    requestAnimationFrame(doit);
};
</script>
</html>
