| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <script src="../../resources/accessibility-helper.js"></script> |
| <script src="../../resources/js-test.js"></script> |
| <style> |
| iframe { |
| width: 200px; |
| height: 100px; |
| border: none; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="container"> |
| <iframe id="iframe" title="CVV Input" onload="runTest()" src="../resources/local-frame-text-input.html"></iframe> |
| </div> |
| |
| <script> |
| window.jsTestIsAsync = true; |
| |
| var output = "This test ensures VoiceOver's focused-element query resolves cross-frame to a text input focused inside an in-process (local) iframe. It is a regression test for accessibilityFocusedUIElement returning nothing when focus is inside a local frame.\n\n"; |
| |
| var focus; |
| function runTest() { |
| if (!window.accessibilityController) |
| return; |
| |
| setTimeout(async function() { |
| // Ensure the iframe's accessibility tree is built and the input inside it is exposed. |
| await waitForIframeAccessibilityReady("container", "cvv"); |
| |
| // Move DOM focus to the text input inside the local frame. |
| document.getElementById("iframe").contentDocument.getElementById("cvv").focus(); |
| |
| // VoiceOver queries the focused element starting from the top-level web area. The isolated |
| // tree must descend cross-frame to return the text input inside the iframe. Before the fix, |
| // this returned nothing because focus never crossed the local-frame boundary. |
| await waitFor(() => { |
| focus = accessibilityController.focusedElement; |
| return focus && focus.domIdentifier == "cvv"; |
| }); |
| |
| output += expect("focus.domIdentifier", "'cvv'"); |
| output += expect("focus.role", "'AXRole: AXTextField'"); |
| |
| debug(output); |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| </body> |
| </html> |