chromium/ui/accessibility/ax_enums.mojom

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Must also be kept in sync with extensions/common/api/automation.idl.
module ax.mojom;

// For new entries to the following four enums, also add to
// extensions/common/api/automation.idl. This is enforced
// by a PRESUBMIT check.
//
// Explanation of in-lined comments next to some enum values/attributes:
//
// Web: this attribute is only used in web content.
//
// Native: this attribute is only used in native UI.
//
// Implicit: for events, it would be cleaner if we just updated the AX node and
//     each platform fired the appropriate events to indicate which
//     platform-specific attributes changed.
//
//  if Native / [Platform1, ...] is specified, the attribute is only used
//  on those platforms.
//
// If unspecified, the attribute is used across web and native on multiple
// platforms.

// Keep these values in sync with AXEventType in
// tools/metrics/histograms/enums.xml.
// Next version: 2
// Next value: 60
[Extensible, Stable, Uuid="686e661e-f8c7-4214-8713-1f66d95d3ffa"]
enum Event {
  [Default]kNone = 0,
  kActiveDescendantChanged = 1,
  kAlert = 2,
  // TODO(crbug.com/1464633) Fully remove kAriaAttributeChangedDeprecated
  // starting in 122, because although it was removed in 118, it is still
  // present in earlier versions of LaCros. We can remove the enum as long as
  // the ordinal value 3 is still skipped.
  kAriaAttributeChangedDeprecated = 3,  // Deprecated: Do not use.
  kAutocorrectionOccured = 4,  // Unknown: http://crbug.com/392498
  kBlur = 5,                   // Remove: http://crbug.com/392502
  kCheckedStateChanged = 6,    // Implicit
  kChildrenChanged = 7,
  kClicked = 8,
  kControlsChanged = 9,
  kDocumentSelectionChanged = 10,
  kDocumentTitleChanged = 11,
  kEndOfTest = 12,        // Sentinel value indicating the end of a test
  kExpandedChanged = 13,  // Web
  kFocus = 14,
  kFocusAfterMenuClose = 15,

  // Contextual focus event that must delay the next focus event.
  kFocusContext = 16,
  kHide = 17,          // Remove: http://crbug.com/392502
  kHitTestResult = 18,
  kHover = 19,
  kImageFrameUpdated = 20,     // Web
  kLayoutComplete = 21,        // Web
  kLiveRegionCreated = 22,     // Implicit
  kLiveRegionChanged = 23,     // Web
  kLoadComplete = 24,          // Web
  kLoadStart = 25,             // Web / AuraLinux
  kLocationChanged = 26,       // Web
  kMediaStartedPlaying = 27,   // Native / Automation
  kMediaStoppedPlaying = 28,   // Native / Automation
  kMenuEnd = 29,               // Native / web: menu interaction has ended.
  kMenuListValueChangedDeprecated = 30,  // Web
  kMenuPopupEnd = 31,          // Native / web: a menu/submenu is hidden/closed.
  kMenuPopupStart = 32,        // Native / web: a menu/submenu is shown/opened.
  kMenuStart = 33,             // Native / web: menu interaction has begun.
  kMouseCanceled = 34,
  kMouseDragged = 35,
  kMouseMoved = 36,
  kMousePressed = 37,
  kMouseReleased = 38,
  kRowCollapsed = 39,
  kRowCountChanged = 40,
  kRowExpanded = 41,
  kScrollPositionChanged = 42,    // Web
  kScrolledToAnchor = 43,         // Web
  kSelectedChildrenChanged = 44,  // Web
  kSelection = 45,                // Native
  kSelectionAdd = 46,             // Native
  kSelectionRemove = 47,          // Native
  kShow = 48,                     // Native / Automation
  kStateChanged = 49,             // Native / Automation
  kTextChanged = 50,
  // TODO(nektar): Remove kTextSelectionChanged.
  kTextSelectionChanged = 51,
  kTooltipClosed = 52,
  kTooltipOpened = 53,
  kTreeChanged = 54,  // Don't explicitly fire this event.
  // TODO(nektar): Remove kValueChanged.
  kValueChanged = 55,
  kWindowActivated = 56,             // Native
  kWindowDeactivated = 57,           // Native
  kWindowVisibilityChanged = 58,     // Native
};

// Accessibility object roles.
// The majority of these roles come from the ARIA specification. Reference
// the latest draft for proper usage.
//
// Roles not included by the ARIA specification should be avoided, especially
// internal roles used by the accessibility infrastructure.
//
// Explanation of in-lined comments next to some enum values.
//
// Web: this attribute is only used in web content.
//
// Native: this attribute is only used in native UI.
// Next version: 8
// Next value: 213
[Extensible, Stable, Uuid="d258eb73-e0cc-490c-b881-80ee11d3fec2"]
enum Role {
  [Default]kUnknown = 181, // The role has not been set.
  kAbbr = 1,
  kAlert = 2,
  kAlertDialog = 3,
  kApplication = 4,
  kArticle = 5,
  kAudio = 6,
  kBanner = 7,
  kBlockquote = 8,
  kButton = 9,
  kCanvas = 10,
  kCaption = 11,
  kCaret = 12,
  kCell = 13,
  kCheckBox = 14,
  kClient = 15,
  kCode = 16,
  kColorWell = 17,
  kColumn = 18,
  kColumnHeader = 19,
  // kComboBoxGrouping represents a combobox container that groups
  // subcomponents. It always contains a button and a listbox. It may also
  // contain a listbox as in case of an editable combobox (e.g. Views'
  // EditableCombobox).
  kComboBoxGrouping = 20,
  // kComboBoxMenuButton represents the arrow button part of a combobox, or a
  // <button> with and explicit combobox role set.
  kComboBoxMenuButton = 21,
  // kComboBoxSelect represents an HTML single-value <select> element.
  [MinVersion=4] kComboBoxSelect = 209,
  kComplementary = 22,
  kComment = 23,
  kContentDeletion = 24,
  kContentInsertion = 25,
  kContentInfo = 26,
  kDate = 27,
  kDateTime = 28,
  kDefinition = 29,
  kDescriptionList = 30,
  kDescriptionListDetailDeprecated = 31, // Replaced with kDefinition.
  kDescriptionListTermDeprecated = 32,  // Replaced with kTerm.
  kDesktop = 33,  // internal
  kDetails = 34,
  kDialog = 35,
  kDirectoryDeprecated = 36,
  kDisclosureTriangle = 37,
  [MinVersion=5] kDisclosureTriangleGrouped = 210,
  // --------------------------------------------------------------
  // DPub Roles:
  // https://www.w3.org/TR/dpub-aam-1.0/#mapping_role_table
  kDocAbstract = 38,
  kDocAcknowledgments = 39,
  kDocAfterword = 40,
  kDocAppendix = 41,
  kDocBackLink = 42,
  kDocBiblioEntry = 43,
  kDocBibliography = 44,
  kDocBiblioRef = 45,
  kDocChapter = 46,
  kDocColophon = 47,
  kDocConclusion = 48,
  kDocCover = 49,
  kDocCredit = 50,
  kDocCredits = 51,
  kDocDedication = 52,
  kDocEndnote = 53,
  kDocEndnotes = 54,
  kDocEpigraph = 55,
  kDocEpilogue = 56,
  kDocErrata = 57,
  kDocExample = 58,
  kDocFootnote = 59,
  kDocForeword = 60,
  kDocGlossary = 61,
  kDocGlossRef = 62,
  kDocIndex = 63,
  kDocIntroduction = 64,
  kDocNoteRef = 65,
  kDocNotice = 66,
  kDocPageBreak = 67,
  kDocPageFooter = 68,
  kDocPageHeader = 69,
  kDocPageList = 70,
  kDocPart = 71,
  kDocPreface = 72,
  kDocPrologue = 73,
  kDocPullquote = 74,
  kDocQna = 75,
  kDocSubtitle = 76,
  kDocTip = 77,
  kDocToc = 78,
  // End DPub roles.
  // --------------------------------------------------------------
  kDocument = 79,
  kEmbeddedObject = 80,
  kEmphasis = 81,
  kFeed = 82,
  kFigcaption = 83,
  kFigure = 84,
  kFooter = 85,
  kSectionFooter = 86, // Previously kFooterAsNonLandmark.
  kForm = 87,
  kGenericContainer = 88,
  // --------------------------------------------------------------
  // ARIA Graphics module roles:
  // https://rawgit.com/w3c/graphics-aam/main/#mapping_role_table
  kGraphicsDocument = 89,
  kGraphicsObject = 90,
  kGraphicsSymbol = 91,
  // End ARIA Graphics module roles.
  // --------------------------------------------------------------
  kGrid = 92,
  [MinVersion=7] kGridCell = 212,
  kGroup = 93,
  kHeader = 94,
  kSectionHeader = 95, // Previously kHeaderAsNonLandmark.
  kHeading = 96,
  kIframe = 97,
  kIframePresentational = 98,
  kImage = 99,
  kImeCandidate = 100,
  kInlineTextBox = 101,
  kInputTime = 102,
  kKeyboard = 103,
  kLabelText = 104,
  kLayoutTable = 105,
  kLayoutTableCell = 106,
  kLayoutTableRow = 107,
  kLegend = 108,
  kLineBreak = 109,
  kLink = 110,
  kList = 111,
  kListBox = 112,
  kListBoxOption = 113,
  // kListGrid behaves similar to an ARIA grid but is primarily used by
  // TableView and its subclasses, so that they could be exposed correctly on
  // certain platforms.
  kListGrid = 114,  // Native
  kListItem = 115,
  kListMarker = 116,
  kLog = 117,
  kMain = 118,
  kMark = 119,
  kMarquee = 120,
  kMath = 121,
  // MathML roles
  // https://w3c.github.io/mathml-aam
  [MinVersion=3] kMathMLFraction = 188,
  [MinVersion=3] kMathMLIdentifier = 189,
  [MinVersion=2] kMathMLMath = 187,
  [MinVersion=3] kMathMLMultiscripts = 190,
  [MinVersion=3] kMathMLNoneScript = 191,
  [MinVersion=3] kMathMLNumber = 192,
  [MinVersion=3] kMathMLOperator = 193,
  [MinVersion=3] kMathMLOver = 194,
  [MinVersion=3] kMathMLPrescriptDelimiter = 195,
  [MinVersion=3] kMathMLRoot = 196,
  [MinVersion=3] kMathMLRow = 197,
  [MinVersion=3] kMathMLSquareRoot = 198,
  [MinVersion=3] kMathMLStringLiteral = 199,
  [MinVersion=3] kMathMLSub = 200,
  [MinVersion=3] kMathMLSubSup = 201,
  [MinVersion=3] kMathMLSup = 202,
  [MinVersion=3] kMathMLTable = 203,
  [MinVersion=3] kMathMLTableCell = 204,
  [MinVersion=3] kMathMLTableRow = 205,
  [MinVersion=3] kMathMLText = 206,
  [MinVersion=3] kMathMLUnder = 207,
  [MinVersion=3] kMathMLUnderOver = 208,
  kMenu = 122,
  kMenuBar = 123,
  kMenuItem = 124,
  kMenuItemCheckBox = 125,
  kMenuItemRadio = 126,
  kMenuListOption = 127,
  kMenuListPopup = 128,
  kMeter = 129,
  kNavigation = 130,
  kNone = 0, // Used for role="none"/"presentation"; ignored in platform tree.
  kNote = 131,
  kPane = 132,
  kParagraph = 133,
  kPdfActionableHighlight = 134,
  kPdfRoot = 135,
  kPluginObject = 136,
  // kPopUpButton is used for a button role that has a popup. It is not a
  // combobox which can contain a value and associated list of values.
  kPopUpButton = 137,
  kPortalDeprecated = 138,
  kPreDeprecated = 139,
  kProgressIndicator = 140,
  kRadioButton = 141,
  kRadioGroup = 142,
  kRegion = 143,
  kRootWebArea = 144,
  kRow = 145,
  kRowGroup = 146,
  kRowHeader = 147,
  kRuby = 148,
  kRubyAnnotation = 149,
  kScrollBar = 150,
  kScrollView = 151,
  kSearch = 152,
  kSearchBox = 153,
  kSection = 154,
  [MinVersion=6] kSectionWithoutName = 211,
  kSlider = 155,
  kSpinButton = 156,
  kSplitter = 157,
  kStaticText = 158,
  kStatus = 159,
  kStrong = 160,
  [MinVersion=1] kSubscript = 185,
  kSuggestion = 161,
  [MinVersion=1] kSuperscript = 186,
  kSvgRoot = 162,
  kSwitch = 163,
  kTab = 164,
  kTabList = 165,
  kTabPanel = 166,
  kTable = 167,
  kTableHeaderContainer = 168,
  kTerm = 169,
  kTextField = 170,
  // kTextFieldWithComboBox represents an HTML <input> element with a datalist.
  // <input type=text role=combobox> is one such example.
  kTextFieldWithComboBox = 171,
  kTime = 172,
  kTimer = 173,
  kTitleBar = 174,
  kToggleButton = 175,
  kToolbar = 176,
  kTooltip = 177,
  kTree = 178,
  kTreeGrid = 179,
  kTreeItem = 180,
  kVideo = 182,
  kWebView = 183,
  kWindow = 184,
};

// Next value: 19
[Extensible, Stable, Uuid="35e7123a-f31f-4de7-94a4-3412dcb6bd5a"]
enum State {
  [Default]kNone = 0,
  kAutofillAvailable = 1,
  kCollapsed = 2,
  kDefault = 3,
  kEditable = 4,
  kExpanded = 5,
  kFocusable = 6,
  // Grows horizontally, e.g. most toolbars and separators.
  kHorizontal = 7,
  kHovered = 8,
  // Skip over this node in the accessibility tree, but keep its subtree.
  kIgnored = 9,
  kInvisible = 10,
  kLinked = 11,
  kMultiline = 12,
  kMultiselectable = 13,
  kProtected = 14,
  kRequired = 15,
  kRichlyEditable = 16,
  // Grows vertically, e.g. menu or combo box.
  kVertical = 17,
  kVisited = 18,
};

// An action to be taken on an accessibility node.
// In contrast to |AXDefaultActionVerb|, these describe what happens to the
// object, e.g. "FOCUS".
// Next version: 5
// Next value: 41
[Extensible, Stable, Uuid="ed8e4466-0522-4f98-ac28-59a523b70232"]
enum Action {
  [Default]kNone = 0,

  // Request image annotations for all the eligible images on a page.
  kAnnotatePageImages = 1,

  kBlur = 2,

  // Notifies a node that it no longer has accessibility focus.
  // Currently used only on Android and only internally, it's not
  // exposed to the open web. See kSetAccessibilityFocus, below.
  kClearAccessibilityFocus = 3,

  // Collapse the collapsible node.
  kCollapse = 4,

  kCustomAction = 5,

  // Decrement a slider or range control by one step value.
  kDecrement = 6,

  // Do the default action for an object, typically this means "click".
  kDoDefault = 7,

  // Expand the expandable node.
  kExpand = 8,

  kFocus = 9,

  // Return the content of this image object in the image_data attribute.
  kGetImageData = 10,

  // Gets the bounding rect for a range of text.
  kGetTextLocation = 11,

  kHideTooltip = 12,

  // Given a point, find the object it corresponds to and fire a
  // |AXActionData.hit_test_event_to_fire| event on it in response.
  kHitTest = 13,

  // Increment a slider or range control by one step value.
  kIncrement = 14,

  // For internal use only; signals to tree sources to invalidate an entire
  // tree.
  kInternalInvalidateTree = 15,

  // Load inline text boxes for this subtree, providing information
  // about word boundaries, line layout, and individual character
  // bounding boxes.
  kLoadInlineTextBoxes = 16,

  [MinVersion=2] kLongClick = 38,

  // Delete any selected text in the control's text value and
  // insert |AXActionData::value| in its place, like when typing or pasting.
  kReplaceSelectedText = 17,

  [MinVersion=1] kResumeMedia = 34,

  // Scrolls by approximately one screen in a specific direction. Should be
  // called on a node that has scrollable boolean set to true.
  kScrollBackward = 18,
  kScrollDown = 19,
  kScrollForward = 20,
  kScrollLeft = 21,
  kScrollRight = 22,
  kScrollUp = 23,

  // Scroll any scrollable containers to make the target object visible
  // on the screen.  Optionally pass a subfocus rect in
  // AXActionData.target_rect, in node-local coordinates.
  kScrollToMakeVisible = 24,

  // Scroll the given object to a specified point on the screen in
  // global screen coordinates. Pass a point in AXActionData.target_point.
  kScrollToPoint = 25,
  [MinVersion=3] kScrollToPositionAtRowColumn = 39,

  // Notifies a node that it has accessibility focus.
  // Currently used only on Android and only internally, it's not
  // exposed to the open web. See kClearAccessibilityFocus, above.
  kSetAccessibilityFocus = 26,

  kSetScrollOffset = 27,
  kSetSelection = 28,

  // Don't focus this node, but set it as the sequential focus navigation
  // starting point, so that pressing Tab moves to the next element
  // following this one, for example.
  kSetSequentialFocusNavigationStartingPoint = 29,

  // Replace the value of the control with AXActionData::value and
  // reset the selection, if applicable.
  kSetValue = 30,
  kShowContextMenu = 31,

  // Send an event signaling the end of a test.
  kSignalEndOfTest = 32,
  kShowTooltip = 33,

  // Joins the current tree with another tree by adding the latter as a child
  // tree at a particular node.
  //
  // The closest example in HTML is an iframe, but this action extends the same
  // functionality to all accessibility nodes.
  [MinVersion=4] kStitchChildTree = 40,

  [MinVersion=1] kStartDuckingMedia = 35,
  [MinVersion=1] kStopDuckingMedia = 36,
  [MinVersion=1] kSuspendMedia = 37,
};

enum ActionFlags {
  kNone,
  kRequestImages,
  kRequestInlineTextBoxes,
};

// A list of valid values for the horizontal and vertical scroll alignment
// arguments in |AXActionData|. These values control where a node is scrolled
// in the viewport.
// Next version: 1
// Next value: 6
[Extensible, Stable, Uuid="a9d4f137-4f2e-4533-a4ac-cabdc433ecee"]
enum ScrollAlignment {
  [Default]kNone = 0,
  kScrollAlignmentCenter = 1,
  kScrollAlignmentTop = 2,
  kScrollAlignmentBottom = 3,
  kScrollAlignmentLeft = 4,
  kScrollAlignmentRight = 5,
  kScrollAlignmentClosestEdge = 6
};

// A list of valid values for the scroll behavior argument to argument in
// |AXActionData|. These values control whether a node is scrolled in the
// viewport if it is already visible.
// Next version: 1
[Extensible, Stable, Uuid="8bf2a1cb-2edb-4e41-8d7e-a6c8baa95c85"]
enum ScrollBehavior {
  [Default]kNone = 0,
  kDoNotScrollIfVisible = 1,
  kScrollIfVisible = 2,
};

// A list of valid values for the |AXIntAttribute| |default_action_verb|.
// These will describe the action that will be performed on a given node when
// executing the default action, which is a click.
// In contrast to |AXAction|, these describe what the user can do on the
// object, e.g. "PRESS", not what happens to the object as a result.
// Only one verb can be used at a time to describe the default action.
enum DefaultActionVerb {
  kNone,
  kActivate,
  kCheck,
  kClick,

  // A click will be performed on one of the node's ancestors.
  // This happens when the node itself is not clickable, but one of its
  // ancestors has click handlers attached which are able to capture the click
  // as it bubbles up.
  kClickAncestor,

  kJump,
  kOpen,
  kPress,
  kSelect,
  kUncheck,
};

// A change to the accessibility tree.
enum Mutation {
  kNone,
  kNodeCreated,
  kSubtreeCreated,
  kNodeChanged,
  kNodeRemoved,
  kTextChanged,
  kSubtreeUpdateEnd,
};

// Next version: 7
// Next value: 41
[Extensible, Stable, Uuid="e5a4cd0c-3152-4427-93d5-35ff7d0f1ae8"]
enum StringAttribute {
  [Default]kNone = 0,
  kAccessKey = 1,
  kAppId = 2,
  // Deprecated - Do not use.
  // AriaInvalidValue is deprecated. Spelling and Grammar errors are stored
  // using markers and invalid state in general is stored using invalidState.
  kAriaInvalidValueDeprecated = 3,
  kAutoComplete = 4,
  [MinVersion=2] kAriaBrailleLabel = 33,
  [MinVersion=2] kAriaBrailleRoleDescription = 34,
  [MinVersion=6] kAriaCellColumnIndexText = 39,
  [MinVersion=6] kAriaCellRowIndexText = 40,
  // Deprecated - Do not use.
  // These attributes are replaced by its `StringListAttribute` equivalents to
  // support multiple contiguous calls to `ariaNotify`.
  [MinVersion=4] kAriaNotificationAnnouncementDeprecated = 36,
  [MinVersion=4] kAriaNotificationIdDeprecated = 37,
  kCheckedStateDescription = 5,
  kChildTreeId = 6,
  kChildTreeNodeAppId = 7,
  kClassName = 8,
  kContainerLiveRelevant = 9,
  kContainerLiveStatus = 10,
  kDescription = 11,  // Any description = 11, from any description source.
  kDisplay = 12,
  [MinVersion=1] kDoDefaultLabel = 31, // Only for ARC
  // Only present when different from parent.
  kFontFamily = 13,
  [MinVersion=5] kHtmlId = 38,
  kHtmlTag = 14,
  // Stores an automatic image annotation if one is available. Only valid on
  // ax::mojom::Role::kImage. See kImageAnnotationStatus, too.
  kImageAnnotation = 15,
  kImageDataUrl = 16,
  kInnerHtml = 17,
  kInputType = 18,
  kKeyShortcuts = 19,
  // Only present when different from parent.
  kLanguage = 20,
  [MinVersion=3] kLinkTarget = 35,  // E.g. "self", "blank", "top".
  [MinVersion=1] kLongClickLabel = 32, // Only for ARC
  kName = 21,
  kLiveRelevant = 22,
  kLiveStatus = 23,
  // Only if not already exposed in kName (NameFrom::kPlaceholder)
  kPlaceholder = 24,
  kRole = 25,
  kRoleDescription = 26,
  // Only if not already exposed in kName (NameFrom::kTitle)
  kTooltip = 27,
  kUrl = 28,
  kValue = 29,
  // TODO(bebeaudr): kAriaVirtualContent is currently a string attribute to
  // facilitate prototyping. Make it an enum when we're done prototyping.
  kVirtualContent = 30,
};

// Next version: 4
// Next value: 66
[Extensible, Stable, Uuid="c350e50f-5177-405d-b155-79868449ba7b"]
enum IntAttribute {
  [Default]kNone = 0,
  kDefaultActionVerb = 1,
  // Scrollable container attributes.
  kScrollX = 2,
  kScrollXMin = 3,
  kScrollXMax = 4,
  kScrollY = 5,
  kScrollYMin = 6,
  kScrollYMax = 7,

  // Attributes for retrieving the endpoints of a selection.
  kTextSelStart = 8,
  kTextSelEnd = 9,

  // aria_col* and aria_row* attributes
  kAriaColumnCount = 10,
  kAriaCellColumnIndex = 11,
  kAriaCellColumnSpan = 12,
  kAriaRowCount = 13,
  kAriaCellRowIndex = 14,
  kAriaCellRowSpan = 15,

  // Table attributes.
  kTableRowCount = 16,
  kTableColumnCount = 17,
  kTableHeaderId = 18,

  // Table row attributes.
  kTableRowIndex = 19,
  kTableRowHeaderId = 20,

  // Table column attributes.
  kTableColumnIndex = 21,
  kTableColumnHeaderId = 22,

  // Table cell attributes.
  kTableCellColumnIndex = 23,
  kTableCellColumnSpan = 24,
  kTableCellRowIndex = 25,
  kTableCellRowSpan = 26,
  kSortDirection = 27,

  // Tree control attributes.
  kHierarchicalLevel = 28,

  // What information was used to compute the object's name
  // (of type AXNameFrom).
  kNameFrom = 29,

  // What information was used to compute the object's description
  // (of type AXDescriptionFrom).
  kDescriptionFrom = 30,

  // Relationships between this element and other elements.
  kActivedescendantId = 31,
  // Obsolete, as aria-errormessage supports multiple IDREFs in
  // WAI-ARIA 1.3.
  kErrormessageIdDeprecated = 32,
  kInPageLinkTargetId = 33,
  kMemberOfId = 34,
  kNextOnLineId = 35,
  kPopupForId = 36,
  kPreviousOnLineId = 37,

  // Input restriction, if any, such as readonly or disabled.
  // Of type AXRestriction, see below.
  // No value or enabled control or other object that is not disabled.
  kRestriction = 38,

  // Position or Number of items in current set of listitems or treeitems
  kSetSize = 39,
  kPosInSet = 40,

  // In the case of Role::kColorWell, specifies the selected color.
  kColorValue = 41,

  // Indicates the element that represents the current item within a container
  // or set of related elements.
  kAriaCurrentState = 42,

  // Text attributes.

  // Foreground and background color in RGBA.
  kBackgroundColor = 43,
  kColor = 44,

  // Indicates the availability and type of interactive popup element that can
  // be triggered by the element on which the attribute is set.
  kHasPopup = 45,

  // Image annotation status, of type ImageAnnotationStatus.
  kImageAnnotationStatus = 46,

  // Indicates if a form control has invalid input or
  // if an element has an aria-invalid attribute.
  kInvalidState = 47,

  // Of type AXCheckedState
  kCheckedState = 48,

  // The list style type. Only available on list items.
  kListStyle = 49,

  // Specifies the alignment of the text, e.g. left, center, right, justify
  kTextAlign = 50,

  // Specifies the direction of the text, e.g., right-to-left.
  kTextDirection = 51,

  // Specifies the position of the text, e.g., subscript.
  kTextPosition = 52,

  // Bold, italic, underline, etc.
  kTextStyle = 53,

  // The overline text decoration style.
  kTextOverlineStyle = 54,

  // The strikethrough text decoration style.
  kTextStrikethroughStyle = 55,

  // The underline text decoration style.
  kTextUnderlineStyle = 56,

  // Focus traversal in views and Android.
  kPreviousFocusId = 57,
  kNextFocusId = 58,

  // Deprecated - Do not use.
  // For indicating what functions can be performed when a dragged object
  // is released on the drop target.
  // Note: aria-dropeffect is deprecated in WAI-ARIA 1.1.
  kDropeffectDeprecated = 59,

  // Deprecated, use AXNodeData.id (see ui/accessibility/ax_node_id_forward.h).
  kDOMNodeIdDeprecated = 60,

  // Indicates whether the element is a popover ("popup") and if so, what type.
  [MinVersion=1] kIsPopup = 61,
  [MinVersion=2] kNextWindowFocusId = 62,
  [MinVersion=2] kPreviousWindowFocusId = 63,

  // Deprecated - Do not use.
  // These attributes are replaced by its `IntListAttribute` equivalents to
  // support multiple contiguous calls to `ariaNotify`.
  [MinVersion=3] kAriaNotificationInterruptDeprecated = 64,
  [MinVersion=3] kAriaNotificationPriorityDeprecated = 65,
};

// Next version: 2
// Next value: 8
[Extensible, Stable, Uuid="6ee6b6eb-8af4-488f-96d5-343e56be5beb"]
enum FloatAttribute {
  [Default]kNone = 0,
  // Range attributes.
  kValueForRange = 1,
  kMinValueForRange = 2,
  kMaxValueForRange = 3,
  kStepValueForRange = 4,

  // Text attributes.
  // Font size is in pixels.
  kFontSize = 5,

  // Font weight can take on any arbitrary numeric value. Increments of 100 in
  // range [0, 900] represent keywords such as light, normal, bold, etc. 0 is
  // the default.
  kFontWeight = 6,

  // The text indent of the text, in mm.
  kTextIndent = 7,

  // Only on ChromeOS. The scaling factor applied to the child tree.
  // Used with kChildTreeId.
  [MinVersion=1] kChildTreeScale = 8,
};

// These attributes can take three states:
// true, false, or undefined/unset.
//
// Some attributes are only ever true or unset. In these cases, undefined is
// equivalent to false. In other attributes, all three states have meaning.
//
// Finally, note that different tree sources can use all three states for a
// given attribute, while another tree source only uses two.
// Next value: 23
// Next Version: 3
[Extensible, Stable, Uuid="ed1f1b8c-c89c-483f-9840-ca3b10042e81"]
enum BoolAttribute {
  [Default]kNone = 0,

  // Generic busy state, does not have to be on a live region.
  kBusy = 1,

  // The object functions as a text field which exposes its descendants.
  // Use cases include the root of a content-editable region, an ARIA
  // textbox which isn't currently editable and which has interactive
  // descendants, and a <body> element that has "design-mode" set to "on".
  kNonAtomicTextFieldRoot = 2,

  // Live region attributes.
  kContainerLiveAtomic = 3,
  kContainerLiveBusy = 4,
  kLiveAtomic = 5,

  // If a dialog box is marked as explicitly modal
  kModal = 6,

  // If this is set, all of the other fields in this struct should
  // be ignored and only the locations should change.
  kUpdateLocationOnly = 7,

  // Set on a canvas element if it has fallback content.
  kCanvasHasFallback = 8,

  // Indicates this node is user-scrollable, e.g. overflow:scroll|auto, as
  // opposed to only programmatically scrollable, like overflow:hidden, or
  // not scrollable at all, e.g. overflow:visible.
  kScrollable = 9,

  // A hint to clients that the node is clickable.
  kClickable = 10,

  // Indicates that this node clips its children, i.e. may have
  // overflow: hidden or clip children by default.
  kClipsChildren = 11,

  // Indicates that this node is not selectable because the style has
  // user-select: none. Note that there may be other reasons why a node is
  // not selectable - for example, bullets in a list. However, this attribute
  // is only set on user-select: none.
  kNotUserSelectableStyle = 12,

  // Indicates whether this node is selected or unselected.
  kSelected = 13,

  // Indicates whether this node is selected due to selection follows focus.
  kSelectedFromFocus = 14,

  // Indicates whether this node supports text location.
  kSupportsTextLocation = 15,

  // Deprecated - Do not use.
  // Indicates whether this node can be grabbed for drag-and-drop operation.
  // Note: aria-grabbed is deprecated in WAI-ARIA 1.1.
  kGrabbedDeprecated = 16,

  // Indicates whether this node causes a hard line-break
  // (e.g. block level elements, or <br>)
  kIsLineBreakingObject = 17,

  // Indicates whether this node causes a page break
  kIsPageBreakingObject = 18,

  // True if the node has any ARIA attributes set.
  kHasAriaAttribute = 19,

  // Deprecated - Do not use.
  kTouchPassthroughDeprecated = 20,

  // A hint to clients that the node is long clickable.
  [MinVersion=1] kLongClickable = 21,

  // Android does not provide nodes that are not on screen.
  // We need to distinguish containers that are like this.
  [MinVersion=2] kHasHiddenOffscreenNodes = 22,
};

// Next version: 7
// Next value: 29
// Note: if changing an IntListAttribute property that stores a relation where
// the reverse should be computed, be sure to also update
// kReverseRelationIntListAttributes in AXTree.
[Extensible, Stable, Uuid="6d1f823f-28a9-4263-bc4a-69fb19a4ef46"]
enum IntListAttribute {
  [Default]kNone = 0,

  // Ids of nodes that are children of this node logically, but are
  // not children of this node in the tree structure. As an example,
  // a table cell is a child of a row, and an 'indirect' child of a
  // column.
  kIndirectChildIds = 1,

  // Relationships between this element and other elements.
  kControlsIds = 2,
  kDetailsIds = 3,
  kDescribedbyIds = 4,
  [MinVersion=5] kErrormessageIds = 26,
  kFlowtoIds = 5,
  kLabelledbyIds = 6,
  kRadioGroupIds = 7,

  // For static text. These int lists must be the same size; they represent
  // the start and end character offset of each marker. Examples of markers
  // include spelling and grammar errors, highlights, and find-in-page matches.
  kMarkerTypes = 8,
  kMarkerStarts = 9,
  kMarkerEnds = 10,
  // Types of the custom highlights (if any) (see |HighlightType|).
  [MinVersion=3] kHighlightTypes = 20,

  // Caret bounds in screen coordinates - [left, top, width, height].
  [MinVersion=1] kCaretBounds = 16,

  // For inline text. This is the pixel position of the end of this
  // character within the bounding rectangle of this object, in the
  // direction given by StringAttribute::kTextDirection. For example,
  // for left-to-right text, the first offset is the right coordinate of
  // the first character within the object's bounds, the second offset
  // is the right coordinate of the second character, and so on.
  kCharacterOffsets = 11,

  // A list of the start and end character offsets of each line inside this
  // node's on-screen text.
  kLineStarts = 12,
  [MinVersion=2] kLineEnds = 17,

  // A list of the start and end character offsets of each sentence inside this
  // node's on-screen text.
  [MinVersion=2] kSentenceStarts = 18,
  [MinVersion=2] kSentenceEnds = 19,

  // A list of the start and end character offsets of each word inside this
  // node's on-screen text.
  kWordStarts = 13,
  kWordEnds = 14,

  // Used for an UI element to define custom actions for it. For example, a
  // list UI will allow a user to reorder items in the list by dragging the
  // items. Developer can expose those actions as custom actions. Currently
  // custom actions are used only in Android window.
  kCustomActionIds = 15,

  // These are used for serializing operations on text fields.
  // They all correspond, in the sense that each position on the list
  // correspond to that same position on all other lists, meaning they are
  // are generated from the same individual operation, whether it was an
  // insertion or a deletion.
  [MinVersion=4] kTextOperationStartAnchorIds = 21,
  [MinVersion=4] kTextOperationStartOffsets = 22,
  [MinVersion=4] kTextOperationEndAnchorIds = 23,
  [MinVersion=4] kTextOperationEndOffsets = 24,
  [MinVersion=4] kTextOperations = 25,

  // List of `AriaNotificationInterrupt` and `AriaNotificationPriority`
  // properties for their respective ARIA notifications.
  [MinVersion=6] kAriaNotificationInterruptProperties = 27,
  [MinVersion=6] kAriaNotificationPriorityProperties = 28,
};

// Next version: 2
// Next value: 4
[Extensible, Stable, Uuid="b3b576a7-9335-4f79-bc8c-595fd9346d81"]
enum StringListAttribute {
  [Default]kNone = 0,
  [MinVersion=1] kAriaNotificationAnnouncements = 2,
  [MinVersion=1] kAriaNotificationIds = 3,
  // Descriptions for custom actions. This must be aligned with
  // custom_action_ids.
  kCustomActionDescriptions = 1,
};

enum ListStyle {
  kNone,
  kCircle,
  kDisc,
  kImage,
  kNumeric,
  kSquare,
  kOther, // Language specific ordering (alpha, roman, cjk-ideographic, etc...)
};

enum MarkerType {
  kNone = 0,
  kSpelling = 1,
  kGrammar = 2,
  kTextMatch = 4,
  // DocumentMarker::MarkerType::Composition = 8 is ignored for accessibility
  // purposes
  kActiveSuggestion = 16,
  kSuggestion = 32,
  kHighlight = 64,
};

enum HighlightType {
  kNone = 0,
  kHighlight = 1,
  kSpellingError = 2,
  kGrammarError = 3,
};

// Describes a move direction in the accessibility tree that is independent of
// the left-to-right or right-to-left direction of the text. For example, a
// forward movement will always move to the next node in depth-first pre-order
// traversal.
// Next value: 3
[Extensible, Stable, Uuid="ac17b4f2-6890-4090-ad09-a44a8d9554ed"]
enum MoveDirection {
  [Default]kNone = 0,
  kBackward = 1,
  kForward = 2,
};

// Describes the edit or selection command that resulted in a selection, a text
// changed or a text attributes changed event.
//
// An edit command, such as "kInsert" or "kDelete" is further described by its
// "InputEvent" - see the relevant enum in this file.
// A selection command may be further described by its "TextBoundary" and
// "MoveDirection" - see the relevant enums in this file.
// Next value: 11
[Extensible, Stable, Uuid="f389c8cf-8382-45bc-a447-656ba2ed8fcf"]
enum Command {
  [Default]kNone = 0,
  kClearSelection = 1,
  kDelete = 2,
  kDictate = 3,
  kExtendSelection = 4,  // The existing selection has been extended or shrunk.
  kFormat = 5,  // Some text attributes, such as font weight, have changed.
  kHistory = 6,  // An undo or a redo operation has been performed.
  kInsert = 7,
  kMarker = 8,  // Document markers have been added or removed.
  kMoveSelection = 9,  // The selection moved by a specific granularity.
  kSetSelection = 10,  // A completely new selection has been set.
};

// Describes an edit command in more detail.
//
// Please keep in sync with the following specification and file:
// https://w3c.github.io/input-events/#h-interface-inputevent-attributes
// //third_party/blink/renderer/core/events/input_event.h
// Next Version: 2
// Next value: 40
[Extensible, Stable, Uuid="f53115ff-b29d-4a07-a497-9c49dc5b5ebd"]
enum InputEventType {
  [Default]kNone = 0,
  // Insertion.
  kInsertText = 1,
  kInsertLineBreak = 2,
  kInsertParagraph = 3,
  kInsertOrderedList = 4,
  kInsertUnorderedList = 5,
  kInsertHorizontalRule = 6,
  kInsertFromPaste = 7,
  kInsertFromDrop = 8,
  kInsertFromYank = 9,
  kInsertTranspose = 10,
  kInsertReplacementText = 11,
  kInsertCompositionText = 12,
  [MinVersion=1] kInsertLink = 39,
  // Deletion.
  kDeleteWordBackward = 13,
  kDeleteWordForward = 14,
  kDeleteSoftLineBackward = 15,
  kDeleteSoftLineForward = 16,
  kDeleteHardLineBackward = 17,
  kDeleteHardLineForward = 18,
  kDeleteContentBackward = 19,
  kDeleteContentForward = 20,
  kDeleteByCut = 21,
  kDeleteByDrag = 22,
  // History.
  kHistoryUndo = 23,
  kHistoryRedo = 24,
  // Formatting.
  kFormatBold = 25,
  kFormatItalic = 26,
  kFormatUnderline = 27,
  kFormatStrikeThrough = 28,
  kFormatSuperscript = 29,
  kFormatSubscript = 30,
  kFormatJustifyCenter = 31,
  kFormatJustifyFull = 32,
  kFormatJustifyRight = 33,
  kFormatJustifyLeft = 34,
  kFormatIndent = 35,
  kFormatOutdent = 36,
  kFormatRemove = 37,
  kFormatSetBlockTextDirection = 38,
};

// Defines a set of text boundaries in the accessibility tree.
//
// Most boundaries come in three flavors: A "WordStartOrEnd" boundary for
// example differs from a "WordStart" or a "WordEnd" boundary in that the first
// would consider both the start and the end of the word to be boundaries, while
// the other two would consider only the start or the end respectively.
//
// An "Object" boundary is found at the start or end of a node's entire text,
// e.g. at the start or end of a text field.
//
// TODO(nektar): Split TextBoundary into TextUnit and TextBoundary.
// Next version: 3
// Next value: 23
[Extensible, Stable, Uuid="8e6e10f0-5c0f-4c1e-a67e-9407ee10bd85"]
enum TextBoundary {
  [Default]kNone = 0,
  kCharacter = 1,
  kFormatEnd = 2,
  [MinVersion=2] kFormatStart = 21,
  [MinVersion=2] kFormatStartOrEnd = 22,
  kLineEnd = 3,
  kLineStart = 4,
  kLineStartOrEnd = 5,
  kObject = 6,
  kPageEnd = 7,
  kPageStart = 8,
  kPageStartOrEnd = 9,
  kParagraphEnd = 10,
  kParagraphStart = 11,

  // For UI Automation, empty lines after a paragraph should be merged into the
  // preceding paragraph.
  //
  // See https://docs.microsoft.com/en-us/windows/desktop/api/UIAutomationCore/ne-uiautomationcore-textunit
  [MinVersion=1] kParagraphStartSkippingEmptyParagraphs = 20,

  kParagraphStartOrEnd = 12,
  kSentenceEnd = 13,
  kSentenceStart = 14,
  kSentenceStartOrEnd = 15,
  kWebPage = 16,
  kWordEnd = 17,
  kWordStart = 18,
  kWordStartOrEnd = 19,
};

// Types of text alignment according to the IAccessible2 Object Attributes spec.
enum TextAlign {
  kNone,
  kLeft,
  kRight,
  kCenter,
  kJustify,
};

enum WritingDirection {
  kNone,
  kLtr,
  kRtl,
  kTtb,
  kBtt,
};

enum TextPosition {
  kNone,
  kSubscript,
  kSuperscript,
};

// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.accessibility
enum TextStyle {
  kNone,
  kBold,
  kItalic,
  kUnderline,
  kLineThrough,
  kOverline
};

enum TextDecorationStyle {
  kNone,
  kDotted,
  kDashed,
  kSolid,
  kDouble,
  kWavy,
};

enum AriaCurrentState {
  kNone,
  kFalse,
  kTrue,
  kPage,
  kStep,
  kLocation,
  kDate,
  kTime,
};

enum HasPopup {
  kFalse = 0,
  kTrue,
  kMenu,
  kListbox,
  kTree,
  kGrid,
  kDialog,
  kNone = kFalse
};

enum IsPopup {
  kNone = 0,
  kManual,
  kAuto,
  kHint,
};

enum InvalidState {
  kNone,
  kFalse,
  kTrue,
};

// Input restriction associated with an object.
// No value for a control means it is enabled.
// Use read_only for a textbox that allows focus/selection but not input.
// Use disabled for a control or group of controls that disallows input.
enum Restriction {
  kNone,
  kReadOnly,
  kDisabled,
};

enum CheckedState {
  kNone,
  kFalse,
  kTrue,
  kMixed,
};

enum SortDirection {
  kNone,
  kUnsorted,
  kAscending,
  kDescending,
  kOther,
};

// The source of the accessible name. The source can influence which platform
// accessibility API is used to expose the name (e.g. label versus title).
// It can also impact whether or not whitespace is inserted between objects
// (e.g. when the name of some other object should be constructed from a
// container's children).
enum NameFrom {
  // No name has been provided. (See also kAttributeExplicitlyEmpty)
  kNone,

  // The name comes from a flat string which is typically not displayed,
  // such as aria-label (in the case of web content) or provided by the
  // View.
  kAttribute,

  // The name has been removed to improve accessibility. Example: The name of
  // this View is the same as the name of the View's parent, causing screen
  // readers to speak the name twice. In order to prevent that, the name can
  // be removed from one View. Note that as a general rule, the name should
  // not be removed from the interactive/focusable View.
  kAttributeExplicitlyEmpty,

  // The name of this table comes from the table's caption.
  kCaption,

  // The name comes from the displayed text contents. This is appropriate for
  // labels, links, static text nodes, etc. It is typically not appropriate for
  // text fields.
  kContents,

  // The name of this text field comes from its placeholder.
  kPlaceholder,

  // The name comes from some other object in the content or UI, such as
  // the figcaption element in a figure, or another View present in the UI.
  kRelatedElement,

  // Applies to roles that cannot be named as per the ARIA spec, where the
  // name may be repaired by moving to the description.
  kProhibited,

  // Applies to roles that cannot be named as per the ARIA spec, where the
  // name would have been redundant with the inner text.
  kProhibitedAndRedundant,

  // The name comes from the title attribute (HTML), the title element (SVG),
  // or a View's tooltip.
  kTitle,

  // The name comes from the value attribute, such as in a button element.
  kValue,

  // The name comes from a tooltip-style popover (aka hint popover), where the
  // contents could be distilled to a plain text string.
  kPopoverAttribute,
};

// The source of the accessible description. Used by some screen readers
// to determine if and how the description should be presented to the user.
enum DescriptionFrom {
  // No description has been provided. (See also kAttributeExplicitlyEmpty)
  kNone,

  // The description comes from a flat string, such as aria-description (in the
  // case of web content) or provided by the View.
  kAriaDescription,

  // The description has been removed to improve accessibility. Example: The
  // description normally provided by this View's tooltip contains text which
  // is also present in this View's name. This could cause screen readers to
  // speak the information twice, which is not desired. Therefore the
  // description has been deliberately set to the empty string to prevent
  // double presentation.
  kAttributeExplicitlyEmpty,

  // The description comes from the label/text of a button.
  // See HTML-AAM's Accessible Name and Description Computation.
  kButtonLabel,

  // The description comes from some other object such as an element referenced
  // by aria-describedby (in the case of web content), or another View present
  // in the UI.
  kRelatedElement,

  // The description comes from a Ruby annotation.
  kRubyAnnotation,

  // The description contains a name that was prohibited because of the
  // object's role. Exposing as a description allows screen reader users to
  // experience the prohibited name as an annotation.
  kProhibitedNameRepair,

  // The description comes from the contents of a summary element.
  // See HTML-AAM's Accessible Name and Description Computation.
  kSummary,

  // The description comes from the text of an SVG desc element.
  // See SVG-AAM's Accessible Name and Description Computation.
  kSvgDescElement,

  // The description comes from a table's caption element.
  // See HTML-AAM's Accessible Name and Description Computation.
  kTableCaption,

  // The description comes from the title attribute (HTML), the title element
  // (SVG), or a View's tooltip.
  kTitle,

  // The description comes from a non-tooltip popover, e.g. the
  // |popovertarget| attribute pointing to a `popover=auto`.
  kPopoverAttribute,
};

// Next value: 4
[Extensible, Stable, Uuid="bf97094a-dc01-4888-9f04-b2af7b1b2083"]
enum EventFrom {
  [Default]kNone = 0,
  kUser = 1,
  kPage = 2,
  kAction = 3,
};

// Touch gestures on Chrome OS.
enum Gesture {
  kNone,
  kClick,
  kSwipeLeft1,
  kSwipeUp1,
  kSwipeRight1,
  kSwipeDown1,
  kSwipeLeft2,
  kSwipeUp2,
  kSwipeRight2,
  kSwipeDown2,
  kSwipeLeft3,
  kSwipeUp3,
  kSwipeRight3,
  kSwipeDown3,
  kSwipeLeft4,
  kSwipeUp4,
  kSwipeRight4,
  kSwipeDown4,
  kTap2,
  kTap3,
  kTap4,
  kTouchExplore,
};

// Next value: 3
[Extensible, Stable, Uuid="b06c4314-aacb-43f3-bb8e-b8ed20704dcd"]
enum TextAffinity {
  [Default]kNone = 0,
  kDownstream = 1,
  kUpstream = 2,
};

// Compares two nodes in an accessibility tree in pre-order traversal.
enum TreeOrder {
  kNone,
  // Not in the same tree, or other error.
  kUndefined,

  // First node is before the second one.
  kBefore,

  // Nodes are the same.
  kEqual,

  // First node is after the second one.
  kAfter,
};

// For internal use by AXTreeID / ax::mojom::AXTreeID.
enum AXTreeIDType {
  kUnknown,  // The Tree ID is unknown.
  kToken,    // Every other tree ID must have a valid unguessable token.
};

enum ImageAnnotationStatus {
  // Not an image, or image annotation feature not enabled.
  kNone,

  // Not eligible due to the scheme of the page. Image annotations are only
  // generated for images on http, https, file and data URLs.
  kWillNotAnnotateDueToScheme,

  // Not loaded yet, already labeled by the author, or not eligible
  // due to size, type, etc.
  kIneligibleForAnnotation,

  // Eligible to be automatically annotated if the user requests it.
  // This is communicated to the user via a tutor message.
  kEligibleForAnnotation,

  // Eligible to be automatically annotated but this is not communicated to the
  // user.
  kSilentlyEligibleForAnnotation,

  // An annotation has been requested but has not been received yet.
  kAnnotationPending,

  // An annotation has been provided and kImageAnnotation contains the
  // annotation text.
  kAnnotationSucceeded,

  // The annotation request was processed successfully, but it was not
  // possible to come up with an annotation for this image.
  kAnnotationEmpty,

  // The image is classified as adult content and no annotation will
  // be generated.
  kAnnotationAdult,

  // The annotation process failed, e.g. unable to contact the server,
  // request timed out, etc.
  kAnnotationProcessFailed,
};

enum AriaNotificationInterrupt {
  kNone,
  kAll,
  kPending,
};

enum AriaNotificationPriority {
  kNone,
  kImportant,
};