| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="./resources/common.js"></script> |
| <title> 'focus-without-user-activation' Policy : Correctly block automatic focus when policy disabled |
| </title> |
| <body> |
| <script> |
| "use strict" |
| // Note: According to html spec: https://html.spec.whatwg.org/#attr-fe-autofocus, |
| // topDocument's autofocus processed flag initially is false and is set to true |
| // after flushing autofocus candidates, i.e. flush of autofocus candidates |
| // only happens once per page load. |
| // In order to test the behaviour with both focus-without-user-activation on and off: |
| // two test files are necessary: |
| // - focus-without-user-activation-disabled-tentative.html |
| // - focus-without-user-activation-enabled-tentative.sub.html |
| |
| // Use same origin url here because when iframe document has cross origin |
| // url, autofocus will be blocked by default with following console error: |
| // "Blocked autofocusing on a form control in a cross-origin subframe." |
| const url = "/feature-policy/experimental-features/resources/focus-without-user-activation-iframe-tentative.html"; |
| |
| function subframe_focused(subframe, event_name, timeout) { |
| return new Promise(resolve => { |
| window.onmessage = m => resolve(m.data.focused); |
| subframe.contentWindow.postMessage({ |
| event: event_name, |
| timeout: timeout |
| }, "*"); |
| }); |
| } |
| |
| promise_test( async (instance) => { |
| const frame = createIframe(document.body, { |
| sandbox: "allow-scripts allow-same-origin", |
| allow: "focus-without-user-activation 'none'", |
| src: url |
| }); |
| |
| await wait_for_load(frame); |
| assert_false(await subframe_focused(frame, "autofocus", 400), "'autofocus' should not work."); |
| window.focus(); // Reset focus state in subframe. |
| assert_false(await subframe_focused(frame, "focus-input", 400), "'element.focus' should not work."); |
| window.focus(); // Reset focus state in subframe. |
| assert_false(await subframe_focused(frame, "focus-window", 400), "'window.focus' should not work."); |
| window.focus(); // Reset focus state in subframe. |
| }, "When the policy is disabled, 'autofocus' and scripted focus do not focus " + |
| "the document."); |
| </script> |
| </body> |