OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |