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

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

Issue 8493016: content: Remove 16 exit time destructors and 15 static initializers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mac compile Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | content/browser/browser_thread_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/string16.h" 12 #include "base/string16.h"
12 #include "base/sys_string_conversions.h" 13 #include "base/sys_string_conversions.h"
13 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
14 #include "content/browser/accessibility/browser_accessibility_manager.h" 15 #include "content/browser/accessibility/browser_accessibility_manager.h"
15 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
16 #include "grit/webkit_strings.h" 17 #include "grit/webkit_strings.h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
18 19
19 // 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,
20 // 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
(...skipping 15 matching lines...) Expand all
36 returnValue = base::SysUTF16ToNSString(iter->second); 37 returnValue = base::SysUTF16ToNSString(iter->second);
37 } 38 }
38 return returnValue; 39 return returnValue;
39 } 40 }
40 41
41 struct MapEntry { 42 struct MapEntry {
42 WebAccessibility::Role webKitValue; 43 WebAccessibility::Role webKitValue;
43 NSString* nativeValue; 44 NSString* nativeValue;
44 }; 45 };
45 46
47 typedef std::map<WebAccessibility::Role, NSString*> RoleMap;
48
46 struct AttributeToMethodNameEntry { 49 struct AttributeToMethodNameEntry {
47 NSString* attribute; 50 NSString* attribute;
48 NSString* methodName; 51 NSString* methodName;
49 }; 52 };
50 53
51 static const MapEntry roles[] = { 54 const AttributeToMethodNameEntry attributeToMethodNameContainer[] = {
52 { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole },
53 { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
54 { WebAccessibility::ROLE_ANNOTATION, NSAccessibilityUnknownRole },
55 { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole },
56 { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole },
57 { WebAccessibility::ROLE_BROWSER, NSAccessibilityBrowserRole },
58 { WebAccessibility::ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole },
59 { WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole },
60 { WebAccessibility::ROLE_CELL, @"AXCell" },
61 { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
62 { WebAccessibility::ROLE_COLOR_WELL, NSAccessibilityColorWellRole },
63 { WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole },
64 { WebAccessibility::ROLE_COLUMN_HEADER, @"AXCell" },
65 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION,
66 NSAccessibilityGroupRole },
67 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, NSAccessibilityGroupRole },
68 { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole },
69 { WebAccessibility::ROLE_DIRECTORY, NSAccessibilityListRole },
70 { WebAccessibility::ROLE_DISCLOSURE_TRIANGLE,
71 NSAccessibilityDisclosureTriangleRole },
72 { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole },
73 { WebAccessibility::ROLE_DRAWER, NSAccessibilityDrawerRole },
74 { WebAccessibility::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole },
75 { WebAccessibility::ROLE_GRID, NSAccessibilityGridRole },
76 { WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole },
77 { WebAccessibility::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole },
78 { WebAccessibility::ROLE_HEADING, @"AXHeading" },
79 { WebAccessibility::ROLE_HELP_TAG, NSAccessibilityHelpTagRole },
80 { WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole },
81 { WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole },
82 { WebAccessibility::ROLE_IMAGE_MAP, NSAccessibilityGroupRole },
83 { WebAccessibility::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole },
84 { WebAccessibility::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole },
85 { WebAccessibility::ROLE_LANDMARK_APPLICATION, NSAccessibilityGroupRole },
86 { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
87 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole },
88 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole },
89 { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
90 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole },
91 { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
92 { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole },
93 { WebAccessibility::ROLE_LIST, NSAccessibilityListRole },
94 { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
95 { WebAccessibility::ROLE_LIST_MARKER, NSAccessibilityGroupRole },
96 { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole },
97 { WebAccessibility::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole },
98 { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole },
99 { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole },
100 { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole },
101 { WebAccessibility::ROLE_MATTE, NSAccessibilityMatteRole },
102 { WebAccessibility::ROLE_MENU, NSAccessibilityMenuRole },
103 { WebAccessibility::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole },
104 { WebAccessibility::ROLE_MENU_BUTTON, NSAccessibilityButtonRole },
105 { WebAccessibility::ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole },
106 { WebAccessibility::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole },
107 { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole },
108 { WebAccessibility::ROLE_OUTLINE, NSAccessibilityOutlineRole },
109 { WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole },
110 { WebAccessibility::ROLE_PROGRESS_INDICATOR,
111 NSAccessibilityProgressIndicatorRole },
112 { WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole },
113 { WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
114 { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole },
115 { WebAccessibility::ROLE_ROOT_WEB_AREA, @"AXWebArea" },
116 { WebAccessibility::ROLE_ROW, NSAccessibilityRowRole },
117 { WebAccessibility::ROLE_ROW_HEADER, @"AXCell" },
118 { WebAccessibility::ROLE_RULER, NSAccessibilityRulerRole },
119 { WebAccessibility::ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole },
120 // TODO(dtseng): we don't correctly support the attributes for these roles.
121 // { WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole },
122 // { WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
123 { WebAccessibility::ROLE_SHEET, NSAccessibilitySheetRole },
124 { WebAccessibility::ROLE_SLIDER, NSAccessibilitySliderRole },
125 { WebAccessibility::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole },
126 { WebAccessibility::ROLE_SPLITTER, NSAccessibilitySplitterRole },
127 { WebAccessibility::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole },
128 { WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
129 { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
130 { WebAccessibility::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
131 { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole },
132 { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
133 { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
134 { WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
135 { WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
136 { WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
137 { WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
138 { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
139 { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole },
140 { WebAccessibility::ROLE_TOOLBAR, NSAccessibilityToolbarRole },
141 { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole },
142 { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole },
143 { WebAccessibility::ROLE_TREE_GRID, NSAccessibilityTableRole },
144 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole },
145 { WebAccessibility::ROLE_VALUE_INDICATOR, NSAccessibilityValueIndicatorRole },
146 { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
147 { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
148 { WebAccessibility::ROLE_WINDOW, NSAccessibilityUnknownRole },
149 };
150
151 static const MapEntry subroles[] = {
152 { WebAccessibility::ROLE_ALERT, @"AXApplicationAlert" },
153 { WebAccessibility::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" },
154 { WebAccessibility::ROLE_ARTICLE, @"AXDocumentArticle" },
155 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" },
156 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, @"AXTerm" },
157 { WebAccessibility::ROLE_DIALOG, @"AXApplicationDialog" },
158 { WebAccessibility::ROLE_DOCUMENT, @"AXDocument" },
159 { WebAccessibility::ROLE_LANDMARK_APPLICATION, @"AXLandmarkApplication" },
160 { WebAccessibility::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" },
161 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, @"AXLandmarkComplementary" },
162 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, @"AXLandmarkContentInfo" },
163 { WebAccessibility::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" },
164 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, @"AXLandmarkNavigation" },
165 { WebAccessibility::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" },
166 { WebAccessibility::ROLE_LOG, @"AXApplicationLog" },
167 { WebAccessibility::ROLE_MARQUEE, @"AXApplicationMarquee" },
168 { WebAccessibility::ROLE_MATH, @"AXDocumentMath" },
169 { WebAccessibility::ROLE_NOTE, @"AXDocumentNote" },
170 { WebAccessibility::ROLE_REGION, @"AXDocumentRegion" },
171 { WebAccessibility::ROLE_STATUS, @"AXApplicationStatus" },
172 { WebAccessibility::ROLE_TAB_PANEL, @"AXTabPanel" },
173 { WebAccessibility::ROLE_TIMER, @"AXApplicationTimer" },
174 { WebAccessibility::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
175 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
176 };
177
178 static const AttributeToMethodNameEntry attributeToMethodNameContainer[] = {
179 { NSAccessibilityChildrenAttribute, @"children" }, 55 { NSAccessibilityChildrenAttribute, @"children" },
180 { NSAccessibilityColumnsAttribute, @"columns" }, 56 { NSAccessibilityColumnsAttribute, @"columns" },
181 { NSAccessibilityDescriptionAttribute, @"description" }, 57 { NSAccessibilityDescriptionAttribute, @"description" },
182 { NSAccessibilityEnabledAttribute, @"enabled" }, 58 { NSAccessibilityEnabledAttribute, @"enabled" },
183 { NSAccessibilityFocusedAttribute, @"focused" }, 59 { NSAccessibilityFocusedAttribute, @"focused" },
184 { NSAccessibilityHelpAttribute, @"help" }, 60 { NSAccessibilityHelpAttribute, @"help" },
185 { NSAccessibilityMaxValueAttribute, @"maxValue" }, 61 { NSAccessibilityMaxValueAttribute, @"maxValue" },
186 { NSAccessibilityMinValueAttribute, @"minValue" }, 62 { NSAccessibilityMinValueAttribute, @"minValue" },
187 { NSAccessibilityNumberOfCharactersAttribute, @"numberOfCharacters" }, 63 { NSAccessibilityNumberOfCharactersAttribute, @"numberOfCharacters" },
188 { NSAccessibilityParentAttribute, @"parent" }, 64 { NSAccessibilityParentAttribute, @"parent" },
(...skipping 21 matching lines...) Expand all
210 { @"AXRequired", @"required" }, 86 { @"AXRequired", @"required" },
211 { @"AXVisited", @"visited" }, 87 { @"AXVisited", @"visited" },
212 }; 88 };
213 89
214 // GetState checks the bitmask used in webaccessibility.h to check 90 // GetState checks the bitmask used in webaccessibility.h to check
215 // if the given state was set on the accessibility object. 91 // if the given state was set on the accessibility object.
216 bool GetState(BrowserAccessibility* accessibility, int state) { 92 bool GetState(BrowserAccessibility* accessibility, int state) {
217 return ((accessibility->state() >> state) & 1); 93 return ((accessibility->state() >> state) & 1);
218 } 94 }
219 95
96 RoleMap BuildRoleMap() {
97 const MapEntry roles[] = {
98 { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole },
99 { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
100 { WebAccessibility::ROLE_ANNOTATION, NSAccessibilityUnknownRole },
101 { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole },
102 { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole },
103 { WebAccessibility::ROLE_BROWSER, NSAccessibilityBrowserRole },
104 { WebAccessibility::ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole },
105 { WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole },
106 { WebAccessibility::ROLE_CELL, @"AXCell" },
107 { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
108 { WebAccessibility::ROLE_COLOR_WELL, NSAccessibilityColorWellRole },
109 { WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole },
110 { WebAccessibility::ROLE_COLUMN_HEADER, @"AXCell" },
111 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION,
112 NSAccessibilityGroupRole },
113 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, NSAccessibilityGroupRole },
114 { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole },
115 { WebAccessibility::ROLE_DIRECTORY, NSAccessibilityListRole },
116 { WebAccessibility::ROLE_DISCLOSURE_TRIANGLE,
117 NSAccessibilityDisclosureTriangleRole },
118 { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole },
119 { WebAccessibility::ROLE_DRAWER, NSAccessibilityDrawerRole },
120 { WebAccessibility::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole },
121 { WebAccessibility::ROLE_GRID, NSAccessibilityGridRole },
122 { WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole },
123 { WebAccessibility::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole },
124 { WebAccessibility::ROLE_HEADING, @"AXHeading" },
125 { WebAccessibility::ROLE_HELP_TAG, NSAccessibilityHelpTagRole },
126 { WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole },
127 { WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole },
128 { WebAccessibility::ROLE_IMAGE_MAP, NSAccessibilityGroupRole },
129 { WebAccessibility::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole },
130 { WebAccessibility::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole },
131 { WebAccessibility::ROLE_LANDMARK_APPLICATION, NSAccessibilityGroupRole },
132 { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
133 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole },
134 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole },
135 { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
136 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole },
137 { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
138 { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole },
139 { WebAccessibility::ROLE_LIST, NSAccessibilityListRole },
140 { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
141 { WebAccessibility::ROLE_LIST_MARKER, NSAccessibilityGroupRole },
142 { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole },
143 { WebAccessibility::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole },
144 { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole },
145 { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole },
146 { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole },
147 { WebAccessibility::ROLE_MATTE, NSAccessibilityMatteRole },
148 { WebAccessibility::ROLE_MENU, NSAccessibilityMenuRole },
149 { WebAccessibility::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole },
150 { WebAccessibility::ROLE_MENU_BUTTON, NSAccessibilityButtonRole },
151 { WebAccessibility::ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole },
152 { WebAccessibility::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole },
153 { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole },
154 { WebAccessibility::ROLE_OUTLINE, NSAccessibilityOutlineRole },
155 { WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole },
156 { WebAccessibility::ROLE_PROGRESS_INDICATOR,
157 NSAccessibilityProgressIndicatorRole },
158 { WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole },
159 { WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
160 { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole },
161 { WebAccessibility::ROLE_ROOT_WEB_AREA, @"AXWebArea" },
162 { WebAccessibility::ROLE_ROW, NSAccessibilityRowRole },
163 { WebAccessibility::ROLE_ROW_HEADER, @"AXCell" },
164 { WebAccessibility::ROLE_RULER, NSAccessibilityRulerRole },
165 { WebAccessibility::ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole },
166 // TODO(dtseng): we don't correctly support the attributes for these roles.
167 // { WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole },
168 // { WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
169 { WebAccessibility::ROLE_SHEET, NSAccessibilitySheetRole },
170 { WebAccessibility::ROLE_SLIDER, NSAccessibilitySliderRole },
171 { WebAccessibility::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole },
172 { WebAccessibility::ROLE_SPLITTER, NSAccessibilitySplitterRole },
173 { WebAccessibility::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole },
174 { WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
175 { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
176 { WebAccessibility::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
177 { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole },
178 { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
179 { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
180 { WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
181 { WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
182 { WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
183 { WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
184 { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
185 { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole },
186 { WebAccessibility::ROLE_TOOLBAR, NSAccessibilityToolbarRole },
187 { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole },
188 { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole },
189 { WebAccessibility::ROLE_TREE_GRID, NSAccessibilityTableRole },
190 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole },
191 { WebAccessibility::ROLE_VALUE_INDICATOR,
192 NSAccessibilityValueIndicatorRole },
193 { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
194 { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
195 { WebAccessibility::ROLE_WINDOW, NSAccessibilityUnknownRole },
196 };
197
198 RoleMap role_map;
199 for (size_t i = 0; i < arraysize(roles); ++i)
200 role_map[roles[i].webKitValue] = roles[i].nativeValue;
201 return role_map;
202 }
203
220 // A mapping of webkit roles to native roles. 204 // A mapping of webkit roles to native roles.
221 std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeRole; 205 NSString* NativeRoleFromWebAccessibilityRole(
206 const WebAccessibility::Role& role) {
207 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role,
208 (BuildRoleMap()));
209 RoleMap::iterator it = web_accessibility_to_native_role.find(role);
210 if (it != web_accessibility_to_native_role.end())
211 return it->second;
212 else
213 return NSAccessibilityUnknownRole;
214 }
215
216 RoleMap BuildSubroleMap() {
217 const MapEntry subroles[] = {
218 { WebAccessibility::ROLE_ALERT, @"AXApplicationAlert" },
219 { WebAccessibility::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" },
220 { WebAccessibility::ROLE_ARTICLE, @"AXDocumentArticle" },
221 { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" },
222 { WebAccessibility::ROLE_DEFINITION_LIST_TERM, @"AXTerm" },
223 { WebAccessibility::ROLE_DIALOG, @"AXApplicationDialog" },
224 { WebAccessibility::ROLE_DOCUMENT, @"AXDocument" },
225 { WebAccessibility::ROLE_LANDMARK_APPLICATION, @"AXLandmarkApplication" },
226 { WebAccessibility::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" },
227 { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY,
228 @"AXLandmarkComplementary" },
229 { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, @"AXLandmarkContentInfo" },
230 { WebAccessibility::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" },
231 { WebAccessibility::ROLE_LANDMARK_NAVIGATION, @"AXLandmarkNavigation" },
232 { WebAccessibility::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" },
233 { WebAccessibility::ROLE_LOG, @"AXApplicationLog" },
234 { WebAccessibility::ROLE_MARQUEE, @"AXApplicationMarquee" },
235 { WebAccessibility::ROLE_MATH, @"AXDocumentMath" },
236 { WebAccessibility::ROLE_NOTE, @"AXDocumentNote" },
237 { WebAccessibility::ROLE_REGION, @"AXDocumentRegion" },
238 { WebAccessibility::ROLE_STATUS, @"AXApplicationStatus" },
239 { WebAccessibility::ROLE_TAB_PANEL, @"AXTabPanel" },
240 { WebAccessibility::ROLE_TIMER, @"AXApplicationTimer" },
241 { WebAccessibility::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
242 { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
243 };
244
245 RoleMap subrole_map;
246 for (size_t i = 0; i < arraysize(subroles); ++i)
247 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue;
248 return subrole_map;
249 }
250
222 // A mapping of webkit roles to native subroles. 251 // A mapping of webkit roles to native subroles.
223 std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeSubrole; 252 NSString* NativeSubroleFromWebAccessibilityRole(
253 const WebAccessibility::Role& role) {
254 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole,
255 (BuildSubroleMap()));
256 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role);
257 if (it != web_accessibility_to_native_subrole.end())
258 return it->second;
259 else
260 return nil;
261 }
262
224 // A mapping from an accessibility attribute to its method name. 263 // A mapping from an accessibility attribute to its method name.
225 NSDictionary* attributeToMethodNameMap = nil; 264 NSDictionary* attributeToMethodNameMap = nil;
226 265
227 } // namespace 266 } // namespace
228 267
229 @implementation BrowserAccessibilityCocoa 268 @implementation BrowserAccessibilityCocoa
230 269
231 + (void)initialize { 270 + (void)initialize {
232 const size_t numRoles = sizeof(roles) / sizeof(roles[0]);
233 for (size_t i = 0; i < numRoles; ++i) {
234 webAccessibilityToNativeRole[roles[i].webKitValue] = roles[i].nativeValue;
235 }
236
237 const size_t numSubroles = sizeof(subroles) / sizeof(subroles[0]);
238 for (size_t i = 0; i < numSubroles; ++i) {
239 webAccessibilityToNativeSubrole[subroles[i].webKitValue] =
240 subroles[i].nativeValue;
241 }
242
243 NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; 271 NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
244 const size_t numAttributes = sizeof(attributeToMethodNameContainer) / 272 const size_t numAttributes = sizeof(attributeToMethodNameContainer) /
245 sizeof(attributeToMethodNameContainer[0]); 273 sizeof(attributeToMethodNameContainer[0]);
246 for (size_t i = 0; i < numAttributes; ++i) { 274 for (size_t i = 0; i < numAttributes; ++i) {
247 [dict setObject:attributeToMethodNameContainer[i].methodName 275 [dict setObject:attributeToMethodNameContainer[i].methodName
248 forKey:attributeToMethodNameContainer[i].attribute]; 276 forKey:attributeToMethodNameContainer[i].attribute];
249 } 277 }
250 attributeToMethodNameMap = dict; 278 attributeToMethodNameMap = dict;
251 dict = nil; 279 dict = nil;
252 } 280 }
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 return [NSNumber numberWithBool: 471 return [NSNumber numberWithBool:
444 GetState(browserAccessibility_, WebAccessibility::STATE_REQUIRED)]; 472 GetState(browserAccessibility_, WebAccessibility::STATE_REQUIRED)];
445 } 473 }
446 474
447 // Returns a string indicating the role of this object. 475 // Returns a string indicating the role of this object.
448 - (NSString*)role { 476 - (NSString*)role {
449 WebAccessibility::Role browserAccessibilityRole = 477 WebAccessibility::Role browserAccessibilityRole =
450 static_cast<WebAccessibility::Role>( browserAccessibility_->role()); 478 static_cast<WebAccessibility::Role>( browserAccessibility_->role());
451 479
452 // Roles that we only determine at runtime. 480 // Roles that we only determine at runtime.
453 std::map<WebAccessibility::Role, NSString*>::iterator it = 481 return NativeRoleFromWebAccessibilityRole(browserAccessibilityRole);
454 webAccessibilityToNativeRole.find(browserAccessibilityRole);
455
456 if (it != webAccessibilityToNativeRole.end())
457 return it->second;
458 else
459 return NSAccessibilityUnknownRole;
460 } 482 }
461 483
462 // Returns a string indicating the role description of this object. 484 // Returns a string indicating the role description of this object.
463 - (NSString*)roleDescription { 485 - (NSString*)roleDescription {
464 NSString* role = [self role]; 486 NSString* role = [self role];
465 487
466 content::ContentClient* content_client = content::GetContentClient(); 488 content::ContentClient* content_client = content::GetContentClient();
467 489
468 // The following descriptions are specific to webkit. 490 // The following descriptions are specific to webkit.
469 if ([role isEqualToString:@"AXWebArea"]) { 491 if ([role isEqualToString:@"AXWebArea"]) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 558
537 if (browserAccessibilityRole == WebAccessibility::ROLE_LIST) { 559 if (browserAccessibilityRole == WebAccessibility::ROLE_LIST) {
538 if ([htmlTag isEqualToString:@"ul"] || 560 if ([htmlTag isEqualToString:@"ul"] ||
539 [htmlTag isEqualToString:@"ol"]) { 561 [htmlTag isEqualToString:@"ol"]) {
540 return @"AXContentList"; 562 return @"AXContentList";
541 } else if ([htmlTag isEqualToString:@"dl"]) { 563 } else if ([htmlTag isEqualToString:@"dl"]) {
542 return @"AXDefinitionList"; 564 return @"AXDefinitionList";
543 } 565 }
544 } 566 }
545 567
546 std::map<WebAccessibility::Role, NSString*>::iterator it = 568 return NativeSubroleFromWebAccessibilityRole(browserAccessibilityRole);
547 webAccessibilityToNativeSubrole.find(browserAccessibilityRole);
548 if (it != webAccessibilityToNativeSubrole.end())
549 return it->second;
550 else
551 return nil;
552 } 569 }
553 570
554 // Returns all tabs in this subtree. 571 // Returns all tabs in this subtree.
555 - (NSArray*)tabs { 572 - (NSArray*)tabs {
556 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; 573 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease];
557 574
558 if (browserAccessibility_->role() == WebAccessibility::ROLE_TAB) 575 if (browserAccessibility_->role() == WebAccessibility::ROLE_TAB)
559 [tabSubtree addObject:self]; 576 [tabSubtree addObject:self];
560 577
561 for (uint i=0; i < [[self children] count]; ++i) { 578 for (uint i=0; i < [[self children] count]; ++i) {
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 return [super hash]; 1006 return [super hash];
990 return browserAccessibility_->renderer_id(); 1007 return browserAccessibility_->renderer_id();
991 } 1008 }
992 1009
993 - (BOOL)accessibilityShouldUseUniqueId { 1010 - (BOOL)accessibilityShouldUseUniqueId {
994 return YES; 1011 return YES;
995 } 1012 }
996 1013
997 @end 1014 @end
998 1015
OLDNEW
« no previous file with comments | « no previous file | content/browser/browser_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698