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/strings/string16.h" | 12 #include "base/strings/string16.h" |
13 #include "base/strings/sys_string_conversions.h" | 13 #include "base/strings/sys_string_conversions.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/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/browser/accessibility/browser_accessibility_manager_mac.h" | 16 #include "content/browser/accessibility/browser_accessibility_manager_mac.h" |
17 #include "content/public/common/content_client.h" | 17 #include "content/public/common/content_client.h" |
18 #include "grit/webkit_strings.h" | 18 #include "grit/webkit_strings.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 using content::AccessibilityNodeData; | 25 using ui::AXNodeData; |
26 using content::BrowserAccessibility; | 26 using content::BrowserAccessibility; |
27 using content::BrowserAccessibilityManager; | 27 using content::BrowserAccessibilityManager; |
28 using content::BrowserAccessibilityManagerMac; | 28 using content::BrowserAccessibilityManagerMac; |
29 using content::ContentClient; | 29 using content::ContentClient; |
30 typedef AccessibilityNodeData::StringAttribute StringAttribute; | 30 typedef ui::AXStringAttribute StringAttribute; |
31 | 31 |
32 namespace { | 32 namespace { |
33 | 33 |
34 // Returns an autoreleased copy of the AccessibilityNodeData's attribute. | 34 // Returns an autoreleased copy of the AXNodeData's attribute. |
35 NSString* NSStringForStringAttribute( | 35 NSString* NSStringForStringAttribute( |
36 BrowserAccessibility* browserAccessibility, | 36 BrowserAccessibility* browserAccessibility, |
37 StringAttribute attribute) { | 37 StringAttribute attribute) { |
38 return base::SysUTF8ToNSString( | 38 return base::SysUTF8ToNSString( |
39 browserAccessibility->GetStringAttribute(attribute)); | 39 browserAccessibility->GetStringAttribute(attribute)); |
40 } | 40 } |
41 | 41 |
42 struct MapEntry { | 42 struct MapEntry { |
43 blink::WebAXRole webKitValue; | 43 ui::AXRole webKitValue; |
44 NSString* nativeValue; | 44 NSString* nativeValue; |
45 }; | 45 }; |
46 | 46 |
47 typedef std::map<blink::WebAXRole, NSString*> RoleMap; | 47 typedef std::map<ui::AXRole, NSString*> RoleMap; |
48 | 48 |
49 // GetState checks the bitmask used in AccessibilityNodeData to check | 49 // GetState checks the bitmask used in AXNodeData to check |
50 // if the given state was set on the accessibility object. | 50 // if the given state was set on the accessibility object. |
51 bool GetState(BrowserAccessibility* accessibility, blink::WebAXState state) { | 51 bool GetState(BrowserAccessibility* accessibility, ui::AXState state) { |
52 return ((accessibility->state() >> state) & 1); | 52 return ((accessibility->state() >> state) & 1); |
53 } | 53 } |
54 | 54 |
55 RoleMap BuildRoleMap() { | 55 RoleMap BuildRoleMap() { |
56 const MapEntry roles[] = { | 56 const MapEntry roles[] = { |
57 { blink::WebAXRoleAlert, NSAccessibilityGroupRole }, | 57 { ui::AX_ROLE_ALERT, NSAccessibilityGroupRole }, |
58 { blink::WebAXRoleAlertDialog, NSAccessibilityGroupRole }, | 58 { ui::AX_ROLE_ALERT_DIALOG, NSAccessibilityGroupRole }, |
59 { blink::WebAXRoleAnnotation, NSAccessibilityUnknownRole }, | 59 { ui::AX_ROLE_ANNOTATION, NSAccessibilityUnknownRole }, |
60 { blink::WebAXRoleApplication, NSAccessibilityGroupRole }, | 60 { ui::AX_ROLE_APPLICATION, NSAccessibilityGroupRole }, |
61 { blink::WebAXRoleArticle, NSAccessibilityGroupRole }, | 61 { ui::AX_ROLE_ARTICLE, NSAccessibilityGroupRole }, |
62 { blink::WebAXRoleBrowser, NSAccessibilityBrowserRole }, | 62 { ui::AX_ROLE_BANNER, NSAccessibilityGroupRole }, |
63 { blink::WebAXRoleBusyIndicator, NSAccessibilityBusyIndicatorRole }, | 63 { ui::AX_ROLE_BROWSER, NSAccessibilityBrowserRole }, |
64 { blink::WebAXRoleButton, NSAccessibilityButtonRole }, | 64 { ui::AX_ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole }, |
65 { blink::WebAXRoleCanvas, NSAccessibilityImageRole }, | 65 { ui::AX_ROLE_BUTTON, NSAccessibilityButtonRole }, |
66 { blink::WebAXRoleCell, @"AXCell" }, | 66 { ui::AX_ROLE_CANVAS, NSAccessibilityImageRole }, |
67 { blink::WebAXRoleCheckBox, NSAccessibilityCheckBoxRole }, | 67 { ui::AX_ROLE_CELL, @"AXCell" }, |
68 { blink::WebAXRoleColorWell, NSAccessibilityColorWellRole }, | 68 { ui::AX_ROLE_CHECK_BOX, NSAccessibilityCheckBoxRole }, |
69 { blink::WebAXRoleComboBox, NSAccessibilityComboBoxRole }, | 69 { ui::AX_ROLE_COLOR_WELL, NSAccessibilityColorWellRole }, |
70 { blink::WebAXRoleColumn, NSAccessibilityColumnRole }, | 70 { ui::AX_ROLE_COLUMN, NSAccessibilityColumnRole }, |
71 { blink::WebAXRoleColumnHeader, @"AXCell" }, | 71 { ui::AX_ROLE_COLUMN_HEADER, @"AXCell" }, |
72 { blink::WebAXRoleDefinition, NSAccessibilityGroupRole }, | 72 { ui::AX_ROLE_COMBO_BOX, NSAccessibilityComboBoxRole }, |
73 { blink::WebAXRoleDescriptionListDetail, NSAccessibilityGroupRole }, | 73 { ui::AX_ROLE_COMPLEMENTARY, NSAccessibilityGroupRole }, |
74 { blink::WebAXRoleDescriptionListTerm, NSAccessibilityGroupRole }, | 74 { ui::AX_ROLE_CONTENT_INFO, NSAccessibilityGroupRole }, |
75 { blink::WebAXRoleDialog, NSAccessibilityGroupRole }, | 75 { ui::AX_ROLE_DEFINITION, NSAccessibilityGroupRole }, |
76 { blink::WebAXRoleDirectory, NSAccessibilityListRole }, | 76 { ui::AX_ROLE_DESCRIPTION_LIST_DETAIL, NSAccessibilityGroupRole }, |
77 { blink::WebAXRoleDisclosureTriangle, | 77 { ui::AX_ROLE_DESCRIPTION_LIST_TERM, NSAccessibilityGroupRole }, |
78 NSAccessibilityDisclosureTriangleRole }, | 78 { ui::AX_ROLE_DIALOG, NSAccessibilityGroupRole }, |
79 { blink::WebAXRoleDiv, NSAccessibilityGroupRole }, | 79 { ui::AX_ROLE_DIRECTORY, NSAccessibilityListRole }, |
80 { blink::WebAXRoleDocument, NSAccessibilityGroupRole }, | 80 { ui::AX_ROLE_DISCLOSURE_TRIANGLE, NSAccessibilityDisclosureTriangleRole }, |
81 { blink::WebAXRoleDrawer, NSAccessibilityDrawerRole }, | 81 { ui::AX_ROLE_DIV, NSAccessibilityGroupRole }, |
82 { blink::WebAXRoleEditableText, NSAccessibilityTextFieldRole }, | 82 { ui::AX_ROLE_DOCUMENT, NSAccessibilityGroupRole }, |
83 { blink::WebAXRoleFooter, NSAccessibilityGroupRole }, | 83 { ui::AX_ROLE_DRAWER, NSAccessibilityDrawerRole }, |
84 { blink::WebAXRoleForm, NSAccessibilityGroupRole }, | 84 { ui::AX_ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole }, |
85 { blink::WebAXRoleGrid, NSAccessibilityGridRole }, | 85 { ui::AX_ROLE_FOOTER, NSAccessibilityGroupRole }, |
86 { blink::WebAXRoleGroup, NSAccessibilityGroupRole }, | 86 { ui::AX_ROLE_FORM, NSAccessibilityGroupRole }, |
87 { blink::WebAXRoleGrowArea, NSAccessibilityGrowAreaRole }, | 87 { ui::AX_ROLE_GRID, NSAccessibilityGridRole }, |
88 { blink::WebAXRoleHeading, @"AXHeading" }, | 88 { ui::AX_ROLE_GROUP, NSAccessibilityGroupRole }, |
89 { blink::WebAXRoleHelpTag, NSAccessibilityHelpTagRole }, | 89 { ui::AX_ROLE_GROW_AREA, NSAccessibilityGrowAreaRole }, |
90 { blink::WebAXRoleHorizontalRule, NSAccessibilityGroupRole }, | 90 { ui::AX_ROLE_HEADING, @"AXHeading" }, |
91 { blink::WebAXRoleIgnored, NSAccessibilityUnknownRole }, | 91 { ui::AX_ROLE_HELP_TAG, NSAccessibilityHelpTagRole }, |
92 { blink::WebAXRoleImage, NSAccessibilityImageRole }, | 92 { ui::AX_ROLE_HORIZONTAL_RULE, NSAccessibilityGroupRole }, |
93 { blink::WebAXRoleImageMap, NSAccessibilityGroupRole }, | 93 { ui::AX_ROLE_IGNORED, NSAccessibilityUnknownRole }, |
94 { blink::WebAXRoleImageMapLink, NSAccessibilityLinkRole }, | 94 { ui::AX_ROLE_IMAGE, NSAccessibilityImageRole }, |
95 { blink::WebAXRoleIncrementor, NSAccessibilityIncrementorRole }, | 95 { ui::AX_ROLE_IMAGE_MAP, NSAccessibilityGroupRole }, |
96 { blink::WebAXRoleLabel, NSAccessibilityGroupRole }, | 96 { ui::AX_ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole }, |
97 { blink::WebAXRoleApplication, NSAccessibilityGroupRole }, | 97 { ui::AX_ROLE_INCREMENTOR, NSAccessibilityIncrementorRole }, |
98 { blink::WebAXRoleBanner, NSAccessibilityGroupRole }, | 98 { ui::AX_ROLE_LABEL, NSAccessibilityGroupRole }, |
99 { blink::WebAXRoleComplementary, NSAccessibilityGroupRole }, | 99 { ui::AX_ROLE_LINK, NSAccessibilityLinkRole }, |
100 { blink::WebAXRoleContentInfo, NSAccessibilityGroupRole }, | 100 { ui::AX_ROLE_LIST, NSAccessibilityListRole }, |
101 { blink::WebAXRoleMain, NSAccessibilityGroupRole }, | 101 { ui::AX_ROLE_LIST_BOX, NSAccessibilityListRole }, |
102 { blink::WebAXRoleNavigation, NSAccessibilityGroupRole }, | 102 { ui::AX_ROLE_LIST_BOX_OPTION, NSAccessibilityStaticTextRole }, |
103 { blink::WebAXRoleSearch, NSAccessibilityGroupRole }, | 103 { ui::AX_ROLE_LIST_ITEM, NSAccessibilityGroupRole }, |
104 { blink::WebAXRoleLink, NSAccessibilityLinkRole }, | 104 { ui::AX_ROLE_LIST_MARKER, @"AXListMarker" }, |
105 { blink::WebAXRoleList, NSAccessibilityListRole }, | 105 { ui::AX_ROLE_LOG, NSAccessibilityGroupRole }, |
106 { blink::WebAXRoleListItem, NSAccessibilityGroupRole }, | 106 { ui::AX_ROLE_MAIN, NSAccessibilityGroupRole }, |
107 { blink::WebAXRoleListMarker, @"AXListMarker" }, | 107 { ui::AX_ROLE_MARQUEE, NSAccessibilityGroupRole }, |
108 { blink::WebAXRoleListBox, NSAccessibilityListRole }, | 108 { ui::AX_ROLE_MATH, NSAccessibilityGroupRole }, |
109 { blink::WebAXRoleListBoxOption, NSAccessibilityStaticTextRole }, | 109 { ui::AX_ROLE_MATTE, NSAccessibilityMatteRole }, |
110 { blink::WebAXRoleLog, NSAccessibilityGroupRole }, | 110 { ui::AX_ROLE_MENU, NSAccessibilityMenuRole }, |
111 { blink::WebAXRoleMarquee, NSAccessibilityGroupRole }, | 111 { ui::AX_ROLE_MENU_BAR, NSAccessibilityMenuBarRole }, |
112 { blink::WebAXRoleMath, NSAccessibilityGroupRole }, | 112 { ui::AX_ROLE_MENU_BUTTON, NSAccessibilityButtonRole }, |
113 { blink::WebAXRoleMatte, NSAccessibilityMatteRole }, | 113 { ui::AX_ROLE_MENU_ITEM, NSAccessibilityMenuItemRole }, |
114 { blink::WebAXRoleMenu, NSAccessibilityMenuRole }, | 114 { ui::AX_ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole }, |
115 { blink::WebAXRoleMenuBar, NSAccessibilityMenuBarRole }, | 115 { ui::AX_ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole }, |
116 { blink::WebAXRoleMenuItem, NSAccessibilityMenuItemRole }, | 116 { ui::AX_ROLE_NAVIGATION, NSAccessibilityGroupRole }, |
117 { blink::WebAXRoleMenuButton, NSAccessibilityButtonRole }, | 117 { ui::AX_ROLE_NOTE, NSAccessibilityGroupRole }, |
118 { blink::WebAXRoleMenuListOption, NSAccessibilityMenuItemRole }, | 118 { ui::AX_ROLE_OUTLINE, NSAccessibilityOutlineRole }, |
119 { blink::WebAXRoleMenuListPopup, NSAccessibilityUnknownRole }, | 119 { ui::AX_ROLE_PARAGRAPH, NSAccessibilityGroupRole }, |
120 { blink::WebAXRoleNote, NSAccessibilityGroupRole }, | 120 { ui::AX_ROLE_POP_UP_BUTTON, NSAccessibilityPopUpButtonRole }, |
121 { blink::WebAXRoleOutline, NSAccessibilityOutlineRole }, | 121 { ui::AX_ROLE_PRESENTATIONAL, NSAccessibilityGroupRole }, |
122 { blink::WebAXRoleParagraph, NSAccessibilityGroupRole }, | 122 { ui::AX_ROLE_PROGRESS_INDICATOR, NSAccessibilityProgressIndicatorRole }, |
123 { blink::WebAXRolePopUpButton, NSAccessibilityPopUpButtonRole }, | 123 { ui::AX_ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole }, |
124 { blink::WebAXRolePresentational, NSAccessibilityGroupRole }, | 124 { ui::AX_ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole }, |
125 { blink::WebAXRoleProgressIndicator, | 125 { ui::AX_ROLE_REGION, NSAccessibilityGroupRole }, |
126 NSAccessibilityProgressIndicatorRole }, | 126 { ui::AX_ROLE_ROOT_WEB_AREA, @"AXWebArea" }, |
127 { blink::WebAXRoleRadioButton, NSAccessibilityRadioButtonRole }, | 127 { ui::AX_ROLE_ROW, NSAccessibilityRowRole }, |
128 { blink::WebAXRoleRadioGroup, NSAccessibilityRadioGroupRole }, | 128 { ui::AX_ROLE_ROW_HEADER, @"AXCell" }, |
129 { blink::WebAXRoleRegion, NSAccessibilityGroupRole }, | 129 { ui::AX_ROLE_RULER, NSAccessibilityRulerRole }, |
130 { blink::WebAXRoleRootWebArea, @"AXWebArea" }, | 130 { ui::AX_ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole }, |
131 { blink::WebAXRoleRow, NSAccessibilityRowRole }, | 131 { ui::AX_ROLE_SCROLL_BAR, NSAccessibilityScrollBarRole }, |
132 { blink::WebAXRoleRowHeader, @"AXCell" }, | 132 { ui::AX_ROLE_SEARCH, NSAccessibilityGroupRole }, |
133 { blink::WebAXRoleRuler, NSAccessibilityRulerRole }, | 133 { ui::AX_ROLE_SHEET, NSAccessibilitySheetRole }, |
134 { blink::WebAXRoleRulerMarker, NSAccessibilityRulerMarkerRole }, | 134 { ui::AX_ROLE_SLIDER, NSAccessibilitySliderRole }, |
| 135 { ui::AX_ROLE_SLIDER_THUMB, NSAccessibilityValueIndicatorRole }, |
| 136 { ui::AX_ROLE_SPIN_BUTTON, NSAccessibilitySliderRole }, |
| 137 { ui::AX_ROLE_SPLITTER, NSAccessibilitySplitterRole }, |
| 138 { ui::AX_ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole }, |
| 139 { ui::AX_ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole }, |
| 140 { ui::AX_ROLE_STATUS, NSAccessibilityGroupRole }, |
| 141 { ui::AX_ROLE_SVG_ROOT, NSAccessibilityGroupRole }, |
| 142 { ui::AX_ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole }, |
| 143 { ui::AX_ROLE_TAB, NSAccessibilityRadioButtonRole }, |
| 144 { ui::AX_ROLE_TABLE, NSAccessibilityTableRole }, |
| 145 { ui::AX_ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole }, |
| 146 { ui::AX_ROLE_TAB_LIST, NSAccessibilityTabGroupRole }, |
| 147 { ui::AX_ROLE_TAB_PANEL, NSAccessibilityGroupRole }, |
| 148 { ui::AX_ROLE_TEXT_AREA, NSAccessibilityTextAreaRole }, |
| 149 { ui::AX_ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole }, |
| 150 { ui::AX_ROLE_TIMER, NSAccessibilityGroupRole }, |
| 151 { ui::AX_ROLE_TOGGLE_BUTTON, NSAccessibilityButtonRole }, |
| 152 { ui::AX_ROLE_TOOLBAR, NSAccessibilityToolbarRole }, |
| 153 { ui::AX_ROLE_TOOLTIP, NSAccessibilityGroupRole }, |
| 154 { ui::AX_ROLE_TREE, NSAccessibilityOutlineRole }, |
| 155 { ui::AX_ROLE_TREE_GRID, NSAccessibilityTableRole }, |
| 156 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityRowRole }, |
| 157 { ui::AX_ROLE_VALUE_INDICATOR, NSAccessibilityValueIndicatorRole }, |
| 158 { ui::AX_ROLE_WEB_AREA, @"AXWebArea" }, |
| 159 { ui::AX_ROLE_WINDOW, NSAccessibilityWindowRole }, |
| 160 |
135 // TODO(dtseng): we don't correctly support the attributes for these roles. | 161 // TODO(dtseng): we don't correctly support the attributes for these roles. |
136 // { blink::WebAXRoleScrollArea, NSAccessibilityScrollAreaRole }, | 162 // { ui::AX_ROLE_SCROLL_AREA, NSAccessibilityScrollAreaRole }, |
137 { blink::WebAXRoleScrollBar, NSAccessibilityScrollBarRole }, | |
138 { blink::WebAXRoleSheet, NSAccessibilitySheetRole }, | |
139 { blink::WebAXRoleSlider, NSAccessibilitySliderRole }, | |
140 { blink::WebAXRoleSliderThumb, NSAccessibilityValueIndicatorRole }, | |
141 { blink::WebAXRoleSpinButton, NSAccessibilitySliderRole }, | |
142 { blink::WebAXRoleSplitter, NSAccessibilitySplitterRole }, | |
143 { blink::WebAXRoleSplitGroup, NSAccessibilitySplitGroupRole }, | |
144 { blink::WebAXRoleStaticText, NSAccessibilityStaticTextRole }, | |
145 { blink::WebAXRoleStatus, NSAccessibilityGroupRole }, | |
146 { blink::WebAXRoleSVGRoot, NSAccessibilityGroupRole }, | |
147 { blink::WebAXRoleSystemWide, NSAccessibilityUnknownRole }, | |
148 { blink::WebAXRoleTab, NSAccessibilityRadioButtonRole }, | |
149 { blink::WebAXRoleTabList, NSAccessibilityTabGroupRole }, | |
150 { blink::WebAXRoleTabPanel, NSAccessibilityGroupRole }, | |
151 { blink::WebAXRoleTable, NSAccessibilityTableRole }, | |
152 { blink::WebAXRoleTableHeaderContainer, NSAccessibilityGroupRole }, | |
153 { blink::WebAXRoleTextArea, NSAccessibilityTextAreaRole }, | |
154 { blink::WebAXRoleTextField, NSAccessibilityTextFieldRole }, | |
155 { blink::WebAXRoleTimer, NSAccessibilityGroupRole }, | |
156 { blink::WebAXRoleToggleButton, NSAccessibilityButtonRole }, | |
157 { blink::WebAXRoleToolbar, NSAccessibilityToolbarRole }, | |
158 { blink::WebAXRoleUserInterfaceTooltip, NSAccessibilityGroupRole }, | |
159 { blink::WebAXRoleTree, NSAccessibilityOutlineRole }, | |
160 { blink::WebAXRoleTreeGrid, NSAccessibilityTableRole }, | |
161 { blink::WebAXRoleTreeItem, NSAccessibilityRowRole }, | |
162 { blink::WebAXRoleValueIndicator, NSAccessibilityValueIndicatorRole }, | |
163 { blink::WebAXRoleLink, NSAccessibilityLinkRole }, | |
164 { blink::WebAXRoleWebArea, @"AXWebArea" }, | |
165 { blink::WebAXRoleWindow, NSAccessibilityWindowRole }, | |
166 }; | 163 }; |
167 | 164 |
168 RoleMap role_map; | 165 RoleMap role_map; |
169 for (size_t i = 0; i < arraysize(roles); ++i) | 166 for (size_t i = 0; i < arraysize(roles); ++i) |
170 role_map[roles[i].webKitValue] = roles[i].nativeValue; | 167 role_map[roles[i].webKitValue] = roles[i].nativeValue; |
171 return role_map; | 168 return role_map; |
172 } | 169 } |
173 | 170 |
174 // A mapping of webkit roles to native roles. | 171 // A mapping of webkit roles to native roles. |
175 NSString* NativeRoleFromAccessibilityNodeDataRole( | 172 NSString* NativeRoleFromAXRole( |
176 const blink::WebAXRole& role) { | 173 const ui::AXRole& role) { |
177 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role, | 174 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role, |
178 (BuildRoleMap())); | 175 (BuildRoleMap())); |
179 RoleMap::iterator it = web_accessibility_to_native_role.find(role); | 176 RoleMap::iterator it = web_accessibility_to_native_role.find(role); |
180 if (it != web_accessibility_to_native_role.end()) | 177 if (it != web_accessibility_to_native_role.end()) |
181 return it->second; | 178 return it->second; |
182 else | 179 else |
183 return NSAccessibilityUnknownRole; | 180 return NSAccessibilityUnknownRole; |
184 } | 181 } |
185 | 182 |
186 RoleMap BuildSubroleMap() { | 183 RoleMap BuildSubroleMap() { |
187 const MapEntry subroles[] = { | 184 const MapEntry subroles[] = { |
188 { blink::WebAXRoleAlert, @"AXApplicationAlert" }, | 185 { ui::AX_ROLE_ALERT, @"AXApplicationAlert" }, |
189 { blink::WebAXRoleAlertDialog, @"AXApplicationAlertDialog" }, | 186 { ui::AX_ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" }, |
190 { blink::WebAXRoleArticle, @"AXDocumentArticle" }, | 187 { ui::AX_ROLE_ARTICLE, @"AXDocumentArticle" }, |
191 { blink::WebAXRoleDefinition, @"AXDefinition" }, | 188 { ui::AX_ROLE_DEFINITION, @"AXDefinition" }, |
192 { blink::WebAXRoleDescriptionListDetail, @"AXDescription" }, | 189 { ui::AX_ROLE_DESCRIPTION_LIST_DETAIL, @"AXDescription" }, |
193 { blink::WebAXRoleDescriptionListTerm, @"AXTerm" }, | 190 { ui::AX_ROLE_DESCRIPTION_LIST_TERM, @"AXTerm" }, |
194 { blink::WebAXRoleDialog, @"AXApplicationDialog" }, | 191 { ui::AX_ROLE_DIALOG, @"AXApplicationDialog" }, |
195 { blink::WebAXRoleDocument, @"AXDocument" }, | 192 { ui::AX_ROLE_DOCUMENT, @"AXDocument" }, |
196 { blink::WebAXRoleFooter, @"AXLandmarkContentInfo" }, | 193 { ui::AX_ROLE_FOOTER, @"AXLandmarkContentInfo" }, |
197 { blink::WebAXRoleApplication, @"AXLandmarkApplication" }, | 194 { ui::AX_ROLE_APPLICATION, @"AXLandmarkApplication" }, |
198 { blink::WebAXRoleBanner, @"AXLandmarkBanner" }, | 195 { ui::AX_ROLE_BANNER, @"AXLandmarkBanner" }, |
199 { blink::WebAXRoleComplementary, @"AXLandmarkComplementary" }, | 196 { ui::AX_ROLE_COMPLEMENTARY, @"AXLandmarkComplementary" }, |
200 { blink::WebAXRoleContentInfo, @"AXLandmarkContentInfo" }, | 197 { ui::AX_ROLE_CONTENT_INFO, @"AXLandmarkContentInfo" }, |
201 { blink::WebAXRoleMain, @"AXLandmarkMain" }, | 198 { ui::AX_ROLE_MAIN, @"AXLandmarkMain" }, |
202 { blink::WebAXRoleNavigation, @"AXLandmarkNavigation" }, | 199 { ui::AX_ROLE_NAVIGATION, @"AXLandmarkNavigation" }, |
203 { blink::WebAXRoleSearch, @"AXLandmarkSearch" }, | 200 { ui::AX_ROLE_SEARCH, @"AXLandmarkSearch" }, |
204 { blink::WebAXRoleLog, @"AXApplicationLog" }, | 201 { ui::AX_ROLE_LOG, @"AXApplicationLog" }, |
205 { blink::WebAXRoleMarquee, @"AXApplicationMarquee" }, | 202 { ui::AX_ROLE_MARQUEE, @"AXApplicationMarquee" }, |
206 { blink::WebAXRoleMath, @"AXDocumentMath" }, | 203 { ui::AX_ROLE_MATH, @"AXDocumentMath" }, |
207 { blink::WebAXRoleNote, @"AXDocumentNote" }, | 204 { ui::AX_ROLE_NOTE, @"AXDocumentNote" }, |
208 { blink::WebAXRoleRegion, @"AXDocumentRegion" }, | 205 { ui::AX_ROLE_REGION, @"AXDocumentRegion" }, |
209 { blink::WebAXRoleStatus, @"AXApplicationStatus" }, | 206 { ui::AX_ROLE_STATUS, @"AXApplicationStatus" }, |
210 { blink::WebAXRoleTabPanel, @"AXTabPanel" }, | 207 { ui::AX_ROLE_TAB_PANEL, @"AXTabPanel" }, |
211 { blink::WebAXRoleTimer, @"AXApplicationTimer" }, | 208 { ui::AX_ROLE_TIMER, @"AXApplicationTimer" }, |
212 { blink::WebAXRoleUserInterfaceTooltip, @"AXUserInterfaceTooltip" }, | 209 { ui::AX_ROLE_TOOLTIP, @"AXUserInterfaceTooltip" }, |
213 { blink::WebAXRoleTreeItem, NSAccessibilityOutlineRowSubrole }, | 210 { ui::AX_ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole }, |
214 }; | 211 }; |
215 | 212 |
216 RoleMap subrole_map; | 213 RoleMap subrole_map; |
217 for (size_t i = 0; i < arraysize(subroles); ++i) | 214 for (size_t i = 0; i < arraysize(subroles); ++i) |
218 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; | 215 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; |
219 return subrole_map; | 216 return subrole_map; |
220 } | 217 } |
221 | 218 |
222 // A mapping of webkit roles to native subroles. | 219 // A mapping of webkit roles to native subroles. |
223 NSString* NativeSubroleFromAccessibilityNodeDataRole( | 220 NSString* NativeSubroleFromAXRole( |
224 const blink::WebAXRole& role) { | 221 const ui::AXRole& role) { |
225 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole, | 222 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole, |
226 (BuildSubroleMap())); | 223 (BuildSubroleMap())); |
227 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role); | 224 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role); |
228 if (it != web_accessibility_to_native_subrole.end()) | 225 if (it != web_accessibility_to_native_subrole.end()) |
229 return it->second; | 226 return it->second; |
230 else | 227 else |
231 return nil; | 228 return nil; |
232 } | 229 } |
233 | 230 |
234 // A mapping from an accessibility attribute to its method name. | 231 // A mapping from an accessibility attribute to its method name. |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 | 314 |
318 - (void)detach { | 315 - (void)detach { |
319 if (browserAccessibility_) { | 316 if (browserAccessibility_) { |
320 NSAccessibilityUnregisterUniqueIdForUIElement(self); | 317 NSAccessibilityUnregisterUniqueIdForUIElement(self); |
321 browserAccessibility_ = NULL; | 318 browserAccessibility_ = NULL; |
322 } | 319 } |
323 } | 320 } |
324 | 321 |
325 - (NSString*)accessKey { | 322 - (NSString*)accessKey { |
326 return NSStringForStringAttribute( | 323 return NSStringForStringAttribute( |
327 browserAccessibility_, AccessibilityNodeData::ATTR_ACCESS_KEY); | 324 browserAccessibility_, ui::AX_ATTR_ACCESS_KEY); |
328 } | 325 } |
329 | 326 |
330 - (NSNumber*)ariaAtomic { | 327 - (NSNumber*)ariaAtomic { |
331 bool boolValue = browserAccessibility_->GetBoolAttribute( | 328 bool boolValue = browserAccessibility_->GetBoolAttribute( |
332 AccessibilityNodeData::ATTR_LIVE_ATOMIC); | 329 ui::AX_ATTR_LIVE_ATOMIC); |
333 return [NSNumber numberWithBool:boolValue]; | 330 return [NSNumber numberWithBool:boolValue]; |
334 } | 331 } |
335 | 332 |
336 - (NSNumber*)ariaBusy { | 333 - (NSNumber*)ariaBusy { |
337 bool boolValue = browserAccessibility_->GetBoolAttribute( | 334 bool boolValue = browserAccessibility_->GetBoolAttribute( |
338 AccessibilityNodeData::ATTR_LIVE_BUSY); | 335 ui::AX_ATTR_LIVE_BUSY); |
339 return [NSNumber numberWithBool:boolValue]; | 336 return [NSNumber numberWithBool:boolValue]; |
340 } | 337 } |
341 | 338 |
342 - (NSString*)ariaLive { | 339 - (NSString*)ariaLive { |
343 return NSStringForStringAttribute( | 340 return NSStringForStringAttribute( |
344 browserAccessibility_, AccessibilityNodeData::ATTR_LIVE_STATUS); | 341 browserAccessibility_, ui::AX_ATTR_LIVE_STATUS); |
345 } | 342 } |
346 | 343 |
347 - (NSString*)ariaRelevant { | 344 - (NSString*)ariaRelevant { |
348 return NSStringForStringAttribute( | 345 return NSStringForStringAttribute( |
349 browserAccessibility_, AccessibilityNodeData::ATTR_LIVE_RELEVANT); | 346 browserAccessibility_, ui::AX_ATTR_LIVE_RELEVANT); |
350 } | 347 } |
351 | 348 |
352 // Returns an array of BrowserAccessibilityCocoa objects, representing the | 349 // Returns an array of BrowserAccessibilityCocoa objects, representing the |
353 // accessibility children of this object. | 350 // accessibility children of this object. |
354 - (NSArray*)children { | 351 - (NSArray*)children { |
355 if (!children_) { | 352 if (!children_) { |
356 uint32 childCount = browserAccessibility_->PlatformChildCount(); | 353 uint32 childCount = browserAccessibility_->PlatformChildCount(); |
357 children_.reset([[NSMutableArray alloc] initWithCapacity:childCount]); | 354 children_.reset([[NSMutableArray alloc] initWithCapacity:childCount]); |
358 for (uint32 index = 0; index < childCount; ++index) { | 355 for (uint32 index = 0; index < childCount; ++index) { |
359 BrowserAccessibilityCocoa* child = | 356 BrowserAccessibilityCocoa* child = |
360 browserAccessibility_->PlatformGetChild(index)-> | 357 browserAccessibility_->PlatformGetChild(index)-> |
361 ToBrowserAccessibilityCocoa(); | 358 ToBrowserAccessibilityCocoa(); |
362 if ([child isIgnored]) | 359 if ([child isIgnored]) |
363 [children_ addObjectsFromArray:[child children]]; | 360 [children_ addObjectsFromArray:[child children]]; |
364 else | 361 else |
365 [children_ addObject:child]; | 362 [children_ addObject:child]; |
366 } | 363 } |
367 | 364 |
368 // Also, add indirect children (if any). | 365 // Also, add indirect children (if any). |
369 const std::vector<int32>& indirectChildIds = | 366 const std::vector<int32>& indirectChildIds = |
370 browserAccessibility_->GetIntListAttribute( | 367 browserAccessibility_->GetIntListAttribute( |
371 AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); | 368 ui::AX_ATTR_INDIRECT_CHILD_IDS); |
372 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { | 369 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { |
373 int32 child_id = indirectChildIds[i]; | 370 int32 child_id = indirectChildIds[i]; |
374 BrowserAccessibility* child = | 371 BrowserAccessibility* child = |
375 browserAccessibility_->manager()->GetFromRendererID(child_id); | 372 browserAccessibility_->manager()->GetFromRendererID(child_id); |
376 | 373 |
377 // This only became necessary as a result of crbug.com/93095. It should be | 374 // This only became necessary as a result of crbug.com/93095. It should be |
378 // a DCHECK in the future. | 375 // a DCHECK in the future. |
379 if (child) { | 376 if (child) { |
380 BrowserAccessibilityCocoa* child_cocoa = | 377 BrowserAccessibilityCocoa* child_cocoa = |
381 child->ToBrowserAccessibilityCocoa(); | 378 child->ToBrowserAccessibilityCocoa(); |
382 [children_ addObject:child_cocoa]; | 379 [children_ addObject:child_cocoa]; |
383 } | 380 } |
384 } | 381 } |
385 } | 382 } |
386 return children_; | 383 return children_; |
387 } | 384 } |
388 | 385 |
389 - (void)childrenChanged { | 386 - (void)childrenChanged { |
390 if (![self isIgnored]) { | 387 if (![self isIgnored]) { |
391 children_.reset(); | 388 children_.reset(); |
392 } else { | 389 } else { |
393 [browserAccessibility_->parent()->ToBrowserAccessibilityCocoa() | 390 [browserAccessibility_->parent()->ToBrowserAccessibilityCocoa() |
394 childrenChanged]; | 391 childrenChanged]; |
395 } | 392 } |
396 } | 393 } |
397 | 394 |
398 - (NSArray*)columnHeaders { | 395 - (NSArray*)columnHeaders { |
399 if ([self internalRole] != blink::WebAXRoleTable && | 396 if ([self internalRole] != ui::AX_ROLE_TABLE && |
400 [self internalRole] != blink::WebAXRoleGrid) { | 397 [self internalRole] != ui::AX_ROLE_GRID) { |
401 return nil; | 398 return nil; |
402 } | 399 } |
403 | 400 |
404 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 401 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
405 const std::vector<int32>& uniqueCellIds = | 402 const std::vector<int32>& uniqueCellIds = |
406 browserAccessibility_->GetIntListAttribute( | 403 browserAccessibility_->GetIntListAttribute( |
407 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); | 404 ui::AX_ATTR_UNIQUE_CELL_IDS); |
408 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 405 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
409 int id = uniqueCellIds[i]; | 406 int id = uniqueCellIds[i]; |
410 BrowserAccessibility* cell = | 407 BrowserAccessibility* cell = |
411 browserAccessibility_->manager()->GetFromRendererID(id); | 408 browserAccessibility_->manager()->GetFromRendererID(id); |
412 if (cell && cell->role() == blink::WebAXRoleColumnHeader) | 409 if (cell && cell->role() == ui::AX_ROLE_COLUMN_HEADER) |
413 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 410 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
414 } | 411 } |
415 return ret; | 412 return ret; |
416 } | 413 } |
417 | 414 |
418 - (NSValue*)columnIndexRange { | 415 - (NSValue*)columnIndexRange { |
419 if ([self internalRole] != blink::WebAXRoleCell) | 416 if ([self internalRole] != ui::AX_ROLE_CELL) |
420 return nil; | 417 return nil; |
421 | 418 |
422 int column = -1; | 419 int column = -1; |
423 int colspan = -1; | 420 int colspan = -1; |
424 browserAccessibility_->GetIntAttribute( | 421 browserAccessibility_->GetIntAttribute( |
425 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, &column); | 422 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column); |
426 browserAccessibility_->GetIntAttribute( | 423 browserAccessibility_->GetIntAttribute( |
427 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_SPAN, &colspan); | 424 ui::AX_ATTR_TABLE_CELL_COLUMN_SPAN, &colspan); |
428 if (column >= 0 && colspan >= 1) | 425 if (column >= 0 && colspan >= 1) |
429 return [NSValue valueWithRange:NSMakeRange(column, colspan)]; | 426 return [NSValue valueWithRange:NSMakeRange(column, colspan)]; |
430 return nil; | 427 return nil; |
431 } | 428 } |
432 | 429 |
433 - (NSArray*)columns { | 430 - (NSArray*)columns { |
434 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 431 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
435 for (BrowserAccessibilityCocoa* child in [self children]) { | 432 for (BrowserAccessibilityCocoa* child in [self children]) { |
436 if ([[child role] isEqualToString:NSAccessibilityColumnRole]) | 433 if ([[child role] isEqualToString:NSAccessibilityColumnRole]) |
437 [ret addObject:child]; | 434 [ret addObject:child]; |
438 } | 435 } |
439 return ret; | 436 return ret; |
440 } | 437 } |
441 | 438 |
442 - (NSString*)description { | 439 - (NSString*)description { |
443 std::string description; | 440 std::string description; |
444 if (browserAccessibility_->GetStringAttribute( | 441 if (browserAccessibility_->GetStringAttribute( |
445 AccessibilityNodeData::ATTR_DESCRIPTION, &description)) { | 442 ui::AX_ATTR_DESCRIPTION, &description)) { |
446 return base::SysUTF8ToNSString(description); | 443 return base::SysUTF8ToNSString(description); |
447 } | 444 } |
448 | 445 |
449 // If the role is anything other than an image, or if there's | 446 // If the role is anything other than an image, or if there's |
450 // a title or title UI element, just return an empty string. | 447 // a title or title UI element, just return an empty string. |
451 if (![[self role] isEqualToString:NSAccessibilityImageRole]) | 448 if (![[self role] isEqualToString:NSAccessibilityImageRole]) |
452 return @""; | 449 return @""; |
453 if (browserAccessibility_->HasStringAttribute( | 450 if (browserAccessibility_->HasStringAttribute( |
454 AccessibilityNodeData::ATTR_NAME)) { | 451 ui::AX_ATTR_NAME)) { |
455 return @""; | 452 return @""; |
456 } | 453 } |
457 if ([self titleUIElement]) | 454 if ([self titleUIElement]) |
458 return @""; | 455 return @""; |
459 | 456 |
460 // The remaining case is an image where there's no other title. | 457 // The remaining case is an image where there's no other title. |
461 // Return the base part of the filename as the description. | 458 // Return the base part of the filename as the description. |
462 std::string url; | 459 std::string url; |
463 if (browserAccessibility_->GetStringAttribute( | 460 if (browserAccessibility_->GetStringAttribute( |
464 AccessibilityNodeData::ATTR_URL, &url)) { | 461 ui::AX_ATTR_URL, &url)) { |
465 // Given a url like http://foo.com/bar/baz.png, just return the | 462 // Given a url like http://foo.com/bar/baz.png, just return the |
466 // base name, e.g., "baz.png". | 463 // base name, e.g., "baz.png". |
467 size_t leftIndex = url.rfind('/'); | 464 size_t leftIndex = url.rfind('/'); |
468 std::string basename = | 465 std::string basename = |
469 leftIndex != std::string::npos ? url.substr(leftIndex) : url; | 466 leftIndex != std::string::npos ? url.substr(leftIndex) : url; |
470 return base::SysUTF8ToNSString(basename); | 467 return base::SysUTF8ToNSString(basename); |
471 } | 468 } |
472 | 469 |
473 return @""; | 470 return @""; |
474 } | 471 } |
475 | 472 |
476 - (NSNumber*)disclosing { | 473 - (NSNumber*)disclosing { |
477 if ([self internalRole] == blink::WebAXRoleTreeItem) { | 474 if ([self internalRole] == ui::AX_ROLE_TREE_ITEM) { |
478 return [NSNumber numberWithBool: | 475 return [NSNumber numberWithBool: |
479 GetState(browserAccessibility_, blink::WebAXStateExpanded)]; | 476 GetState(browserAccessibility_, ui::AX_STATE_EXPANDED)]; |
480 } else { | 477 } else { |
481 return nil; | 478 return nil; |
482 } | 479 } |
483 } | 480 } |
484 | 481 |
485 - (id)disclosedByRow { | 482 - (id)disclosedByRow { |
486 // The row that contains this row. | 483 // The row that contains this row. |
487 // It should be the same as the first parent that is a treeitem. | 484 // It should be the same as the first parent that is a treeitem. |
488 return nil; | 485 return nil; |
489 } | 486 } |
490 | 487 |
491 - (NSNumber*)disclosureLevel { | 488 - (NSNumber*)disclosureLevel { |
492 blink::WebAXRole role = [self internalRole]; | 489 ui::AXRole role = [self internalRole]; |
493 if (role == blink::WebAXRoleRow || | 490 if (role == ui::AX_ROLE_ROW || |
494 role == blink::WebAXRoleTreeItem) { | 491 role == ui::AX_ROLE_TREE_ITEM) { |
495 int level = browserAccessibility_->GetIntAttribute( | 492 int level = browserAccessibility_->GetIntAttribute( |
496 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL); | 493 ui::AX_ATTR_HIERARCHICAL_LEVEL); |
497 // Mac disclosureLevel is 0-based, but web levels are 1-based. | 494 // Mac disclosureLevel is 0-based, but web levels are 1-based. |
498 if (level > 0) | 495 if (level > 0) |
499 level--; | 496 level--; |
500 return [NSNumber numberWithInt:level]; | 497 return [NSNumber numberWithInt:level]; |
501 } else { | 498 } else { |
502 return nil; | 499 return nil; |
503 } | 500 } |
504 } | 501 } |
505 | 502 |
506 - (id)disclosedRows { | 503 - (id)disclosedRows { |
507 // The rows that are considered inside this row. | 504 // The rows that are considered inside this row. |
508 return nil; | 505 return nil; |
509 } | 506 } |
510 | 507 |
511 - (NSNumber*)enabled { | 508 - (NSNumber*)enabled { |
512 return [NSNumber numberWithBool: | 509 return [NSNumber numberWithBool: |
513 GetState(browserAccessibility_, blink::WebAXStateEnabled)]; | 510 GetState(browserAccessibility_, ui::AX_STATE_ENABLED)]; |
514 } | 511 } |
515 | 512 |
516 - (NSNumber*)focused { | 513 - (NSNumber*)focused { |
517 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); | 514 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); |
518 NSNumber* ret = [NSNumber numberWithBool: | 515 NSNumber* ret = [NSNumber numberWithBool: |
519 manager->GetFocus(NULL) == browserAccessibility_]; | 516 manager->GetFocus(NULL) == browserAccessibility_]; |
520 return ret; | 517 return ret; |
521 } | 518 } |
522 | 519 |
523 - (id)header { | 520 - (id)header { |
524 int headerElementId = -1; | 521 int headerElementId = -1; |
525 if ([self internalRole] == blink::WebAXRoleTable || | 522 if ([self internalRole] == ui::AX_ROLE_TABLE || |
526 [self internalRole] == blink::WebAXRoleGrid) { | 523 [self internalRole] == ui::AX_ROLE_GRID) { |
527 browserAccessibility_->GetIntAttribute( | 524 browserAccessibility_->GetIntAttribute( |
528 AccessibilityNodeData::ATTR_TABLE_HEADER_ID, &headerElementId); | 525 ui::AX_ATTR_TABLE_HEADER_ID, &headerElementId); |
529 } else if ([self internalRole] == blink::WebAXRoleColumn) { | 526 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { |
530 browserAccessibility_->GetIntAttribute( | 527 browserAccessibility_->GetIntAttribute( |
531 AccessibilityNodeData::ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId); | 528 ui::AX_ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId); |
532 } else if ([self internalRole] == blink::WebAXRoleRow) { | 529 } else if ([self internalRole] == ui::AX_ROLE_ROW) { |
533 browserAccessibility_->GetIntAttribute( | 530 browserAccessibility_->GetIntAttribute( |
534 AccessibilityNodeData::ATTR_TABLE_ROW_HEADER_ID, &headerElementId); | 531 ui::AX_ATTR_TABLE_ROW_HEADER_ID, &headerElementId); |
535 } | 532 } |
536 | 533 |
537 if (headerElementId > 0) { | 534 if (headerElementId > 0) { |
538 BrowserAccessibility* headerObject = | 535 BrowserAccessibility* headerObject = |
539 browserAccessibility_->manager()->GetFromRendererID(headerElementId); | 536 browserAccessibility_->manager()->GetFromRendererID(headerElementId); |
540 if (headerObject) | 537 if (headerObject) |
541 return headerObject->ToBrowserAccessibilityCocoa(); | 538 return headerObject->ToBrowserAccessibilityCocoa(); |
542 } | 539 } |
543 return nil; | 540 return nil; |
544 } | 541 } |
545 | 542 |
546 - (NSString*)help { | 543 - (NSString*)help { |
547 return NSStringForStringAttribute( | 544 return NSStringForStringAttribute( |
548 browserAccessibility_, AccessibilityNodeData::ATTR_HELP); | 545 browserAccessibility_, ui::AX_ATTR_HELP); |
549 } | 546 } |
550 | 547 |
551 - (NSNumber*)index { | 548 - (NSNumber*)index { |
552 if ([self internalRole] == blink::WebAXRoleColumn) { | 549 if ([self internalRole] == ui::AX_ROLE_COLUMN) { |
553 int columnIndex = browserAccessibility_->GetIntAttribute( | 550 int columnIndex = browserAccessibility_->GetIntAttribute( |
554 AccessibilityNodeData::ATTR_TABLE_COLUMN_INDEX); | 551 ui::AX_ATTR_TABLE_COLUMN_INDEX); |
555 return [NSNumber numberWithInt:columnIndex]; | 552 return [NSNumber numberWithInt:columnIndex]; |
556 } else if ([self internalRole] == blink::WebAXRoleRow) { | 553 } else if ([self internalRole] == ui::AX_ROLE_ROW) { |
557 int rowIndex = browserAccessibility_->GetIntAttribute( | 554 int rowIndex = browserAccessibility_->GetIntAttribute( |
558 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX); | 555 ui::AX_ATTR_TABLE_ROW_INDEX); |
559 return [NSNumber numberWithInt:rowIndex]; | 556 return [NSNumber numberWithInt:rowIndex]; |
560 } | 557 } |
561 | 558 |
562 return nil; | 559 return nil; |
563 } | 560 } |
564 | 561 |
565 // Returns whether or not this node should be ignored in the | 562 // Returns whether or not this node should be ignored in the |
566 // accessibility tree. | 563 // accessibility tree. |
567 - (BOOL)isIgnored { | 564 - (BOOL)isIgnored { |
568 return [[self role] isEqualToString:NSAccessibilityUnknownRole]; | 565 return [[self role] isEqualToString:NSAccessibilityUnknownRole]; |
(...skipping 10 matching lines...) Expand all Loading... |
579 } | 576 } |
580 return invalid; | 577 return invalid; |
581 } | 578 } |
582 | 579 |
583 - (NSNumber*)loaded { | 580 - (NSNumber*)loaded { |
584 return [NSNumber numberWithBool:YES]; | 581 return [NSNumber numberWithBool:YES]; |
585 } | 582 } |
586 | 583 |
587 - (NSNumber*)loadingProgress { | 584 - (NSNumber*)loadingProgress { |
588 float floatValue = browserAccessibility_->GetFloatAttribute( | 585 float floatValue = browserAccessibility_->GetFloatAttribute( |
589 AccessibilityNodeData::ATTR_DOC_LOADING_PROGRESS); | 586 ui::AX_ATTR_DOC_LOADING_PROGRESS); |
590 return [NSNumber numberWithFloat:floatValue]; | 587 return [NSNumber numberWithFloat:floatValue]; |
591 } | 588 } |
592 | 589 |
593 - (NSNumber*)maxValue { | 590 - (NSNumber*)maxValue { |
594 float floatValue = browserAccessibility_->GetFloatAttribute( | 591 float floatValue = browserAccessibility_->GetFloatAttribute( |
595 AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE); | 592 ui::AX_ATTR_MAX_VALUE_FOR_RANGE); |
596 return [NSNumber numberWithFloat:floatValue]; | 593 return [NSNumber numberWithFloat:floatValue]; |
597 } | 594 } |
598 | 595 |
599 - (NSNumber*)minValue { | 596 - (NSNumber*)minValue { |
600 float floatValue = browserAccessibility_->GetFloatAttribute( | 597 float floatValue = browserAccessibility_->GetFloatAttribute( |
601 AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE); | 598 ui::AX_ATTR_MIN_VALUE_FOR_RANGE); |
602 return [NSNumber numberWithFloat:floatValue]; | 599 return [NSNumber numberWithFloat:floatValue]; |
603 } | 600 } |
604 | 601 |
605 - (NSString*)orientation { | 602 - (NSString*)orientation { |
606 // We present a spin button as a vertical slider, with a role description | 603 // We present a spin button as a vertical slider, with a role description |
607 // of "spin button". | 604 // of "spin button". |
608 if ([self internalRole] == blink::WebAXRoleSpinButton) | 605 if ([self internalRole] == ui::AX_ROLE_SPIN_BUTTON) |
609 return NSAccessibilityVerticalOrientationValue; | 606 return NSAccessibilityVerticalOrientationValue; |
610 | 607 |
611 if (GetState(browserAccessibility_, blink::WebAXStateVertical)) | 608 if (GetState(browserAccessibility_, ui::AX_STATE_VERTICAL)) |
612 return NSAccessibilityVerticalOrientationValue; | 609 return NSAccessibilityVerticalOrientationValue; |
613 else | 610 else |
614 return NSAccessibilityHorizontalOrientationValue; | 611 return NSAccessibilityHorizontalOrientationValue; |
615 } | 612 } |
616 | 613 |
617 - (NSNumber*)numberOfCharacters { | 614 - (NSNumber*)numberOfCharacters { |
618 return [NSNumber numberWithInt:browserAccessibility_->value().length()]; | 615 return [NSNumber numberWithInt:browserAccessibility_->value().length()]; |
619 } | 616 } |
620 | 617 |
621 // The origin of this accessibility object in the page's document. | 618 // The origin of this accessibility object in the page's document. |
(...skipping 21 matching lines...) Expand all Loading... |
643 - (NSValue*)position { | 640 - (NSValue*)position { |
644 NSPoint origin = [self origin]; | 641 NSPoint origin = [self origin]; |
645 NSSize size = [[self size] sizeValue]; | 642 NSSize size = [[self size] sizeValue]; |
646 NSPoint pointInScreen = | 643 NSPoint pointInScreen = |
647 [delegate_ accessibilityPointInScreen:origin size:size]; | 644 [delegate_ accessibilityPointInScreen:origin size:size]; |
648 return [NSValue valueWithPoint:pointInScreen]; | 645 return [NSValue valueWithPoint:pointInScreen]; |
649 } | 646 } |
650 | 647 |
651 - (NSNumber*)required { | 648 - (NSNumber*)required { |
652 return [NSNumber numberWithBool: | 649 return [NSNumber numberWithBool: |
653 GetState(browserAccessibility_, blink::WebAXStateRequired)]; | 650 GetState(browserAccessibility_, ui::AX_STATE_REQUIRED)]; |
654 } | 651 } |
655 | 652 |
656 // Returns an enum indicating the role from browserAccessibility_. | 653 // Returns an enum indicating the role from browserAccessibility_. |
657 - (blink::WebAXRole)internalRole { | 654 - (ui::AXRole)internalRole { |
658 return static_cast<blink::WebAXRole>(browserAccessibility_->role()); | 655 return static_cast<ui::AXRole>(browserAccessibility_->role()); |
659 } | 656 } |
660 | 657 |
661 // Returns a string indicating the NSAccessibility role of this object. | 658 // Returns a string indicating the NSAccessibility role of this object. |
662 - (NSString*)role { | 659 - (NSString*)role { |
663 blink::WebAXRole role = [self internalRole]; | 660 ui::AXRole role = [self internalRole]; |
664 if (role == blink::WebAXRoleCanvas && | 661 if (role == ui::AX_ROLE_CANVAS && |
665 browserAccessibility_->GetBoolAttribute( | 662 browserAccessibility_->GetBoolAttribute( |
666 AccessibilityNodeData::ATTR_CANVAS_HAS_FALLBACK)) { | 663 ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { |
667 return NSAccessibilityGroupRole; | 664 return NSAccessibilityGroupRole; |
668 } | 665 } |
669 return NativeRoleFromAccessibilityNodeDataRole(role); | 666 return NativeRoleFromAXRole(role); |
670 } | 667 } |
671 | 668 |
672 // Returns a string indicating the role description of this object. | 669 // Returns a string indicating the role description of this object. |
673 - (NSString*)roleDescription { | 670 - (NSString*)roleDescription { |
674 NSString* role = [self role]; | 671 NSString* role = [self role]; |
675 | 672 |
676 ContentClient* content_client = content::GetContentClient(); | 673 ContentClient* content_client = content::GetContentClient(); |
677 | 674 |
678 // The following descriptions are specific to webkit. | 675 // The following descriptions are specific to webkit. |
679 if ([role isEqualToString:@"AXWebArea"]) { | 676 if ([role isEqualToString:@"AXWebArea"]) { |
680 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 677 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
681 IDS_AX_ROLE_WEB_AREA)); | 678 IDS_AX_ROLE_WEB_AREA)); |
682 } | 679 } |
683 | 680 |
684 if ([role isEqualToString:@"NSAccessibilityLinkRole"]) { | 681 if ([role isEqualToString:@"NSAccessibilityLinkRole"]) { |
685 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 682 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
686 IDS_AX_ROLE_LINK)); | 683 IDS_AX_ROLE_LINK)); |
687 } | 684 } |
688 | 685 |
689 if ([role isEqualToString:@"AXHeading"]) { | 686 if ([role isEqualToString:@"AXHeading"]) { |
690 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 687 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
691 IDS_AX_ROLE_HEADING)); | 688 IDS_AX_ROLE_HEADING)); |
692 } | 689 } |
693 | 690 |
694 if ([role isEqualToString:NSAccessibilityGroupRole] || | 691 if ([role isEqualToString:NSAccessibilityGroupRole] || |
695 [role isEqualToString:NSAccessibilityRadioButtonRole]) { | 692 [role isEqualToString:NSAccessibilityRadioButtonRole]) { |
696 std::string role; | 693 std::string role; |
697 if (browserAccessibility_->GetHtmlAttribute("role", &role)) { | 694 if (browserAccessibility_->GetHtmlAttribute("role", &role)) { |
698 blink::WebAXRole internalRole = [self internalRole]; | 695 ui::AXRole internalRole = [self internalRole]; |
699 if ((internalRole != blink::WebAXRoleGroup && | 696 if ((internalRole != ui::AX_ROLE_GROUP && |
700 internalRole != blink::WebAXRoleListItem) || | 697 internalRole != ui::AX_ROLE_LIST_ITEM) || |
701 internalRole == blink::WebAXRoleTab) { | 698 internalRole == ui::AX_ROLE_TAB) { |
702 // TODO(dtseng): This is not localized; see crbug/84814. | 699 // TODO(dtseng): This is not localized; see crbug/84814. |
703 return base::SysUTF8ToNSString(role); | 700 return base::SysUTF8ToNSString(role); |
704 } | 701 } |
705 } | 702 } |
706 } | 703 } |
707 | 704 |
708 switch([self internalRole]) { | 705 switch([self internalRole]) { |
709 case blink::WebAXRoleFooter: | 706 case ui::AX_ROLE_FOOTER: |
710 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 707 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
711 IDS_AX_ROLE_FOOTER)); | 708 IDS_AX_ROLE_FOOTER)); |
712 case blink::WebAXRoleSpinButton: | 709 case ui::AX_ROLE_SPIN_BUTTON: |
713 // This control is similar to what VoiceOver calls a "stepper". | 710 // This control is similar to what VoiceOver calls a "stepper". |
714 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 711 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
715 IDS_AX_ROLE_STEPPER)); | 712 IDS_AX_ROLE_STEPPER)); |
716 default: | 713 default: |
717 break; | 714 break; |
718 } | 715 } |
719 | 716 |
720 return NSAccessibilityRoleDescription(role, nil); | 717 return NSAccessibilityRoleDescription(role, nil); |
721 } | 718 } |
722 | 719 |
723 - (NSArray*)rowHeaders { | 720 - (NSArray*)rowHeaders { |
724 if ([self internalRole] != blink::WebAXRoleTable && | 721 if ([self internalRole] != ui::AX_ROLE_TABLE && |
725 [self internalRole] != blink::WebAXRoleGrid) { | 722 [self internalRole] != ui::AX_ROLE_GRID) { |
726 return nil; | 723 return nil; |
727 } | 724 } |
728 | 725 |
729 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 726 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
730 const std::vector<int32>& uniqueCellIds = | 727 const std::vector<int32>& uniqueCellIds = |
731 browserAccessibility_->GetIntListAttribute( | 728 browserAccessibility_->GetIntListAttribute( |
732 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); | 729 ui::AX_ATTR_UNIQUE_CELL_IDS); |
733 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 730 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
734 int id = uniqueCellIds[i]; | 731 int id = uniqueCellIds[i]; |
735 BrowserAccessibility* cell = | 732 BrowserAccessibility* cell = |
736 browserAccessibility_->manager()->GetFromRendererID(id); | 733 browserAccessibility_->manager()->GetFromRendererID(id); |
737 if (cell && cell->role() == blink::WebAXRoleRowHeader) | 734 if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER) |
738 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 735 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
739 } | 736 } |
740 return ret; | 737 return ret; |
741 } | 738 } |
742 | 739 |
743 - (NSValue*)rowIndexRange { | 740 - (NSValue*)rowIndexRange { |
744 if ([self internalRole] != blink::WebAXRoleCell) | 741 if ([self internalRole] != ui::AX_ROLE_CELL) |
745 return nil; | 742 return nil; |
746 | 743 |
747 int row = -1; | 744 int row = -1; |
748 int rowspan = -1; | 745 int rowspan = -1; |
749 browserAccessibility_->GetIntAttribute( | 746 browserAccessibility_->GetIntAttribute( |
750 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_INDEX, &row); | 747 ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row); |
751 browserAccessibility_->GetIntAttribute( | 748 browserAccessibility_->GetIntAttribute( |
752 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_SPAN, &rowspan); | 749 ui::AX_ATTR_TABLE_CELL_ROW_SPAN, &rowspan); |
753 if (row >= 0 && rowspan >= 1) | 750 if (row >= 0 && rowspan >= 1) |
754 return [NSValue valueWithRange:NSMakeRange(row, rowspan)]; | 751 return [NSValue valueWithRange:NSMakeRange(row, rowspan)]; |
755 return nil; | 752 return nil; |
756 } | 753 } |
757 | 754 |
758 - (NSArray*)rows { | 755 - (NSArray*)rows { |
759 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 756 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
760 | 757 |
761 if ([self internalRole] == blink::WebAXRoleTable|| | 758 if ([self internalRole] == ui::AX_ROLE_TABLE|| |
762 [self internalRole] == blink::WebAXRoleGrid) { | 759 [self internalRole] == ui::AX_ROLE_GRID) { |
763 for (BrowserAccessibilityCocoa* child in [self children]) { | 760 for (BrowserAccessibilityCocoa* child in [self children]) { |
764 if ([[child role] isEqualToString:NSAccessibilityRowRole]) | 761 if ([[child role] isEqualToString:NSAccessibilityRowRole]) |
765 [ret addObject:child]; | 762 [ret addObject:child]; |
766 } | 763 } |
767 } else if ([self internalRole] == blink::WebAXRoleColumn) { | 764 } else if ([self internalRole] == ui::AX_ROLE_COLUMN) { |
768 const std::vector<int32>& indirectChildIds = | 765 const std::vector<int32>& indirectChildIds = |
769 browserAccessibility_->GetIntListAttribute( | 766 browserAccessibility_->GetIntListAttribute( |
770 AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); | 767 ui::AX_ATTR_INDIRECT_CHILD_IDS); |
771 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { | 768 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { |
772 int id = indirectChildIds[i]; | 769 int id = indirectChildIds[i]; |
773 BrowserAccessibility* rowElement = | 770 BrowserAccessibility* rowElement = |
774 browserAccessibility_->manager()->GetFromRendererID(id); | 771 browserAccessibility_->manager()->GetFromRendererID(id); |
775 if (rowElement) | 772 if (rowElement) |
776 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; | 773 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; |
777 } | 774 } |
778 } | 775 } |
779 | 776 |
780 return ret; | 777 return ret; |
781 } | 778 } |
782 | 779 |
783 // Returns the size of this object. | 780 // Returns the size of this object. |
784 - (NSValue*)size { | 781 - (NSValue*)size { |
785 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); | 782 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); |
786 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; | 783 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; |
787 } | 784 } |
788 | 785 |
789 // Returns a subrole based upon the role. | 786 // Returns a subrole based upon the role. |
790 - (NSString*) subrole { | 787 - (NSString*) subrole { |
791 blink::WebAXRole browserAccessibilityRole = [self internalRole]; | 788 ui::AXRole browserAccessibilityRole = [self internalRole]; |
792 if (browserAccessibilityRole == blink::WebAXRoleTextField && | 789 if (browserAccessibilityRole == ui::AX_ROLE_TEXT_FIELD && |
793 GetState(browserAccessibility_, blink::WebAXStateProtected)) { | 790 GetState(browserAccessibility_, ui::AX_STATE_PROTECTED)) { |
794 return @"AXSecureTextField"; | 791 return @"AXSecureTextField"; |
795 } | 792 } |
796 | 793 |
797 NSString* htmlTag = NSStringForStringAttribute( | 794 NSString* htmlTag = NSStringForStringAttribute( |
798 browserAccessibility_, AccessibilityNodeData::ATTR_HTML_TAG); | 795 browserAccessibility_, ui::AX_ATTR_HTML_TAG); |
799 | 796 |
800 if (browserAccessibilityRole == blink::WebAXRoleList) { | 797 if (browserAccessibilityRole == ui::AX_ROLE_LIST) { |
801 if ([htmlTag isEqualToString:@"ul"] || | 798 if ([htmlTag isEqualToString:@"ul"] || |
802 [htmlTag isEqualToString:@"ol"]) { | 799 [htmlTag isEqualToString:@"ol"]) { |
803 return @"AXContentList"; | 800 return @"AXContentList"; |
804 } else if ([htmlTag isEqualToString:@"dl"]) { | 801 } else if ([htmlTag isEqualToString:@"dl"]) { |
805 return @"AXDescriptionList"; | 802 return @"AXDescriptionList"; |
806 } | 803 } |
807 } | 804 } |
808 | 805 |
809 return NativeSubroleFromAccessibilityNodeDataRole(browserAccessibilityRole); | 806 return NativeSubroleFromAXRole(browserAccessibilityRole); |
810 } | 807 } |
811 | 808 |
812 // Returns all tabs in this subtree. | 809 // Returns all tabs in this subtree. |
813 - (NSArray*)tabs { | 810 - (NSArray*)tabs { |
814 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; | 811 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; |
815 | 812 |
816 if ([self internalRole] == blink::WebAXRoleTab) | 813 if ([self internalRole] == ui::AX_ROLE_TAB) |
817 [tabSubtree addObject:self]; | 814 [tabSubtree addObject:self]; |
818 | 815 |
819 for (uint i=0; i < [[self children] count]; ++i) { | 816 for (uint i=0; i < [[self children] count]; ++i) { |
820 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; | 817 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; |
821 if ([tabChildren count] > 0) | 818 if ([tabChildren count] > 0) |
822 [tabSubtree addObjectsFromArray:tabChildren]; | 819 [tabSubtree addObjectsFromArray:tabChildren]; |
823 } | 820 } |
824 | 821 |
825 return tabSubtree; | 822 return tabSubtree; |
826 } | 823 } |
827 | 824 |
828 - (NSString*)title { | 825 - (NSString*)title { |
829 return NSStringForStringAttribute( | 826 return NSStringForStringAttribute( |
830 browserAccessibility_, AccessibilityNodeData::ATTR_NAME); | 827 browserAccessibility_, ui::AX_ATTR_NAME); |
831 } | 828 } |
832 | 829 |
833 - (id)titleUIElement { | 830 - (id)titleUIElement { |
834 int titleElementId; | 831 int titleElementId; |
835 if (browserAccessibility_->GetIntAttribute( | 832 if (browserAccessibility_->GetIntAttribute( |
836 AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &titleElementId)) { | 833 ui::AX_ATTR_TITLE_UI_ELEMENT, &titleElementId)) { |
837 BrowserAccessibility* titleElement = | 834 BrowserAccessibility* titleElement = |
838 browserAccessibility_->manager()->GetFromRendererID(titleElementId); | 835 browserAccessibility_->manager()->GetFromRendererID(titleElementId); |
839 if (titleElement) | 836 if (titleElement) |
840 return titleElement->ToBrowserAccessibilityCocoa(); | 837 return titleElement->ToBrowserAccessibilityCocoa(); |
841 } | 838 } |
842 return nil; | 839 return nil; |
843 } | 840 } |
844 | 841 |
845 - (NSString*)url { | 842 - (NSString*)url { |
846 StringAttribute urlAttribute = | 843 StringAttribute urlAttribute = |
847 [[self role] isEqualToString:@"AXWebArea"] ? | 844 [[self role] isEqualToString:@"AXWebArea"] ? |
848 AccessibilityNodeData::ATTR_DOC_URL : | 845 ui::AX_ATTR_DOC_URL : |
849 AccessibilityNodeData::ATTR_URL; | 846 ui::AX_ATTR_URL; |
850 return NSStringForStringAttribute(browserAccessibility_, urlAttribute); | 847 return NSStringForStringAttribute(browserAccessibility_, urlAttribute); |
851 } | 848 } |
852 | 849 |
853 - (id)value { | 850 - (id)value { |
854 // WebCore uses an attachmentView to get the below behavior. | 851 // WebCore uses an attachmentView to get the below behavior. |
855 // We do not have any native views backing this object, so need | 852 // We do not have any native views backing this object, so need |
856 // to approximate Cocoa ax behavior best as we can. | 853 // to approximate Cocoa ax behavior best as we can. |
857 NSString* role = [self role]; | 854 NSString* role = [self role]; |
858 if ([role isEqualToString:@"AXHeading"]) { | 855 if ([role isEqualToString:@"AXHeading"]) { |
859 int level = 0; | 856 int level = 0; |
860 if (browserAccessibility_->GetIntAttribute( | 857 if (browserAccessibility_->GetIntAttribute( |
861 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL, &level)) { | 858 ui::AX_ATTR_HIERARCHICAL_LEVEL, &level)) { |
862 return [NSNumber numberWithInt:level]; | 859 return [NSNumber numberWithInt:level]; |
863 } | 860 } |
864 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { | 861 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { |
865 // AXValue does not make sense for pure buttons. | 862 // AXValue does not make sense for pure buttons. |
866 return @""; | 863 return @""; |
867 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] || | 864 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] || |
868 [role isEqualToString:NSAccessibilityRadioButtonRole]) { | 865 [role isEqualToString:NSAccessibilityRadioButtonRole]) { |
869 int value = 0; | 866 int value = 0; |
870 value = GetState( | 867 value = GetState( |
871 browserAccessibility_, blink::WebAXStateChecked) ? 1 : 0; | 868 browserAccessibility_, ui::AX_STATE_CHECKED) ? 1 : 0; |
872 value = GetState( | 869 value = GetState( |
873 browserAccessibility_, blink::WebAXStateSelected) ? | 870 browserAccessibility_, ui::AX_STATE_SELECTED) ? |
874 1 : | 871 1 : |
875 value; | 872 value; |
876 | 873 |
877 if (browserAccessibility_->GetBoolAttribute( | 874 if (browserAccessibility_->GetBoolAttribute( |
878 AccessibilityNodeData::ATTR_BUTTON_MIXED)) { | 875 ui::AX_ATTR_BUTTON_MIXED)) { |
879 value = 2; | 876 value = 2; |
880 } | 877 } |
881 return [NSNumber numberWithInt:value]; | 878 return [NSNumber numberWithInt:value]; |
882 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || | 879 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || |
883 [role isEqualToString:NSAccessibilitySliderRole] || | 880 [role isEqualToString:NSAccessibilitySliderRole] || |
884 [role isEqualToString:NSAccessibilityScrollBarRole]) { | 881 [role isEqualToString:NSAccessibilityScrollBarRole]) { |
885 float floatValue; | 882 float floatValue; |
886 if (browserAccessibility_->GetFloatAttribute( | 883 if (browserAccessibility_->GetFloatAttribute( |
887 AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &floatValue)) { | 884 ui::AX_ATTR_VALUE_FOR_RANGE, &floatValue)) { |
888 return [NSNumber numberWithFloat:floatValue]; | 885 return [NSNumber numberWithFloat:floatValue]; |
889 } | 886 } |
890 } else if ([role isEqualToString:NSAccessibilityColorWellRole]) { | 887 } else if ([role isEqualToString:NSAccessibilityColorWellRole]) { |
891 int r = browserAccessibility_->GetIntAttribute( | 888 int r = browserAccessibility_->GetIntAttribute( |
892 AccessibilityNodeData::ATTR_COLOR_VALUE_RED); | 889 ui::AX_ATTR_COLOR_VALUE_RED); |
893 int g = browserAccessibility_->GetIntAttribute( | 890 int g = browserAccessibility_->GetIntAttribute( |
894 AccessibilityNodeData::ATTR_COLOR_VALUE_GREEN); | 891 ui::AX_ATTR_COLOR_VALUE_GREEN); |
895 int b = browserAccessibility_->GetIntAttribute( | 892 int b = browserAccessibility_->GetIntAttribute( |
896 AccessibilityNodeData::ATTR_COLOR_VALUE_BLUE); | 893 ui::AX_ATTR_COLOR_VALUE_BLUE); |
897 // This string matches the one returned by a native Mac color well. | 894 // This string matches the one returned by a native Mac color well. |
898 return [NSString stringWithFormat:@"rgb %7.5f %7.5f %7.5f 1", | 895 return [NSString stringWithFormat:@"rgb %7.5f %7.5f %7.5f 1", |
899 r / 255., g / 255., b / 255.]; | 896 r / 255., g / 255., b / 255.]; |
900 } | 897 } |
901 | 898 |
902 return NSStringForStringAttribute( | 899 return NSStringForStringAttribute( |
903 browserAccessibility_, AccessibilityNodeData::ATTR_VALUE); | 900 browserAccessibility_, ui::AX_ATTR_VALUE); |
904 } | 901 } |
905 | 902 |
906 - (NSString*)valueDescription { | 903 - (NSString*)valueDescription { |
907 return NSStringForStringAttribute( | 904 return NSStringForStringAttribute( |
908 browserAccessibility_, AccessibilityNodeData::ATTR_VALUE); | 905 browserAccessibility_, ui::AX_ATTR_VALUE); |
909 } | 906 } |
910 | 907 |
911 - (NSValue*)visibleCharacterRange { | 908 - (NSValue*)visibleCharacterRange { |
912 return [NSValue valueWithRange: | 909 return [NSValue valueWithRange: |
913 NSMakeRange(0, browserAccessibility_->value().length())]; | 910 NSMakeRange(0, browserAccessibility_->value().length())]; |
914 } | 911 } |
915 | 912 |
916 - (NSArray*)visibleCells { | 913 - (NSArray*)visibleCells { |
917 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 914 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
918 const std::vector<int32>& uniqueCellIds = | 915 const std::vector<int32>& uniqueCellIds = |
919 browserAccessibility_->GetIntListAttribute( | 916 browserAccessibility_->GetIntListAttribute( |
920 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); | 917 ui::AX_ATTR_UNIQUE_CELL_IDS); |
921 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 918 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
922 int id = uniqueCellIds[i]; | 919 int id = uniqueCellIds[i]; |
923 BrowserAccessibility* cell = | 920 BrowserAccessibility* cell = |
924 browserAccessibility_->manager()->GetFromRendererID(id); | 921 browserAccessibility_->manager()->GetFromRendererID(id); |
925 if (cell) | 922 if (cell) |
926 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 923 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
927 } | 924 } |
928 return ret; | 925 return ret; |
929 } | 926 } |
930 | 927 |
931 - (NSArray*)visibleColumns { | 928 - (NSArray*)visibleColumns { |
932 return [self columns]; | 929 return [self columns]; |
933 } | 930 } |
934 | 931 |
935 - (NSArray*)visibleRows { | 932 - (NSArray*)visibleRows { |
936 return [self rows]; | 933 return [self rows]; |
937 } | 934 } |
938 | 935 |
939 - (NSNumber*)visited { | 936 - (NSNumber*)visited { |
940 return [NSNumber numberWithBool: | 937 return [NSNumber numberWithBool: |
941 GetState(browserAccessibility_, blink::WebAXStateVisited)]; | 938 GetState(browserAccessibility_, ui::AX_STATE_VISITED)]; |
942 } | 939 } |
943 | 940 |
944 - (id)window { | 941 - (id)window { |
945 return [delegate_ window]; | 942 return [delegate_ window]; |
946 } | 943 } |
947 | 944 |
948 - (NSString*)methodNameForAttribute:(NSString*)attribute { | 945 - (NSString*)methodNameForAttribute:(NSString*)attribute { |
949 return [attributeToMethodNameMap objectForKey:attribute]; | 946 return [attributeToMethodNameMap objectForKey:attribute]; |
950 } | 947 } |
951 | 948 |
952 // Returns the accessibility value for the given attribute. If the value isn't | 949 // Returns the accessibility value for the given attribute. If the value isn't |
953 // supported this will return nil. | 950 // supported this will return nil. |
954 - (id)accessibilityAttributeValue:(NSString*)attribute { | 951 - (id)accessibilityAttributeValue:(NSString*)attribute { |
955 if (!browserAccessibility_) | 952 if (!browserAccessibility_) |
956 return nil; | 953 return nil; |
957 | 954 |
958 SEL selector = | 955 SEL selector = |
959 NSSelectorFromString([self methodNameForAttribute:attribute]); | 956 NSSelectorFromString([self methodNameForAttribute:attribute]); |
960 if (selector) | 957 if (selector) |
961 return [self performSelector:selector]; | 958 return [self performSelector:selector]; |
962 | 959 |
963 // TODO(dtseng): refactor remaining attributes. | 960 // TODO(dtseng): refactor remaining attributes. |
964 int selStart, selEnd; | 961 int selStart, selEnd; |
965 if (browserAccessibility_->GetIntAttribute( | 962 if (browserAccessibility_->GetIntAttribute( |
966 AccessibilityNodeData::ATTR_TEXT_SEL_START, &selStart) && | 963 ui::AX_ATTR_TEXT_SEL_START, &selStart) && |
967 browserAccessibility_-> | 964 browserAccessibility_-> |
968 GetIntAttribute(AccessibilityNodeData::ATTR_TEXT_SEL_END, &selEnd)) { | 965 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &selEnd)) { |
969 if (selStart > selEnd) | 966 if (selStart > selEnd) |
970 std::swap(selStart, selEnd); | 967 std::swap(selStart, selEnd); |
971 int selLength = selEnd - selStart; | 968 int selLength = selEnd - selStart; |
972 if ([attribute isEqualToString: | 969 if ([attribute isEqualToString: |
973 NSAccessibilityInsertionPointLineNumberAttribute]) { | 970 NSAccessibilityInsertionPointLineNumberAttribute]) { |
974 const std::vector<int32>& line_breaks = | 971 const std::vector<int32>& line_breaks = |
975 browserAccessibility_->GetIntListAttribute( | 972 browserAccessibility_->GetIntListAttribute( |
976 AccessibilityNodeData::ATTR_LINE_BREAKS); | 973 ui::AX_ATTR_LINE_BREAKS); |
977 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { | 974 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { |
978 if (line_breaks[i] > selStart) | 975 if (line_breaks[i] > selStart) |
979 return [NSNumber numberWithInt:i]; | 976 return [NSNumber numberWithInt:i]; |
980 } | 977 } |
981 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; | 978 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; |
982 } | 979 } |
983 if ([attribute isEqualToString:NSAccessibilitySelectedTextAttribute]) { | 980 if ([attribute isEqualToString:NSAccessibilitySelectedTextAttribute]) { |
984 std::string value = browserAccessibility_->GetStringAttribute( | 981 std::string value = browserAccessibility_->GetStringAttribute( |
985 AccessibilityNodeData::ATTR_VALUE); | 982 ui::AX_ATTR_VALUE); |
986 return base::SysUTF8ToNSString(value.substr(selStart, selLength)); | 983 return base::SysUTF8ToNSString(value.substr(selStart, selLength)); |
987 } | 984 } |
988 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { | 985 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { |
989 return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; | 986 return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; |
990 } | 987 } |
991 } | 988 } |
992 return nil; | 989 return nil; |
993 } | 990 } |
994 | 991 |
995 // Returns the accessibility value for the given attribute and parameter. If the | 992 // Returns the accessibility value for the given attribute and parameter. If the |
996 // value isn't supported this will return nil. | 993 // value isn't supported this will return nil. |
997 - (id)accessibilityAttributeValue:(NSString*)attribute | 994 - (id)accessibilityAttributeValue:(NSString*)attribute |
998 forParameter:(id)parameter { | 995 forParameter:(id)parameter { |
999 if (!browserAccessibility_) | 996 if (!browserAccessibility_) |
1000 return nil; | 997 return nil; |
1001 | 998 |
1002 const std::vector<int32>& line_breaks = | 999 const std::vector<int32>& line_breaks = |
1003 browserAccessibility_->GetIntListAttribute( | 1000 browserAccessibility_->GetIntListAttribute( |
1004 AccessibilityNodeData::ATTR_LINE_BREAKS); | 1001 ui::AX_ATTR_LINE_BREAKS); |
1005 int len = static_cast<int>(browserAccessibility_->value().size()); | 1002 int len = static_cast<int>(browserAccessibility_->value().size()); |
1006 | 1003 |
1007 if ([attribute isEqualToString: | 1004 if ([attribute isEqualToString: |
1008 NSAccessibilityStringForRangeParameterizedAttribute]) { | 1005 NSAccessibilityStringForRangeParameterizedAttribute]) { |
1009 NSRange range = [(NSValue*)parameter rangeValue]; | 1006 NSRange range = [(NSValue*)parameter rangeValue]; |
1010 std::string value = browserAccessibility_->GetStringAttribute( | 1007 std::string value = browserAccessibility_->GetStringAttribute( |
1011 AccessibilityNodeData::ATTR_VALUE); | 1008 ui::AX_ATTR_VALUE); |
1012 return base::SysUTF8ToNSString(value.substr(range.location, range.length)); | 1009 return base::SysUTF8ToNSString(value.substr(range.location, range.length)); |
1013 } | 1010 } |
1014 | 1011 |
1015 if ([attribute isEqualToString: | 1012 if ([attribute isEqualToString: |
1016 NSAccessibilityLineForIndexParameterizedAttribute]) { | 1013 NSAccessibilityLineForIndexParameterizedAttribute]) { |
1017 int index = [(NSNumber*)parameter intValue]; | 1014 int index = [(NSNumber*)parameter intValue]; |
1018 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { | 1015 for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { |
1019 if (line_breaks[i] > index) | 1016 if (line_breaks[i] > index) |
1020 return [NSNumber numberWithInt:i]; | 1017 return [NSNumber numberWithInt:i]; |
1021 } | 1018 } |
1022 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; | 1019 return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; |
1023 } | 1020 } |
1024 | 1021 |
1025 if ([attribute isEqualToString: | 1022 if ([attribute isEqualToString: |
1026 NSAccessibilityRangeForLineParameterizedAttribute]) { | 1023 NSAccessibilityRangeForLineParameterizedAttribute]) { |
1027 int line_index = [(NSNumber*)parameter intValue]; | 1024 int line_index = [(NSNumber*)parameter intValue]; |
1028 int line_count = static_cast<int>(line_breaks.size()) + 1; | 1025 int line_count = static_cast<int>(line_breaks.size()) + 1; |
1029 if (line_index < 0 || line_index >= line_count) | 1026 if (line_index < 0 || line_index >= line_count) |
1030 return nil; | 1027 return nil; |
1031 int start = line_index > 0 ? line_breaks[line_index - 1] : 0; | 1028 int start = line_index > 0 ? line_breaks[line_index - 1] : 0; |
1032 int end = line_index < line_count - 1 ? line_breaks[line_index] : len; | 1029 int end = line_index < line_count - 1 ? line_breaks[line_index] : len; |
1033 return [NSValue valueWithRange: | 1030 return [NSValue valueWithRange: |
1034 NSMakeRange(start, end - start)]; | 1031 NSMakeRange(start, end - start)]; |
1035 } | 1032 } |
1036 | 1033 |
1037 if ([attribute isEqualToString: | 1034 if ([attribute isEqualToString: |
1038 NSAccessibilityCellForColumnAndRowParameterizedAttribute]) { | 1035 NSAccessibilityCellForColumnAndRowParameterizedAttribute]) { |
1039 if ([self internalRole] != blink::WebAXRoleTable && | 1036 if ([self internalRole] != ui::AX_ROLE_TABLE && |
1040 [self internalRole] != blink::WebAXRoleGrid) { | 1037 [self internalRole] != ui::AX_ROLE_GRID) { |
1041 return nil; | 1038 return nil; |
1042 } | 1039 } |
1043 if (![parameter isKindOfClass:[NSArray self]]) | 1040 if (![parameter isKindOfClass:[NSArray self]]) |
1044 return nil; | 1041 return nil; |
1045 NSArray* array = parameter; | 1042 NSArray* array = parameter; |
1046 int column = [[array objectAtIndex:0] intValue]; | 1043 int column = [[array objectAtIndex:0] intValue]; |
1047 int row = [[array objectAtIndex:1] intValue]; | 1044 int row = [[array objectAtIndex:1] intValue]; |
1048 int num_columns = browserAccessibility_->GetIntAttribute( | 1045 int num_columns = browserAccessibility_->GetIntAttribute( |
1049 AccessibilityNodeData::ATTR_TABLE_COLUMN_COUNT); | 1046 ui::AX_ATTR_TABLE_COLUMN_COUNT); |
1050 int num_rows = browserAccessibility_->GetIntAttribute( | 1047 int num_rows = browserAccessibility_->GetIntAttribute( |
1051 AccessibilityNodeData::ATTR_TABLE_ROW_COUNT); | 1048 ui::AX_ATTR_TABLE_ROW_COUNT); |
1052 if (column < 0 || column >= num_columns || | 1049 if (column < 0 || column >= num_columns || |
1053 row < 0 || row >= num_rows) { | 1050 row < 0 || row >= num_rows) { |
1054 return nil; | 1051 return nil; |
1055 } | 1052 } |
1056 for (size_t i = 0; | 1053 for (size_t i = 0; |
1057 i < browserAccessibility_->PlatformChildCount(); | 1054 i < browserAccessibility_->PlatformChildCount(); |
1058 ++i) { | 1055 ++i) { |
1059 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); | 1056 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); |
1060 if (child->role() != blink::WebAXRoleRow) | 1057 if (child->role() != ui::AX_ROLE_ROW) |
1061 continue; | 1058 continue; |
1062 int rowIndex; | 1059 int rowIndex; |
1063 if (!child->GetIntAttribute( | 1060 if (!child->GetIntAttribute( |
1064 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX, &rowIndex)) { | 1061 ui::AX_ATTR_TABLE_ROW_INDEX, &rowIndex)) { |
1065 continue; | 1062 continue; |
1066 } | 1063 } |
1067 if (rowIndex < row) | 1064 if (rowIndex < row) |
1068 continue; | 1065 continue; |
1069 if (rowIndex > row) | 1066 if (rowIndex > row) |
1070 break; | 1067 break; |
1071 for (size_t j = 0; | 1068 for (size_t j = 0; |
1072 j < child->PlatformChildCount(); | 1069 j < child->PlatformChildCount(); |
1073 ++j) { | 1070 ++j) { |
1074 BrowserAccessibility* cell = child->PlatformGetChild(j); | 1071 BrowserAccessibility* cell = child->PlatformGetChild(j); |
1075 if (cell->role() != blink::WebAXRoleCell) | 1072 if (cell->role() != ui::AX_ROLE_CELL) |
1076 continue; | 1073 continue; |
1077 int colIndex; | 1074 int colIndex; |
1078 if (!cell->GetIntAttribute( | 1075 if (!cell->GetIntAttribute( |
1079 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, | 1076 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, |
1080 &colIndex)) { | 1077 &colIndex)) { |
1081 continue; | 1078 continue; |
1082 } | 1079 } |
1083 if (colIndex == column) | 1080 if (colIndex == column) |
1084 return cell->ToBrowserAccessibilityCocoa(); | 1081 return cell->ToBrowserAccessibilityCocoa(); |
1085 if (colIndex > column) | 1082 if (colIndex > column) |
1086 break; | 1083 break; |
1087 } | 1084 } |
1088 } | 1085 } |
1089 return nil; | 1086 return nil; |
1090 } | 1087 } |
1091 | 1088 |
1092 if ([attribute isEqualToString: | 1089 if ([attribute isEqualToString: |
1093 NSAccessibilityBoundsForRangeParameterizedAttribute]) { | 1090 NSAccessibilityBoundsForRangeParameterizedAttribute]) { |
1094 if ([self internalRole] != blink::WebAXRoleStaticText) | 1091 if ([self internalRole] != ui::AX_ROLE_STATIC_TEXT) |
1095 return nil; | 1092 return nil; |
1096 NSRange range = [(NSValue*)parameter rangeValue]; | 1093 NSRange range = [(NSValue*)parameter rangeValue]; |
1097 gfx::Rect rect = browserAccessibility_->GetGlobalBoundsForRange( | 1094 gfx::Rect rect = browserAccessibility_->GetGlobalBoundsForRange( |
1098 range.location, range.length); | 1095 range.location, range.length); |
1099 NSPoint origin = NSMakePoint(rect.x(), rect.y()); | 1096 NSPoint origin = NSMakePoint(rect.x(), rect.y()); |
1100 NSSize size = NSMakeSize(rect.width(), rect.height()); | 1097 NSSize size = NSMakeSize(rect.width(), rect.height()); |
1101 NSPoint pointInScreen = | 1098 NSPoint pointInScreen = |
1102 [delegate_ accessibilityPointInScreen:origin size:size]; | 1099 [delegate_ accessibilityPointInScreen:origin size:size]; |
1103 NSRect nsrect = NSMakeRect( | 1100 NSRect nsrect = NSMakeRect( |
1104 pointInScreen.x, pointInScreen.y, rect.width(), rect.height()); | 1101 pointInScreen.x, pointInScreen.y, rect.width(), rect.height()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1137 NSAccessibilityRangeForLineParameterizedAttribute, | 1134 NSAccessibilityRangeForLineParameterizedAttribute, |
1138 NSAccessibilityStringForRangeParameterizedAttribute, | 1135 NSAccessibilityStringForRangeParameterizedAttribute, |
1139 NSAccessibilityRangeForPositionParameterizedAttribute, | 1136 NSAccessibilityRangeForPositionParameterizedAttribute, |
1140 NSAccessibilityRangeForIndexParameterizedAttribute, | 1137 NSAccessibilityRangeForIndexParameterizedAttribute, |
1141 NSAccessibilityBoundsForRangeParameterizedAttribute, | 1138 NSAccessibilityBoundsForRangeParameterizedAttribute, |
1142 NSAccessibilityRTFForRangeParameterizedAttribute, | 1139 NSAccessibilityRTFForRangeParameterizedAttribute, |
1143 NSAccessibilityAttributedStringForRangeParameterizedAttribute, | 1140 NSAccessibilityAttributedStringForRangeParameterizedAttribute, |
1144 NSAccessibilityStyleRangeForIndexParameterizedAttribute, | 1141 NSAccessibilityStyleRangeForIndexParameterizedAttribute, |
1145 nil]; | 1142 nil]; |
1146 } | 1143 } |
1147 if ([self internalRole] == blink::WebAXRoleStaticText) { | 1144 if ([self internalRole] == ui::AX_ROLE_STATIC_TEXT) { |
1148 return [NSArray arrayWithObjects: | 1145 return [NSArray arrayWithObjects: |
1149 NSAccessibilityBoundsForRangeParameterizedAttribute, | 1146 NSAccessibilityBoundsForRangeParameterizedAttribute, |
1150 nil]; | 1147 nil]; |
1151 } | 1148 } |
1152 return nil; | 1149 return nil; |
1153 } | 1150 } |
1154 | 1151 |
1155 // Returns an array of action names that this object will respond to. | 1152 // Returns an array of action names that this object will respond to. |
1156 - (NSArray*)accessibilityActionNames { | 1153 - (NSArray*)accessibilityActionNames { |
1157 if (!browserAccessibility_) | 1154 if (!browserAccessibility_) |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1310 } else { | 1307 } else { |
1311 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1308 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
1312 NSAccessibilityIndexAttribute, | 1309 NSAccessibilityIndexAttribute, |
1313 nil]]; | 1310 nil]]; |
1314 } | 1311 } |
1315 } | 1312 } |
1316 } | 1313 } |
1317 | 1314 |
1318 // Live regions. | 1315 // Live regions. |
1319 if (browserAccessibility_->HasStringAttribute( | 1316 if (browserAccessibility_->HasStringAttribute( |
1320 AccessibilityNodeData::ATTR_LIVE_STATUS)) { | 1317 ui::AX_ATTR_LIVE_STATUS)) { |
1321 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1318 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
1322 @"AXARIALive", | 1319 @"AXARIALive", |
1323 @"AXARIARelevant", | 1320 @"AXARIARelevant", |
1324 nil]]; | 1321 nil]]; |
1325 } | 1322 } |
1326 if (browserAccessibility_->HasStringAttribute( | 1323 if (browserAccessibility_->HasStringAttribute( |
1327 AccessibilityNodeData::ATTR_CONTAINER_LIVE_STATUS)) { | 1324 ui::AX_ATTR_CONTAINER_LIVE_STATUS)) { |
1328 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1325 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
1329 @"AXARIAAtomic", | 1326 @"AXARIAAtomic", |
1330 @"AXARIABusy", | 1327 @"AXARIABusy", |
1331 nil]]; | 1328 nil]]; |
1332 } | 1329 } |
1333 | 1330 |
1334 // Title UI Element. | 1331 // Title UI Element. |
1335 if (browserAccessibility_->HasIntAttribute( | 1332 if (browserAccessibility_->HasIntAttribute( |
1336 AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT)) { | 1333 ui::AX_ATTR_TITLE_UI_ELEMENT)) { |
1337 [ret addObjectsFromArray:[NSArray arrayWithObjects: | 1334 [ret addObjectsFromArray:[NSArray arrayWithObjects: |
1338 NSAccessibilityTitleUIElementAttribute, | 1335 NSAccessibilityTitleUIElementAttribute, |
1339 nil]]; | 1336 nil]]; |
1340 } | 1337 } |
1341 | 1338 |
1342 return ret; | 1339 return ret; |
1343 } | 1340 } |
1344 | 1341 |
1345 // Returns the index of the child in this objects array of children. | 1342 // Returns the index of the child in this objects array of children. |
1346 - (NSUInteger)accessibilityGetIndexOf:(id)child { | 1343 - (NSUInteger)accessibilityGetIndexOf:(id)child { |
(...skipping 10 matching lines...) Expand all Loading... |
1357 } | 1354 } |
1358 | 1355 |
1359 // Returns whether or not the specified attribute can be set by the | 1356 // Returns whether or not the specified attribute can be set by the |
1360 // accessibility API via |accessibilitySetValue:forAttribute:|. | 1357 // accessibility API via |accessibilitySetValue:forAttribute:|. |
1361 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { | 1358 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { |
1362 if (!browserAccessibility_) | 1359 if (!browserAccessibility_) |
1363 return nil; | 1360 return nil; |
1364 | 1361 |
1365 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) | 1362 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) |
1366 return GetState(browserAccessibility_, | 1363 return GetState(browserAccessibility_, |
1367 blink::WebAXStateFocusable); | 1364 ui::AX_STATE_FOCUSABLE); |
1368 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { | 1365 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { |
1369 return browserAccessibility_->GetBoolAttribute( | 1366 return browserAccessibility_->GetBoolAttribute( |
1370 AccessibilityNodeData::ATTR_CAN_SET_VALUE); | 1367 ui::AX_ATTR_CAN_SET_VALUE); |
1371 } | 1368 } |
1372 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && | 1369 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && |
1373 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] || | 1370 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] || |
1374 [[self role] isEqualToString:NSAccessibilityTextAreaRole])) | 1371 [[self role] isEqualToString:NSAccessibilityTextAreaRole])) |
1375 return YES; | 1372 return YES; |
1376 | 1373 |
1377 return NO; | 1374 return NO; |
1378 } | 1375 } |
1379 | 1376 |
1380 // Returns whether or not this object should be ignored in the accessibilty | 1377 // Returns whether or not this object should be ignored in the accessibilty |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 return [super hash]; | 1472 return [super hash]; |
1476 return browserAccessibility_->renderer_id(); | 1473 return browserAccessibility_->renderer_id(); |
1477 } | 1474 } |
1478 | 1475 |
1479 - (BOOL)accessibilityShouldUseUniqueId { | 1476 - (BOOL)accessibilityShouldUseUniqueId { |
1480 return YES; | 1477 return YES; |
1481 } | 1478 } |
1482 | 1479 |
1483 @end | 1480 @end |
1484 | 1481 |
OLD | NEW |