| // Copyright (c) 2012 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 CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_ |
| #define CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_ |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include "base/strings/string16.h" |
| #include "content/common/content_export.h" |
| #include "third_party/WebKit/public/web/WebAXEnums.h" |
| #include "ui/gfx/rect.h" |
| |
| namespace content { |
| |
| // 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 CONTENT_EXPORT AccessibilityNodeData { |
| // Additional optional attributes that can be optionally attached to |
| // a node. |
| enum StringAttribute { |
| // Document attributes. |
| ATTR_DOC_URL, |
| ATTR_DOC_TITLE, |
| ATTR_DOC_MIMETYPE, |
| ATTR_DOC_DOCTYPE, |
| |
| // Attributes that could apply to any node. |
| ATTR_ACCESS_KEY, |
| ATTR_ACTION, |
| ATTR_CONTAINER_LIVE_RELEVANT, |
| ATTR_CONTAINER_LIVE_STATUS, |
| ATTR_DESCRIPTION, |
| ATTR_DISPLAY, |
| ATTR_HELP, |
| ATTR_HTML_TAG, |
| ATTR_NAME, |
| ATTR_LIVE_RELEVANT, |
| ATTR_LIVE_STATUS, |
| ATTR_ROLE, |
| ATTR_SHORTCUT, |
| ATTR_URL, |
| ATTR_VALUE, |
| }; |
| |
| enum IntAttribute { |
| // Scrollable container attributes. |
| ATTR_SCROLL_X, |
| ATTR_SCROLL_X_MIN, |
| ATTR_SCROLL_X_MAX, |
| ATTR_SCROLL_Y, |
| ATTR_SCROLL_Y_MIN, |
| ATTR_SCROLL_Y_MAX, |
| |
| // Editable text attributes. |
| ATTR_TEXT_SEL_START, |
| ATTR_TEXT_SEL_END, |
| |
| // Table attributes. |
| ATTR_TABLE_ROW_COUNT, |
| ATTR_TABLE_COLUMN_COUNT, |
| ATTR_TABLE_HEADER_ID, |
| |
| // Table row attributes. |
| ATTR_TABLE_ROW_INDEX, |
| ATTR_TABLE_ROW_HEADER_ID, |
| |
| // Table column attributes. |
| ATTR_TABLE_COLUMN_INDEX, |
| ATTR_TABLE_COLUMN_HEADER_ID, |
| |
| // Table cell attributes. |
| ATTR_TABLE_CELL_COLUMN_INDEX, |
| ATTR_TABLE_CELL_COLUMN_SPAN, |
| ATTR_TABLE_CELL_ROW_INDEX, |
| ATTR_TABLE_CELL_ROW_SPAN, |
| |
| // Tree control attributes. |
| ATTR_HIERARCHICAL_LEVEL, |
| |
| // Relationships between this element and other elements. |
| ATTR_TITLE_UI_ELEMENT, |
| |
| // Color value for blink::WebAXRoleColorWell, each component is 0..255 |
| ATTR_COLOR_VALUE_RED, |
| ATTR_COLOR_VALUE_GREEN, |
| ATTR_COLOR_VALUE_BLUE, |
| |
| // Inline text attributes. |
| ATTR_TEXT_DIRECTION |
| }; |
| |
| enum FloatAttribute { |
| // Document attributes. |
| ATTR_DOC_LOADING_PROGRESS, |
| |
| // Range attributes. |
| ATTR_VALUE_FOR_RANGE, |
| ATTR_MIN_VALUE_FOR_RANGE, |
| ATTR_MAX_VALUE_FOR_RANGE, |
| }; |
| |
| enum BoolAttribute { |
| // Document attributes. |
| ATTR_DOC_LOADED, |
| |
| // True if a checkbox or radio button is in the "mixed" state. |
| ATTR_BUTTON_MIXED, |
| |
| // Live region attributes. |
| ATTR_CONTAINER_LIVE_ATOMIC, |
| ATTR_CONTAINER_LIVE_BUSY, |
| ATTR_LIVE_ATOMIC, |
| ATTR_LIVE_BUSY, |
| |
| // ARIA readonly flag. |
| ATTR_ARIA_READONLY, |
| |
| // Writeable attributes |
| ATTR_CAN_SET_VALUE, |
| |
| // If this is set, all of the other fields in this struct should |
| // be ignored and only the locations should change. |
| ATTR_UPDATE_LOCATION_ONLY, |
| |
| // Set on a canvas element if it has fallback content. |
| ATTR_CANVAS_HAS_FALLBACK, |
| }; |
| |
| enum IntListAttribute { |
| // 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. |
| ATTR_INDIRECT_CHILD_IDS, |
| |
| // Character indices where line breaks occur. |
| ATTR_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. |
| ATTR_CELL_IDS, |
| |
| // For a table, the unique cell ids in row-major order of their first |
| // occurrence. |
| ATTR_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 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. |
| ATTR_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. |
| ATTR_WORD_STARTS, |
| ATTR_WORD_ENDS, |
| }; |
| |
| AccessibilityNodeData(); |
| virtual ~AccessibilityNodeData(); |
| |
| void AddStringAttribute(StringAttribute attribute, |
| const std::string& value); |
| void AddIntAttribute(IntAttribute attribute, int value); |
| void AddFloatAttribute(FloatAttribute attribute, float value); |
| void AddBoolAttribute(BoolAttribute attribute, bool value); |
| void AddIntListAttribute(IntListAttribute attribute, |
| const std::vector<int32>& value); |
| |
| // Convenience functions, mainly for writing unit tests. |
| // Equivalent to AddStringAttribute(ATTR_NAME, name). |
| void SetName(std::string name); |
| // Equivalent to AddStringAttribute(ATTR_VALUE, value). |
| void SetValue(std::string value); |
| |
| #ifndef NDEBUG |
| virtual std::string DebugString(bool recursive) const; |
| #endif |
| |
| // This is a simple serializable struct. All member variables should be |
| // public and copyable. |
| int32 id; |
| blink::WebAXRole role; |
| uint32 state; |
| gfx::Rect location; |
| std::vector<std::pair<StringAttribute, std::string> > string_attributes; |
| std::vector<std::pair<IntAttribute, int32> > int_attributes; |
| std::vector<std::pair<FloatAttribute, float> > float_attributes; |
| std::vector<std::pair<BoolAttribute, bool> > bool_attributes; |
| std::vector<std::pair<IntListAttribute, std::vector<int32> > > |
| intlist_attributes; |
| std::vector<std::pair<std::string, std::string> > html_attributes; |
| std::vector<int32> child_ids; |
| }; |
| |
| // For testing and debugging only: this subclass of AccessibilityNodeData |
| // is used to represent a whole tree of accessibility nodes, where each |
| // node owns its children. This makes it easy to print the tree structure |
| // or search it recursively. |
| struct CONTENT_EXPORT AccessibilityNodeDataTreeNode |
| : public AccessibilityNodeData { |
| AccessibilityNodeDataTreeNode(); |
| virtual ~AccessibilityNodeDataTreeNode(); |
| |
| AccessibilityNodeDataTreeNode& operator=(const AccessibilityNodeData& src); |
| |
| #ifndef NDEBUG |
| virtual std::string DebugString(bool recursive) const OVERRIDE; |
| #endif |
| |
| std::vector<AccessibilityNodeDataTreeNode> children; |
| }; |
| |
| // Given a vector of accessibility nodes that represent a complete |
| // accessibility tree, where each node appears before its children, |
| // build a tree of AccessibilityNodeDataTreeNode objects for easier |
| // testing and debugging, where each node contains its children. |
| // The |dst| argument will become the root of the new tree. |
| void MakeAccessibilityNodeDataTree( |
| const std::vector<AccessibilityNodeData>& src, |
| AccessibilityNodeDataTreeNode* dst); |
| |
| } // namespace content |
| |
| #endif // CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_ |