Say what the browser gives a popover trigger, and pin the part all engines can prove #94
Reference in New Issue
Block a user
Delete Branch "popover-expanded"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The dropdown rule said we omit
aria-expandedbecause "a zero-JS invoker cannot keep it truthful". True, but it is the weaker half and it reads as a limitation we accept. The real reason is that the browser maintains it for us on a declarativepopovertargetinvoker, in all four engines — so writing one by hand would replace a live state with a static lie.Measured on a real page, JavaScript disabled, reading Chromium's own accessibility tree over CDP rather than trusting docs:
No
aria-expandedanywhere in the HTML; the state is correct anyway and tracks Esc.The clause worth having is the one that stops a future mistake: that guarantee belongs to the declarative attribute alone. Open a panel from script and no engine applies it — so "enhancing" one of these triggers is precisely what would cost it its accessibility. That inverts the usual instinct, which is why it belongs written down.
No test for the expanded state itself. Reading it needs CDP, which is Chromium-only, and
visual.spec.tsis the suite that deliberately runs all three engines because popover and anchor positioning are where they disagree — a Chromium-only assertion there would give false comfort. Pinned the cross-engine half instead: focus returns to the trigger after Esc, which is the same browser-provided contract and passes in chromium, firefox and webkit. Say the word if you want the CDP check as a separate chromium-gated test.Full gate green.