| </body> |
| </html> |
| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../resources/accessibility-helper.js"></script> |
| <script src="../resources/js-test.js"></script> |
| </head> |
| <body> |
| <script> |
| class CustomProgress extends HTMLElement { |
| static observedAttributes = ["tabindex"]; |
| |
| constructor() { |
| super(); |
| this.internals = this.attachInternals(); |
| this.internals.role = "progressbar"; |
| this.internals.ariaValueNow = "10"; |
| this.internals.ariaValueMin = "0"; |
| this.internals.ariaValueMax = "100"; |
| |
| this.attachShadow({ mode: "open" }); |
| const fragment = document.createRange().createContextualFragment("<div></div>"); |
| this.shadowRoot.append(fragment.cloneNode(true)); |
| } |
| |
| attributeChangedCallback(name, oldValue, newValue) { |
| this.internals.ariaValueNow = null; |
| } |
| } |
| customElements.define("custom-progress", CustomProgress); |
| </script> |
| |
| <custom-progress id="progress"></custom-progress> |
| |
| <script> |
| var output = "This test ensures that we properly respect null values set via ElementInternals, e.g. ariaValueNow for role='progressbar' custom elements.\n\n"; |
| |
| if (window.accessibilityController) { |
| window.jsTestIsAsync = true; |
| |
| output += expect("accessibilityController.accessibleElementById('progress').isIndeterminate", "false"); |
| |
| // Set an attribute to trigger the attributeChangedCallback. |
| document.getElementById("progress").setAttribute("tabindex", "0"); |
| setTimeout(async function() { |
| output += await expectAsync("accessibilityController.accessibleElementById('progress').isIndeterminate", "true"); |
| |
| debug(output); |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| </body> |
| </html> |
| |