| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>HTML Test: focus - document has system focus</title> |
| <link rel="help" href="https://html.spec.whatwg.org/#has-focus-steps"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <input id="input"> |
| <script> |
| |
| promise_test(async t => { |
| await new Promise(r => window.onload = r); |
| // This test requires the document to have focus as a starting condition. |
| // Whether a newly loaded page receives focus or not, seems to be somewhat |
| // browser-dependent and situation-dependent. For instance, Firefox appears to |
| // focus the page immediately if the page was loaded with the refresh button, |
| // but not if it was loaded from pressing ENTER in the URL bar. To ensure a |
| // reliable starting condition for this test, we give an extra push for focus. |
| if (!document.hasFocus()) { |
| const input = document.getElementById("input"); |
| input.focus(); |
| await new Promise(r => input.onfocus = r); |
| } |
| assert_true(document.hasFocus(), "Document has focus as starting condition."); |
| |
| let gotBlur = false; |
| window.onblur = () => gotBlur = true; |
| const popup = window.open("support/popup.html", "otherwindow", "resizable"); |
| assert_not_equals(popup, null, "Test requires popup be opened"); |
| t.add_cleanup(() => popup.close()); |
| const msg = await new Promise(r => window.onmessage = ({data}) => r(data)); |
| assert_equals(msg, "focus = true", |
| "Test requires popups be focused (may require harness flags)"); |
| assert_true(gotBlur, "Document received blur event when popup opened"); |
| assert_false(document.hasFocus(), "Document lost focus when popup opened"); |
| |
| const p = new Promise(r => window.onfocus = r); |
| popup.close(); |
| await p; |
| assert_true(true, "Document received focus event when popup closed"); |
| assert_true(document.hasFocus(), "Document regained focus when popup closed"); |
| }, "Top-level document receives blur/focus events and loses system focus " + |
| "during opening/closing of a popup"); |
| |
| </script> |