| 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 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 // Returns an autoreleased copy of the AccessibilityNodeData's attribute. | 34 // Returns an autoreleased copy of the AccessibilityNodeData'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 WebKit::WebAXRole webKitValue; | 43 blink::WebAXRole webKitValue; |
| 44 NSString* nativeValue; | 44 NSString* nativeValue; |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 typedef std::map<WebKit::WebAXRole, NSString*> RoleMap; | 47 typedef std::map<blink::WebAXRole, NSString*> RoleMap; |
| 48 | 48 |
| 49 // GetState checks the bitmask used in AccessibilityNodeData to check | 49 // GetState checks the bitmask used in AccessibilityNodeData 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, WebKit::WebAXState state) { | 51 bool GetState(BrowserAccessibility* accessibility, blink::WebAXState 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 { WebKit::WebAXRoleAlert, NSAccessibilityGroupRole }, | 57 { blink::WebAXRoleAlert, NSAccessibilityGroupRole }, |
| 58 { WebKit::WebAXRoleAlertDialog, NSAccessibilityGroupRole }, | 58 { blink::WebAXRoleAlertDialog, NSAccessibilityGroupRole }, |
| 59 { WebKit::WebAXRoleAnnotation, NSAccessibilityUnknownRole }, | 59 { blink::WebAXRoleAnnotation, NSAccessibilityUnknownRole }, |
| 60 { WebKit::WebAXRoleApplication, NSAccessibilityGroupRole }, | 60 { blink::WebAXRoleApplication, NSAccessibilityGroupRole }, |
| 61 { WebKit::WebAXRoleArticle, NSAccessibilityGroupRole }, | 61 { blink::WebAXRoleArticle, NSAccessibilityGroupRole }, |
| 62 { WebKit::WebAXRoleBrowser, NSAccessibilityBrowserRole }, | 62 { blink::WebAXRoleBrowser, NSAccessibilityBrowserRole }, |
| 63 { WebKit::WebAXRoleBusyIndicator, NSAccessibilityBusyIndicatorRole }, | 63 { blink::WebAXRoleBusyIndicator, NSAccessibilityBusyIndicatorRole }, |
| 64 { WebKit::WebAXRoleButton, NSAccessibilityButtonRole }, | 64 { blink::WebAXRoleButton, NSAccessibilityButtonRole }, |
| 65 { WebKit::WebAXRoleCanvas, NSAccessibilityImageRole }, | 65 { blink::WebAXRoleCanvas, NSAccessibilityImageRole }, |
| 66 { WebKit::WebAXRoleCell, @"AXCell" }, | 66 { blink::WebAXRoleCell, @"AXCell" }, |
| 67 { WebKit::WebAXRoleCheckBox, NSAccessibilityCheckBoxRole }, | 67 { blink::WebAXRoleCheckBox, NSAccessibilityCheckBoxRole }, |
| 68 { WebKit::WebAXRoleColorWell, NSAccessibilityColorWellRole }, | 68 { blink::WebAXRoleColorWell, NSAccessibilityColorWellRole }, |
| 69 { WebKit::WebAXRoleComboBox, NSAccessibilityComboBoxRole }, | 69 { blink::WebAXRoleComboBox, NSAccessibilityComboBoxRole }, |
| 70 { WebKit::WebAXRoleColumn, NSAccessibilityColumnRole }, | 70 { blink::WebAXRoleColumn, NSAccessibilityColumnRole }, |
| 71 { WebKit::WebAXRoleColumnHeader, @"AXCell" }, | 71 { blink::WebAXRoleColumnHeader, @"AXCell" }, |
| 72 { WebKit::WebAXRoleDefinition, NSAccessibilityGroupRole }, | 72 { blink::WebAXRoleDefinition, NSAccessibilityGroupRole }, |
| 73 { WebKit::WebAXRoleDescriptionListDetail, NSAccessibilityGroupRole }, | 73 { blink::WebAXRoleDescriptionListDetail, NSAccessibilityGroupRole }, |
| 74 { WebKit::WebAXRoleDescriptionListTerm, NSAccessibilityGroupRole }, | 74 { blink::WebAXRoleDescriptionListTerm, NSAccessibilityGroupRole }, |
| 75 { WebKit::WebAXRoleDialog, NSAccessibilityGroupRole }, | 75 { blink::WebAXRoleDialog, NSAccessibilityGroupRole }, |
| 76 { WebKit::WebAXRoleDirectory, NSAccessibilityListRole }, | 76 { blink::WebAXRoleDirectory, NSAccessibilityListRole }, |
| 77 { WebKit::WebAXRoleDisclosureTriangle, | 77 { blink::WebAXRoleDisclosureTriangle, |
| 78 NSAccessibilityDisclosureTriangleRole }, | 78 NSAccessibilityDisclosureTriangleRole }, |
| 79 { WebKit::WebAXRoleDiv, NSAccessibilityGroupRole }, | 79 { blink::WebAXRoleDiv, NSAccessibilityGroupRole }, |
| 80 { WebKit::WebAXRoleDocument, NSAccessibilityGroupRole }, | 80 { blink::WebAXRoleDocument, NSAccessibilityGroupRole }, |
| 81 { WebKit::WebAXRoleDrawer, NSAccessibilityDrawerRole }, | 81 { blink::WebAXRoleDrawer, NSAccessibilityDrawerRole }, |
| 82 { WebKit::WebAXRoleEditableText, NSAccessibilityTextFieldRole }, | 82 { blink::WebAXRoleEditableText, NSAccessibilityTextFieldRole }, |
| 83 { WebKit::WebAXRoleFooter, NSAccessibilityGroupRole }, | 83 { blink::WebAXRoleFooter, NSAccessibilityGroupRole }, |
| 84 { WebKit::WebAXRoleForm, NSAccessibilityGroupRole }, | 84 { blink::WebAXRoleForm, NSAccessibilityGroupRole }, |
| 85 { WebKit::WebAXRoleGrid, NSAccessibilityGridRole }, | 85 { blink::WebAXRoleGrid, NSAccessibilityGridRole }, |
| 86 { WebKit::WebAXRoleGroup, NSAccessibilityGroupRole }, | 86 { blink::WebAXRoleGroup, NSAccessibilityGroupRole }, |
| 87 { WebKit::WebAXRoleGrowArea, NSAccessibilityGrowAreaRole }, | 87 { blink::WebAXRoleGrowArea, NSAccessibilityGrowAreaRole }, |
| 88 { WebKit::WebAXRoleHeading, @"AXHeading" }, | 88 { blink::WebAXRoleHeading, @"AXHeading" }, |
| 89 { WebKit::WebAXRoleHelpTag, NSAccessibilityHelpTagRole }, | 89 { blink::WebAXRoleHelpTag, NSAccessibilityHelpTagRole }, |
| 90 { WebKit::WebAXRoleHorizontalRule, NSAccessibilityGroupRole }, | 90 { blink::WebAXRoleHorizontalRule, NSAccessibilityGroupRole }, |
| 91 { WebKit::WebAXRoleIgnored, NSAccessibilityUnknownRole }, | 91 { blink::WebAXRoleIgnored, NSAccessibilityUnknownRole }, |
| 92 { WebKit::WebAXRoleImage, NSAccessibilityImageRole }, | 92 { blink::WebAXRoleImage, NSAccessibilityImageRole }, |
| 93 { WebKit::WebAXRoleImageMap, NSAccessibilityGroupRole }, | 93 { blink::WebAXRoleImageMap, NSAccessibilityGroupRole }, |
| 94 { WebKit::WebAXRoleImageMapLink, NSAccessibilityLinkRole }, | 94 { blink::WebAXRoleImageMapLink, NSAccessibilityLinkRole }, |
| 95 { WebKit::WebAXRoleIncrementor, NSAccessibilityIncrementorRole }, | 95 { blink::WebAXRoleIncrementor, NSAccessibilityIncrementorRole }, |
| 96 { WebKit::WebAXRoleLabel, NSAccessibilityGroupRole }, | 96 { blink::WebAXRoleLabel, NSAccessibilityGroupRole }, |
| 97 { WebKit::WebAXRoleApplication, NSAccessibilityGroupRole }, | 97 { blink::WebAXRoleApplication, NSAccessibilityGroupRole }, |
| 98 { WebKit::WebAXRoleBanner, NSAccessibilityGroupRole }, | 98 { blink::WebAXRoleBanner, NSAccessibilityGroupRole }, |
| 99 { WebKit::WebAXRoleComplementary, NSAccessibilityGroupRole }, | 99 { blink::WebAXRoleComplementary, NSAccessibilityGroupRole }, |
| 100 { WebKit::WebAXRoleContentInfo, NSAccessibilityGroupRole }, | 100 { blink::WebAXRoleContentInfo, NSAccessibilityGroupRole }, |
| 101 { WebKit::WebAXRoleMain, NSAccessibilityGroupRole }, | 101 { blink::WebAXRoleMain, NSAccessibilityGroupRole }, |
| 102 { WebKit::WebAXRoleNavigation, NSAccessibilityGroupRole }, | 102 { blink::WebAXRoleNavigation, NSAccessibilityGroupRole }, |
| 103 { WebKit::WebAXRoleSearch, NSAccessibilityGroupRole }, | 103 { blink::WebAXRoleSearch, NSAccessibilityGroupRole }, |
| 104 { WebKit::WebAXRoleLink, NSAccessibilityLinkRole }, | 104 { blink::WebAXRoleLink, NSAccessibilityLinkRole }, |
| 105 { WebKit::WebAXRoleList, NSAccessibilityListRole }, | 105 { blink::WebAXRoleList, NSAccessibilityListRole }, |
| 106 { WebKit::WebAXRoleListItem, NSAccessibilityGroupRole }, | 106 { blink::WebAXRoleListItem, NSAccessibilityGroupRole }, |
| 107 { WebKit::WebAXRoleListMarker, @"AXListMarker" }, | 107 { blink::WebAXRoleListMarker, @"AXListMarker" }, |
| 108 { WebKit::WebAXRoleListBox, NSAccessibilityListRole }, | 108 { blink::WebAXRoleListBox, NSAccessibilityListRole }, |
| 109 { WebKit::WebAXRoleListBoxOption, NSAccessibilityStaticTextRole }, | 109 { blink::WebAXRoleListBoxOption, NSAccessibilityStaticTextRole }, |
| 110 { WebKit::WebAXRoleLog, NSAccessibilityGroupRole }, | 110 { blink::WebAXRoleLog, NSAccessibilityGroupRole }, |
| 111 { WebKit::WebAXRoleMarquee, NSAccessibilityGroupRole }, | 111 { blink::WebAXRoleMarquee, NSAccessibilityGroupRole }, |
| 112 { WebKit::WebAXRoleMath, NSAccessibilityGroupRole }, | 112 { blink::WebAXRoleMath, NSAccessibilityGroupRole }, |
| 113 { WebKit::WebAXRoleMatte, NSAccessibilityMatteRole }, | 113 { blink::WebAXRoleMatte, NSAccessibilityMatteRole }, |
| 114 { WebKit::WebAXRoleMenu, NSAccessibilityMenuRole }, | 114 { blink::WebAXRoleMenu, NSAccessibilityMenuRole }, |
| 115 { WebKit::WebAXRoleMenuBar, NSAccessibilityMenuBarRole }, | 115 { blink::WebAXRoleMenuBar, NSAccessibilityMenuBarRole }, |
| 116 { WebKit::WebAXRoleMenuItem, NSAccessibilityMenuItemRole }, | 116 { blink::WebAXRoleMenuItem, NSAccessibilityMenuItemRole }, |
| 117 { WebKit::WebAXRoleMenuButton, NSAccessibilityButtonRole }, | 117 { blink::WebAXRoleMenuButton, NSAccessibilityButtonRole }, |
| 118 { WebKit::WebAXRoleMenuListOption, NSAccessibilityMenuItemRole }, | 118 { blink::WebAXRoleMenuListOption, NSAccessibilityMenuItemRole }, |
| 119 { WebKit::WebAXRoleMenuListPopup, NSAccessibilityUnknownRole }, | 119 { blink::WebAXRoleMenuListPopup, NSAccessibilityUnknownRole }, |
| 120 { WebKit::WebAXRoleNote, NSAccessibilityGroupRole }, | 120 { blink::WebAXRoleNote, NSAccessibilityGroupRole }, |
| 121 { WebKit::WebAXRoleOutline, NSAccessibilityOutlineRole }, | 121 { blink::WebAXRoleOutline, NSAccessibilityOutlineRole }, |
| 122 { WebKit::WebAXRoleParagraph, NSAccessibilityGroupRole }, | 122 { blink::WebAXRoleParagraph, NSAccessibilityGroupRole }, |
| 123 { WebKit::WebAXRolePopUpButton, NSAccessibilityPopUpButtonRole }, | 123 { blink::WebAXRolePopUpButton, NSAccessibilityPopUpButtonRole }, |
| 124 { WebKit::WebAXRolePresentational, NSAccessibilityGroupRole }, | 124 { blink::WebAXRolePresentational, NSAccessibilityGroupRole }, |
| 125 { WebKit::WebAXRoleProgressIndicator, | 125 { blink::WebAXRoleProgressIndicator, |
| 126 NSAccessibilityProgressIndicatorRole }, | 126 NSAccessibilityProgressIndicatorRole }, |
| 127 { WebKit::WebAXRoleRadioButton, NSAccessibilityRadioButtonRole }, | 127 { blink::WebAXRoleRadioButton, NSAccessibilityRadioButtonRole }, |
| 128 { WebKit::WebAXRoleRadioGroup, NSAccessibilityRadioGroupRole }, | 128 { blink::WebAXRoleRadioGroup, NSAccessibilityRadioGroupRole }, |
| 129 { WebKit::WebAXRoleRegion, NSAccessibilityGroupRole }, | 129 { blink::WebAXRoleRegion, NSAccessibilityGroupRole }, |
| 130 { WebKit::WebAXRoleRootWebArea, @"AXWebArea" }, | 130 { blink::WebAXRoleRootWebArea, @"AXWebArea" }, |
| 131 { WebKit::WebAXRoleRow, NSAccessibilityRowRole }, | 131 { blink::WebAXRoleRow, NSAccessibilityRowRole }, |
| 132 { WebKit::WebAXRoleRowHeader, @"AXCell" }, | 132 { blink::WebAXRoleRowHeader, @"AXCell" }, |
| 133 { WebKit::WebAXRoleRuler, NSAccessibilityRulerRole }, | 133 { blink::WebAXRoleRuler, NSAccessibilityRulerRole }, |
| 134 { WebKit::WebAXRoleRulerMarker, NSAccessibilityRulerMarkerRole }, | 134 { blink::WebAXRoleRulerMarker, NSAccessibilityRulerMarkerRole }, |
| 135 // TODO(dtseng): we don't correctly support the attributes for these roles. | 135 // TODO(dtseng): we don't correctly support the attributes for these roles. |
| 136 // { WebKit::WebAXRoleScrollArea, NSAccessibilityScrollAreaRole }, | 136 // { blink::WebAXRoleScrollArea, NSAccessibilityScrollAreaRole }, |
| 137 { WebKit::WebAXRoleScrollBar, NSAccessibilityScrollBarRole }, | 137 { blink::WebAXRoleScrollBar, NSAccessibilityScrollBarRole }, |
| 138 { WebKit::WebAXRoleSheet, NSAccessibilitySheetRole }, | 138 { blink::WebAXRoleSheet, NSAccessibilitySheetRole }, |
| 139 { WebKit::WebAXRoleSlider, NSAccessibilitySliderRole }, | 139 { blink::WebAXRoleSlider, NSAccessibilitySliderRole }, |
| 140 { WebKit::WebAXRoleSliderThumb, NSAccessibilityValueIndicatorRole }, | 140 { blink::WebAXRoleSliderThumb, NSAccessibilityValueIndicatorRole }, |
| 141 { WebKit::WebAXRoleSpinButton, NSAccessibilitySliderRole }, | 141 { blink::WebAXRoleSpinButton, NSAccessibilitySliderRole }, |
| 142 { WebKit::WebAXRoleSplitter, NSAccessibilitySplitterRole }, | 142 { blink::WebAXRoleSplitter, NSAccessibilitySplitterRole }, |
| 143 { WebKit::WebAXRoleSplitGroup, NSAccessibilitySplitGroupRole }, | 143 { blink::WebAXRoleSplitGroup, NSAccessibilitySplitGroupRole }, |
| 144 { WebKit::WebAXRoleStaticText, NSAccessibilityStaticTextRole }, | 144 { blink::WebAXRoleStaticText, NSAccessibilityStaticTextRole }, |
| 145 { WebKit::WebAXRoleStatus, NSAccessibilityGroupRole }, | 145 { blink::WebAXRoleStatus, NSAccessibilityGroupRole }, |
| 146 { WebKit::WebAXRoleSVGRoot, NSAccessibilityGroupRole }, | 146 { blink::WebAXRoleSVGRoot, NSAccessibilityGroupRole }, |
| 147 { WebKit::WebAXRoleSystemWide, NSAccessibilityUnknownRole }, | 147 { blink::WebAXRoleSystemWide, NSAccessibilityUnknownRole }, |
| 148 { WebKit::WebAXRoleTab, NSAccessibilityRadioButtonRole }, | 148 { blink::WebAXRoleTab, NSAccessibilityRadioButtonRole }, |
| 149 { WebKit::WebAXRoleTabList, NSAccessibilityTabGroupRole }, | 149 { blink::WebAXRoleTabList, NSAccessibilityTabGroupRole }, |
| 150 { WebKit::WebAXRoleTabPanel, NSAccessibilityGroupRole }, | 150 { blink::WebAXRoleTabPanel, NSAccessibilityGroupRole }, |
| 151 { WebKit::WebAXRoleTable, NSAccessibilityTableRole }, | 151 { blink::WebAXRoleTable, NSAccessibilityTableRole }, |
| 152 { WebKit::WebAXRoleTableHeaderContainer, NSAccessibilityGroupRole }, | 152 { blink::WebAXRoleTableHeaderContainer, NSAccessibilityGroupRole }, |
| 153 { WebKit::WebAXRoleTextArea, NSAccessibilityTextAreaRole }, | 153 { blink::WebAXRoleTextArea, NSAccessibilityTextAreaRole }, |
| 154 { WebKit::WebAXRoleTextField, NSAccessibilityTextFieldRole }, | 154 { blink::WebAXRoleTextField, NSAccessibilityTextFieldRole }, |
| 155 { WebKit::WebAXRoleTimer, NSAccessibilityGroupRole }, | 155 { blink::WebAXRoleTimer, NSAccessibilityGroupRole }, |
| 156 { WebKit::WebAXRoleToggleButton, NSAccessibilityButtonRole }, | 156 { blink::WebAXRoleToggleButton, NSAccessibilityButtonRole }, |
| 157 { WebKit::WebAXRoleToolbar, NSAccessibilityToolbarRole }, | 157 { blink::WebAXRoleToolbar, NSAccessibilityToolbarRole }, |
| 158 { WebKit::WebAXRoleUserInterfaceTooltip, NSAccessibilityGroupRole }, | 158 { blink::WebAXRoleUserInterfaceTooltip, NSAccessibilityGroupRole }, |
| 159 { WebKit::WebAXRoleTree, NSAccessibilityOutlineRole }, | 159 { blink::WebAXRoleTree, NSAccessibilityOutlineRole }, |
| 160 { WebKit::WebAXRoleTreeGrid, NSAccessibilityTableRole }, | 160 { blink::WebAXRoleTreeGrid, NSAccessibilityTableRole }, |
| 161 { WebKit::WebAXRoleTreeItem, NSAccessibilityRowRole }, | 161 { blink::WebAXRoleTreeItem, NSAccessibilityRowRole }, |
| 162 { WebKit::WebAXRoleValueIndicator, NSAccessibilityValueIndicatorRole }, | 162 { blink::WebAXRoleValueIndicator, NSAccessibilityValueIndicatorRole }, |
| 163 { WebKit::WebAXRoleLink, NSAccessibilityLinkRole }, | 163 { blink::WebAXRoleLink, NSAccessibilityLinkRole }, |
| 164 { WebKit::WebAXRoleWebArea, @"AXWebArea" }, | 164 { blink::WebAXRoleWebArea, @"AXWebArea" }, |
| 165 { WebKit::WebAXRoleWindow, NSAccessibilityWindowRole }, | 165 { blink::WebAXRoleWindow, NSAccessibilityWindowRole }, |
| 166 }; | 166 }; |
| 167 | 167 |
| 168 RoleMap role_map; | 168 RoleMap role_map; |
| 169 for (size_t i = 0; i < arraysize(roles); ++i) | 169 for (size_t i = 0; i < arraysize(roles); ++i) |
| 170 role_map[roles[i].webKitValue] = roles[i].nativeValue; | 170 role_map[roles[i].webKitValue] = roles[i].nativeValue; |
| 171 return role_map; | 171 return role_map; |
| 172 } | 172 } |
| 173 | 173 |
| 174 // A mapping of webkit roles to native roles. | 174 // A mapping of webkit roles to native roles. |
| 175 NSString* NativeRoleFromAccessibilityNodeDataRole( | 175 NSString* NativeRoleFromAccessibilityNodeDataRole( |
| 176 const WebKit::WebAXRole& role) { | 176 const blink::WebAXRole& role) { |
| 177 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role, | 177 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role, |
| 178 (BuildRoleMap())); | 178 (BuildRoleMap())); |
| 179 RoleMap::iterator it = web_accessibility_to_native_role.find(role); | 179 RoleMap::iterator it = web_accessibility_to_native_role.find(role); |
| 180 if (it != web_accessibility_to_native_role.end()) | 180 if (it != web_accessibility_to_native_role.end()) |
| 181 return it->second; | 181 return it->second; |
| 182 else | 182 else |
| 183 return NSAccessibilityUnknownRole; | 183 return NSAccessibilityUnknownRole; |
| 184 } | 184 } |
| 185 | 185 |
| 186 RoleMap BuildSubroleMap() { | 186 RoleMap BuildSubroleMap() { |
| 187 const MapEntry subroles[] = { | 187 const MapEntry subroles[] = { |
| 188 { WebKit::WebAXRoleAlert, @"AXApplicationAlert" }, | 188 { blink::WebAXRoleAlert, @"AXApplicationAlert" }, |
| 189 { WebKit::WebAXRoleAlertDialog, @"AXApplicationAlertDialog" }, | 189 { blink::WebAXRoleAlertDialog, @"AXApplicationAlertDialog" }, |
| 190 { WebKit::WebAXRoleArticle, @"AXDocumentArticle" }, | 190 { blink::WebAXRoleArticle, @"AXDocumentArticle" }, |
| 191 { WebKit::WebAXRoleDefinition, @"AXDefinition" }, | 191 { blink::WebAXRoleDefinition, @"AXDefinition" }, |
| 192 { WebKit::WebAXRoleDescriptionListDetail, @"AXDescription" }, | 192 { blink::WebAXRoleDescriptionListDetail, @"AXDescription" }, |
| 193 { WebKit::WebAXRoleDescriptionListTerm, @"AXTerm" }, | 193 { blink::WebAXRoleDescriptionListTerm, @"AXTerm" }, |
| 194 { WebKit::WebAXRoleDialog, @"AXApplicationDialog" }, | 194 { blink::WebAXRoleDialog, @"AXApplicationDialog" }, |
| 195 { WebKit::WebAXRoleDocument, @"AXDocument" }, | 195 { blink::WebAXRoleDocument, @"AXDocument" }, |
| 196 { WebKit::WebAXRoleFooter, @"AXLandmarkContentInfo" }, | 196 { blink::WebAXRoleFooter, @"AXLandmarkContentInfo" }, |
| 197 { WebKit::WebAXRoleApplication, @"AXLandmarkApplication" }, | 197 { blink::WebAXRoleApplication, @"AXLandmarkApplication" }, |
| 198 { WebKit::WebAXRoleBanner, @"AXLandmarkBanner" }, | 198 { blink::WebAXRoleBanner, @"AXLandmarkBanner" }, |
| 199 { WebKit::WebAXRoleComplementary, @"AXLandmarkComplementary" }, | 199 { blink::WebAXRoleComplementary, @"AXLandmarkComplementary" }, |
| 200 { WebKit::WebAXRoleContentInfo, @"AXLandmarkContentInfo" }, | 200 { blink::WebAXRoleContentInfo, @"AXLandmarkContentInfo" }, |
| 201 { WebKit::WebAXRoleMain, @"AXLandmarkMain" }, | 201 { blink::WebAXRoleMain, @"AXLandmarkMain" }, |
| 202 { WebKit::WebAXRoleNavigation, @"AXLandmarkNavigation" }, | 202 { blink::WebAXRoleNavigation, @"AXLandmarkNavigation" }, |
| 203 { WebKit::WebAXRoleSearch, @"AXLandmarkSearch" }, | 203 { blink::WebAXRoleSearch, @"AXLandmarkSearch" }, |
| 204 { WebKit::WebAXRoleLog, @"AXApplicationLog" }, | 204 { blink::WebAXRoleLog, @"AXApplicationLog" }, |
| 205 { WebKit::WebAXRoleMarquee, @"AXApplicationMarquee" }, | 205 { blink::WebAXRoleMarquee, @"AXApplicationMarquee" }, |
| 206 { WebKit::WebAXRoleMath, @"AXDocumentMath" }, | 206 { blink::WebAXRoleMath, @"AXDocumentMath" }, |
| 207 { WebKit::WebAXRoleNote, @"AXDocumentNote" }, | 207 { blink::WebAXRoleNote, @"AXDocumentNote" }, |
| 208 { WebKit::WebAXRoleRegion, @"AXDocumentRegion" }, | 208 { blink::WebAXRoleRegion, @"AXDocumentRegion" }, |
| 209 { WebKit::WebAXRoleStatus, @"AXApplicationStatus" }, | 209 { blink::WebAXRoleStatus, @"AXApplicationStatus" }, |
| 210 { WebKit::WebAXRoleTabPanel, @"AXTabPanel" }, | 210 { blink::WebAXRoleTabPanel, @"AXTabPanel" }, |
| 211 { WebKit::WebAXRoleTimer, @"AXApplicationTimer" }, | 211 { blink::WebAXRoleTimer, @"AXApplicationTimer" }, |
| 212 { WebKit::WebAXRoleUserInterfaceTooltip, @"AXUserInterfaceTooltip" }, | 212 { blink::WebAXRoleUserInterfaceTooltip, @"AXUserInterfaceTooltip" }, |
| 213 { WebKit::WebAXRoleTreeItem, NSAccessibilityOutlineRowSubrole }, | 213 { blink::WebAXRoleTreeItem, NSAccessibilityOutlineRowSubrole }, |
| 214 }; | 214 }; |
| 215 | 215 |
| 216 RoleMap subrole_map; | 216 RoleMap subrole_map; |
| 217 for (size_t i = 0; i < arraysize(subroles); ++i) | 217 for (size_t i = 0; i < arraysize(subroles); ++i) |
| 218 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; | 218 subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue; |
| 219 return subrole_map; | 219 return subrole_map; |
| 220 } | 220 } |
| 221 | 221 |
| 222 // A mapping of webkit roles to native subroles. | 222 // A mapping of webkit roles to native subroles. |
| 223 NSString* NativeSubroleFromAccessibilityNodeDataRole( | 223 NSString* NativeSubroleFromAccessibilityNodeDataRole( |
| 224 const WebKit::WebAXRole& role) { | 224 const blink::WebAXRole& role) { |
| 225 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole, | 225 CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole, |
| 226 (BuildSubroleMap())); | 226 (BuildSubroleMap())); |
| 227 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role); | 227 RoleMap::iterator it = web_accessibility_to_native_subrole.find(role); |
| 228 if (it != web_accessibility_to_native_subrole.end()) | 228 if (it != web_accessibility_to_native_subrole.end()) |
| 229 return it->second; | 229 return it->second; |
| 230 else | 230 else |
| 231 return nil; | 231 return nil; |
| 232 } | 232 } |
| 233 | 233 |
| 234 // A mapping from an accessibility attribute to its method name. | 234 // A mapping from an accessibility attribute to its method name. |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 - (void)childrenChanged { | 389 - (void)childrenChanged { |
| 390 if (![self isIgnored]) { | 390 if (![self isIgnored]) { |
| 391 children_.reset(); | 391 children_.reset(); |
| 392 } else { | 392 } else { |
| 393 [browserAccessibility_->parent()->ToBrowserAccessibilityCocoa() | 393 [browserAccessibility_->parent()->ToBrowserAccessibilityCocoa() |
| 394 childrenChanged]; | 394 childrenChanged]; |
| 395 } | 395 } |
| 396 } | 396 } |
| 397 | 397 |
| 398 - (NSArray*)columnHeaders { | 398 - (NSArray*)columnHeaders { |
| 399 if ([self internalRole] != WebKit::WebAXRoleTable && | 399 if ([self internalRole] != blink::WebAXRoleTable && |
| 400 [self internalRole] != WebKit::WebAXRoleGrid) { | 400 [self internalRole] != blink::WebAXRoleGrid) { |
| 401 return nil; | 401 return nil; |
| 402 } | 402 } |
| 403 | 403 |
| 404 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 404 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 405 const std::vector<int32>& uniqueCellIds = | 405 const std::vector<int32>& uniqueCellIds = |
| 406 browserAccessibility_->GetIntListAttribute( | 406 browserAccessibility_->GetIntListAttribute( |
| 407 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); | 407 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| 408 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 408 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 409 int id = uniqueCellIds[i]; | 409 int id = uniqueCellIds[i]; |
| 410 BrowserAccessibility* cell = | 410 BrowserAccessibility* cell = |
| 411 browserAccessibility_->manager()->GetFromRendererID(id); | 411 browserAccessibility_->manager()->GetFromRendererID(id); |
| 412 if (cell && cell->role() == WebKit::WebAXRoleColumnHeader) | 412 if (cell && cell->role() == blink::WebAXRoleColumnHeader) |
| 413 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 413 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 414 } | 414 } |
| 415 return ret; | 415 return ret; |
| 416 } | 416 } |
| 417 | 417 |
| 418 - (NSValue*)columnIndexRange { | 418 - (NSValue*)columnIndexRange { |
| 419 if ([self internalRole] != WebKit::WebAXRoleCell) | 419 if ([self internalRole] != blink::WebAXRoleCell) |
| 420 return nil; | 420 return nil; |
| 421 | 421 |
| 422 int column = -1; | 422 int column = -1; |
| 423 int colspan = -1; | 423 int colspan = -1; |
| 424 browserAccessibility_->GetIntAttribute( | 424 browserAccessibility_->GetIntAttribute( |
| 425 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, &column); | 425 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, &column); |
| 426 browserAccessibility_->GetIntAttribute( | 426 browserAccessibility_->GetIntAttribute( |
| 427 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_SPAN, &colspan); | 427 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_SPAN, &colspan); |
| 428 if (column >= 0 && colspan >= 1) | 428 if (column >= 0 && colspan >= 1) |
| 429 return [NSValue valueWithRange:NSMakeRange(column, colspan)]; | 429 return [NSValue valueWithRange:NSMakeRange(column, colspan)]; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 size_t leftIndex = url.rfind('/'); | 467 size_t leftIndex = url.rfind('/'); |
| 468 std::string basename = | 468 std::string basename = |
| 469 leftIndex != std::string::npos ? url.substr(leftIndex) : url; | 469 leftIndex != std::string::npos ? url.substr(leftIndex) : url; |
| 470 return base::SysUTF8ToNSString(basename); | 470 return base::SysUTF8ToNSString(basename); |
| 471 } | 471 } |
| 472 | 472 |
| 473 return @""; | 473 return @""; |
| 474 } | 474 } |
| 475 | 475 |
| 476 - (NSNumber*)disclosing { | 476 - (NSNumber*)disclosing { |
| 477 if ([self internalRole] == WebKit::WebAXRoleTreeItem) { | 477 if ([self internalRole] == blink::WebAXRoleTreeItem) { |
| 478 return [NSNumber numberWithBool: | 478 return [NSNumber numberWithBool: |
| 479 GetState(browserAccessibility_, WebKit::WebAXStateExpanded)]; | 479 GetState(browserAccessibility_, blink::WebAXStateExpanded)]; |
| 480 } else { | 480 } else { |
| 481 return nil; | 481 return nil; |
| 482 } | 482 } |
| 483 } | 483 } |
| 484 | 484 |
| 485 - (id)disclosedByRow { | 485 - (id)disclosedByRow { |
| 486 // The row that contains this row. | 486 // The row that contains this row. |
| 487 // It should be the same as the first parent that is a treeitem. | 487 // It should be the same as the first parent that is a treeitem. |
| 488 return nil; | 488 return nil; |
| 489 } | 489 } |
| 490 | 490 |
| 491 - (NSNumber*)disclosureLevel { | 491 - (NSNumber*)disclosureLevel { |
| 492 WebKit::WebAXRole role = [self internalRole]; | 492 blink::WebAXRole role = [self internalRole]; |
| 493 if (role == WebKit::WebAXRoleRow || | 493 if (role == blink::WebAXRoleRow || |
| 494 role == WebKit::WebAXRoleTreeItem) { | 494 role == blink::WebAXRoleTreeItem) { |
| 495 int level = browserAccessibility_->GetIntAttribute( | 495 int level = browserAccessibility_->GetIntAttribute( |
| 496 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL); | 496 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL); |
| 497 // Mac disclosureLevel is 0-based, but web levels are 1-based. | 497 // Mac disclosureLevel is 0-based, but web levels are 1-based. |
| 498 if (level > 0) | 498 if (level > 0) |
| 499 level--; | 499 level--; |
| 500 return [NSNumber numberWithInt:level]; | 500 return [NSNumber numberWithInt:level]; |
| 501 } else { | 501 } else { |
| 502 return nil; | 502 return nil; |
| 503 } | 503 } |
| 504 } | 504 } |
| 505 | 505 |
| 506 - (id)disclosedRows { | 506 - (id)disclosedRows { |
| 507 // The rows that are considered inside this row. | 507 // The rows that are considered inside this row. |
| 508 return nil; | 508 return nil; |
| 509 } | 509 } |
| 510 | 510 |
| 511 - (NSNumber*)enabled { | 511 - (NSNumber*)enabled { |
| 512 return [NSNumber numberWithBool: | 512 return [NSNumber numberWithBool: |
| 513 GetState(browserAccessibility_, WebKit::WebAXStateEnabled)]; | 513 GetState(browserAccessibility_, blink::WebAXStateEnabled)]; |
| 514 } | 514 } |
| 515 | 515 |
| 516 - (NSNumber*)focused { | 516 - (NSNumber*)focused { |
| 517 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); | 517 BrowserAccessibilityManager* manager = browserAccessibility_->manager(); |
| 518 NSNumber* ret = [NSNumber numberWithBool: | 518 NSNumber* ret = [NSNumber numberWithBool: |
| 519 manager->GetFocus(NULL) == browserAccessibility_]; | 519 manager->GetFocus(NULL) == browserAccessibility_]; |
| 520 return ret; | 520 return ret; |
| 521 } | 521 } |
| 522 | 522 |
| 523 - (id)header { | 523 - (id)header { |
| 524 int headerElementId = -1; | 524 int headerElementId = -1; |
| 525 if ([self internalRole] == WebKit::WebAXRoleTable || | 525 if ([self internalRole] == blink::WebAXRoleTable || |
| 526 [self internalRole] == WebKit::WebAXRoleGrid) { | 526 [self internalRole] == blink::WebAXRoleGrid) { |
| 527 browserAccessibility_->GetIntAttribute( | 527 browserAccessibility_->GetIntAttribute( |
| 528 AccessibilityNodeData::ATTR_TABLE_HEADER_ID, &headerElementId); | 528 AccessibilityNodeData::ATTR_TABLE_HEADER_ID, &headerElementId); |
| 529 } else if ([self internalRole] == WebKit::WebAXRoleColumn) { | 529 } else if ([self internalRole] == blink::WebAXRoleColumn) { |
| 530 browserAccessibility_->GetIntAttribute( | 530 browserAccessibility_->GetIntAttribute( |
| 531 AccessibilityNodeData::ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId); | 531 AccessibilityNodeData::ATTR_TABLE_COLUMN_HEADER_ID, &headerElementId); |
| 532 } else if ([self internalRole] == WebKit::WebAXRoleRow) { | 532 } else if ([self internalRole] == blink::WebAXRoleRow) { |
| 533 browserAccessibility_->GetIntAttribute( | 533 browserAccessibility_->GetIntAttribute( |
| 534 AccessibilityNodeData::ATTR_TABLE_ROW_HEADER_ID, &headerElementId); | 534 AccessibilityNodeData::ATTR_TABLE_ROW_HEADER_ID, &headerElementId); |
| 535 } | 535 } |
| 536 | 536 |
| 537 if (headerElementId > 0) { | 537 if (headerElementId > 0) { |
| 538 BrowserAccessibility* headerObject = | 538 BrowserAccessibility* headerObject = |
| 539 browserAccessibility_->manager()->GetFromRendererID(headerElementId); | 539 browserAccessibility_->manager()->GetFromRendererID(headerElementId); |
| 540 if (headerObject) | 540 if (headerObject) |
| 541 return headerObject->ToBrowserAccessibilityCocoa(); | 541 return headerObject->ToBrowserAccessibilityCocoa(); |
| 542 } | 542 } |
| 543 return nil; | 543 return nil; |
| 544 } | 544 } |
| 545 | 545 |
| 546 - (NSString*)help { | 546 - (NSString*)help { |
| 547 return NSStringForStringAttribute( | 547 return NSStringForStringAttribute( |
| 548 browserAccessibility_, AccessibilityNodeData::ATTR_HELP); | 548 browserAccessibility_, AccessibilityNodeData::ATTR_HELP); |
| 549 } | 549 } |
| 550 | 550 |
| 551 - (NSNumber*)index { | 551 - (NSNumber*)index { |
| 552 if ([self internalRole] == WebKit::WebAXRoleColumn) { | 552 if ([self internalRole] == blink::WebAXRoleColumn) { |
| 553 int columnIndex = browserAccessibility_->GetIntAttribute( | 553 int columnIndex = browserAccessibility_->GetIntAttribute( |
| 554 AccessibilityNodeData::ATTR_TABLE_COLUMN_INDEX); | 554 AccessibilityNodeData::ATTR_TABLE_COLUMN_INDEX); |
| 555 return [NSNumber numberWithInt:columnIndex]; | 555 return [NSNumber numberWithInt:columnIndex]; |
| 556 } else if ([self internalRole] == WebKit::WebAXRoleRow) { | 556 } else if ([self internalRole] == blink::WebAXRoleRow) { |
| 557 int rowIndex = browserAccessibility_->GetIntAttribute( | 557 int rowIndex = browserAccessibility_->GetIntAttribute( |
| 558 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX); | 558 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX); |
| 559 return [NSNumber numberWithInt:rowIndex]; | 559 return [NSNumber numberWithInt:rowIndex]; |
| 560 } | 560 } |
| 561 | 561 |
| 562 return nil; | 562 return nil; |
| 563 } | 563 } |
| 564 | 564 |
| 565 // Returns whether or not this node should be ignored in the | 565 // Returns whether or not this node should be ignored in the |
| 566 // accessibility tree. | 566 // accessibility tree. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 | 598 |
| 599 - (NSNumber*)minValue { | 599 - (NSNumber*)minValue { |
| 600 float floatValue = browserAccessibility_->GetFloatAttribute( | 600 float floatValue = browserAccessibility_->GetFloatAttribute( |
| 601 AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE); | 601 AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE); |
| 602 return [NSNumber numberWithFloat:floatValue]; | 602 return [NSNumber numberWithFloat:floatValue]; |
| 603 } | 603 } |
| 604 | 604 |
| 605 - (NSString*)orientation { | 605 - (NSString*)orientation { |
| 606 // We present a spin button as a vertical slider, with a role description | 606 // We present a spin button as a vertical slider, with a role description |
| 607 // of "spin button". | 607 // of "spin button". |
| 608 if ([self internalRole] == WebKit::WebAXRoleSpinButton) | 608 if ([self internalRole] == blink::WebAXRoleSpinButton) |
| 609 return NSAccessibilityVerticalOrientationValue; | 609 return NSAccessibilityVerticalOrientationValue; |
| 610 | 610 |
| 611 if (GetState(browserAccessibility_, WebKit::WebAXStateVertical)) | 611 if (GetState(browserAccessibility_, blink::WebAXStateVertical)) |
| 612 return NSAccessibilityVerticalOrientationValue; | 612 return NSAccessibilityVerticalOrientationValue; |
| 613 else | 613 else |
| 614 return NSAccessibilityHorizontalOrientationValue; | 614 return NSAccessibilityHorizontalOrientationValue; |
| 615 } | 615 } |
| 616 | 616 |
| 617 - (NSNumber*)numberOfCharacters { | 617 - (NSNumber*)numberOfCharacters { |
| 618 return [NSNumber numberWithInt:browserAccessibility_->value().length()]; | 618 return [NSNumber numberWithInt:browserAccessibility_->value().length()]; |
| 619 } | 619 } |
| 620 | 620 |
| 621 // The origin of this accessibility object in the page's document. | 621 // The origin of this accessibility object in the page's document. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 639 return manager->parent_view(); | 639 return manager->parent_view(); |
| 640 } | 640 } |
| 641 } | 641 } |
| 642 | 642 |
| 643 - (NSValue*)position { | 643 - (NSValue*)position { |
| 644 return [NSValue valueWithPoint:[delegate_ accessibilityPointInScreen:self]]; | 644 return [NSValue valueWithPoint:[delegate_ accessibilityPointInScreen:self]]; |
| 645 } | 645 } |
| 646 | 646 |
| 647 - (NSNumber*)required { | 647 - (NSNumber*)required { |
| 648 return [NSNumber numberWithBool: | 648 return [NSNumber numberWithBool: |
| 649 GetState(browserAccessibility_, WebKit::WebAXStateRequired)]; | 649 GetState(browserAccessibility_, blink::WebAXStateRequired)]; |
| 650 } | 650 } |
| 651 | 651 |
| 652 // Returns an enum indicating the role from browserAccessibility_. | 652 // Returns an enum indicating the role from browserAccessibility_. |
| 653 - (WebKit::WebAXRole)internalRole { | 653 - (blink::WebAXRole)internalRole { |
| 654 return static_cast<WebKit::WebAXRole>(browserAccessibility_->role()); | 654 return static_cast<blink::WebAXRole>(browserAccessibility_->role()); |
| 655 } | 655 } |
| 656 | 656 |
| 657 // Returns a string indicating the NSAccessibility role of this object. | 657 // Returns a string indicating the NSAccessibility role of this object. |
| 658 - (NSString*)role { | 658 - (NSString*)role { |
| 659 WebKit::WebAXRole role = [self internalRole]; | 659 blink::WebAXRole role = [self internalRole]; |
| 660 if (role == WebKit::WebAXRoleCanvas && | 660 if (role == blink::WebAXRoleCanvas && |
| 661 browserAccessibility_->GetBoolAttribute( | 661 browserAccessibility_->GetBoolAttribute( |
| 662 AccessibilityNodeData::ATTR_CANVAS_HAS_FALLBACK)) { | 662 AccessibilityNodeData::ATTR_CANVAS_HAS_FALLBACK)) { |
| 663 return NSAccessibilityGroupRole; | 663 return NSAccessibilityGroupRole; |
| 664 } | 664 } |
| 665 return NativeRoleFromAccessibilityNodeDataRole(role); | 665 return NativeRoleFromAccessibilityNodeDataRole(role); |
| 666 } | 666 } |
| 667 | 667 |
| 668 // Returns a string indicating the role description of this object. | 668 // Returns a string indicating the role description of this object. |
| 669 - (NSString*)roleDescription { | 669 - (NSString*)roleDescription { |
| 670 NSString* role = [self role]; | 670 NSString* role = [self role]; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 684 | 684 |
| 685 if ([role isEqualToString:@"AXHeading"]) { | 685 if ([role isEqualToString:@"AXHeading"]) { |
| 686 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 686 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
| 687 IDS_AX_ROLE_HEADING)); | 687 IDS_AX_ROLE_HEADING)); |
| 688 } | 688 } |
| 689 | 689 |
| 690 if ([role isEqualToString:NSAccessibilityGroupRole] || | 690 if ([role isEqualToString:NSAccessibilityGroupRole] || |
| 691 [role isEqualToString:NSAccessibilityRadioButtonRole]) { | 691 [role isEqualToString:NSAccessibilityRadioButtonRole]) { |
| 692 std::string role; | 692 std::string role; |
| 693 if (browserAccessibility_->GetHtmlAttribute("role", &role)) { | 693 if (browserAccessibility_->GetHtmlAttribute("role", &role)) { |
| 694 WebKit::WebAXRole internalRole = [self internalRole]; | 694 blink::WebAXRole internalRole = [self internalRole]; |
| 695 if ((internalRole != WebKit::WebAXRoleGroup && | 695 if ((internalRole != blink::WebAXRoleGroup && |
| 696 internalRole != WebKit::WebAXRoleListItem) || | 696 internalRole != blink::WebAXRoleListItem) || |
| 697 internalRole == WebKit::WebAXRoleTab) { | 697 internalRole == blink::WebAXRoleTab) { |
| 698 // TODO(dtseng): This is not localized; see crbug/84814. | 698 // TODO(dtseng): This is not localized; see crbug/84814. |
| 699 return base::SysUTF8ToNSString(role); | 699 return base::SysUTF8ToNSString(role); |
| 700 } | 700 } |
| 701 } | 701 } |
| 702 } | 702 } |
| 703 | 703 |
| 704 switch([self internalRole]) { | 704 switch([self internalRole]) { |
| 705 case WebKit::WebAXRoleFooter: | 705 case blink::WebAXRoleFooter: |
| 706 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 706 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
| 707 IDS_AX_ROLE_FOOTER)); | 707 IDS_AX_ROLE_FOOTER)); |
| 708 case WebKit::WebAXRoleSpinButton: | 708 case blink::WebAXRoleSpinButton: |
| 709 // This control is similar to what VoiceOver calls a "stepper". | 709 // This control is similar to what VoiceOver calls a "stepper". |
| 710 return base::SysUTF16ToNSString(content_client->GetLocalizedString( | 710 return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
| 711 IDS_AX_ROLE_STEPPER)); | 711 IDS_AX_ROLE_STEPPER)); |
| 712 default: | 712 default: |
| 713 break; | 713 break; |
| 714 } | 714 } |
| 715 | 715 |
| 716 return NSAccessibilityRoleDescription(role, nil); | 716 return NSAccessibilityRoleDescription(role, nil); |
| 717 } | 717 } |
| 718 | 718 |
| 719 - (NSArray*)rowHeaders { | 719 - (NSArray*)rowHeaders { |
| 720 if ([self internalRole] != WebKit::WebAXRoleTable && | 720 if ([self internalRole] != blink::WebAXRoleTable && |
| 721 [self internalRole] != WebKit::WebAXRoleGrid) { | 721 [self internalRole] != blink::WebAXRoleGrid) { |
| 722 return nil; | 722 return nil; |
| 723 } | 723 } |
| 724 | 724 |
| 725 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 725 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 726 const std::vector<int32>& uniqueCellIds = | 726 const std::vector<int32>& uniqueCellIds = |
| 727 browserAccessibility_->GetIntListAttribute( | 727 browserAccessibility_->GetIntListAttribute( |
| 728 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); | 728 AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| 729 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { | 729 for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| 730 int id = uniqueCellIds[i]; | 730 int id = uniqueCellIds[i]; |
| 731 BrowserAccessibility* cell = | 731 BrowserAccessibility* cell = |
| 732 browserAccessibility_->manager()->GetFromRendererID(id); | 732 browserAccessibility_->manager()->GetFromRendererID(id); |
| 733 if (cell && cell->role() == WebKit::WebAXRoleRowHeader) | 733 if (cell && cell->role() == blink::WebAXRoleRowHeader) |
| 734 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; | 734 [ret addObject:cell->ToBrowserAccessibilityCocoa()]; |
| 735 } | 735 } |
| 736 return ret; | 736 return ret; |
| 737 } | 737 } |
| 738 | 738 |
| 739 - (NSValue*)rowIndexRange { | 739 - (NSValue*)rowIndexRange { |
| 740 if ([self internalRole] != WebKit::WebAXRoleCell) | 740 if ([self internalRole] != blink::WebAXRoleCell) |
| 741 return nil; | 741 return nil; |
| 742 | 742 |
| 743 int row = -1; | 743 int row = -1; |
| 744 int rowspan = -1; | 744 int rowspan = -1; |
| 745 browserAccessibility_->GetIntAttribute( | 745 browserAccessibility_->GetIntAttribute( |
| 746 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_INDEX, &row); | 746 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_INDEX, &row); |
| 747 browserAccessibility_->GetIntAttribute( | 747 browserAccessibility_->GetIntAttribute( |
| 748 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_SPAN, &rowspan); | 748 AccessibilityNodeData::ATTR_TABLE_CELL_ROW_SPAN, &rowspan); |
| 749 if (row >= 0 && rowspan >= 1) | 749 if (row >= 0 && rowspan >= 1) |
| 750 return [NSValue valueWithRange:NSMakeRange(row, rowspan)]; | 750 return [NSValue valueWithRange:NSMakeRange(row, rowspan)]; |
| 751 return nil; | 751 return nil; |
| 752 } | 752 } |
| 753 | 753 |
| 754 - (NSArray*)rows { | 754 - (NSArray*)rows { |
| 755 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; | 755 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| 756 | 756 |
| 757 if ([self internalRole] == WebKit::WebAXRoleTable|| | 757 if ([self internalRole] == blink::WebAXRoleTable|| |
| 758 [self internalRole] == WebKit::WebAXRoleGrid) { | 758 [self internalRole] == blink::WebAXRoleGrid) { |
| 759 for (BrowserAccessibilityCocoa* child in [self children]) { | 759 for (BrowserAccessibilityCocoa* child in [self children]) { |
| 760 if ([[child role] isEqualToString:NSAccessibilityRowRole]) | 760 if ([[child role] isEqualToString:NSAccessibilityRowRole]) |
| 761 [ret addObject:child]; | 761 [ret addObject:child]; |
| 762 } | 762 } |
| 763 } else if ([self internalRole] == WebKit::WebAXRoleColumn) { | 763 } else if ([self internalRole] == blink::WebAXRoleColumn) { |
| 764 const std::vector<int32>& indirectChildIds = | 764 const std::vector<int32>& indirectChildIds = |
| 765 browserAccessibility_->GetIntListAttribute( | 765 browserAccessibility_->GetIntListAttribute( |
| 766 AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); | 766 AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); |
| 767 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { | 767 for (uint32 i = 0; i < indirectChildIds.size(); ++i) { |
| 768 int id = indirectChildIds[i]; | 768 int id = indirectChildIds[i]; |
| 769 BrowserAccessibility* rowElement = | 769 BrowserAccessibility* rowElement = |
| 770 browserAccessibility_->manager()->GetFromRendererID(id); | 770 browserAccessibility_->manager()->GetFromRendererID(id); |
| 771 if (rowElement) | 771 if (rowElement) |
| 772 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; | 772 [ret addObject:rowElement->ToBrowserAccessibilityCocoa()]; |
| 773 } | 773 } |
| 774 } | 774 } |
| 775 | 775 |
| 776 return ret; | 776 return ret; |
| 777 } | 777 } |
| 778 | 778 |
| 779 // Returns the size of this object. | 779 // Returns the size of this object. |
| 780 - (NSValue*)size { | 780 - (NSValue*)size { |
| 781 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); | 781 gfx::Rect bounds = browserAccessibility_->GetLocalBoundsRect(); |
| 782 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; | 782 return [NSValue valueWithSize:NSMakeSize(bounds.width(), bounds.height())]; |
| 783 } | 783 } |
| 784 | 784 |
| 785 // Returns a subrole based upon the role. | 785 // Returns a subrole based upon the role. |
| 786 - (NSString*) subrole { | 786 - (NSString*) subrole { |
| 787 WebKit::WebAXRole browserAccessibilityRole = [self internalRole]; | 787 blink::WebAXRole browserAccessibilityRole = [self internalRole]; |
| 788 if (browserAccessibilityRole == WebKit::WebAXRoleTextField && | 788 if (browserAccessibilityRole == blink::WebAXRoleTextField && |
| 789 GetState(browserAccessibility_, WebKit::WebAXStateProtected)) { | 789 GetState(browserAccessibility_, blink::WebAXStateProtected)) { |
| 790 return @"AXSecureTextField"; | 790 return @"AXSecureTextField"; |
| 791 } | 791 } |
| 792 | 792 |
| 793 NSString* htmlTag = NSStringForStringAttribute( | 793 NSString* htmlTag = NSStringForStringAttribute( |
| 794 browserAccessibility_, AccessibilityNodeData::ATTR_HTML_TAG); | 794 browserAccessibility_, AccessibilityNodeData::ATTR_HTML_TAG); |
| 795 | 795 |
| 796 if (browserAccessibilityRole == WebKit::WebAXRoleList) { | 796 if (browserAccessibilityRole == blink::WebAXRoleList) { |
| 797 if ([htmlTag isEqualToString:@"ul"] || | 797 if ([htmlTag isEqualToString:@"ul"] || |
| 798 [htmlTag isEqualToString:@"ol"]) { | 798 [htmlTag isEqualToString:@"ol"]) { |
| 799 return @"AXContentList"; | 799 return @"AXContentList"; |
| 800 } else if ([htmlTag isEqualToString:@"dl"]) { | 800 } else if ([htmlTag isEqualToString:@"dl"]) { |
| 801 return @"AXDescriptionList"; | 801 return @"AXDescriptionList"; |
| 802 } | 802 } |
| 803 } | 803 } |
| 804 | 804 |
| 805 return NativeSubroleFromAccessibilityNodeDataRole(browserAccessibilityRole); | 805 return NativeSubroleFromAccessibilityNodeDataRole(browserAccessibilityRole); |
| 806 } | 806 } |
| 807 | 807 |
| 808 // Returns all tabs in this subtree. | 808 // Returns all tabs in this subtree. |
| 809 - (NSArray*)tabs { | 809 - (NSArray*)tabs { |
| 810 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; | 810 NSMutableArray* tabSubtree = [[[NSMutableArray alloc] init] autorelease]; |
| 811 | 811 |
| 812 if ([self internalRole] == WebKit::WebAXRoleTab) | 812 if ([self internalRole] == blink::WebAXRoleTab) |
| 813 [tabSubtree addObject:self]; | 813 [tabSubtree addObject:self]; |
| 814 | 814 |
| 815 for (uint i=0; i < [[self children] count]; ++i) { | 815 for (uint i=0; i < [[self children] count]; ++i) { |
| 816 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; | 816 NSArray* tabChildren = [[[self children] objectAtIndex:i] tabs]; |
| 817 if ([tabChildren count] > 0) | 817 if ([tabChildren count] > 0) |
| 818 [tabSubtree addObjectsFromArray:tabChildren]; | 818 [tabSubtree addObjectsFromArray:tabChildren]; |
| 819 } | 819 } |
| 820 | 820 |
| 821 return tabSubtree; | 821 return tabSubtree; |
| 822 } | 822 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL, &level)) { | 857 AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL, &level)) { |
| 858 return [NSNumber numberWithInt:level]; | 858 return [NSNumber numberWithInt:level]; |
| 859 } | 859 } |
| 860 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { | 860 } else if ([role isEqualToString:NSAccessibilityButtonRole]) { |
| 861 // AXValue does not make sense for pure buttons. | 861 // AXValue does not make sense for pure buttons. |
| 862 return @""; | 862 return @""; |
| 863 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] || | 863 } else if ([role isEqualToString:NSAccessibilityCheckBoxRole] || |
| 864 [role isEqualToString:NSAccessibilityRadioButtonRole]) { | 864 [role isEqualToString:NSAccessibilityRadioButtonRole]) { |
| 865 int value = 0; | 865 int value = 0; |
| 866 value = GetState( | 866 value = GetState( |
| 867 browserAccessibility_, WebKit::WebAXStateChecked) ? 1 : 0; | 867 browserAccessibility_, blink::WebAXStateChecked) ? 1 : 0; |
| 868 value = GetState( | 868 value = GetState( |
| 869 browserAccessibility_, WebKit::WebAXStateSelected) ? | 869 browserAccessibility_, blink::WebAXStateSelected) ? |
| 870 1 : | 870 1 : |
| 871 value; | 871 value; |
| 872 | 872 |
| 873 if (browserAccessibility_->GetBoolAttribute( | 873 if (browserAccessibility_->GetBoolAttribute( |
| 874 AccessibilityNodeData::ATTR_BUTTON_MIXED)) { | 874 AccessibilityNodeData::ATTR_BUTTON_MIXED)) { |
| 875 value = 2; | 875 value = 2; |
| 876 } | 876 } |
| 877 return [NSNumber numberWithInt:value]; | 877 return [NSNumber numberWithInt:value]; |
| 878 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || | 878 } else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || |
| 879 [role isEqualToString:NSAccessibilitySliderRole] || | 879 [role isEqualToString:NSAccessibilitySliderRole] || |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 - (NSArray*)visibleColumns { | 927 - (NSArray*)visibleColumns { |
| 928 return [self columns]; | 928 return [self columns]; |
| 929 } | 929 } |
| 930 | 930 |
| 931 - (NSArray*)visibleRows { | 931 - (NSArray*)visibleRows { |
| 932 return [self rows]; | 932 return [self rows]; |
| 933 } | 933 } |
| 934 | 934 |
| 935 - (NSNumber*)visited { | 935 - (NSNumber*)visited { |
| 936 return [NSNumber numberWithBool: | 936 return [NSNumber numberWithBool: |
| 937 GetState(browserAccessibility_, WebKit::WebAXStateVisited)]; | 937 GetState(browserAccessibility_, blink::WebAXStateVisited)]; |
| 938 } | 938 } |
| 939 | 939 |
| 940 - (id)window { | 940 - (id)window { |
| 941 return [delegate_ window]; | 941 return [delegate_ window]; |
| 942 } | 942 } |
| 943 | 943 |
| 944 - (NSString*)methodNameForAttribute:(NSString*)attribute { | 944 - (NSString*)methodNameForAttribute:(NSString*)attribute { |
| 945 return [attributeToMethodNameMap objectForKey:attribute]; | 945 return [attributeToMethodNameMap objectForKey:attribute]; |
| 946 } | 946 } |
| 947 | 947 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1025 if (line_index < 0 || line_index >= line_count) | 1025 if (line_index < 0 || line_index >= line_count) |
| 1026 return nil; | 1026 return nil; |
| 1027 int start = line_index > 0 ? line_breaks[line_index - 1] : 0; | 1027 int start = line_index > 0 ? line_breaks[line_index - 1] : 0; |
| 1028 int end = line_index < line_count - 1 ? line_breaks[line_index] : len; | 1028 int end = line_index < line_count - 1 ? line_breaks[line_index] : len; |
| 1029 return [NSValue valueWithRange: | 1029 return [NSValue valueWithRange: |
| 1030 NSMakeRange(start, end - start)]; | 1030 NSMakeRange(start, end - start)]; |
| 1031 } | 1031 } |
| 1032 | 1032 |
| 1033 if ([attribute isEqualToString: | 1033 if ([attribute isEqualToString: |
| 1034 NSAccessibilityCellForColumnAndRowParameterizedAttribute]) { | 1034 NSAccessibilityCellForColumnAndRowParameterizedAttribute]) { |
| 1035 if ([self internalRole] != WebKit::WebAXRoleTable && | 1035 if ([self internalRole] != blink::WebAXRoleTable && |
| 1036 [self internalRole] != WebKit::WebAXRoleGrid) { | 1036 [self internalRole] != blink::WebAXRoleGrid) { |
| 1037 return nil; | 1037 return nil; |
| 1038 } | 1038 } |
| 1039 if (![parameter isKindOfClass:[NSArray self]]) | 1039 if (![parameter isKindOfClass:[NSArray self]]) |
| 1040 return nil; | 1040 return nil; |
| 1041 NSArray* array = parameter; | 1041 NSArray* array = parameter; |
| 1042 int column = [[array objectAtIndex:0] intValue]; | 1042 int column = [[array objectAtIndex:0] intValue]; |
| 1043 int row = [[array objectAtIndex:1] intValue]; | 1043 int row = [[array objectAtIndex:1] intValue]; |
| 1044 int num_columns = browserAccessibility_->GetIntAttribute( | 1044 int num_columns = browserAccessibility_->GetIntAttribute( |
| 1045 AccessibilityNodeData::ATTR_TABLE_COLUMN_COUNT); | 1045 AccessibilityNodeData::ATTR_TABLE_COLUMN_COUNT); |
| 1046 int num_rows = browserAccessibility_->GetIntAttribute( | 1046 int num_rows = browserAccessibility_->GetIntAttribute( |
| 1047 AccessibilityNodeData::ATTR_TABLE_ROW_COUNT); | 1047 AccessibilityNodeData::ATTR_TABLE_ROW_COUNT); |
| 1048 if (column < 0 || column >= num_columns || | 1048 if (column < 0 || column >= num_columns || |
| 1049 row < 0 || row >= num_rows) { | 1049 row < 0 || row >= num_rows) { |
| 1050 return nil; | 1050 return nil; |
| 1051 } | 1051 } |
| 1052 for (size_t i = 0; | 1052 for (size_t i = 0; |
| 1053 i < browserAccessibility_->PlatformChildCount(); | 1053 i < browserAccessibility_->PlatformChildCount(); |
| 1054 ++i) { | 1054 ++i) { |
| 1055 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); | 1055 BrowserAccessibility* child = browserAccessibility_->PlatformGetChild(i); |
| 1056 if (child->role() != WebKit::WebAXRoleRow) | 1056 if (child->role() != blink::WebAXRoleRow) |
| 1057 continue; | 1057 continue; |
| 1058 int rowIndex; | 1058 int rowIndex; |
| 1059 if (!child->GetIntAttribute( | 1059 if (!child->GetIntAttribute( |
| 1060 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX, &rowIndex)) { | 1060 AccessibilityNodeData::ATTR_TABLE_ROW_INDEX, &rowIndex)) { |
| 1061 continue; | 1061 continue; |
| 1062 } | 1062 } |
| 1063 if (rowIndex < row) | 1063 if (rowIndex < row) |
| 1064 continue; | 1064 continue; |
| 1065 if (rowIndex > row) | 1065 if (rowIndex > row) |
| 1066 break; | 1066 break; |
| 1067 for (size_t j = 0; | 1067 for (size_t j = 0; |
| 1068 j < child->PlatformChildCount(); | 1068 j < child->PlatformChildCount(); |
| 1069 ++j) { | 1069 ++j) { |
| 1070 BrowserAccessibility* cell = child->PlatformGetChild(j); | 1070 BrowserAccessibility* cell = child->PlatformGetChild(j); |
| 1071 if (cell->role() != WebKit::WebAXRoleCell) | 1071 if (cell->role() != blink::WebAXRoleCell) |
| 1072 continue; | 1072 continue; |
| 1073 int colIndex; | 1073 int colIndex; |
| 1074 if (!cell->GetIntAttribute( | 1074 if (!cell->GetIntAttribute( |
| 1075 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, | 1075 AccessibilityNodeData::ATTR_TABLE_CELL_COLUMN_INDEX, |
| 1076 &colIndex)) { | 1076 &colIndex)) { |
| 1077 continue; | 1077 continue; |
| 1078 } | 1078 } |
| 1079 if (colIndex == column) | 1079 if (colIndex == column) |
| 1080 return cell->ToBrowserAccessibilityCocoa(); | 1080 return cell->ToBrowserAccessibilityCocoa(); |
| 1081 if (colIndex > column) | 1081 if (colIndex > column) |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1334 } | 1334 } |
| 1335 | 1335 |
| 1336 // Returns whether or not the specified attribute can be set by the | 1336 // Returns whether or not the specified attribute can be set by the |
| 1337 // accessibility API via |accessibilitySetValue:forAttribute:|. | 1337 // accessibility API via |accessibilitySetValue:forAttribute:|. |
| 1338 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { | 1338 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { |
| 1339 if (!browserAccessibility_) | 1339 if (!browserAccessibility_) |
| 1340 return nil; | 1340 return nil; |
| 1341 | 1341 |
| 1342 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) | 1342 if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) |
| 1343 return GetState(browserAccessibility_, | 1343 return GetState(browserAccessibility_, |
| 1344 WebKit::WebAXStateFocusable); | 1344 blink::WebAXStateFocusable); |
| 1345 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { | 1345 if ([attribute isEqualToString:NSAccessibilityValueAttribute]) { |
| 1346 return browserAccessibility_->GetBoolAttribute( | 1346 return browserAccessibility_->GetBoolAttribute( |
| 1347 AccessibilityNodeData::ATTR_CAN_SET_VALUE); | 1347 AccessibilityNodeData::ATTR_CAN_SET_VALUE); |
| 1348 } | 1348 } |
| 1349 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && | 1349 if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] && |
| 1350 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] || | 1350 ([[self role] isEqualToString:NSAccessibilityTextFieldRole] || |
| 1351 [[self role] isEqualToString:NSAccessibilityTextAreaRole])) | 1351 [[self role] isEqualToString:NSAccessibilityTextAreaRole])) |
| 1352 return YES; | 1352 return YES; |
| 1353 | 1353 |
| 1354 return NO; | 1354 return NO; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 return [super hash]; | 1450 return [super hash]; |
| 1451 return browserAccessibility_->renderer_id(); | 1451 return browserAccessibility_->renderer_id(); |
| 1452 } | 1452 } |
| 1453 | 1453 |
| 1454 - (BOOL)accessibilityShouldUseUniqueId { | 1454 - (BOOL)accessibilityShouldUseUniqueId { |
| 1455 return YES; | 1455 return YES; |
| 1456 } | 1456 } |
| 1457 | 1457 |
| 1458 @end | 1458 @end |
| 1459 | 1459 |
| OLD | NEW |