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