| <!DOCTYPE html> |
| <link rel=author href="mailto:jarhar@chromium.org"> |
| <link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=1300587"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| |
| <form> |
| <label for=custom>label</label> |
| <my-custom-element id=custom></my-custom-element> |
| </form> |
| |
| <script> |
| class MyCustomElement extends HTMLElement { |
| static formAssociated = true; |
| constructor() { |
| super(); |
| const root = this.attachShadow({ |
| delegatesFocus: true, |
| mode: 'open' |
| }); |
| root.appendChild(document.createElement('input')); |
| } |
| }; |
| customElements.define('my-custom-element', MyCustomElement); |
| |
| window.onload = () => { |
| promise_test(async () => { |
| const label = document.querySelector('label'); |
| const customElement = document.querySelector('my-custom-element'); |
| const input = customElement.shadowRoot.querySelector('input'); |
| await new Promise((resolve) => { |
| input.addEventListener("focus", resolve, {once: true}); |
| test_driver.click(label); |
| }); |
| assert_equals(document.activeElement, customElement); |
| assert_equals(customElement.shadowRoot.activeElement, input); |
| }, `Clicking on a label for a form associated custom element with delegatesFocus should focus the custom element's focus delegate.`); |
| }; |
| </script> |