---
title: "Chromium profile for roles"
url: https://recursiveai.org/onehtml/docs/accessibility-chromium-profile/
description: "Where WAI-ARIA 1.2, HTML-AAM and Core-AAM leave a choice, the accessibility tree follows what Chromium exposes. This file lists every such choice made in…"
version: "1.0.0"
source: https://github.com/recursive-ai-oss/onehtml-csharp/blob/cecf589eb9acfc9e1fbc529486dfef519a32c19c/docs/accessibility-chromium-profile.md
---

# Chromium profile for roles

Where WAI-ARIA 1.2, HTML-AAM and Core-AAM leave a choice, the accessibility tree follows what Chromium exposes. This
file lists every such choice made in the role computation (`RecursiveAI.OneHtml.Accessibility.Aria`). It is normative for
the library: a port must make the same choices. The same list is available in code as `ChromiumProfile.Entries`.

Each entry has an id, the choice, the browser behaviour it matches with where that is documented, and its evidence:

- **test suite**: a web-platform-tests page expects the behaviour and the library passes it. The pages test browsers
  through `get_computed_role`, so this is evidence of what Chromium and the other engines agree on;
- **specification**: a normative statement in the specification fixes the choice;
- **observed in Chrome output**: the Chrome differential saw it in `Accessibility.getFullAXTree` output of the pinned Chrome on the fixture pages; the entry names the pages and says what was not seen;
- **unverified until the Chrome differential**: inferred from public documentation or spec notes. The differential that
  compares the computed tree with Chrome's `Accessibility.getFullAXTree` output either confirms or corrects it.

Entries are added when a choice is made, never silently. The entries after `value-minimums` belong to the tree, the
name computation, states and focus.

## `generic-fallback`

- **Topic:** HTML elements HTML-AAM does not list
- **Choice:** Exposed with the generic role (font, center, marquee, unknown elements, autonomous custom elements).
- **Matches:** Chrome exposes unlisted elements as generic containers.
- **Evidence:** **unverified until the Chrome differential**

## `empty-alt-image`

- **Topic:** img with an empty alt
- **Choice:** The role is none unless aria-label has text or aria-labelledby names an element. A title does not name it. Presentational conflict resolution then restores the role img when the image is focusable (any tabindex) or has a global WAI-ARIA attribute with a non-blank value that is not deprecated; an empty aria-label does not count.
- **Matches:** wpt html-aam/roles-contextual.html el-img-empty-alt-title and the aria-label and aria-labelledby cases (including the empty and blank aria-label cases); WAI-ARIA 1.2 section 8.4; ACT 46ca7f.
- **Evidence:** test suite

## `unnamed-landmark-token`

- **Topic:** role=region or role=form without a name
- **Choice:** The token is skipped like an unknown token, so the next token or the native role applies.
- **Matches:** wpt wai-aria/role/region-roles.html, form-roles.html, fallback-roles.html; WAI-ARIA 1.2 section 9.1.
- **Evidence:** test suite

## `named-native-landmarks`

- **Topic:** section, form and sectioned aside
- **Choice:** region and complementary only with an accessible name; otherwise generic. A title attribute counts as a name. (form is always form, see unnamed-form.)
- **Matches:** wpt html-aam/roles-contextual.html el-section-title, el-aside-in-section-title.
- **Evidence:** test suite

## `section-header-footer`

- **Topic:** header and footer outside the body scope
- **Choice:** Role generic with the internal role sectionheader or sectionfooter, exposed (not ignored), exported under those names. A header or footer whose role is explicit keeps that role.
- **Matches:** Chrome 156 output on the svg probe fixture (header and footer in main, section and article are sectionheader and sectionfooter; the body-level ones are banner and contentinfo) and 96 such elements on 240 corpus pages. The HTML-AAM draft names the roles; the wpt pages that expect them stay known failures because the role API reports generic.
- **Evidence:** **observed in Chrome output**

## `landmark-scope`

- **Topic:** What scopes header, footer and aside
- **Choice:** The nearest ancestor among article, aside, nav, section (sectioning), main, body. header and footer are landmarks only with no such ancestor except body; aside is complementary when the nearest is main or body.
- **Matches:** wpt html-aam/roles-contextual.html and aside-in-prefixed-article.html.
- **Evidence:** test suite

## `li-accessibility-parent`

- **Topic:** li
- **Choice:** listitem when the nearest ancestor with a role other than generic or presentational has the list role (ul, ol, menu, dir, role=list); otherwise generic.
- **Matches:** wpt html-aam/roles-generic.tentative.html el-li-within-generic-within-list-parent, el-li-within-explicit-role-list-parent.
- **Evidence:** test suite

## `th-header-kind`

- **Topic:** th in the auto scope state
- **Choice:** columnheader inside thead or in a row with no td; rowheader in a row that has a td. scope=col|colgroup gives columnheader, scope=row|rowgroup gives rowheader.
- **Matches:** wpt html-aam/table-roles.html. The auto rule is a simplification of the HTML header-cell algorithm; Chrome 156 agrees on the table fixture, which sets scope on every th.
- **Evidence:** **unverified until the Chrome differential**

## `computed-role-names`

- **Topic:** Names of computed roles
- **Choice:** presentation is reported as none, img as image, directory as list.
- **Matches:** wpt wai-aria/role/synonym-roles.html; Core-AAM computed role.
- **Evidence:** test suite

## `role-token-matching`

- **Topic:** Role tokens
- **Choice:** Split on the HTML ASCII whitespace; matched ASCII case-insensitively; the first valid, non-abstract token wins; image is accepted for img.
- **Matches:** wpt wai-aria/role/fallback-roles.html, invalid-roles.html, roles.html.
- **Evidence:** test suite

## `presentational-conflict`

- **Topic:** none or presentation on a focusable element or one with a global aria-* attribute
- **Choice:** Ignored: the implicit role applies. Any state or property marked global in WAI-ARIA 1.2 counts, deprecated ones and prohibited ones included. Non-global attributes do not.
- **Matches:** wpt wai-aria/role/role_none_conflict_resolution.html and .tentative.html.
- **Evidence:** test suite

## `inherited-presentational`

- **Topic:** Required owned elements of a presentational element
- **Choice:** They are presentational too, even with global aria-* attributes; a focusable one is not. An owned element with its own non-presentational role keeps it.
- **Matches:** wpt wai-aria/role/role_none_conflict_resolution_spec_ambiguities.tentative.html.
- **Evidence:** test suite

## `children-presentational`

- **Topic:** Descendants of roles with presentational children
- **Choice:** Descendants of a button, tab or image role keep their own roles; they are not made presentational (WAI-ARIA 1.2 section 5.2.9 says they are).
- **Matches:** Chrome 156 output on the corpus: svg, heading and span inside a button keep their roles.
- **Evidence:** **observed in Chrome output**

## `static-focusable`

- **Topic:** Focusable by markup
- **Choice:** Valid tabindex, links with href, enabled form controls except hidden inputs, iframe, the first summary of a details, audio and video with controls, editing hosts, none of it inside an inert subtree. Style is not consulted.
- **Matches:** HTML 6.6.3 focusable area; iframe, media controls and summary behaviour are unverified.
- **Evidence:** **unverified until the Chrome differential**

## `empty-aria-value`

- **Topic:** An empty aria-* value
- **Choice:** Treated as not specified and not reported.
- **Matches:** WAI-ARIA 1.2 section 9.2 for booleans; extended to all types.
- **Evidence:** **unverified until the Chrome differential**

## `heading-default-level`

- **Topic:** role=heading without aria-level
- **Choice:** Level 2 (DefaultHeadingLevel).
- **Matches:** Browsers expose level 2; WAI-ARIA 1.2 leaves it undefined.
- **Evidence:** **unverified until the Chrome differential**

## `option-context`

- **Topic:** option outside select and datalist
- **Choice:** No role.
- **Matches:** HTML-AAM lists option only in a list of options.
- **Evidence:** **unverified until the Chrome differential**

## `summary-role`

- **Topic:** summary
- **Choice:** The first summary child of a details has no role of its own; any other summary is generic.
- **Matches:** wpt html-aam/summary.html.
- **Evidence:** test suite

## `foreign-elements`

- **Topic:** SVG and MathML elements
- **Choice:** The roots are mapped (svg: graphics-document, math: math), and an SVG a element with an href or xlink:href is a link, so it is named from its contents like an HTML link; other foreign elements have no implicit role until SVG-AAM is applied further.
- **Matches:** HTML-AAM defers both to their own mapping documents; SVG-AAM maps a to link when it has a link target; ACT b20e66 and 5effbb use such links.
- **Evidence:** specification

## `switch-input`

- **Topic:** input type=checkbox with the switch attribute
- **Choice:** switch.
- **Matches:** wpt html-aam/roles.tentative.html el-input-checkbox-switch.
- **Evidence:** test suite

## `select-kind`

- **Topic:** select
- **Choice:** listbox when multiple is present or size is above 1; otherwise combobox.
- **Matches:** wpt html-aam/roles.html el-select-listbox; HTML-AAM select entries.
- **Evidence:** test suite

## `input-suggestions`

- **Topic:** input with a list attribute
- **Choice:** combobox when list names a datalist in the same document, for the text, search, tel, url and email types.
- **Matches:** HTML-AAM el-input-textetc-autocomplete.
- **Evidence:** specification

## `required-attribute-native`

- **Topic:** Required states and properties of an explicit role on a native element
- **Choice:** Supplied by the native element: heading level for h1-h6, checked for checkbox and radio inputs, selected for option, valuenow for range and number inputs, meter and progress, expanded and controls for select and text inputs. Required attributes are checked only for explicit roles that differ from the element's native role.
- **Matches:** ARIA in HTML conformance model and HTML-AAM section 3.6.
- **Evidence:** **unverified until the Chrome differential**

## `value-minimums`

- **Topic:** Lower bounds of integer attributes
- **Choice:** aria-level, aria-posinset, aria-colindex, aria-rowindex, aria-colspan at least 1; aria-rowspan at least 0; aria-setsize, aria-colcount, aria-rowcount at least -1.
- **Matches:** WAI-ARIA 1.2 prose of those properties.
- **Evidence:** specification


## Tree, names, states, focus

The entries below belong to the accessibility tree (`docs/accessibility-tree.md`).
## `tree-keeps-ignored`

- **Topic:** Ignored nodes in the tree
- **Choice:** The tree keeps nodes that are ignored (hidden by visibility, aria-hidden or inert, presentational, uninteresting) with their reasons, and the children of an ignored node stay its children. Nodes that are not rendered at all have no tree node. Chrome returns no node at all for a visibility: hidden or aria-hidden element and its subtree, and none for a noscript element; those are the nodes only we list (oursOnlyIgnored in the differential), and they are ignored, so the exposed tree is the same.
- **Matches:** Chrome 156 output on the hidden and script fixture pages. The children of a visibility: hidden element that are visible again appear under its nearest exposed ancestor, which is what lifting the children of an ignored node gives.
- **Evidence:** **observed in Chrome output**

## `ignored-reason-names`

- **Topic:** Spelling of ignored reasons
- **Choice:** notVisible (visibility), ariaHiddenElement and ariaHiddenSubtree, inertElement and inertSubtree, presentationalRole, uninteresting. An ignored node is exported with the role none. Chrome also uses labelFor (a label whose text is the control name) and notRendered, which we do not produce.
- **Matches:** Names follow what the DevTools Protocol returns for ignoredReasons; uninteresting and presentationalRole observed in Chrome 156 on the fixture pages.
- **Evidence:** **observed in Chrome output**

## `generic-pruning`

- **Topic:** Generic elements
- **Choice:** A generic element is exposed (not ignored) whatever it contains or carries, including div, span and an empty container with only element children. The exceptions that are ignored as uninteresting are the html and body elements and the b and i elements (their children belong to the nearest exposed ancestor). An element with no role at all is ignored too, unless it has an internal role (see internal-roles).
- **Matches:** Chrome 156 output on the fixture pages hidden, landmarks, overflow, positioned, whitespace and background: every div and span is generic and exposed, html and body are ignored as uninteresting, b and i have no node. Not observed: an empty div or span, other inline formatting elements (u, s, small and so on) and a template inside a list (ignored there, exposed as generic under body).
- **Evidence:** **observed in Chrome output**

## `static-text-nodes`

- **Topic:** Text nodes
- **Choice:** Each text node is a StaticText node with its text, white space collapsed. A white-space-only text node is kept, as an ignored node, only when its parent is inline. Leading and trailing white space is trimmed at the start and end of a block. There are no InlineTextBox children, and no StaticText for the text of a textarea, an option or an SVG title, desc or metadata element (see text-control-leaves). Generated text (::before, ::after, list markers) is not a node (needs rendering).
- **Matches:** Chrome exposes StaticText with InlineTextBox children; the boxes need layout. Names and text of every matched StaticText equal Chrome 156 on the fixture pages, except mathematical alphanumerics (mi text uses text-transform: math-auto).
- **Evidence:** **observed in Chrome output**

## `not-rendered-absent`

- **Topic:** Elements that are not rendered
- **Choice:** display: none (including the hidden attribute and template through the user-agent sheet), the contents of a closed details other than its first summary, and the contents of content-visibility: hidden have no tree node. An area inside a map is exposed although the rendering rules give it display: none.
- **Matches:** HTML section 15.3.1, HTML section 4.11.1, CSS Containment 2 section 4.2; the area exception follows browsers that expose image-map areas.
- **Evidence:** **unverified until the Chrome differential**

## `name-hidden-referenced`

- **Topic:** Hidden nodes in a name
- **Choice:** A hidden node contributes nothing, except a root of the computation or a node named by aria-labelledby or aria-describedby. Below such a root, a node is left out only when hidden for a reason the root does not have: a hidden root brings its whole subtree in. A node hidden only by visibility still lets its visible descendants through. Native label, caption and legend elements are not directly referenced: hidden ones are skipped.
- **Matches:** wpt accname/name/comp_labelledby_hidden_nodes.html, comp_hidden_not_referenced.html, html-aam/hidden-names.html.
- **Evidence:** test suite

## `labelledby-fallthrough`

- **Topic:** aria-labelledby that names no text
- **Choice:** When every referenced node gives no text, the computation continues with aria-label and the later steps.
- **Matches:** AccName 1.2 step 2B is silent; wpt accname/name/comp_label.html passes with this reading.
- **Evidence:** test suite

## `labelledby-used-once`

- **Topic:** A node named by aria-labelledby inside another computation
- **Choice:** A node used as an aria-labelledby or aria-describedby target in a computation is left out when the same computation meets it again as content.
- **Matches:** wpt accname/name/comp_name_from_content.html (heading with two links).
- **Evidence:** test suite

## `embedded-controls`

- **Topic:** Embedded controls
- **Choice:** A textbox, combobox, listbox, slider, spinbutton, progressbar, meter or scrollbar inside a label, a referenced node or contents being read contributes its value (input value, textarea text, selected options, aria-valuetext or aria-valuenow) and its own aria-label is ignored. The element being named is exempt, so aria-labelledby naming itself still reads its aria-label. A non-native combobox with no selected option is read as contents.
- **Matches:** wpt accname/name/comp_embedded_control.html and manual/name_*_label_embedded_*.
- **Evidence:** test suite

## `name-prohibited-roles`

- **Topic:** Naming of roles that prohibit it
- **Choice:** aria-labelledby, aria-label and title still name elements whose role prohibits naming (generic, paragraph and so on); such roles never take a name from contents.
- **Matches:** wpt html-aam/accname-computation-by-element/phrasing-elements.html and accname/name/comp_label.html.
- **Evidence:** test suite

## `native-name-sources`

- **Topic:** Native name sources
- **Choice:** Form controls: label elements, then (buttons) value, then title, then placeholder, then aria-placeholder; input type=image: labels, alt, title, then Submit; submit and reset buttons fall back to Submit and Reset. img and area: alt (an img with alt="" has no name from title or contents); an img with no alt that fills its figure takes the figcaption after title. fieldset: the first rendered legend; table: the first rendered caption; figure: its figcaption; optgroup, option and track: label; svg elements: the first title child. A select is never named from its options.
- **Matches:** wpt html-aam/accname-computation-by-element/*, accname/name/comp_tooltip.html, comp_host_language_label.html.
- **Evidence:** test suite

## `generated-content-names`

- **Topic:** CSS generated content in names
- **Choice:** ::before and ::after content is part of the name of the contents: strings, attr(), counter() and counters() (CSS Lists 3 scopes, including the counter properties of the pseudo-element itself) and quotes (open-quote and close-quote as the curly double quotes). Alternative text after / replaces the content and is set off by a space on each side; a block-level pseudo-element likewise. ::marker boxes are not generated.
- **Matches:** wpt accname/name/comp_name_from_content.html, comp_name_from_content_alt_counter_multi_instance.html; the ::marker pages are tentative and listed as known failures.
- **Evidence:** test suite

## `text-transform-in-names`

- **Topic:** text-transform in names
- **Choice:** The transform of the parent element (uppercase, lowercase, capitalize) is applied to the text of a text node before it joins a name.
- **Matches:** wpt accname/name/comp_name_from_content.html.
- **Evidence:** test suite

## `name-spacing`

- **Topic:** Joining in name from contents
- **Choice:** A child whose display is not inline (or contents) is set off by a space on each side; br adds a space; inline children run together; a descendant holding only white space keeps it. The result has white space collapsed and trimmed (ASCII white space only).
- **Matches:** wpt accname/name/comp_name_from_content.html, comp_text_node.html.
- **Evidence:** test suite

## `aria-owns-resolution`

- **Topic:** aria-owns
- **Choice:** Owners are visited in document order and the first owner of an element wins. An element never owns itself, the root element or an ancestor of the owner in the tree as built so far. aria-owns on an element that is not rendered, aria-hidden or inert, or naming an element that is not rendered or has visibility: hidden, is ignored. Owned elements follow the DOM children of the owner in the order of the attribute. Work is bounded.
- **Matches:** wpt accname/aria-owns.html; WAI-ARIA 1.2 section 6.6.6.
- **Evidence:** test suite

## `aria-disabled-inherited`

- **Topic:** aria-disabled on ancestors
- **Choice:** An element is disabled when an ancestor has aria-disabled="true", as well as by its own attribute or a disabled fieldset.
- **Matches:** Chrome exposes disabled on descendants of an aria-disabled element.
- **Evidence:** **unverified until the Chrome differential**

## `default-states`

- **Topic:** States exposed without an attribute
- **Choice:** A combobox is expanded=false; checkbox, radio, switch and menuitem checkbox and radio roles are checked=false; option and tab are selected=false. Range roles (slider, scrollbar, meter, progressbar) default to 0 and 100 and a slider with no value sits at the midpoint; an input type=range clamps its value into its range. The first summary of a details is expanded=false when closed.
- **Matches:** HTML section 4.10.5.1.13; observed in Chrome 156 on the forms fixture (combobox, checkbox, radio, option, slider, progress, meter, details).
- **Evidence:** **observed in Chrome output**

## `set-position`

- **Topic:** posinset and setsize
- **Choice:** Items with the role listitem, menuitem (and its checkbox and radio forms), option, radio, tab, treeitem, or article directly in a feed, form a set with the siblings of that kind under the nearest ancestor that is not generic, none, ignored or (for treeitem and menuitem) a group. A native radio button belongs to the set of its name in its form. Ignored items are not counted; an explicit aria-posinset restarts the count and the first aria-setsize found is used for the set. The tree holds the computed values; the Chrome-shaped export leaves them out unless the author gave them (see export-set-position).
- **Matches:** Core-AAM section 5.4 and HTML-AAM.
- **Evidence:** **unverified until the Chrome differential**

## `focus-order`

- **Topic:** Sequential focus order
- **Choice:** Positive tabindex values ascending, then tabindex 0 and natively focusable elements in document order. A negative tabindex is focusable but not in the order. Disabled, inert, not rendered and visibility: hidden elements are not focusable. Radio buttons are not collapsed to one tab stop per group and scrollers are not made focusable.
- **Matches:** HTML section 6.6.3; Chrome differs for radio groups and scrollers.
- **Evidence:** **unverified until the Chrome differential**

## `export-role-names`

- **Topic:** Role names in the Chrome-shaped export
- **Choice:** Core-AAM computed role names are used, except the nodes with an internal role (see internal-roles), StaticText for text and RootWebArea for the document.
- **Matches:** Chrome DevTools Protocol AXNode role values; observed on all fixture pages.
- **Evidence:** **observed in Chrome output**

## `unnamed-form`

- **Topic:** form without an accessible name
- **Choice:** A form element has the form role whether or not it has a name.
- **Matches:** Chrome 156 exposes the unnamed form of the forms fixture as form (HTML-AAM maps form to form; the landmark rule needs a name, the role does not).
- **Evidence:** **observed in Chrome output**

## `internal-roles`

- **Topic:** Roles that are not WAI-ARIA roles
- **Choice:** Elements WAI-ARIA has no role for, and that Chrome exposes, have AxNode.InternalRole and are not ignored: label (LabelText), legend (Legend), br (LineBreak), iframe (Iframe), the first summary of a details (DisclosureTriangle), input type=date (Date) and type=color (ColorWell), which also state their value. The MathML elements math, mi, mo and mn (MathMLMath, MathMLIdentifier, MathMLOperator, MathMLNumber) keep their WAI-ARIA role and are exported under these names; svg is covered by svg-root-role. Other date and time input types, other MathML elements and the SVG graphics elements are not covered.
- **Matches:** Chrome 156 output on the forms, implied and iframe fixture pages (label, iframe, summary, date, colour, svg, math, mi, mo, mn); legend and br are inferred from the same naming.
- **Evidence:** **observed in Chrome output**

## `svg-root-role`

- **Topic:** Role of an svg element
- **Choice:** An svg with an implicit role keeps graphics-document and has the internal role image, exported as image. When something inside it is exposed (rendered text, a link, a foreignObject, an element with a role; graphics elements and nested svg elements do not count) the internal role is SvgRoot instead. An svg with no children, or nested in another svg, and no name is ignored (uninteresting). An svg with an explicit role keeps it.
- **Matches:** Chrome 156 output on the svg probe fixture: title, desc, path, g, use, nested, tabindex and aria-label svgs are image and an empty svg has no node; text, foreignObject, a link, a role=group child make SvgRoot, with or without a name; 1,381 image and 3 SvgRoot svg elements on 240 corpus pages.
- **Evidence:** **observed in Chrome output**

## `input-password-file`

- **Topic:** input type=password and type=file
- **Choice:** A password field is a textbox whose value is one bullet for each character of its value attribute (the characters are not exposed); a file field is a button whose value is the label No file chosen, whatever its multiple attribute.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus; HTML-AAM lists no role for either.
- **Evidence:** **observed in Chrome output**

## `row-name`

- **Topic:** Name of a table row
- **Choice:** A row is not named from its cells; aria-label, aria-labelledby and title still name it. Cells are named from their contents.
- **Matches:** Chrome 156 output on the table fixture (rows have no name, cells do).
- **Evidence:** **observed in Chrome output**

## `text-control-leaves`

- **Topic:** Children of textarea, option and SVG title
- **Choice:** A textarea and an option have no child nodes, and neither do the SVG title, desc and metadata elements; the text is the control value, the option label or not rendered. The name computation still reads it.
- **Matches:** Chrome 156 output on the forms and implied fixtures (no StaticText for the textarea text, the option labels or the SVG title).
- **Evidence:** **observed in Chrome output**

## `option-focusable`

- **Topic:** Options of a select
- **Choice:** An enabled option inside a select is focusable (focusable=true) but not a stop of the sequential focus order.
- **Matches:** Chrome 156 output on the forms fixture.
- **Evidence:** **observed in Chrome output**

## `list-item-level`

- **Topic:** level of a list item
- **Choice:** A listitem has the level property: the number of list ancestors, unless aria-level is given.
- **Matches:** Chrome 156 output on the implied and whitespace fixtures: level=1 for items of a top-level list. Depth greater than 1 is inferred from the property name and unobserved.
- **Evidence:** **observed in Chrome output**

## `select-popup`

- **Topic:** haspopup of a select
- **Choice:** A drop-down select (combobox role) has haspopup=menu.
- **Matches:** Chrome 156 output on the forms fixture.
- **Evidence:** **observed in Chrome output**

## `number-input-bounds`

- **Topic:** Bounds of input type=number
- **Choice:** A number input without min and max has valuemin=0 and valuemax=0; with them, their values. A native slider or spin button states its value as its value text as well.
- **Matches:** Chrome 156 output on the forms fixture (spinbutton 0, 0 and valuetext 3; slider valuetext 4).
- **Evidence:** **observed in Chrome output**

## `export-native-labelledby`

- **Topic:** labelledby in the export for native labels
- **Choice:** In the Chrome-shaped export a node named by a label, caption or legend (not by aria-labelledby) has a labelledby property naming those elements. The tree API reports only aria-labelledby as the LabelledBy relation. SVG title elements are not reported.
- **Matches:** Chrome 156 output on the forms and table fixtures (controls and the captioned table); an svg named by its title has none.
- **Evidence:** **observed in Chrome output**

## `export-set-position`

- **Topic:** posinset and setsize in the export
- **Choice:** The export never states posinset or setsize, whether the author gave aria-posinset and aria-setsize or the tree computed them. The tree keeps both.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus: 214 occurrences on 28 corpus pages where only we stated them, and none stated by Chrome in 12,788 captures.
- **Evidence:** **observed in Chrome output**

## `foreign-object`

- **Topic:** SVG foreignObject
- **Choice:** The foreignObject element is ignored with the reason presentationalRole.
- **Matches:** Chrome 156 output on the implied fixture.
- **Evidence:** **observed in Chrome output**

## `link-url`

- **Topic:** url of links and images
- **Choice:** The url property is the href of a link or area, or the src of an img, resolved against AccessibilityOptions.BaseUrl (and a base element). Without a base URL it is the attribute as written.
- **Matches:** Chrome 156 output on the fixture pages: absolute URLs for links and the image.
- **Evidence:** **observed in Chrome output**

## `layout-facts-scope`

- **Topic:** What rendered facts change
- **Choice:** Facts are optional (AccessibilityOptions.Facts). Without them every choice below is off and the tree is what it is without layout. With them, only the choices in the entries layout-generic-pruning, layout-table, list-marker-node, layout-select-popup, layout-white-space and layout-hidden apply. Facts must describe the same document under the same style context, or the build is refused; an update never keeps them (a new snapshot needs new facts, so the update builds afresh and equals Build with those facts).
- **Matches:** Facts are one capture of one page (DOMSnapshot.captureSnapshot), so a changed document or context makes them stale; reusing them would put Chrome's layout of the old page on the new one.
- **Evidence:** specification

## `layout-generic-pruning`

- **Topic:** Which generic containers Chromium leaves out (with facts)
- **Choice:** A generic container (div, span, li, p without a better role, unknown elements, body, b, i) is ignored with the reason uninteresting unless one of these holds: it is a section, header, footer or aside; it has an id, title, tabindex, role or any aria-* attribute; it is positioned; it scrolls (overflow auto or scroll and more content than room); its display is inline-block, inline-flex or another inline-level non-inline value; or it is a block, flow-root or list-item box whose own children are inline content (laid-out text, inline boxes, floats or out-of-flow boxes) with no in-flow block-level child. A display: inline box (an a with no href is one) and a span whose display is not inline-level, and flex, grid and table containers, are ignored unless an attribute keeps them; a span that is inline-block or inline-flex stays. A ::before or ::after block-level box is a block-level child, an inline one with text is inline content (profile entry generated-content-node); an inline box that has a ::before or ::after box is not left out. A p is ignored the same way when it has no inline content. A plain inline box that is ignored has no node at all (its children belong to the nearest ancestor with a node); a block one stays as an ignored node.
- **Matches:** Chrome 156 output on 634 corpus pages (two samples, one used to find the rule and one held out) and the layout fixture, where the exposed structure equals Chrome's. Over the paired nodes the ignored flag differs for 0.9% of them on each sample, against 12% to 15% without facts. On 240 pages, of 15,681 blocks without id or attributes whose children were all blocks Chrome ignored 15,667, and of 2,947 holding only text or inline boxes it ignored none; of 12,589 static spans without attributes it ignored 12,542. Not explained: blocks whose only children are floats (48 exposed, 22 ignored), a handful of positioned boxes, generics inside video elements, and a share of the paragraphs that Chrome ignores.
- **Evidence:** **observed in Chrome output**

## `layout-table`

- **Topic:** Layout tables (with facts)
- **Choice:** An HTML table is a data table (role table, its rows and cells row and cell) when it has a summary attribute, any aria-* attribute, a caption or a cell with scope; or, when it has more than one cell (td or th), a th, a thead, or a visible border on the table or on its first cell; or, whatever else it has, 20 or more rows (tr). Cells, captions, headers and rows of a table nested inside it belong to the nested table. Any other table is a layout table: its internal role is LayoutTable, its rows LayoutTableRow, its cells (td and th) LayoutTableCell; the Core-AAM role stays table, row and cell. The evidence scan is bounded (20,000 elements). A generic element laid out as display: table, table-row or table-cell has the same internal roles.
- **Matches:** Chrome 156 output on 171 tables of 240 corpus pages (162 judged as Chrome did: 6 layout tables looked like data tables, 3 data tables like layout tables) and the layout and table fixtures. A table with one cell is a layout table even with borders or a th (the table fixture; 12 of 12 one-cell tables with a th and no aria, summary or scope attribute on 6,000 corpus pages), while a caption makes even a one-cell table a data table (3 of 3). Among 1,604 tables with none of this evidence and no nested table, 35 of the 88 that Chrome called data tables had 20 or more rows and no table with that many rows was a layout table (at 16 rows: 9 layout tables); the other 53 data tables are small ones whose cause is not known (a background colour on the first cell is 8 times as common among them). The large layout tables that had header cells were holding nested tables whose header cells they had counted, which is why nested tables are not scanned.
- **Evidence:** **observed in Chrome output**

## `list-marker-node`

- **Topic:** List markers (with facts)
- **Choice:** An element whose layout has a ::marker box with text (a list item with a visible marker, not summary, not hidden or visibility: hidden) gets a ListMarker node as its first child, named by the marker text ("• ", "1. "), with one ignored child (none, presentationalRole). The node has no DOM node of its own: its kind is Generated and the export gives it no backendDOMNodeId.
- **Matches:** Chrome 156 output on 634 corpus pages and the whitespace, layout and implied fixtures: the node is named by the marker text and has one ignored child. An item whose role is not listitem (a list item made presentational) has the marker as plain static text instead. A marker is also absent when the item is hidden.
- **Evidence:** **observed in Chrome output**

## `layout-select-popup`

- **Topic:** Drop-down select popup (with facts)
- **Choice:** A select with the combobox role that has a box has one MenuListPopup child (a Generated node), and its options and option groups are children of that node. Options are focusable as before.
- **Matches:** Chrome 156 output on 27 corpus pages (3,400 options) and the layout fixture. Not reproduced: the extra ignored node Chrome puts between the popup and the options of a select that has an option group (forms fixture, 3 nodes).
- **Evidence:** **observed in Chrome output**

## `layout-white-space`

- **Topic:** Static text of white space (with facts)
- **Choice:** A text node of white space only has a static text when it was drawn (it has a text box) between two elements that are display: inline; any other white space has none. Text with characters is unchanged. Such a static text is not ignored.
- **Matches:** Chrome 156 output on 240 corpus pages: of 2,099 drawn spaces between two display: inline elements Chrome has a static text for 1,485; of 1,377 drawn elsewhere it has one for 33; of 24,339 collapsed spaces (no text box) it has one for 34. The 614 spaces between inline elements that have none are not explained by position, line, parent role or display.
- **Evidence:** **observed in Chrome output**

## `layout-hidden`

- **Topic:** Hiding that depends on layout (with facts)
- **Choice:** An HTML element whose style renders it but whose capture has no box is hidden as not rendered, except display: contents, option, optgroup, area, map, slot, html and body; SVG and MathML elements are never hidden this way. Zero size, clipping and an off-screen position do not hide anything: Chrome keeps such nodes in the tree. Chrome reports no bounding box, off-screen state or scrollable state in Accessibility.getFullAXTree, so the export has none.
- **Matches:** Chrome 156 output on the overflow and positioned fixtures (clipped, rect-clipped and off-screen elements are exposed) and the corpus: of about 220,000 nodes with a box on 240 pages, 2 are notRendered; none of 121,682 nodes of 120 pages has a bounding-box, off-screen or scrollable property.
- **Evidence:** **observed in Chrome output**

## `text-transform-static-text`

- **Topic:** text-transform on static text
- **Choice:** The text of a static-text node is the rendered text: text-transform (uppercase, lowercase, capitalize) applies, as it does in names.
- **Matches:** Chrome 156 output on the corpus: StaticText of an uppercased link is upper case.
- **Evidence:** **observed in Chrome output**

## `generic-title`

- **Topic:** title on a generic element
- **Choice:** A generic element with a title has the title as its description, not as its name: WAI-ARIA 1.2 lists generic as Name From: prohibited. Elements with other roles keep naming from title. The nine WPT html-aam cases that expect a name from title on b, bdi, bdo, i, q, samp, small, u and application are known failures; application is not an HTML element, so it is an unknown element with the generic role.
- **Matches:** Chrome 156 output on the corpus: generic nodes with a title have no name and the title as description. HTML-AAM maps these elements to generic and its tooltip rule would name them; Chromium does not.
- **Evidence:** **observed in Chrome output**

## `description-repeats-name`

- **Topic:** title that repeats the name
- **Choice:** A title is not also the description when the name is made from text alone and equals the title.
- **Matches:** Chrome 156 output on the corpus: no description on links whose text equals their title.
- **Evidence:** **observed in Chrome output**

## `description-list-role`

- **Topic:** dl element
- **Choice:** A dl has the role DescriptionList (an internal role), not list; its items do not count as list levels.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `figcaption-role`

- **Topic:** figcaption element
- **Choice:** A figcaption has the internal role Figcaption, not caption.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `orphan-list-item`

- **Topic:** li outside a list
- **Choice:** An li whose parent is not a list is still a listitem.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `aside-in-sectioning`

- **Topic:** aside nested in sectioning content
- **Choice:** An aside with no name inside article, aside, nav, section or a complementary role is generic, not a complementary landmark.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `presentational-table`

- **Topic:** table with role none or presentation
- **Choice:** Cells inside are generic; rows and row groups are ignored as uninteresting. WAI-ARIA 5.2.7 would make all of them presentational.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `noscript-not-rendered`

- **Topic:** noscript
- **Choice:** noscript is not rendered (display: none), as HTML section 15.3.1 says when scripting is enabled.
- **Matches:** Chrome 156 lists noscript elements in body as ignored with the reason notRendered (corpus page 00c499). Hiding it adds 1,611 Chrome-only nodes and 235 name mismatches to the sample compared with leaving it visible; the cause is not traced.
- **Evidence:** **observed in Chrome output**

## `live-region-properties`

- **Topic:** live region properties
- **Choice:** live, atomic and relevant are exposed only on live regions. An alert, log or status is live by its role; relevant defaults to additions text; atomic defaults to the role's value, else false.
- **Matches:** Chrome 156 output on the corpus: no live, atomic or relevant on other nodes; WAI-ARIA 1.2 defaults.
- **Evidence:** **observed in Chrome output**

## `accesskey-shortcut`

- **Topic:** accesskey
- **Choice:** An element with an accesskey has keyshortcuts Alt+ followed by the attribute exactly as written: an empty value gives Alt+, a list such as a b or a multi-character key is kept whole. aria-keyshortcuts wins when both are given.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus (Linux).
- **Evidence:** **observed in Chrome output**

## `autocomplete-popup`

- **Topic:** hasPopup
- **Choice:** hasPopup is menu for aria-haspopup true and the token for menu, listbox, tree, grid or dialog on any element, a summary or a div included. A missing, false or unknown value (1, bogus) states none. Every combobox that names none has listbox (a drop-down select has menu, see select-popup), and aria-haspopup false does not remove it. A text field with aria-autocomplete adds no popup unless it is a combobox.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `option-selectedness`

- **Topic:** selected state of options
- **Choice:** An option is selected by its selectedness (HTML 4.10.7), including the first enabled option of a single-choice select that has none selected; aria-selected on the option overrides. A disabled native option states no selected. The value of the select is the text of that option, with the select text-transform applied.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `constraint-invalid`

- **Topic:** invalid from form constraints
- **Choice:** invalid is true when a control that is not disabled and has no readonly attribute fails one of: a required checkbox that is unchecked; a required radio group (same name in the same form) with no checked button; a required file field; a required date, time, month, week or datetime-local field with no valid value; a required list box or multiple select with nothing selected; a required drop-down whose chosen option is the empty-valued first option (also when it is marked selected and disabled); a number below min, above max or off the step grid counted from min; a date or month outside min and max; an email or url value that does not parse; a pattern that does not match the whole value of a text, search, tel, url, email or password field. Text fields, number fields and text areas are not reported when required and empty. An explicit aria-invalid=false replaces the report. Kept internal; the public invalid state follows ARIA. Step mismatch with no min is never reported because the step base is then the value itself.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `required-exposure`

- **Topic:** required
- **Choice:** The export states required for roles that take it, and not for searchbox, native select, checkbox, radio, date and button.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `url-roles`

- **Topic:** url property
- **Choice:** Only a link and an image state a URL; an anchor an author gave another role does not.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `url-serialization`

- **Topic:** url serialization
- **Choice:** URLs are resolved and serialized as the URL Standard does: host lower-cased, default port dropped, dot segments removed, percent-escape case kept, and an empty path serialized as /.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `expanded-list-item`

- **Topic:** expanded on a list item
- **Choice:** aria-expanded is exposed on a list item although WAI-ARIA 1.2 does not allow it there.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `relation-targets`

- **Topic:** relation targets in the export
- **Choice:** controls, details, errormessage, flowto and activedescendant list only targets that are exposed; labelledby, describedby and owns list every referenced element. A target that is not rendered is still a node in Chromium when it computes a name.
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `ignored-reasons`

- **Topic:** ignored reasons
- **Choice:** The export gives one reason, the first that applies in the order notRendered, ariaHiddenElement, ariaHiddenSubtree, inertElement, inertSubtree, notVisible, emptyAlt, labelFor, presentationalRole, uninteresting. An img with an empty alt is emptyAlt. An element with aria-hidden=true of its own is ariaHiddenElement even inside another aria-hidden element; its descendants are ariaHiddenSubtree (Chrome 156 output on 400 corpus captures: 104 of 2,901 own-aria-hidden nodes were nested, and every one was the element).
- **Matches:** Chrome 156 output on the corpus.
- **Evidence:** **observed in Chrome output**

## `positioned-blockification`

- **Topic:** display of positioned and floated elements, flex and grid items, and contents elements
- **Choice:** An absolutely or fixed positioned or floated element has its display blockified (CSS Display 3 section 2.7) before names add spaces around inline-level text, and so does a child of a flex or grid container (CSS Display 3 section 2.7 blockifies flex and grid items too). A display: contents element counts as a block for the spaces. Spaces are added on each side of such a child; plain inline children run together.
- **Matches:** Chrome 156 output on the corpus (hidden-text spans in links) and on a generated probe page of 150 links (10 parent displays by 15 child displays) and 20 flex, grid and inline-flex links mixing text and spans: all agree with this rule (testdata/rendered/pages/nameprobe.html); CSS Display 3 section 2.7.
- **Evidence:** **observed in Chrome output**

## `list-item-in-widget`

- **Topic:** li inside a list with another role
- **Choice:** An li with no role of its own whose ul, ol or menu parent has an explicit role other than list, none, presentation or generic (menu, menubar, tablist) is ignored as presentational. An li whose parent is not a list element stays a listitem.
- **Matches:** Chrome 156 output on 500 corpus captures: 273 such li ignored as presentationalRole (parents menu, menubar, tablist), none exposed as listitem; 40,000 li in plain lists are listitems.
- **Evidence:** **observed in Chrome output**

## `label-for`

- **Topic:** text-only label of a checkbox or radio
- **Choice:** A label that holds only text, and the checkbox or radio button it labels when it wraps it, and labels a checkbox or a radio button, whether it wraps the control or names it with for, before or after it, is ignored with the reason labelFor, and its text nodes are ignored as presentational. A label with an element child, or a label of any other control, stays a LabelText.
- **Matches:** Chrome 156 output on 300 corpus captures: all 65 text-only labels of checkboxes and radios are ignored as labelFor, all 66 labels with element children are LabelText, and text labels of text fields, selects and textareas are LabelText.
- **Evidence:** **observed in Chrome output**

## `wbr-not-rendered`

- **Topic:** wbr
- **Choice:** A wbr element is ignored with the reason notRendered.
- **Matches:** Chrome 156 output on the corpus: every wbr in 600 captures (5,021 nodes).
- **Evidence:** **observed in Chrome output**

## `generated-content-node`

- **Topic:** ::before and ::after boxes
- **Choice:** With rendered facts, each ::before and ::after box that was laid out is a node under its element (first, after a list marker; last), holding the static text of its generated text when it has some. A box whose display is inline (or contents) is ignored with the reason uninteresting. Any other display is a generic node. An empty block-level box is a node only inside an inline-level host (a link, an inline-block); an empty inline-block box is always one; an empty block box in a block host has none. A container with no children but generated inline text is kept like one with text (it has inline content), and an inline element with a box of generated content is a node (ignored) rather than left out. Not matched: pseudo boxes whose display is table, flex, grid, table-cell or list-item (Chromium nests them differently).
- **Matches:** Chrome 156 output on two generated probe pages (testdata/rendered/pages/pseudoprobe.html and pseudoprobe2.html: inline, block, inline-block, empty, sized, absolute and floated boxes in links, divs, buttons, headings and list items) and 2,095 corpus captures, where chromeOnly nodes fell from 1.98% to 0.9%.
- **Evidence:** **observed in Chrome output**

## `control-text-node`

- **Topic:** what a form control draws inside itself
- **Choice:** With rendered facts, a text field (an input exposed as textbox, searchbox or spinbutton, and a textarea) has a generic child with the editable state holding a static text of the value (a password shows bullets; text with a line break is left out); a search or number field, and a text field showing a placeholder, add an ignored node with no reason (the placeholder is a leaf before the editor, for a search or number field the editor sits inside it). An input of type submit, button or reset has a static text of its value, or Submit or Reset. Not matched: date and time inputs (several spinbuttons and a picker button), type image, select and range.
- **Matches:** Chrome 156 output on a generated probe page (testdata/rendered/pages/controlprobe.html) and the corpus.
- **Evidence:** **observed in Chrome output**

## `svg-unrendered-elements`

- **Topic:** style and script inside svg
- **Choice:** The text of an SVG style or script element is never part of a name from contents: the elements are not rendered (SVG 2, rendering model).
- **Matches:** Chrome 156 output: 176 links on 26 corpus pages whose svg held a style element; SVG 2 section Rendering order and elements that are never rendered.
- **Evidence:** **observed in Chrome output**

## `name-from-contents-roles`

- **Topic:** roles named from contents
- **Choice:** A dt (role term) is named from its contents although WAI-ARIA 1.2 allows only an author name for term; a dfn is not (WPT html-aam phrasing-elements expects that). A time element is not named from its contents.
- **Matches:** Chrome 156 output: 929 dt on 98 corpus pages have their text as the name, 114 time elements on 13 pages have none; WPT html-aam/accname-computation-by-element/phrasing-elements.html for dfn.
- **Evidence:** **observed in Chrome output**

## `disabled-inheritance`

- **Topic:** disabled on descendants
- **Choice:** A disabled element passes the state to the descendants that can take focus (a link, a control, an element with a tabindex), not to the others: not to a paragraph, a span, a generic, or a role=button without a tabindex. The ancestor is one with aria-disabled=true or a disabled button or select; a disabled fieldset or optgroup passes nothing on and states nothing itself. An explicit aria-disabled=false ends the inheritance. An option of a disabled select or optgroup is disabled whether or not it can take focus (and stays focusable, see option-focusable).
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `selected-states`

- **Topic:** selected on items that say nothing
- **Choice:** An option, tab or treeitem with no aria-selected states selected=false, unless an item in the same list box, tab list, tree or tree grid carries an aria-selected attribute (any value), when it states nothing. An item outside such a container stands alone. A row, a button or a link states selected only when asked; a row with aria-selected=false states nothing.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `option-needs-listbox`

- **Topic:** role=option outside a listbox
- **Choice:** An explicit role option is dropped when the first ancestor that is not generic, group or presentational is not a listbox or combobox (and no aria-owns gives the element to one): a button, link or list item keeps its own role, a div is generic. A list between the option and the listbox (an ul inside it) counts.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus: 478 buttons, 31 links and 6 list items on 7 corpus pages that Chrome exposes as button, link and listitem.
- **Evidence:** **observed in Chrome output**

## `readonly-exposure`

- **Topic:** readonly
- **Choice:** The export states readonly on text boxes and on grids, tree grids and their cells, and nowhere else: not on a spin button, combobox, checkbox, radio, search box, slider or list box, whatever the markup says. A disabled control states none, and an input of a type other than text, tel, url, email or password with the role textbox states none.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `autocomplete-text-fields`

- **Topic:** autocomplete
- **Choice:** autocomplete is stated for input and textarea elements only (from aria-autocomplete), and as list for an input with a list attribute that is a combobox, disabled or not. An author aria-autocomplete on a button or a div is not stated.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `roledescription-roles`

- **Topic:** aria-roledescription
- **Choice:** Not stated on a generic or presentational element; stated on any other role. Chrome hands the text over as UTF-8 bytes read as Latin-1, so a non-ASCII description arrives with each byte as one character (cafe with an acute e becomes the two characters C3 A9); the export does the same.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus: 22 occurrences; "KunngjÃ¸ring".
- **Evidence:** **observed in Chrome output**

## `editable-inherited`

- **Topic:** editable on the content of an editing host
- **Choice:** An element inside contenteditable (true or empty, or plaintext-only) states editable richtext or plaintext, down to a contenteditable=false element and its content. A static text node inherits its parent state. The editing host inside a disabled or read-only text field keeps its generic node but states no editable.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `range-values`

- **Topic:** value, valuemin, valuemax and valuetext of ranges
- **Choice:** An author aria-valuenow, aria-valuemin or aria-valuemax wins over the native attribute of an input. A spin button gives no bounds and no value: 0, 0 and 0; a focusable separator is a slider with 0 to 100; a progress bar whose aria-valuenow is not a number rests at 0. Bounds are stated as single-precision numbers (5.56 is 5.559999942779541). The export never states aria-valuetext: valuetext is the value attribute of an input slider or spin button as written (1.00, $675,000), or the number a native slider rests at, and nothing for a progress bar, meter or div.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `text-values`

- **Topic:** value of text-like controls
- **Choice:** A custom text box, search box or combobox (a div, or a button with the role) states its text, white space collapsed; a text input loses its line breaks; a date input with an invalid value has none; a color input is lower case; a list box states no value. An editing host without block children states its text; one with blocks would need line breaks worked out, which is left out.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `placeholder-leaf`

- **Topic:** placeholder before the inner editor
- **Choice:** A text, tel, url, email or password field with a placeholder and no value has an ignored leaf before the generic that holds the editor; a search or number field has it before the ignored node that holds the editor, a combobox input the same.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus (axprops3).
- **Evidence:** **observed in Chrome output**

## `combobox-expanded`

- **Topic:** expanded on a combobox
- **Choice:** Only a drop-down select states expanded=false; an ARIA combobox states it when its author does.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `invalid-spelling`

- **Topic:** aria-invalid=spelling
- **Choice:** The export states true.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**

## `treeitem-level`

- **Topic:** level of a tree item
- **Choice:** A tree item is at level 1 plus the number of groups it sits in, when aria-level is absent.
- **Matches:** Chrome 156 output on the property probe pages (testdata/rendered/pages/axprops*.html, captures beside them) and the corpus.
- **Evidence:** **observed in Chrome output**
