<!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>