| // Copyright (c) 2010 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. |
| |
| #ifndef WEBKIT_GLUE_WEBACCESSIBILITY_H_ |
| #define WEBKIT_GLUE_WEBACCESSIBILITY_H_ |
| |
| #include <map> |
| #include <vector> |
| |
| #include "base/string16.h" |
| #include "ui/gfx/rect.h" |
| |
| namespace WebKit { |
| class WebAccessibilityCache; |
| class WebAccessibilityObject; |
| } |
| |
| namespace webkit_glue { |
| |
| // A compact representation of the accessibility information for a |
| // single web object, in a form that can be serialized and sent from |
| // the renderer process to the browser process. |
| struct WebAccessibility { |
| public: |
| // An alphabetical enumeration of accessibility roles. |
| enum Role { |
| ROLE_NONE = 0, |
| |
| ROLE_UNKNOWN, |
| |
| ROLE_ALERT, |
| ROLE_ALERT_DIALOG, |
| ROLE_ANNOTATION, |
| ROLE_APPLICATION, |
| ROLE_ARTICLE, |
| ROLE_BROWSER, |
| ROLE_BUSY_INDICATOR, |
| ROLE_BUTTON, |
| ROLE_CELL, |
| ROLE_CHECKBOX, |
| ROLE_COLOR_WELL, |
| ROLE_COLUMN, |
| ROLE_COLUMN_HEADER, |
| ROLE_COMBO_BOX, |
| ROLE_DEFINITION_LIST_DEFINITION, |
| ROLE_DEFINITION_LIST_TERM, |
| ROLE_DIALOG, |
| ROLE_DIRECTORY, |
| ROLE_DISCLOSURE_TRIANGLE, |
| ROLE_DOCUMENT, |
| ROLE_DRAWER, |
| ROLE_EDITABLE_TEXT, |
| ROLE_GRID, |
| ROLE_GROUP, |
| ROLE_GROW_AREA, |
| ROLE_HEADING, |
| ROLE_HELP_TAG, |
| ROLE_IGNORED, |
| ROLE_IMAGE, |
| ROLE_IMAGE_MAP, |
| ROLE_IMAGE_MAP_LINK, |
| ROLE_INCREMENTOR, |
| ROLE_LANDMARK_APPLICATION, |
| ROLE_LANDMARK_BANNER, |
| ROLE_LANDMARK_COMPLEMENTARY, |
| ROLE_LANDMARK_CONTENTINFO, |
| ROLE_LANDMARK_MAIN, |
| ROLE_LANDMARK_NAVIGATION, |
| ROLE_LANDMARK_SEARCH, |
| ROLE_LINK, |
| ROLE_LIST, |
| ROLE_LISTBOX, |
| ROLE_LISTBOX_OPTION, |
| ROLE_LIST_ITEM, |
| ROLE_LIST_MARKER, |
| ROLE_LOG, |
| ROLE_MARQUEE, |
| ROLE_MATH, |
| ROLE_MATTE, |
| ROLE_MENU, |
| ROLE_MENU_BAR, |
| ROLE_MENU_ITEM, |
| ROLE_MENU_BUTTON, |
| ROLE_MENU_LIST_OPTION, |
| ROLE_MENU_LIST_POPUP, |
| ROLE_NOTE, |
| ROLE_OUTLINE, |
| ROLE_POPUP_BUTTON, |
| ROLE_PROGRESS_INDICATOR, |
| ROLE_RADIO_BUTTON, |
| ROLE_RADIO_GROUP, |
| ROLE_REGION, |
| ROLE_ROW, |
| ROLE_ROW_HEADER, |
| ROLE_RULER, |
| ROLE_RULER_MARKER, |
| ROLE_SCROLLAREA, |
| ROLE_SCROLLBAR, |
| ROLE_SHEET, |
| ROLE_SLIDER, |
| ROLE_SLIDER_THUMB, |
| ROLE_SPLITTER, |
| ROLE_SPLIT_GROUP, |
| ROLE_STATIC_TEXT, |
| ROLE_STATUS, |
| ROLE_SYSTEM_WIDE, |
| ROLE_TAB, |
| ROLE_TABLE, |
| ROLE_TABLE_HEADER_CONTAINER, |
| ROLE_TAB_GROUP, |
| ROLE_TAB_LIST, |
| ROLE_TAB_PANEL, |
| ROLE_TEXTAREA, |
| ROLE_TEXT_FIELD, |
| ROLE_TIMER, |
| ROLE_TOOLBAR, |
| ROLE_TOOLTIP, |
| ROLE_TREE, |
| ROLE_TREE_GRID, |
| ROLE_TREE_ITEM, |
| ROLE_VALUE_INDICATOR, |
| ROLE_WEBCORE_LINK, |
| ROLE_WEB_AREA, |
| ROLE_WINDOW, |
| NUM_ROLES |
| }; |
| |
| // An alphabetical enumeration of accessibility states. |
| // A state bitmask is formed by shifting 1 to the left by each state, |
| // for example: |
| // int mask = (1 << STATE_CHECKED) | (1 << STATE_FOCUSED); |
| enum State { |
| STATE_CHECKED, |
| STATE_COLLAPSED, |
| STATE_EXPANDED, |
| STATE_FOCUSABLE, |
| STATE_FOCUSED, |
| STATE_HASPOPUP, |
| STATE_HOTTRACKED, |
| STATE_INDETERMINATE, |
| STATE_INVISIBLE, |
| STATE_LINKED, |
| STATE_MULTISELECTABLE, |
| STATE_OFFSCREEN, |
| STATE_PRESSED, |
| STATE_PROTECTED, |
| STATE_READONLY, |
| STATE_SELECTABLE, |
| STATE_SELECTED, |
| STATE_TRAVERSED, |
| STATE_BUSY, |
| STATE_UNAVAILABLE |
| }; |
| |
| // Additional optional attributes that can be optionally attached to |
| // a node. |
| enum Attribute { |
| // Doc attributes: only make sense when applied to the top-level |
| // Document node. |
| ATTR_DOC_URL, |
| ATTR_DOC_TITLE, |
| ATTR_DOC_MIMETYPE, |
| ATTR_DOC_DOCTYPE, |
| ATTR_DOC_SCROLLX, |
| ATTR_DOC_SCROLLY, |
| |
| // Editable text attributes |
| ATTR_TEXT_SEL_START, |
| ATTR_TEXT_SEL_END, |
| |
| // Attributes that could apply to any node. |
| ATTR_ACTION, |
| ATTR_DESCRIPTION, |
| ATTR_DISPLAY, |
| ATTR_HELP, |
| ATTR_HTML_TAG, |
| ATTR_SHORTCUT, |
| ATTR_URL, |
| NUM_ATTRIBUTES |
| }; |
| |
| // Empty constructor, for serialization. |
| WebAccessibility(); |
| |
| // Construct from a WebAccessibilityObject. Recursively creates child |
| // nodes as needed to complete the tree. Adds |src| to |cache| and |
| // stores its cache ID. |
| WebAccessibility(const WebKit::WebAccessibilityObject& src, |
| WebKit::WebAccessibilityCache* cache, |
| bool include_children); |
| |
| ~WebAccessibility(); |
| |
| private: |
| // Initialize an already-created struct, same as the constructor above. |
| void Init(const WebKit::WebAccessibilityObject& src, |
| WebKit::WebAccessibilityCache* cache, |
| bool include_children); |
| |
| // Returns true if |ancestor| is the first unignored parent of |child|, |
| // which means that when walking up the parent chain from |child|, |
| // |ancestor| is the *first* ancestor that isn't marked as |
| // accessibilityIsIgnored(). |
| bool IsParentUnignoredOf(const WebKit::WebAccessibilityObject& ancestor, |
| const WebKit::WebAccessibilityObject& child); |
| |
| public: |
| // This is a simple serializable struct. All member variables should be |
| // copyable. |
| int32 id; |
| string16 name; |
| string16 value; |
| Role role; |
| uint32 state; |
| gfx::Rect location; |
| std::map<int32, string16> attributes; |
| std::vector<WebAccessibility> children; |
| std::vector<int32> indirect_child_ids; |
| std::vector<std::pair<string16, string16> > html_attributes; |
| }; |
| |
| } // namespace webkit_glue |
| |
| #endif // WEBKIT_GLUE_WEBACCESSIBILITY_H_ |