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

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

Powered by Google App Engine
This is Rietveld 408576698