1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WEBKIT_GLUE_WEBACCESSIBILITY_H_ 6 #define WEBKIT_GLUE_WEBACCESSIBILITY_H_ 7 8 #include <map> 9 #include <vector> 10 11 #include "base/string16.h" 12 #include "ui/gfx/rect.h" 13 14 namespace WebKit { 15 class WebAccessibilityCache; 16 class WebAccessibilityObject; 17 } 18 19 namespace webkit_glue { 20 21 // A compact representation of the accessibility information for a 22 // single web object, in a form that can be serialized and sent from 23 // the renderer process to the browser process. 24 struct WebAccessibility { 25 public: 26 // An alphabetical enumeration of accessibility roles. 27 enum Role { 28 ROLE_NONE = 0, 29 30 ROLE_UNKNOWN, 31 32 ROLE_ALERT, 33 ROLE_ALERT_DIALOG, 34 ROLE_ANNOTATION, 35 ROLE_APPLICATION, 36 ROLE_ARTICLE, 37 ROLE_BROWSER, 38 ROLE_BUSY_INDICATOR, 39 ROLE_BUTTON, 40 ROLE_CELL, 41 ROLE_CHECKBOX, 42 ROLE_COLOR_WELL, 43 ROLE_COLUMN, 44 ROLE_COLUMN_HEADER, 45 ROLE_COMBO_BOX, 46 ROLE_DEFINITION_LIST_DEFINITION, 47 ROLE_DEFINITION_LIST_TERM, 48 ROLE_DIALOG, 49 ROLE_DIRECTORY, 50 ROLE_DISCLOSURE_TRIANGLE, 51 ROLE_DOCUMENT, 52 ROLE_DRAWER, 53 ROLE_EDITABLE_TEXT, 54 ROLE_GRID, 55 ROLE_GROUP, 56 ROLE_GROW_AREA, 57 ROLE_HEADING, 58 ROLE_HELP_TAG, 59 ROLE_IGNORED, 60 ROLE_IMAGE, 61 ROLE_IMAGE_MAP, 62 ROLE_IMAGE_MAP_LINK, 63 ROLE_INCREMENTOR, 64 ROLE_LANDMARK_APPLICATION, 65 ROLE_LANDMARK_BANNER, 66 ROLE_LANDMARK_COMPLEMENTARY, 67 ROLE_LANDMARK_CONTENTINFO, 68 ROLE_LANDMARK_MAIN, 69 ROLE_LANDMARK_NAVIGATION, 70 ROLE_LANDMARK_SEARCH, 71 ROLE_LINK, 72 ROLE_LIST, 73 ROLE_LISTBOX, 74 ROLE_LISTBOX_OPTION, 75 ROLE_LIST_ITEM, 76 ROLE_LIST_MARKER, 77 ROLE_LOG, 78 ROLE_MARQUEE, 79 ROLE_MATH, 80 ROLE_MATTE, 81 ROLE_MENU, 82 ROLE_MENU_BAR, 83 ROLE_MENU_ITEM, 84 ROLE_MENU_BUTTON, 85 ROLE_MENU_LIST_OPTION, 86 ROLE_MENU_LIST_POPUP, 87 ROLE_NOTE, 88 ROLE_OUTLINE, 89 ROLE_POPUP_BUTTON, 90 ROLE_PROGRESS_INDICATOR, 91 ROLE_RADIO_BUTTON, 92 ROLE_RADIO_GROUP, 93 ROLE_REGION, 94 ROLE_ROW, 95 ROLE_ROW_HEADER, 96 ROLE_RULER, 97 ROLE_RULER_MARKER, 98 ROLE_SCROLLAREA, 99 ROLE_SCROLLBAR, 100 ROLE_SHEET, 101 ROLE_SLIDER, 102 ROLE_SLIDER_THUMB, 103 ROLE_SPLITTER, 104 ROLE_SPLIT_GROUP, 105 ROLE_STATIC_TEXT, 106 ROLE_STATUS, 107 ROLE_SYSTEM_WIDE, 108 ROLE_TAB, 109 ROLE_TABLE, 110 ROLE_TABLE_HEADER_CONTAINER, 111 ROLE_TAB_GROUP, 112 ROLE_TAB_LIST, 113 ROLE_TAB_PANEL, 114 ROLE_TEXTAREA, 115 ROLE_TEXT_FIELD, 116 ROLE_TIMER, 117 ROLE_TOOLBAR, 118 ROLE_TOOLTIP, 119 ROLE_TREE, 120 ROLE_TREE_GRID, 121 ROLE_TREE_ITEM, 122 ROLE_VALUE_INDICATOR, 123 ROLE_WEBCORE_LINK, 124 ROLE_WEB_AREA, 125 ROLE_WINDOW, 126 NUM_ROLES 127 }; 128 129 // An alphabetical enumeration of accessibility states. 130 // A state bitmask is formed by shifting 1 to the left by each state, 131 // for example: 132 // int mask = (1 << STATE_CHECKED) | (1 << STATE_FOCUSED); 133 enum State { 134 STATE_CHECKED, 135 STATE_COLLAPSED, 136 STATE_EXPANDED, 137 STATE_FOCUSABLE, 138 STATE_FOCUSED, 139 STATE_HASPOPUP, 140 STATE_HOTTRACKED, 141 STATE_INDETERMINATE, 142 STATE_INVISIBLE, 143 STATE_LINKED, 144 STATE_MULTISELECTABLE, 145 STATE_OFFSCREEN, 146 STATE_PRESSED, 147 STATE_PROTECTED, 148 STATE_READONLY, 149 STATE_SELECTABLE, 150 STATE_SELECTED, 151 STATE_TRAVERSED, 152 STATE_BUSY, 153 STATE_UNAVAILABLE 154 }; 155 156 // Additional optional attributes that can be optionally attached to 157 // a node. 158 enum Attribute { 159 // Doc attributes: only make sense when applied to the top-level 160 // Document node. 161 ATTR_DOC_URL, 162 ATTR_DOC_TITLE, 163 ATTR_DOC_MIMETYPE, 164 ATTR_DOC_DOCTYPE, 165 ATTR_DOC_SCROLLX, 166 ATTR_DOC_SCROLLY, 167 168 // Editable text attributes 169 ATTR_TEXT_SEL_START, 170 ATTR_TEXT_SEL_END, 171 172 // Attributes that could apply to any node. 173 ATTR_ACTION, 174 ATTR_DESCRIPTION, 175 ATTR_DISPLAY, 176 ATTR_HELP, 177 ATTR_HTML_TAG, 178 ATTR_SHORTCUT, 179 ATTR_URL, 180 NUM_ATTRIBUTES 181 }; 182 183 // Empty constructor, for serialization. 184 WebAccessibility(); 185 186 // Construct from a WebAccessibilityObject. Recursively creates child 187 // nodes as needed to complete the tree. Adds |src| to |cache| and 188 // stores its cache ID. 189 WebAccessibility(const WebKit::WebAccessibilityObject& src, 190 WebKit::WebAccessibilityCache* cache, 191 bool include_children); 192 193 ~WebAccessibility(); 194 195 private: 196 // Initialize an already-created struct, same as the constructor above. 197 void Init(const WebKit::WebAccessibilityObject& src, 198 WebKit::WebAccessibilityCache* cache, 199 bool include_children); 200 201 // Returns true if |ancestor| is the first unignored parent of |child|, 202 // which means that when walking up the parent chain from |child|, 203 // |ancestor| is the *first* ancestor that isn't marked as 204 // accessibilityIsIgnored(). 205 bool IsParentUnignoredOf(const WebKit::WebAccessibilityObject& ancestor, 206 const WebKit::WebAccessibilityObject& child); 207 208 public: 209 // This is a simple serializable struct. All member variables should be 210 // copyable. 211 int32 id; 212 string16 name; 213 string16 value; 214 Role role; 215 uint32 state; 216 gfx::Rect location; 217 std::map<int32, string16> attributes; 218 std::vector<WebAccessibility> children; 219 std::vector<int32> indirect_child_ids; 220 std::vector<std::pair<string16, string16> > html_attributes; 221 }; 222 223 } // namespace webkit_glue 224 225 #endif // WEBKIT_GLUE_WEBACCESSIBILITY_H_ 226