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

// These should be kept in sync with third_party/WebKit/public/web/WebAXEnums.h
// until the Chromium and Blink trees are merged.
[camel_case_enum_to_string=true] namespace ui {

  // For new entries to the following three enums, also add to
  // chrome/common/extensions/api/automation.idl.
  //
  // Explanation of the comments next to these events:
  //
  // Web: this event is only used in web content. Unless a specific platform
  //      is specified, it fires a native event on multiple platforms.
  //
  // Native: this event is only used in native UI.
  //
  // Implicit: 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 unspecified, the event is used across web and native on multiple
  // platforms.
  enum AXEvent {
    activedescendantchanged,   // Web
    alert,
    aria_attribute_changed,    // Implicit
    autocorrection_occured,    // Unknown: http://crbug.com/392498
    blur,                      // Remove: http://crbug.com/392502
    checked_state_changed,     // Implicit
    children_changed,
    focus,
    hide,                      // Remove: http://crbug.com/392502
    hover,
    invalid_status_changed,    // Implicit
    layout_complete,           // Web
    live_region_changed,       // Web
    load_complete,             // Web
    location_changed,          // Web
    menu_end,                  // Native / Win
    menu_list_item_selected,   // Web
    menu_list_value_changed,   // Web
    menu_popup_end,            // Native / Win
    menu_popup_start,          // Native / Win
    menu_start,                // Native / Win
    row_collapsed,             // Web / Mac
    row_count_changed,         // Web / Mac
    row_expanded,              // Web / Mac
    scroll_position_changed,   // Web
    scrolled_to_anchor,        // Web
    selected_children_changed, // Web
    selection,                 // Native
    selection_add,             // Native
    selection_remove,          // Native
    show,                      // Remove: http://crbug.com/392502
    text_changed,
    text_selection_changed,
    value_changed
  };

  enum AXRole {
    alert_dialog,
    alert,
    annotation,
    application,
    article,
    banner,
    browser,
    busy_indicator,
    button,
    button_drop_down,
    canvas,
    cell,
    check_box,
    client,
    color_well,
    column_header,
    column,
    combo_box,
    complementary,
    content_info,
    definition,
    description_list_detail,
    description_list,
    description_list_term,
    desktop,
    details,
    dialog,
    directory,
    disclosure_triangle,
    div,
    document,
    drawer,
    editable_text,
    embedded_object,
    figcaption,
    figure,
    footer,
    form,
    grid,
    group,
    grow_area,
    heading,
    help_tag,
    horizontal_rule,
    iframe,
    ignored,
    image_map_link,
    image_map,
    image,
    incrementor,
    inline_text_box,
    label_text,
    legend,
    link,
    list_box_option,
    list_box,
    list_item,
    list_marker,
    list,
    location_bar,
    log,
    main,
    marquee,
    math_element,
    math,
    matte,
    menu_bar,
    menu_button,
    menu_item,
    menu_list_option,
    menu_list_popup,
    menu,
    navigation,
    note,
    outline,
    pane,
    paragraph,
    pop_up_button,
    presentational,
    progress_indicator,
    radio_button,
    radio_group,
    region,
    root_web_area,
    row_header,
    row,
    ruler_marker,
    ruler,
    svg_root,
    scroll_area,
    scroll_bar,
    seamless_web_area,
    search,
    sheet,
    slider,
    slider_thumb,
    spin_button_part,
    spin_button,
    split_group,
    splitter,
    static_text,
    status,
    system_wide,
    tab_group,
    tab_list,
    tab_panel,
    tab,
    table_header_container,
    table,
    text_area,
    text_field,
    timer,
    title_bar,
    toggle_button,
    toolbar,
    tree_grid,
    tree_item,
    tree,
    unknown,
    tooltip,
    value_indicator,
    web_area,
    window
  };

  // TODO(dmazzoni): switch content/ to use AX_STATE_DISABLED instead of
  // !AX_STATE_ENABLED, and AX_STATE_EDITABLE instead of !AX_STATE_READONLY.
  enum AXState {
    busy,
    checked,
    collapsed,
    default,
    disabled,  // ui/views only
    editable,  // ui/views only
    enabled,   // content only
    expanded,
    focusable,
    focused,
    haspopup,
    hovered,
    indeterminate,
    invisible,
    linked,
    multiselectable,
    offscreen,
    pressed,
    protected,
    read_only,
    required,
    selectable,
    selected,
    vertical,
    visited
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXStringAttribute {
    // Document attributes.
    doc_url,
    doc_title,
    doc_mimetype,
    doc_doctype,

    // Attributes that could apply to any node.
    access_key,
    action,
    container_live_relevant,
    container_live_status,
    description,
    display,
    help,
    html_tag,
    name,
    live_relevant,
    live_status,
    role,
    shortcut,
    text_input_type,
    url,
    value
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXIntAttribute {
    // Scrollable container attributes.
    scroll_x,
    scroll_x_min,
    scroll_x_max,
    scroll_y,
    scroll_y_min,
    scroll_y_max,

    // Editable text attributes.
    text_sel_start,
    text_sel_end,

    // Table attributes.
    table_row_count,
    table_column_count,
    table_header_id,

    // Table row attributes.
    table_row_index,
    table_row_header_id,

    // Table column attributes.
    table_column_index,
    table_column_header_id,

    // Table cell attributes.
    table_cell_column_index,
    table_cell_column_span,
    table_cell_row_index,
    table_cell_row_span,

    // Tree control attributes.
    hierarchical_level,

    // Relationships between this element and other elements.
    title_ui_element,
    activedescendant_id,

    // Color value for AX_ROLE_COLOR_WELL, each component is 0..255
    color_value_red,
    color_value_green,
    color_value_blue,

    // Inline text attributes.
    text_direction
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXFloatAttribute {
    // Document attributes.
    doc_loading_progress,

    // Range attributes.
    value_for_range,
    min_value_for_range,
    max_value_for_range
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXBoolAttribute {
    // Document attributes.
    doc_loaded,

    // True if a checkbox or radio button is in the "mixed" state.
    button_mixed,

    // Live region attributes.
    container_live_atomic,
    container_live_busy,
    live_atomic,
    live_busy,

    // ARIA readonly flag.
    aria_readonly,

    // Writeable attributes
    can_set_value,

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

    // Set on a canvas element if it has fallback content.
    canvas_has_fallback,

    // Set if this node is the host of an external AXTree, for
    // example a web view that's a child of a native view, or a
    // web iframe that's the child of another web frame.
    is_ax_tree_host
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXIntListAttribute {
    // 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.
    indirect_child_ids,

    // Relationships between this element and other elements.
    controls_ids,
    describedby_ids,
    flowto_ids,
    labelledby_ids,
    owns_ids,

    // Character indices where line breaks occur.
    line_breaks,

    // For a table, the cell ids in row-major order, with duplicate entries
    // when there's a rowspan or colspan, and with -1 for missing cells.
    // There are always exactly rows * columns entries.
    cell_ids,

    // For a table, the unique cell ids in row-major order of their first
    // occurrence.
    unique_cell_ids,

    // 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 AX_ATTR_TEXT_DIRECTION. 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.
    character_offsets,

    // For inline text. These int lists must be the same size; they represent
    // the start and end character index of each word within this text.
    word_starts,
    word_ends
  };

  [cpp_enum_prefix_override="ax"] enum AXTextDirection {
    text_direction_lr,
    text_direction_rl,
    text_direction_tb,
    text_direction_bt
  };
};
