Index: content/browser/accessibility/browser_accessibility_cocoa.mm |
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm |
index cfc924bb2df5befe14af22d426f37c5d1638fec1..3566d396c9dce014d2f86822e5f3680e33b4b5b1 100644 |
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm |
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm |
@@ -148,7 +148,7 @@ RoleMap BuildRoleMap() { |
{ ui::AX_ROLE_TEXT_AREA, NSAccessibilityTextAreaRole }, |
{ ui::AX_ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole }, |
{ ui::AX_ROLE_TIMER, NSAccessibilityGroupRole }, |
- { ui::AX_ROLE_TOGGLE_BUTTON, NSAccessibilityButtonRole }, |
+ { ui::AX_ROLE_TOGGLE_BUTTON, NSAccessibilityCheckBoxRole }, |
{ ui::AX_ROLE_TOOLBAR, NSAccessibilityToolbarRole }, |
{ ui::AX_ROLE_TOOLTIP, NSAccessibilityGroupRole }, |
{ ui::AX_ROLE_TREE, NSAccessibilityOutlineRole }, |
@@ -206,6 +206,7 @@ RoleMap BuildSubroleMap() { |
{ ui::AX_ROLE_STATUS, @"AXApplicationStatus" }, |
{ ui::AX_ROLE_TAB_PANEL, @"AXTabPanel" }, |
{ ui::AX_ROLE_TIMER, @"AXApplicationTimer" }, |
+ { ui::AX_ROLE_TOGGLE_BUTTON, @"AXToggleButton" }, |
{ ui::AX_ROLE_TOOLTIP, @"AXUserInterfaceTooltip" }, |
{ ui::AX_ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole }, |
}; |
@@ -663,6 +664,17 @@ NSDictionary* attributeToMethodNameMap = nil; |
ui::AX_ATTR_CANVAS_HAS_FALLBACK)) { |
return NSAccessibilityGroupRole; |
} |
+ if (role == ui::AX_ROLE_BUTTON) { |
+ bool is_aria_pressed_defined; |
dmazzoni
2014/03/06 06:09:09
Nit: Obj-C files use camelCase for local variables
aboxhall
2014/03/06 17:45:58
Done.
|
+ bool is_mixed; |
+ browserAccessibility_->GetAriaTristate("aria-pressed", |
+ &is_aria_pressed_defined, |
+ &is_mixed); |
+ if (is_aria_pressed_defined) |
+ return NSAccessibilityCheckBoxRole; |
+ else |
+ return NSAccessibilityButtonRole; |
+ } |
return NativeRoleFromAXRole(role); |
} |
@@ -710,6 +722,9 @@ NSDictionary* attributeToMethodNameMap = nil; |
// This control is similar to what VoiceOver calls a "stepper". |
return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
IDS_AX_ROLE_STEPPER)); |
+ case ui::AX_ROLE_TOGGLE_BUTTON: |
+ return base::SysUTF16ToNSString(content_client->GetLocalizedString( |
+ IDS_AX_ROLE_TOGGLE_BUTTON)); |
default: |
break; |
} |
@@ -876,6 +891,18 @@ NSDictionary* attributeToMethodNameMap = nil; |
value = 2; |
} |
return [NSNumber numberWithInt:value]; |
+ } else if ([self internalRole] == ui::AX_ROLE_TOGGLE_BUTTON) { |
+ int value = 0; |
+ bool aria_pressed_defined; |
+ bool aria_pressed_mixed; |
+ value = browserAccessibility_->GetAriaTristate( |
+ "aria-pressed", &aria_pressed_defined, &aria_pressed_mixed) ? 1 : 0; |
+ |
+ if (aria_pressed_mixed) |
+ value = 2; |
+ |
+ return [NSNumber numberWithInt:value]; |
+ |
} else if ([role isEqualToString:NSAccessibilityProgressIndicatorRole] || |
[role isEqualToString:NSAccessibilitySliderRole] || |
[role isEqualToString:NSAccessibilityScrollBarRole]) { |