Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: content/browser/accessibility/browser_accessibility_cocoa.mm

Issue 10544099: Refactor all accessibility code out of webkit/glue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More Mac compile errors Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <execinfo.h> 5 #include <execinfo.h>
6 6
7 #import "content/browser/accessibility/browser_accessibility_cocoa.h" 7 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
8 8
9 #include <map> 9 #include <map>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/string16.h" 12 #include "base/string16.h"
13 #include "base/sys_string_conversions.h" 13 #include "base/sys_string_conversions.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "content/browser/accessibility/browser_accessibility_manager.h" 15 #include "content/browser/accessibility/browser_accessibility_manager.h"
16 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
17 #include "grit/webkit_strings.h" 17 #include "grit/webkit_strings.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
19 19
20 // See http://openradar.appspot.com/9896491. This SPI has been tested on 10.5, 20 // See http://openradar.appspot.com/9896491. This SPI has been tested on 10.5,
21 // 10.6, and 10.7. It allows accessibility clients to observe events posted on 21 // 10.6, and 10.7. It allows accessibility clients to observe events posted on
22 // this object. 22 // this object.
23 extern "C" void NSAccessibilityUnregisterUniqueIdForUIElement(id element); 23 extern "C" void NSAccessibilityUnregisterUniqueIdForUIElement(id element);
24 24
25 typedef WebAccessibility::StringAttribute StringAttribute; 25 using content::AccessibilityNodeData;
26 typedef AccessibilityNodeData::StringAttribute StringAttribute;
26 27
27 namespace { 28 namespace {
28 29
29 // Returns an autoreleased copy of the WebAccessibility's attribute. 30 // Returns an autoreleased copy of the AccessibilityNodeData's attribute.
30 NSString* NSStringForStringAttribute( 31 NSString* NSStringForStringAttribute(
31 const std::map<StringAttribute, string16>& attributes, 32 const std::map<StringAttribute, string16>& attributes,
32 StringAttribute attribute) { 33 StringAttribute attribute) {
33 std::map<StringAttribute, string16>::const_iterator iter = 34 std::map<StringAttribute, string16>::const_iterator iter =
34 attributes.find(attribute); 35 attributes.find(attribute);
35 NSString* returnValue = @""; 36 NSString* returnValue = @"";
36 if (iter != attributes.end()) { 37 if (iter != attributes.end()) {
37 returnValue = base::SysUTF16ToNSString(iter->second); 38 returnValue = base::SysUTF16ToNSString(iter->second);
38 } 39 }
39 return returnValue; 40 return returnValue;
40 } 41 }
41 42
42 struct MapEntry { 43 struct MapEntry {
43 WebAccessibility::Role webKitValue; 44 AccessibilityNodeData::Role webKitValue;
44 NSString* nativeValue; 45 NSString* nativeValue;
45 }; 46 };
46 47
47 typedef std::map<WebAccessibility::Role, NSString*> RoleMap; 48 typedef std::map<AccessibilityNodeData::Role, NSString*> RoleMap;
48 49
49 struct AttributeToMethodNameEntry { 50 struct AttributeToMethodNameEntry {
50 NSString* attribute; 51 NSString* attribute;
51 NSString* methodName; 52 NSString* methodName;
52 }; 53 };
53 54
54 const AttributeToMethodNameEntry attributeToMethodNameContainer[] = { 55 const AttributeToMethodNameEntry attributeToMethodNameContainer[] = {
55 { NSAccessibilityChildrenAttribute, @"children" }, 56 { NSAccessibilityChildrenAttribute, @"children" },
56 { NSAccessibilityColumnsAttribute, @"columns" }, 57 { NSAccessibilityColumnsAttribute, @"columns" },
57 { NSAccessibilityDescriptionAttribute, @"description" }, 58 { NSAccessibilityDescriptionAttribute, @"description" },
(...skipping 22 matching lines...) Expand all
80 { @"AXARIAAtomic", @"ariaAtomic" }, 81 { @"AXARIAAtomic", @"ariaAtomic" },
81 { @"AXARIABusy", @"ariaBusy" }, 82 { @"AXARIABusy", @"ariaBusy" },
82 { @"AXARIALive", @"ariaLive" }, 83 { @"AXARIALive", @"ariaLive" },
83 { @"AXARIARelevant", @"ariaRelevant" }, 84 { @"AXARIARelevant", @"ariaRelevant" },
84 { @"AXLoaded", @"loaded" }, 85 { @"AXLoaded", @"loaded" },
85 { @"AXLoadingProgress", @"loadingProgress" }, 86 { @"AXLoadingProgress", @"loadingProgress" },
86 { @"AXRequired", @"required" }, 87 { @"AXRequired", @"required" },
87 { @"AXVisited", @"visited" }, 88 { @"AXVisited", @"visited" },
88 }; 89 };
89 90
90 // GetState checks the bitmask used in webaccessibility.h to check 91 // GetState checks the bitmask used in AccessibilityNodeData to check
91 // if the given state was set on the accessibility object. 92 // if the given state was set on the accessibility object.
92 bool GetState(BrowserAccessibility* accessibility, int state) { 93 bool GetState(BrowserAccessibility* accessibility, int state) {
93 return ((accessibility->state() >> state) & 1); 94 return ((accessibility->state() >> state) & 1);
94 } 95 }
95 96
96 RoleMap BuildRoleMap() { 97 RoleMap BuildRoleMap() {
97 const MapEntry roles[] = { 98 const MapEntry roles[] = {
98 { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole }, 99 { AccessibilityNodeData::ROLE_ALERT, NSAccessibilityGroupRole },
99 { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole }, 100 { AccessibilityNodeData::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
100 { WebAccessibility::ROLE_ANNOTATION, NSAccessibilityUnknownRole }, 101 { AccessibilityNodeData::ROLE_ANNOTATION, NSAccessibilityUnknownRole },
101 { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole }, 102 { AccessibilityNodeData::ROLE_APPLICATION, NSAccessibilityGroupRole },
102 { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole }, 103 { AccessibilityNodeData::ROLE_ARTICLE, NSAccessibilityGroupRole },
103 { WebAccessibility::ROLE_BROWSER, NSAccessibilityBrowserRole }, 104 { AccessibilityNodeData::ROLE_BROWSER, NSAccessibilityBrowserRole },
104 { WebAccessibility::ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole }, 105 { AccessibilityNodeData::ROLE_BUSY_INDICATOR,
105 { WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole }, 106 NSAccessibilityBusyIndicatorRole },
106 { WebAccessibility::ROLE_CELL, @"AXCell" }, 107 { AccessibilityNodeData::ROLE_BUTTON, NSAccessibilityButtonRole },
107 { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole }, 108 { AccessibilityNodeData::ROLE_CELL, @"AXCell" },
108 { WebAccessibility::ROLE_COLOR_WELL, NSAccessibilityColorWellRole }, 109 { AccessibilityNodeData::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
109 { WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole }, 110 { AccessibilityNodeData::ROLE_COLOR_WELL, NSAccessibilityColorWellRole },
110 { WebAccessibility::ROLE_COLUMN_HEADER, @"AXCell" }, 111 { AccessibilityNodeData::ROLE_COLUMN, NSAccessibilityColumnRole },
111 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, 112 { AccessibilityNodeData::ROLE_COLUMN_HEADER, @"AXCell" },
113 { AccessibilityNodeData::ROLE_DEFINITION_LIST_DEFINITION,
112 NSAccessibilityGroupRole }, 114 NSAccessibilityGroupRole },
113 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, NSAccessibilityGroupRole }, 115 { AccessibilityNodeData::ROLE_DEFINITION_LIST_TERM,
114 { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole }, 116 NSAccessibilityGroupRole },
115 { WebAccessibility::ROLE_DIRECTORY, NSAccessibilityListRole }, 117 { AccessibilityNodeData::ROLE_DIALOG, NSAccessibilityGroupRole },
116 { WebAccessibility::ROLE_DISCLOSURE_TRIANGLE, 118 { AccessibilityNodeData::ROLE_DIRECTORY, NSAccessibilityListRole },
119 { AccessibilityNodeData::ROLE_DISCLOSURE_TRIANGLE,
117 NSAccessibilityDisclosureTriangleRole }, 120 NSAccessibilityDisclosureTriangleRole },
118 { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole }, 121 { AccessibilityNodeData::ROLE_DOCUMENT, NSAccessibilityGroupRole },
119 { WebAccessibility::ROLE_DRAWER, NSAccessibilityDrawerRole }, 122 { AccessibilityNodeData::ROLE_DRAWER, NSAccessibilityDrawerRole },
120 { WebAccessibility::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole }, 123 { AccessibilityNodeData::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole },
121 { WebAccessibility::ROLE_FOOTER, NSAccessibilityGroupRole }, 124 { AccessibilityNodeData::ROLE_FOOTER, NSAccessibilityGroupRole },
122 { WebAccessibility::ROLE_GRID, NSAccessibilityGridRole }, 125 { AccessibilityNodeData::ROLE_GRID, NSAccessibilityGridRole },
123 { WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole }, 126 { AccessibilityNodeData::ROLE_GROUP, NSAccessibilityGroupRole },
124 { WebAccessibility::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole }, 127 { AccessibilityNodeData::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole },
125 { WebAccessibility::ROLE_HEADING, @"AXHeading" }, 128 { AccessibilityNodeData::ROLE_HEADING, @"AXHeading" },
126 { WebAccessibility::ROLE_HELP_TAG, NSAccessibilityHelpTagRole }, 129 { AccessibilityNodeData::ROLE_HELP_TAG, NSAccessibilityHelpTagRole },
127 { WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole }, 130 { AccessibilityNodeData::ROLE_IGNORED, NSAccessibilityUnknownRole },
128 { WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole }, 131 { AccessibilityNodeData::ROLE_IMAGE, NSAccessibilityImageRole },
129 { WebAccessibility::ROLE_IMAGE_MAP, NSAccessibilityGroupRole }, 132 { AccessibilityNodeData::ROLE_IMAGE_MAP, NSAccessibilityGroupRole },
130 { WebAccessibility::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole }, 133 { AccessibilityNodeData::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole },
131 { WebAccessibility::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole }, 134 { AccessibilityNodeData::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole },
132 { WebAccessibility::ROLE_LANDMARK_APPLICATION, NSAccessibilityGroupRole }, 135 { AccessibilityNodeData::ROLE_LANDMARK_APPLICATION,
133 { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole }, 136 NSAccessibilityGroupRole },
134 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole }, 137 { AccessibilityNodeData::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
135 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole }, 138 { AccessibilityNodeData::ROLE_LANDMARK_COMPLEMENTARY,
136 { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole }, 139 NSAccessibilityGroupRole },
137 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole }, 140 { AccessibilityNodeData::ROLE_LANDMARK_CONTENTINFO,
138 { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole }, 141 NSAccessibilityGroupRole },
139 { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole }, 142 { AccessibilityNodeData::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
140 { WebAccessibility::ROLE_LIST, NSAccessibilityListRole }, 143 { AccessibilityNodeData::ROLE_LANDMARK_NAVIGATION,
141 { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole }, 144 NSAccessibilityGroupRole },
142 { WebAccessibility::ROLE_LIST_MARKER, @"AXListMarker" }, 145 { AccessibilityNodeData::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
143 { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole }, 146 { AccessibilityNodeData::ROLE_LINK, NSAccessibilityLinkRole },
144 { WebAccessibility::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole }, 147 { AccessibilityNodeData::ROLE_LIST, NSAccessibilityListRole },
145 { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole }, 148 { AccessibilityNodeData::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
146 { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole }, 149 { AccessibilityNodeData::ROLE_LIST_MARKER, @"AXListMarker" },
147 { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole }, 150 { AccessibilityNodeData::ROLE_LISTBOX, NSAccessibilityListRole },
148 { WebAccessibility::ROLE_MATTE, NSAccessibilityMatteRole }, 151 { AccessibilityNodeData::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole },
149 { WebAccessibility::ROLE_MENU, NSAccessibilityMenuRole }, 152 { AccessibilityNodeData::ROLE_LOG, NSAccessibilityGroupRole },
150 { WebAccessibility::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole }, 153 { AccessibilityNodeData::ROLE_MARQUEE, NSAccessibilityGroupRole },
151 { WebAccessibility::ROLE_MENU_BUTTON, NSAccessibilityButtonRole }, 154 { AccessibilityNodeData::ROLE_MATH, NSAccessibilityGroupRole },
152 { WebAccessibility::ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole }, 155 { AccessibilityNodeData::ROLE_MATTE, NSAccessibilityMatteRole },
153 { WebAccessibility::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole }, 156 { AccessibilityNodeData::ROLE_MENU, NSAccessibilityMenuRole },
154 { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole }, 157 { AccessibilityNodeData::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole },
155 { WebAccessibility::ROLE_OUTLINE, NSAccessibilityOutlineRole }, 158 { AccessibilityNodeData::ROLE_MENU_BUTTON, NSAccessibilityButtonRole },
156 { WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole }, 159 { AccessibilityNodeData::ROLE_MENU_LIST_OPTION,
157 { WebAccessibility::ROLE_PROGRESS_INDICATOR, 160 NSAccessibilityMenuItemRole },
161 { AccessibilityNodeData::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole },
162 { AccessibilityNodeData::ROLE_NOTE, NSAccessibilityGroupRole },
163 { AccessibilityNodeData::ROLE_OUTLINE, NSAccessibilityOutlineRole },
164 { AccessibilityNodeData::ROLE_POPUP_BUTTON,
165 NSAccessibilityPopUpButtonRole },
166 { AccessibilityNodeData::ROLE_PROGRESS_INDICATOR,
158 NSAccessibilityProgressIndicatorRole }, 167 NSAccessibilityProgressIndicatorRole },
159 { WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole }, 168 { AccessibilityNodeData::ROLE_RADIO_BUTTON,
160 { WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole }, 169 NSAccessibilityRadioButtonRole },
161 { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole }, 170 { AccessibilityNodeData::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
162 { WebAccessibility::ROLE_ROOT_WEB_AREA, @"AXWebArea" }, 171 { AccessibilityNodeData::ROLE_REGION, NSAccessibilityGroupRole },
163 { WebAccessibility::ROLE_ROW, NSAccessibilityRowRole }, 172 { AccessibilityNodeData::ROLE_ROOT_WEB_AREA, @"AXWebArea" },
164 { WebAccessibility::ROLE_ROW_HEADER, @"AXCell" }, 173 { AccessibilityNodeData::ROLE_ROW, NSAccessibilityRowRole },
165 { WebAccessibility::ROLE_RULER, NSAccessibilityRulerRole }, 174 { AccessibilityNodeData::ROLE_ROW_HEADER, @"AXCell" },
166 { WebAccessibility::ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole }, 175 { AccessibilityNodeData::ROLE_RULER, NSAccessibilityRulerRole },
176 { AccessibilityNodeData::ROLE_RULER_MARKER,
177 NSAccessibilityRulerMarkerRole },
167 // TODO(dtseng): we don't correctly support the attributes for these roles. 178 // TODO(dtseng): we don't correctly support the attributes for these roles.
168 // { WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole }, 179 // { AccessibilityNodeData::ROLE_SCROLLAREA,
169 // { WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole }, 180 // NSAccessibilityScrollAreaRole },
170 { WebAccessibility::ROLE_SHEET, NSAccessibilitySheetRole }, 181 // { AccessibilityNodeData::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
171 { WebAccessibility::ROLE_SLIDER, NSAccessibilitySliderRole }, 182 { AccessibilityNodeData::ROLE_SHEET, NSAccessibilitySheetRole },
172 { WebAccessibility::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole }, 183 { AccessibilityNodeData::ROLE_SLIDER, NSAccessibilitySliderRole },
173 { WebAccessibility::ROLE_SPLITTER, NSAccessibilitySplitterRole }, 184 { AccessibilityNodeData::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole },
174 { WebAccessibility::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole }, 185 { AccessibilityNodeData::ROLE_SPLITTER, NSAccessibilitySplitterRole },
175 { WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole }, 186 { AccessibilityNodeData::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole },
176 { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole }, 187 { AccessibilityNodeData::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
177 { WebAccessibility::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole }, 188 { AccessibilityNodeData::ROLE_STATUS, NSAccessibilityGroupRole },
178 { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole }, 189 { AccessibilityNodeData::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
179 { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole }, 190 { AccessibilityNodeData::ROLE_TAB, NSAccessibilityRadioButtonRole },
180 { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole }, 191 { AccessibilityNodeData::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
181 { WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole }, 192 { AccessibilityNodeData::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
182 { WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole }, 193 { AccessibilityNodeData::ROLE_TABLE, NSAccessibilityTableRole },
183 { WebAccessibility::ROLE_TAB_GROUP_UNUSED, NSAccessibilityTabGroupRole }, 194 { AccessibilityNodeData::ROLE_TABLE_HEADER_CONTAINER,
184 { WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole }, 195 NSAccessibilityGroupRole },
185 { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole }, 196 { AccessibilityNodeData::ROLE_TAB_GROUP_UNUSED,
186 { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole }, 197 NSAccessibilityTabGroupRole },
187 { WebAccessibility::ROLE_TOOLBAR, NSAccessibilityToolbarRole }, 198 { AccessibilityNodeData::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
188 { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole }, 199 { AccessibilityNodeData::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
189 { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole }, 200 { AccessibilityNodeData::ROLE_TIMER, NSAccessibilityGroupRole },
190 { WebAccessibility::ROLE_TREE_GRID, NSAccessibilityTableRole }, 201 { AccessibilityNodeData::ROLE_TOOLBAR, NSAccessibilityToolbarRole },
191 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole }, 202 { AccessibilityNodeData::ROLE_TOOLTIP, NSAccessibilityGroupRole },
192 { WebAccessibility::ROLE_VALUE_INDICATOR, 203 { AccessibilityNodeData::ROLE_TREE, NSAccessibilityOutlineRole },
204 { AccessibilityNodeData::ROLE_TREE_GRID, NSAccessibilityTableRole },
205 { AccessibilityNodeData::ROLE_TREE_ITEM, NSAccessibilityRowRole },
206 { AccessibilityNodeData::ROLE_VALUE_INDICATOR,
193 NSAccessibilityValueIndicatorRole }, 207 NSAccessibilityValueIndicatorRole },
194 { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole }, 208 { AccessibilityNodeData::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
195 { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" }, 209 { AccessibilityNodeData::ROLE_WEB_AREA, @"AXWebArea" },
196 { WebAccessibility::ROLE_WINDOW, NSAccessibilityUnknownRole }, 210 { AccessibilityNodeData::ROLE_WINDOW, NSAccessibilityUnknownRole },
197 }; 211 };
198 212
199 RoleMap role_map; 213 RoleMap role_map;
200 for (size_t i = 0; i < arraysize(roles); ++i) 214 for (size_t i = 0; i < arraysize(roles); ++i)
201 role_map[roles[i].webKitValue] = roles[i].nativeValue; 215 role_map[roles[i].webKitValue] = roles[i].nativeValue;
202 return role_map; 216 return role_map;
203 } 217 }
204 218
205 // A mapping of webkit roles to native roles. 219 // A mapping of webkit roles to native roles.
206 NSString* NativeRoleFromWebAccessibilityRole( 220 NSString* NativeRoleFromAccessibilityNodeDataRole(
207 const WebAccessibility::Role& role) { 221 const AccessibilityNodeData::Role& role) {
208 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role, 222 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role,
209 (BuildRoleMap())); 223 (BuildRoleMap()));
210 RoleMap::iterator it = web_accessibility_to_native_role.find(role); 224 RoleMap::iterator it = web_accessibility_to_native_role.find(role);
211 if (it != web_accessibility_to_native_role.end()) 225 if (it != web_accessibility_to_native_role.end())
212 return it->second; 226 return it->second;
213 else 227 else
214 return NSAccessibilityUnknownRole; 228 return NSAccessibilityUnknownRole;
215 } 229 }
216 230
217 RoleMap BuildSubroleMap() { 231 RoleMap BuildSubroleMap() {
218 const MapEntry subroles[] = { 232 const MapEntry subroles[] = {
219 { WebAccessibility::ROLE_ALERT, @"AXApplicationAlert" }, 233 { AccessibilityNodeData::ROLE_ALERT, @"AXApplicationAlert" },
220 { WebAccessibility::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" }, 234 { AccessibilityNodeData::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" },
221 { WebAccessibility::ROLE_ARTICLE, @"AXDocumentArticle" }, 235 { AccessibilityNodeData::ROLE_ARTICLE, @"AXDocumentArticle" },
222 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" }, 236 { AccessibilityNodeData::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" },
223 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, @"AXTerm" }, 237 { AccessibilityNodeData::ROLE_DEFINITION_LIST_TERM, @"AXTerm" },
224 { WebAccessibility::ROLE_DIALOG, @"AXApplicationDialog" }, 238 { AccessibilityNodeData::ROLE_DIALOG, @"AXApplicationDialog" },
225 { WebAccessibility::ROLE_DOCUMENT, @"AXDocument" }, 239 { AccessibilityNodeData::ROLE_DOCUMENT, @"AXDocument" },
226 { WebAccessibility::ROLE_FOOTER, @"AXLandmarkContentInfo" }, 240 { AccessibilityNodeData::ROLE_FOOTER, @"AXLandmarkContentInfo" },
227 { WebAccessibility::ROLE_LANDMARK_APPLICATION, @"AXLandmarkApplication" }, 241 { AccessibilityNodeData::ROLE_LANDMARK_APPLICATION,
228 { WebAccessibility::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" }, 242 @"AXLandmarkApplication" },
229 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, 243 { AccessibilityNodeData::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" },
244 { AccessibilityNodeData::ROLE_LANDMARK_COMPLEMENTARY,
230 @"AXLandmarkComplementary" }, 245 @"AXLandmarkComplementary" },
231 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, @"AXLandmarkContentInfo" }, 246 { AccessibilityNodeData::ROLE_LANDMARK_CONTENTINFO,
232 { WebAccessibility::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" }, 247 @"AXLandmarkContentInfo" },
233 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, @"AXLandmarkNavigation" }, 248 { AccessibilityNodeData::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" },
234 { WebAccessibility::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" }, 249 { AccessibilityNodeData::ROLE_LANDMARK_NAVIGATION,
235 { WebAccessibility::ROLE_LOG, @"AXApplicationLog" }, 250 @"AXLandmarkNavigation" },
236 { WebAccessibility::ROLE_MARQUEE, @"AXApplicationMarquee" }, 251 { AccessibilityNodeData::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" },
237 { WebAccessibility::ROLE_MATH, @"AXDocumentMath" }, 252 { AccessibilityNodeData::ROLE_LOG, @"AXApplicationLog" },
238 { WebAccessibility::ROLE_NOTE, @"AXDocumentNote" }, 253 { AccessibilityNodeData::ROLE_MARQUEE, @"AXApplicationMarquee" },
239 { WebAccessibility::ROLE_REGION, @"AXDocumentRegion" }, 254 { AccessibilityNodeData::ROLE_MATH, @"AXDocumentMath" },
240 { WebAccessibility::ROLE_STATUS, @"AXApplicationStatus" }, 255 { AccessibilityNodeData::ROLE_NOTE, @"AXDocumentNote" },
241 { WebAccessibility::ROLE_TAB_PANEL, @"AXTabPanel" }, 256 { AccessibilityNodeData::ROLE_REGION, @"AXDocumentRegion" },
242 { WebAccessibility::ROLE_TIMER, @"AXApplicationTimer" }, 257 { AccessibilityNodeData::ROLE_STATUS, @"AXApplicationStatus" },
243 { WebAccessibility::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" }, 258 { AccessibilityNodeData::ROLE_TAB_PANEL, @"AXTabPanel" },
244 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole }, 259 { AccessibilityNodeData::ROLE_TIMER, @"AXApplicationTimer" },
260 { AccessibilityNodeData::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
261 { AccessibilityNodeData::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
245 }; 262 };
246 263
247 RoleMap subrole_map; 264 RoleMap subrole_map;
248 for (size_t i = 0; i < arraysize(subroles); ++i) 265 for (size_t i = 0; i < arraysize(subroles); ++i)
249 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; 266 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue;
250 return subrole_map; 267 return subrole_map;
251 } 268 }
252 269
253 // A mapping of webkit roles to native subroles. 270 // A mapping of webkit roles to native subroles.
254 NSString* NativeSubroleFromWebAccessibilityRole( 271 NSString* NativeSubroleFromAccessibilityNodeDataRole(
255 const WebAccessibility::Role& role) { 272 const AccessibilityNodeData::Role& role) {
256 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole, 273 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole,
257 (BuildSubroleMap())); 274 (BuildSubroleMap()));
258 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role); 275 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role);
259 if (it != web_accessibility_to_native_subrole.end()) 276 if (it != web_accessibility_to_native_subrole.end())
260 return it->second; 277 return it->second;
261 else 278 else
262 return nil; 279 return nil;
263 } 280 }
264 281
265 // A mapping from an accessibility attribute to its method name. 282 // A mapping from an accessibility attribute to its method name.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 delete browserAccessibility_; 314 delete browserAccessibility_;
298 browserAccessibility_ = NULL; 315 browserAccessibility_ = NULL;
299 } 316 }
300 317
301 [super dealloc]; 318 [super dealloc];
302 } 319 }
303 320
304 - (NSString*)accessKey { 321 - (NSString*)accessKey {
305 return NSStringForStringAttribute( 322 return NSStringForStringAttribute(
306 browserAccessibility_->string_attributes(), 323 browserAccessibility_->string_attributes(),
307 WebAccessibility::ATTR_ACCESS_KEY); 324 AccessibilityNodeData::ATTR_ACCESS_KEY);
308 } 325 }
309 326
310 - (NSNumber*)ariaAtomic { 327 - (NSNumber*)ariaAtomic {
311 bool boolValue = false; 328 bool boolValue = false;
312 browserAccessibility_->GetBoolAttribute( 329 browserAccessibility_->GetBoolAttribute(
313 WebAccessibility::ATTR_LIVE_ATOMIC, &boolValue); 330 AccessibilityNodeData::ATTR_LIVE_ATOMIC, &boolValue);
314 return [NSNumber numberWithBool:boolValue]; 331 return [NSNumber numberWithBool:boolValue];
315 } 332 }
316 333
317 - (NSNumber*)ariaBusy { 334 - (NSNumber*)ariaBusy {
318 bool boolValue = false; 335 bool boolValue = false;
319 browserAccessibility_->GetBoolAttribute( 336 browserAccessibility_->GetBoolAttribute(
320 WebAccessibility::ATTR_LIVE_BUSY, &boolValue); 337 AccessibilityNodeData::ATTR_LIVE_BUSY, &boolValue);
321 return [NSNumber numberWithBool:boolValue]; 338 return [NSNumber numberWithBool:boolValue];
322 } 339 }
323 340
324 - (NSString*)ariaLive { 341 - (NSString*)ariaLive {
325 return NSStringForStringAttribute( 342 return NSStringForStringAttribute(
326 browserAccessibility_->string_attributes(), 343 browserAccessibility_->string_attributes(),
327 WebAccessibility::ATTR_LIVE_STATUS); 344 AccessibilityNodeData::ATTR_LIVE_STATUS);
328 } 345 }
329 346
330 - (NSString*)ariaRelevant { 347 - (NSString*)ariaRelevant {
331 return NSStringForStringAttribute( 348 return NSStringForStringAttribute(
332 browserAccessibility_->string_attributes(), 349 browserAccessibility_->string_attributes(),
333 WebAccessibility::ATTR_LIVE_RELEVANT); 350 AccessibilityNodeData::ATTR_LIVE_RELEVANT);
334 } 351 }
335 352
336 // Returns an array of BrowserAccessibilityCocoa objects, representing the 353 // Returns an array of BrowserAccessibilityCocoa objects, representing the
337 // accessibility children of this object. 354 // accessibility children of this object.
338 - (NSArray*)children { 355 - (NSArray*)children {
339 if (!children_.get()) { 356 if (!children_.get()) {
340 children_.reset([[NSMutableArray alloc] 357 children_.reset([[NSMutableArray alloc]
341 initWithCapacity:browserAccessibility_->child_count()] ); 358 initWithCapacity:browserAccessibility_->child_count()] );
342 for (uint32 index = 0; 359 for (uint32 index = 0;
343 index < browserAccessibility_->child_count(); 360 index < browserAccessibility_->child_count();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 if ([[child role] isEqualToString:NSAccessibilityColumnRole]) 402 if ([[child role] isEqualToString:NSAccessibilityColumnRole])
386 [ret addObject:child]; 403 [ret addObject:child];
387 } 404 }
388 return ret; 405 return ret;
389 } 406 }
390 407
391 - (NSString*)description { 408 - (NSString*)description {
392 const std::map<StringAttribute, string16>& attributes = 409 const std::map<StringAttribute, string16>& attributes =
393 browserAccessibility_->string_attributes(); 410 browserAccessibility_->string_attributes();
394 std::map<StringAttribute, string16>::const_iterator iter = 411 std::map<StringAttribute, string16>::const_iterator iter =
395 attributes.find(WebAccessibility::ATTR_DESCRIPTION); 412 attributes.find(AccessibilityNodeData::ATTR_DESCRIPTION);
396 if (iter != attributes.end()) 413 if (iter != attributes.end())
397 return base::SysUTF16ToNSString(iter->second); 414 return base::SysUTF16ToNSString(iter->second);
398 415
399 // If the role is anything other than an image, or if there's 416 // If the role is anything other than an image, or if there's
400 // a title or title UI element, just return an empty string. 417 // a title or title UI element, just return an empty string.
401 if (![[self role] isEqualToString:NSAccessibilityImageRole]) 418 if (![[self role] isEqualToString:NSAccessibilityImageRole])
402 return @""; 419 return @"";
403 if (!browserAccessibility_->name().empty()) 420 if (!browserAccessibility_->name().empty())
404 return @""; 421 return @"";
405 if ([self titleUIElement]) 422 if ([self titleUIElement])
406 return @""; 423 return @"";
407 424
408 // The remaining case is an image where there's no other title. 425 // The remaining case is an image where there's no other title.
409 // Return the base part of the filename as the description. 426 // Return the base part of the filename as the description.
410 iter = attributes.find(WebAccessibility::ATTR_URL); 427 iter = attributes.find(AccessibilityNodeData::ATTR_URL);
411 if (iter != attributes.end()) { 428 if (iter != attributes.end()) {
412 string16 filename = iter->second; 429 string16 filename = iter->second;
413 // Given a url like http://foo.com/bar/baz.png, just return the 430 // Given a url like http://foo.com/bar/baz.png, just return the
414 // base name, e.g., "baz.png". 431 // base name, e.g., "baz.png".
415 size_t leftIndex = filename.size(); 432 size_t leftIndex = filename.size();
416 while (leftIndex > 0 && filename[leftIndex - 1] != '/') 433 while (leftIndex > 0 && filename[leftIndex - 1] != '/')
417 leftIndex--; 434 leftIndex--;
418 string16 basename = filename.substr(leftIndex); 435 string16 basename = filename.substr(leftIndex);
419 436
420 return base::SysUTF16ToNSString(basename); 437 return base::SysUTF16ToNSString(basename);
421 } 438 }
422 439
423 return @""; 440 return @"";
424 } 441 }
425 442
426 - (NSNumber*)enabled { 443 - (NSNumber*)enabled {
427 return [NSNumber numberWithBool: 444 return [NSNumber numberWithBool:
428 !GetState(browserAccessibility_, WebAccessibility::STATE_UNAVAILABLE)]; 445 !GetState(browserAccessibility_,
446 AccessibilityNodeData::STATE_UNAVAILABLE)];
429 } 447 }
430 448
431 - (NSNumber*)focused { 449 - (NSNumber*)focused {
432 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); 450 BrowserAccessibilityManager* manager = browserAccessibility_->manager();
433 NSNumber* ret = [NSNumber numberWithBool: 451 NSNumber* ret = [NSNumber numberWithBool:
434 manager->GetFocus(NULL) == browserAccessibility_]; 452 manager->GetFocus(NULL) == browserAccessibility_];
435 return ret; 453 return ret;
436 } 454 }
437 455
438 - (NSString*)help { 456 - (NSString*)help {
439 return NSStringForStringAttribute( 457 return NSStringForStringAttribute(
440 browserAccessibility_->string_attributes(), 458 browserAccessibility_->string_attributes(),
441 WebAccessibility::ATTR_HELP); 459 AccessibilityNodeData::ATTR_HELP);
442 } 460 }
443 461
444 // Returns whether or not this node should be ignored in the 462 // Returns whether or not this node should be ignored in the
445 // accessibility tree. 463 // accessibility tree.
446 - (BOOL)isIgnored { 464 - (BOOL)isIgnored {
447 return [[self role] isEqualToString:NSAccessibilityUnknownRole]; 465 return [[self role] isEqualToString:NSAccessibilityUnknownRole];
448 } 466 }
449 467
450 - (NSNumber*)loaded { 468 - (NSNumber*)loaded {
451 return [NSNumber numberWithBool:YES]; 469 return [NSNumber numberWithBool:YES];
452 } 470 }
453 471
454 - (NSNumber*)loadingProgress { 472 - (NSNumber*)loadingProgress {
455 float floatValue = 0.0; 473 float floatValue = 0.0;
456 browserAccessibility_->GetFloatAttribute( 474 browserAccessibility_->GetFloatAttribute(
457 WebAccessibility::ATTR_DOC_LOADING_PROGRESS, &floatValue); 475 AccessibilityNodeData::ATTR_DOC_LOADING_PROGRESS, &floatValue);
458 return [NSNumber numberWithFloat:floatValue]; 476 return [NSNumber numberWithFloat:floatValue];
459 } 477 }
460 478
461 - (NSNumber*)maxValue { 479 - (NSNumber*)maxValue {
462 float floatValue = 0.0; 480 float floatValue = 0.0;
463 browserAccessibility_->GetFloatAttribute( 481 browserAccessibility_->GetFloatAttribute(
464 WebAccessibility::ATTR_MAX_VALUE_FOR_RANGE, &floatValue); 482 AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE, &floatValue);
465 return [NSNumber numberWithFloat:floatValue]; 483 return [NSNumber numberWithFloat:floatValue];
466 } 484 }
467 485
468 - (NSNumber*)minValue { 486 - (NSNumber*)minValue {
469 float floatValue = 0.0; 487 float floatValue = 0.0;
470 browserAccessibility_->GetFloatAttribute( 488 browserAccessibility_->GetFloatAttribute(
471 WebAccessibility::ATTR_MIN_VALUE_FOR_RANGE, &floatValue); 489 AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE, &floatValue);
472 return [NSNumber numberWithFloat:floatValue]; 490 return [NSNumber numberWithFloat:floatValue];
473 } 491 }
474 492
475 - (NSNumber*)numberOfCharacters { 493 - (NSNumber*)numberOfCharacters {
476 return [NSNumber numberWithInt:browserAccessibility_->value().length()]; 494 return [NSNumber numberWithInt:browserAccessibility_->value().length()];
477 } 495 }
478 496
479 // The origin of this accessibility object in the page's document. 497 // The origin of this accessibility object in the page's document.
480 // This is relative to webkit's top-left origin, not Cocoa's 498 // This is relative to webkit's top-left origin, not Cocoa's
481 // bottom-left origin. 499 // bottom-left origin.
(...skipping 12 matching lines...) Expand all
494 return browserAccessibility_->manager()->GetParentView(); 512 return browserAccessibility_->manager()->GetParentView();
495 } 513 }
496 } 514 }
497 515
498 - (NSValue*)position { 516 - (NSValue*)position {
499 return [NSValue valueWithPoint:[delegate_ accessibilityPointInScreen:self]]; 517 return [NSValue valueWithPoint:[delegate_ accessibilityPointInScreen:self]];
500 } 518 }
501 519
502 - (NSNumber*)required { 520 - (NSNumber*)required {
503 return [NSNumber numberWithBool: 521 return [NSNumber numberWithBool:
504 GetState(browserAccessibility_, WebAccessibility::STATE_REQUIRED)]; 522 GetState(browserAccessibility_, AccessibilityNodeData::STATE_REQUIRED)];
505 } 523 }
506 524
507 // Returns a string indicating the role of this object. 525 // Returns a string indicating the role of this object.
508 - (NSString*)role { 526 - (NSString*)role {
509 WebAccessibility::Role browserAccessibilityRole = 527 AccessibilityNodeData::Role browserAccessibilityRole =
510 static_cast<WebAccessibility::Role>( browserAccessibility_->role()); 528 static_cast<AccessibilityNodeData::Role>( browserAccessibility_->role());
511 529
512 // Roles that we only determine at runtime. 530 // Roles that we only determine at runtime.
513 return NativeRoleFromWebAccessibilityRole(browserAccessibilityRole); 531 return NativeRoleFromAccessibilityNodeDataRole(browserAccessibilityRole);
514 } 532 }
515 533
516 // Returns a string indicating the role description of this object. 534 // Returns a string indicating the role description of this object.
517 - (NSString*)roleDescription { 535 - (NSString*)roleDescription {
518 NSString* role = [self role]; 536 NSString* role = [self role];
519 537
520 content::ContentClient* content_client = content::GetContentClient(); 538 content::ContentClient* content_client = content::GetContentClient();
521 539
522 // The following descriptions are specific to webkit. 540 // The following descriptions are specific to webkit.
523 if ([role isEqualToString:@"AXWebArea"]) { 541 if ([role isEqualToString:@"AXWebArea"]) {
524 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 542 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
525 IDS_AX_ROLE_WEB_AREA)); 543 IDS_AX_ROLE_WEB_AREA));
526 } 544 }
527 545
528 if ([role isEqualToString:@"NSAccessibilityLinkRole"]) { 546 if ([role isEqualToString:@"NSAccessibilityLinkRole"]) {
529 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 547 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
530 IDS_AX_ROLE_LINK)); 548 IDS_AX_ROLE_LINK));
531 } 549 }
532 550
533 if ([role isEqualToString:@"AXHeading"]) { 551 if ([role isEqualToString:@"AXHeading"]) {
534 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 552 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
535 IDS_AX_ROLE_HEADING)); 553 IDS_AX_ROLE_HEADING));
536 } 554 }
537 555
538 if ([role isEqualToString:NSAccessibilityGroupRole] || 556 if ([role isEqualToString:NSAccessibilityGroupRole] ||
539 [role isEqualToString:NSAccessibilityRadioButtonRole]) { 557 [role isEqualToString:NSAccessibilityRadioButtonRole]) {
540 const std::vector<std::pair<string16, string16> >& htmlAttributes = 558 const std::vector<std::pair<string16, string16> >& htmlAttributes =
541 browserAccessibility_->html_attributes(); 559 browserAccessibility_->html_attributes();
542 WebAccessibility::Role browserAccessibilityRole = 560 AccessibilityNodeData::Role browserAccessibilityRole =
543 static_cast<WebAccessibility::Role>(browserAccessibility_->role()); 561 static_cast<AccessibilityNodeData::Role>(browserAccessibility_->role());
544 562
545 if ((browserAccessibilityRole != WebAccessibility::ROLE_GROUP && 563 if ((browserAccessibilityRole != AccessibilityNodeData::ROLE_GROUP &&
546 browserAccessibilityRole != WebAccessibility::ROLE_LIST_ITEM) || 564 browserAccessibilityRole != AccessibilityNodeData::ROLE_LIST_ITEM) ||
547 browserAccessibilityRole == WebAccessibility::ROLE_TAB) { 565 browserAccessibilityRole == AccessibilityNodeData::ROLE_TAB) {
548 for (size_t i = 0; i < htmlAttributes.size(); ++i) { 566 for (size_t i = 0; i < htmlAttributes.size(); ++i) {
549 const std::pair<string16, string16>& htmlAttribute = htmlAttributes[i]; 567 const std::pair<string16, string16>& htmlAttribute = htmlAttributes[i];
550 if (htmlAttribute.first == ASCIIToUTF16("role")) { 568 if (htmlAttribute.first == ASCIIToUTF16("role")) {
551 // TODO(dtseng): This is not localized; see crbug/84814. 569 // TODO(dtseng): This is not localized; see crbug/84814.
552 return base::SysUTF16ToNSString(htmlAttribute.second); 570 return base::SysUTF16ToNSString(htmlAttribute.second);
553 } 571 }
554 } 572 }
555 } 573 }
556 } 574 }
557 575
558 if (static_cast<WebAccessibility::Role>( browserAccessibility_->role()) == 576 AccessibilityNodeData::Role internal_role =
559 WebAccessibility::ROLE_FOOTER) { 577 static_cast<AccessibilityNodeData::Role>(browserAccessibility_->role());
578 if (internal_role == AccessibilityNodeData::ROLE_FOOTER) {
560 return base::SysUTF16ToNSString(content_client->GetLocalizedString( 579 return base::SysUTF16ToNSString(content_client->GetLocalizedString(
561 IDS_AX_ROLE_FOOTER)); 580 IDS_AX_ROLE_FOOTER));
562 } 581 }
563 582
564 return NSAccessibilityRoleDescription(role, nil); 583 return NSAccessibilityRoleDescription(role, nil);
565 } 584 }
566 585
567 - (NSArray*)rows { 586 - (NSArray*)rows {
568 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 587 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
569 for (BrowserAccessibilityCocoa* child in [self children]) { 588 for (BrowserAccessibilityCocoa* child in [self children]) {
570 if ([[child role] isEqualToString:NSAccessibilityRowRole]) 589 if ([[child role] isEqualToString:NSAccessibilityRowRole])
571 [ret addObject:child]; 590 [ret addObject:child];
572 } 591 }
573 592
574 return ret; 593 return ret;
575 } 594 }
576 595
577 // Returns the size of this object. 596 // Returns the size of this object.
578 - (NSValue*)size { 597 - (NSValue*)size {
579 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); 598 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect();
580 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; 599 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())];
581 } 600 }
582 601
583 // Returns a subrole based upon the role. 602 // Returns a subrole based upon the role.
584 - (NSString*) subrole { 603 - (NSString*) subrole {
585 WebAccessibility::Role browserAccessibilityRole = 604 AccessibilityNodeData::Role browserAccessibilityRole =
586 static_cast<WebAccessibility::Role>(browserAccessibility_->role()); 605 static_cast<AccessibilityNodeData::Role>(browserAccessibility_->role());
587 if (browserAccessibilityRole == WebAccessibility::ROLE_TEXT_FIELD && 606 if (browserAccessibilityRole == AccessibilityNodeData::ROLE_TEXT_FIELD &&
588 GetState(browserAccessibility_, WebAccessibility::STATE_PROTECTED)) { 607 GetState(browserAccessibility_, AccessibilityNodeData::STATE_PROTECTED)) {
589 return @"AXSecureTextField"; 608 return @"AXSecureTextField";
590 } 609 }
591 610
592 NSString* htmlTag = NSStringForStringAttribute( 611 NSString* htmlTag = NSStringForStringAttribute(
593 browserAccessibility_->string_attributes(), 612 browserAccessibility_->string_attributes(),
594 WebAccessibility::ATTR_HTML_TAG); 613 AccessibilityNodeData::ATTR_HTML_TAG);
595 614
596 if (browserAccessibilityRole == WebAccessibility::ROLE_LIST) { 615 if (browserAccessibilityRole == AccessibilityNodeData::ROLE_LIST) {
597 if ([htmlTag isEqualToString:@"ul"] || 616 if ([htmlTag isEqualToString:@"ul"] ||
598 [htmlTag isEqualToString:@"ol"]) { 617 [htmlTag isEqualToString:@"ol"]) {
599 return @"AXContentList"; 618 return @"AXContentList";
600 } else if ([htmlTag isEqualToString:@"dl"]) { 619 } else if ([htmlTag isEqualToString:@"dl"]) {
601 return @"AXDefinitionList"; 620 return @"AXDefinitionList";
602 } 621 }
603 } 622 }
604 623
605 return NativeSubroleFromWebAccessibilityRole(browserAccessibilityRole); 624 return NativeSubroleFromAccessibilityNodeDataRole(browserAccessibilityRole);
606 } 625 }
607 626
608 // Returns all tabs in this subtree. 627 // Returns all tabs in this subtree.
609 - (NSArray*)tabs { 628 - (NSArray*)tabs {
610 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; 629 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease];
611 630
612 if (browserAccessibility_->role() == WebAccessibility::ROLE_TAB) 631 if (browserAccessibility_->role() == AccessibilityNodeData::ROLE_TAB)
613 [tabSubtree addObject:self]; 632 [tabSubtree addObject:self];
614 633
615 for (uint i=0; i < [[self children] count]; ++i) { 634 for (uint i=0; i < [[self children] count]; ++i) {
616 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; 635 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs];
617 if ([tabChildren count] > 0) 636 if ([tabChildren count] > 0)
618 [tabSubtree addObjectsFromArray:tabChildren]; 637 [tabSubtree addObjectsFromArray:tabChildren];
619 } 638 }
620 639
621 return tabSubtree; 640 return tabSubtree;
622 } 641 }
623 642
624 - (NSString*)title { 643 - (NSString*)title {
625 return base::SysUTF16ToNSString(browserAccessibility_->name()); 644 return base::SysUTF16ToNSString(browserAccessibility_->name());
626 } 645 }
627 646
628 - (id)titleUIElement { 647 - (id)titleUIElement {
629 int titleElementId; 648 int titleElementId;
630 if (browserAccessibility_->GetIntAttribute( 649 if (browserAccessibility_->GetIntAttribute(
631 WebAccessibility::ATTR_TITLE_UI_ELEMENT, &titleElementId)) { 650 AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &titleElementId)) {
632 BrowserAccessibility* titleElement = 651 BrowserAccessibility* titleElement =
633 browserAccessibility_->manager()->GetFromRendererID(titleElementId); 652 browserAccessibility_->manager()->GetFromRendererID(titleElementId);
634 if (titleElement) 653 if (titleElement)
635 return titleElement->ToBrowserAccessibilityCocoa(); 654 return titleElement->ToBrowserAccessibilityCocoa();
636 } 655 }
637 return nil; 656 return nil;
638 } 657 }
639 658
640 - (NSString*)url { 659 - (NSString*)url {
641 StringAttribute urlAttribute = 660 StringAttribute urlAttribute =
642 [[self role] isEqualToString:@"AXWebArea"] ? 661 [[self role] isEqualToString:@"AXWebArea"] ?
643 WebAccessibility::ATTR_DOC_URL : 662 AccessibilityNodeData::ATTR_DOC_URL :
644 WebAccessibility::ATTR_URL; 663 AccessibilityNodeData::ATTR_URL;
645 return NSStringForStringAttribute( 664 return NSStringForStringAttribute(
646 browserAccessibility_->string_attributes(), 665 browserAccessibility_->string_attributes(),
647 urlAttribute); 666 urlAttribute);
648 } 667 }
649 668
650 - (id)value { 669 - (id)value {
651 // WebCore uses an attachmentView to get the below behavior. 670 // WebCore uses an attachmentView to get the below behavior.
652 // We do not have any native views backing this object, so need 671 // We do not have any native views backing this object, so need
653 // to approximate Cocoa ax behavior best as we can. 672 // to approximate Cocoa ax behavior best as we can.
654 NSString* role = [self role]; 673 NSString* role = [self role];
655 if ([role isEqualToString:@"AXHeading"]) { 674 if ([role isEqualToString:@"AXHeading"]) {
656 NSString* headingLevel = 675 NSString* headingLevel =
657 NSStringForStringAttribute( 676 NSStringForStringAttribute(
658 browserAccessibility_->string_attributes(), 677 browserAccessibility_->string_attributes(),
659 WebAccessibility::ATTR_HTML_TAG); 678 AccessibilityNodeData::ATTR_HTML_TAG);
660 if ([headingLevel length] >= 2) { 679 if ([headingLevel length] >= 2) {
661 return [NSNumber numberWithInt: 680 return [NSNumber numberWithInt:
662 [[headingLevel substringFromIndex:1] intValue]]; 681 [[headingLevel substringFromIndex:1] intValue]];
663 } 682 }
664 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { 683 } else if ([role isEqualToString:NSAccessibilityButtonRole]) {
665 // AXValue does not make sense for pure buttons. 684 // AXValue does not make sense for pure buttons.
666 return @""; 685 return @"";
667 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] || 686 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] ||
668 [role isEqualToString:NSAccessibilityRadioButtonRole]) { 687 [role isEqualToString:NSAccessibilityRadioButtonRole]) {
669 int value = 0; 688 int value = 0;
670 value = GetState( 689 value = GetState(
671 browserAccessibility_, WebAccessibility::STATE_CHECKED) ? 1 : 0; 690 browserAccessibility_, AccessibilityNodeData::STATE_CHECKED) ? 1 : 0;
672 value = GetState( 691 value = GetState(
673 browserAccessibility_, WebAccessibility::STATE_SELECTED) ? 1 : value; 692 browserAccessibility_, AccessibilityNodeData::STATE_SELECTED) ?
693 1 :
694 value;
674 695
675 bool mixed = false; 696 bool mixed = false;
676 browserAccessibility_->GetBoolAttribute( 697 browserAccessibility_->GetBoolAttribute(
677 WebAccessibility::ATTR_BUTTON_MIXED, &mixed); 698 AccessibilityNodeData::ATTR_BUTTON_MIXED, &mixed);
678 if (mixed) 699 if (mixed)
679 value = 2; 700 value = 2;
680 return [NSNumber numberWithInt:value]; 701 return [NSNumber numberWithInt:value];
681 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || 702 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] ||
682 [role isEqualToString:NSAccessibilitySliderRole] || 703 [role isEqualToString:NSAccessibilitySliderRole] ||
683 [role isEqualToString:NSAccessibilityScrollBarRole]) { 704 [role isEqualToString:NSAccessibilityScrollBarRole]) {
684 float floatValue; 705 float floatValue;
685 if (browserAccessibility_->GetFloatAttribute( 706 if (browserAccessibility_->GetFloatAttribute(
686 WebAccessibility::ATTR_VALUE_FOR_RANGE, &floatValue)) { 707 AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &floatValue)) {
687 return [NSNumber numberWithFloat:floatValue]; 708 return [NSNumber numberWithFloat:floatValue];
688 } 709 }
689 } 710 }
690 711
691 return base::SysUTF16ToNSString(browserAccessibility_->value()); 712 return base::SysUTF16ToNSString(browserAccessibility_->value());
692 } 713 }
693 714
694 - (NSValue*)visibleCharacterRange { 715 - (NSValue*)visibleCharacterRange {
695 return [NSValue valueWithRange: 716 return [NSValue valueWithRange:
696 NSMakeRange(0, browserAccessibility_->value().length())]; 717 NSMakeRange(0, browserAccessibility_->value().length())];
697 } 718 }
698 719
699 - (NSNumber*)visited { 720 - (NSNumber*)visited {
700 return [NSNumber numberWithBool: 721 return [NSNumber numberWithBool:
701 GetState(browserAccessibility_, WebAccessibility::STATE_TRAVERSED)]; 722 GetState(browserAccessibility_, AccessibilityNodeData::STATE_TRAVERSED)];
702 } 723 }
703 724
704 - (id)window { 725 - (id)window {
705 return [delegate_ window]; 726 return [delegate_ window];
706 } 727 }
707 728
708 // Returns the accessibility value for the given attribute. If the value isn't 729 // Returns the accessibility value for the given attribute. If the value isn't
709 // supported this will return nil. 730 // supported this will return nil.
710 - (id)accessibilityAttributeValue:(NSString*)attribute { 731 - (id)accessibilityAttributeValue:(NSString*)attribute {
711 SEL selector = 732 SEL selector =
712 NSSelectorFromString([attributeToMethodNameMap objectForKey:attribute]); 733 NSSelectorFromString([attributeToMethodNameMap objectForKey:attribute]);
713 if (selector) 734 if (selector)
714 return [self performSelector:selector]; 735 return [self performSelector:selector];
715 736
716 // TODO(dtseng): refactor remaining attributes. 737 // TODO(dtseng): refactor remaining attributes.
717 int selStart, selEnd; 738 int selStart, selEnd;
718 if (browserAccessibility_->GetIntAttribute( 739 if (browserAccessibility_->GetIntAttribute(
719 WebAccessibility::ATTR_TEXT_SEL_START, &selStart) && 740 AccessibilityNodeData::ATTR_TEXT_SEL_START, &selStart) &&
720 browserAccessibility_-> 741 browserAccessibility_->
721 GetIntAttribute(WebAccessibility::ATTR_TEXT_SEL_END, &selEnd)) { 742 GetIntAttribute(AccessibilityNodeData::ATTR_TEXT_SEL_END, &selEnd)) {
722 if (selStart > selEnd) 743 if (selStart > selEnd)
723 std::swap(selStart, selEnd); 744 std::swap(selStart, selEnd);
724 int selLength = selEnd - selStart; 745 int selLength = selEnd - selStart;
725 if ([attribute isEqualToString: 746 if ([attribute isEqualToString:
726 NSAccessibilityInsertionPointLineNumberAttribute]) { 747 NSAccessibilityInsertionPointLineNumberAttribute]) {
727 const std::vector<int32>& line_breaks = 748 const std::vector<int32>& line_breaks =
728 browserAccessibility_->line_breaks(); 749 browserAccessibility_->line_breaks();
729 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { 750 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) {
730 if (line_breaks[i] > selStart) 751 if (line_breaks[i] > selStart)
731 return [NSNumber numberWithInt:i]; 752 return [NSNumber numberWithInt:i];
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 [role isEqualToString:NSAccessibilityScrollBarRole]) { 933 [role isEqualToString:NSAccessibilityScrollBarRole]) {
913 [ret addObjectsFromArray:[NSArray arrayWithObjects: 934 [ret addObjectsFromArray:[NSArray arrayWithObjects:
914 NSAccessibilityMaxValueAttribute, 935 NSAccessibilityMaxValueAttribute,
915 NSAccessibilityMinValueAttribute, 936 NSAccessibilityMinValueAttribute,
916 nil]]; 937 nil]];
917 } 938 }
918 939
919 // Live regions. 940 // Live regions.
920 string16 s; 941 string16 s;
921 if (browserAccessibility_->GetStringAttribute( 942 if (browserAccessibility_->GetStringAttribute(
922 WebAccessibility::ATTR_LIVE_STATUS, &s)) { 943 AccessibilityNodeData::ATTR_LIVE_STATUS, &s)) {
923 [ret addObjectsFromArray:[NSArray arrayWithObjects: 944 [ret addObjectsFromArray:[NSArray arrayWithObjects:
924 @"AXARIALive", 945 @"AXARIALive",
925 @"AXARIARelevant", 946 @"AXARIARelevant",
926 nil]]; 947 nil]];
927 } 948 }
928 if (browserAccessibility_->GetStringAttribute( 949 if (browserAccessibility_->GetStringAttribute(
929 WebAccessibility::ATTR_CONTAINER_LIVE_STATUS, &s)) { 950 AccessibilityNodeData::ATTR_CONTAINER_LIVE_STATUS, &s)) {
930 [ret addObjectsFromArray:[NSArray arrayWithObjects: 951 [ret addObjectsFromArray:[NSArray arrayWithObjects:
931 @"AXARIAAtomic", 952 @"AXARIAAtomic",
932 @"AXARIABusy", 953 @"AXARIABusy",
933 nil]]; 954 nil]];
934 } 955 }
935 956
936 // Title UI Element. 957 // Title UI Element.
937 int i; 958 int i;
938 if (browserAccessibility_->GetIntAttribute( 959 if (browserAccessibility_->GetIntAttribute(
939 WebAccessibility::ATTR_TITLE_UI_ELEMENT, &i)) { 960 AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &i)) {
940 [ret addObjectsFromArray:[NSArray arrayWithObjects: 961 [ret addObjectsFromArray:[NSArray arrayWithObjects:
941 NSAccessibilityTitleUIElementAttribute, 962 NSAccessibilityTitleUIElementAttribute,
942 nil]]; 963 nil]];
943 } 964 }
944 965
945 return ret; 966 return ret;
946 } 967 }
947 968
948 // Returns the index of the child in this objects array of children. 969 // Returns the index of the child in this objects array of children.
949 - (NSUInteger)accessibilityGetIndexOf:(id)child { 970 - (NSUInteger)accessibilityGetIndexOf:(id)child {
950 NSUInteger index = 0; 971 NSUInteger index = 0;
951 for (BrowserAccessibilityCocoa* childToCheck in [self children]) { 972 for (BrowserAccessibilityCocoa* childToCheck in [self children]) {
952 if ([child isEqual:childToCheck]) 973 if ([child isEqual:childToCheck])
953 return index; 974 return index;
954 ++index; 975 ++index;
955 } 976 }
956 return NSNotFound; 977 return NSNotFound;
957 } 978 }
958 979
959 // Returns whether or not the specified attribute can be set by the 980 // Returns whether or not the specified attribute can be set by the
960 // accessibility API via |accessibilitySetValue:forAttribute:|. 981 // accessibility API via |accessibilitySetValue:forAttribute:|.
961 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { 982 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute {
962 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) 983 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
963 return GetState(browserAccessibility_, WebAccessibility::STATE_FOCUSABLE); 984 return GetState(browserAccessibility_,
985 AccessibilityNodeData::STATE_FOCUSABLE);
964 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { 986 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
965 bool canSetValue = false; 987 bool canSetValue = false;
966 browserAccessibility_->GetBoolAttribute( 988 browserAccessibility_->GetBoolAttribute(
967 WebAccessibility::ATTR_CAN_SET_VALUE, &canSetValue); 989 AccessibilityNodeData::ATTR_CAN_SET_VALUE, &canSetValue);
968 return canSetValue; 990 return canSetValue;
969 } 991 }
970 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && 992 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] &&
971 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] || 993 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] ||
972 [[self role] isEqualToString:NSAccessibilityTextAreaRole])) 994 [[self role] isEqualToString:NSAccessibilityTextAreaRole]))
973 return YES; 995 return YES;
974 996
975 return NO; 997 return NO;
976 } 998 }
977 999
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 return [super hash]; 1077 return [super hash];
1056 return browserAccessibility_->renderer_id(); 1078 return browserAccessibility_->renderer_id();
1057 } 1079 }
1058 1080
1059 - (BOOL)accessibilityShouldUseUniqueId { 1081 - (BOOL)accessibilityShouldUseUniqueId {
1060 return YES; 1082 return YES;
1061 } 1083 }
1062 1084
1063 @end 1085 @end
1064 1086
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | content/browser/accessibility/browser_accessibility_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698