| 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 86a6934b9c72bb523a97244f5b31f958b105a748..fe0c5aac460ef0ba9fa15d269adc49a30620bf10 100644
|
| --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| @@ -8,6 +8,7 @@
|
|
|
| #include <map>
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/string16.h"
|
| #include "base/sys_string_conversions.h"
|
| #include "base/utf_string_conversions.h"
|
| @@ -43,139 +44,14 @@ struct MapEntry {
|
| NSString* nativeValue;
|
| };
|
|
|
| +typedef std::map<WebAccessibility::Role, NSString*> RoleMap;
|
| +
|
| struct AttributeToMethodNameEntry {
|
| NSString* attribute;
|
| NSString* methodName;
|
| };
|
|
|
| -static const MapEntry roles[] = {
|
| - { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_ANNOTATION, NSAccessibilityUnknownRole },
|
| - { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_BROWSER, NSAccessibilityBrowserRole },
|
| - { WebAccessibility::ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole },
|
| - { WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole },
|
| - { WebAccessibility::ROLE_CELL, @"AXCell" },
|
| - { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
|
| - { WebAccessibility::ROLE_COLOR_WELL, NSAccessibilityColorWellRole },
|
| - { WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole },
|
| - { WebAccessibility::ROLE_COLUMN_HEADER, @"AXCell" },
|
| - { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION,
|
| - NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_DEFINITION_LIST_TERM, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_DIRECTORY, NSAccessibilityListRole },
|
| - { WebAccessibility::ROLE_DISCLOSURE_TRIANGLE,
|
| - NSAccessibilityDisclosureTriangleRole },
|
| - { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_DRAWER, NSAccessibilityDrawerRole },
|
| - { WebAccessibility::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole },
|
| - { WebAccessibility::ROLE_GRID, NSAccessibilityGridRole },
|
| - { WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole },
|
| - { WebAccessibility::ROLE_HEADING, @"AXHeading" },
|
| - { WebAccessibility::ROLE_HELP_TAG, NSAccessibilityHelpTagRole },
|
| - { WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole },
|
| - { WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole },
|
| - { WebAccessibility::ROLE_IMAGE_MAP, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole },
|
| - { WebAccessibility::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole },
|
| - { WebAccessibility::ROLE_LANDMARK_APPLICATION, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole },
|
| - { WebAccessibility::ROLE_LIST, NSAccessibilityListRole },
|
| - { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LIST_MARKER, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole },
|
| - { WebAccessibility::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_MATTE, NSAccessibilityMatteRole },
|
| - { WebAccessibility::ROLE_MENU, NSAccessibilityMenuRole },
|
| - { WebAccessibility::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole },
|
| - { WebAccessibility::ROLE_MENU_BUTTON, NSAccessibilityButtonRole },
|
| - { WebAccessibility::ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole },
|
| - { WebAccessibility::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole },
|
| - { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_OUTLINE, NSAccessibilityOutlineRole },
|
| - { WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole },
|
| - { WebAccessibility::ROLE_PROGRESS_INDICATOR,
|
| - NSAccessibilityProgressIndicatorRole },
|
| - { WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole },
|
| - { WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
|
| - { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_ROOT_WEB_AREA, @"AXWebArea" },
|
| - { WebAccessibility::ROLE_ROW, NSAccessibilityRowRole },
|
| - { WebAccessibility::ROLE_ROW_HEADER, @"AXCell" },
|
| - { WebAccessibility::ROLE_RULER, NSAccessibilityRulerRole },
|
| - { WebAccessibility::ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole },
|
| - // TODO(dtseng): we don't correctly support the attributes for these roles.
|
| - // { WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole },
|
| - // { WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
|
| - { WebAccessibility::ROLE_SHEET, NSAccessibilitySheetRole },
|
| - { WebAccessibility::ROLE_SLIDER, NSAccessibilitySliderRole },
|
| - { WebAccessibility::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_SPLITTER, NSAccessibilitySplitterRole },
|
| - { WebAccessibility::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole },
|
| - { WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
|
| - { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
|
| - { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole },
|
| - { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
|
| - { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
|
| - { WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
|
| - { WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
|
| - { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
|
| - { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_TOOLBAR, NSAccessibilityToolbarRole },
|
| - { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole },
|
| - { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole },
|
| - { WebAccessibility::ROLE_TREE_GRID, NSAccessibilityTableRole },
|
| - { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole },
|
| - { WebAccessibility::ROLE_VALUE_INDICATOR, NSAccessibilityValueIndicatorRole },
|
| - { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
|
| - { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
|
| - { WebAccessibility::ROLE_WINDOW, NSAccessibilityUnknownRole },
|
| -};
|
| -
|
| -static const MapEntry subroles[] = {
|
| - { WebAccessibility::ROLE_ALERT, @"AXApplicationAlert" },
|
| - { WebAccessibility::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" },
|
| - { WebAccessibility::ROLE_ARTICLE, @"AXDocumentArticle" },
|
| - { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" },
|
| - { WebAccessibility::ROLE_DEFINITION_LIST_TERM, @"AXTerm" },
|
| - { WebAccessibility::ROLE_DIALOG, @"AXApplicationDialog" },
|
| - { WebAccessibility::ROLE_DOCUMENT, @"AXDocument" },
|
| - { WebAccessibility::ROLE_LANDMARK_APPLICATION, @"AXLandmarkApplication" },
|
| - { WebAccessibility::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" },
|
| - { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, @"AXLandmarkComplementary" },
|
| - { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, @"AXLandmarkContentInfo" },
|
| - { WebAccessibility::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" },
|
| - { WebAccessibility::ROLE_LANDMARK_NAVIGATION, @"AXLandmarkNavigation" },
|
| - { WebAccessibility::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" },
|
| - { WebAccessibility::ROLE_LOG, @"AXApplicationLog" },
|
| - { WebAccessibility::ROLE_MARQUEE, @"AXApplicationMarquee" },
|
| - { WebAccessibility::ROLE_MATH, @"AXDocumentMath" },
|
| - { WebAccessibility::ROLE_NOTE, @"AXDocumentNote" },
|
| - { WebAccessibility::ROLE_REGION, @"AXDocumentRegion" },
|
| - { WebAccessibility::ROLE_STATUS, @"AXApplicationStatus" },
|
| - { WebAccessibility::ROLE_TAB_PANEL, @"AXTabPanel" },
|
| - { WebAccessibility::ROLE_TIMER, @"AXApplicationTimer" },
|
| - { WebAccessibility::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
|
| - { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
|
| -};
|
| -
|
| -static const AttributeToMethodNameEntry attributeToMethodNameContainer[] = {
|
| +const AttributeToMethodNameEntry attributeToMethodNameContainer[] = {
|
| { NSAccessibilityChildrenAttribute, @"children" },
|
| { NSAccessibilityColumnsAttribute, @"columns" },
|
| { NSAccessibilityDescriptionAttribute, @"description" },
|
| @@ -217,10 +93,173 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
|
| return ((accessibility->state() >> state) & 1);
|
| }
|
|
|
| +RoleMap BuildRoleMap() {
|
| + const MapEntry roles[] = {
|
| + { WebAccessibility::ROLE_ALERT, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_ALERT_DIALOG, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_ANNOTATION, NSAccessibilityUnknownRole },
|
| + { WebAccessibility::ROLE_APPLICATION, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_ARTICLE, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_BROWSER, NSAccessibilityBrowserRole },
|
| + { WebAccessibility::ROLE_BUSY_INDICATOR, NSAccessibilityBusyIndicatorRole },
|
| + { WebAccessibility::ROLE_BUTTON, NSAccessibilityButtonRole },
|
| + { WebAccessibility::ROLE_CELL, @"AXCell" },
|
| + { WebAccessibility::ROLE_CHECKBOX, NSAccessibilityCheckBoxRole },
|
| + { WebAccessibility::ROLE_COLOR_WELL, NSAccessibilityColorWellRole },
|
| + { WebAccessibility::ROLE_COLUMN, NSAccessibilityColumnRole },
|
| + { WebAccessibility::ROLE_COLUMN_HEADER, @"AXCell" },
|
| + { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION,
|
| + NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_DEFINITION_LIST_TERM, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_DIALOG, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_DIRECTORY, NSAccessibilityListRole },
|
| + { WebAccessibility::ROLE_DISCLOSURE_TRIANGLE,
|
| + NSAccessibilityDisclosureTriangleRole },
|
| + { WebAccessibility::ROLE_DOCUMENT, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_DRAWER, NSAccessibilityDrawerRole },
|
| + { WebAccessibility::ROLE_EDITABLE_TEXT, NSAccessibilityTextFieldRole },
|
| + { WebAccessibility::ROLE_GRID, NSAccessibilityGridRole },
|
| + { WebAccessibility::ROLE_GROUP, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_GROW_AREA, NSAccessibilityGrowAreaRole },
|
| + { WebAccessibility::ROLE_HEADING, @"AXHeading" },
|
| + { WebAccessibility::ROLE_HELP_TAG, NSAccessibilityHelpTagRole },
|
| + { WebAccessibility::ROLE_IGNORED, NSAccessibilityUnknownRole },
|
| + { WebAccessibility::ROLE_IMAGE, NSAccessibilityImageRole },
|
| + { WebAccessibility::ROLE_IMAGE_MAP, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_IMAGE_MAP_LINK, NSAccessibilityLinkRole },
|
| + { WebAccessibility::ROLE_INCREMENTOR, NSAccessibilityIncrementorRole },
|
| + { WebAccessibility::ROLE_LANDMARK_APPLICATION, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_BANNER, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_MAIN, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_NAVIGATION, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LANDMARK_SEARCH, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LINK, NSAccessibilityLinkRole },
|
| + { WebAccessibility::ROLE_LIST, NSAccessibilityListRole },
|
| + { WebAccessibility::ROLE_LIST_ITEM, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LIST_MARKER, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LISTBOX, NSAccessibilityListRole },
|
| + { WebAccessibility::ROLE_LISTBOX_OPTION, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_LOG, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_MARQUEE, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_MATH, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_MATTE, NSAccessibilityMatteRole },
|
| + { WebAccessibility::ROLE_MENU, NSAccessibilityMenuRole },
|
| + { WebAccessibility::ROLE_MENU_ITEM, NSAccessibilityMenuItemRole },
|
| + { WebAccessibility::ROLE_MENU_BUTTON, NSAccessibilityButtonRole },
|
| + { WebAccessibility::ROLE_MENU_LIST_OPTION, NSAccessibilityMenuItemRole },
|
| + { WebAccessibility::ROLE_MENU_LIST_POPUP, NSAccessibilityUnknownRole },
|
| + { WebAccessibility::ROLE_NOTE, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_OUTLINE, NSAccessibilityOutlineRole },
|
| + { WebAccessibility::ROLE_POPUP_BUTTON, NSAccessibilityPopUpButtonRole },
|
| + { WebAccessibility::ROLE_PROGRESS_INDICATOR,
|
| + NSAccessibilityProgressIndicatorRole },
|
| + { WebAccessibility::ROLE_RADIO_BUTTON, NSAccessibilityRadioButtonRole },
|
| + { WebAccessibility::ROLE_RADIO_GROUP, NSAccessibilityRadioGroupRole },
|
| + { WebAccessibility::ROLE_REGION, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_ROOT_WEB_AREA, @"AXWebArea" },
|
| + { WebAccessibility::ROLE_ROW, NSAccessibilityRowRole },
|
| + { WebAccessibility::ROLE_ROW_HEADER, @"AXCell" },
|
| + { WebAccessibility::ROLE_RULER, NSAccessibilityRulerRole },
|
| + { WebAccessibility::ROLE_RULER_MARKER, NSAccessibilityRulerMarkerRole },
|
| + // TODO(dtseng): we don't correctly support the attributes for these roles.
|
| + // { WebAccessibility::ROLE_SCROLLAREA, NSAccessibilityScrollAreaRole },
|
| + // { WebAccessibility::ROLE_SCROLLBAR, NSAccessibilityScrollBarRole },
|
| + { WebAccessibility::ROLE_SHEET, NSAccessibilitySheetRole },
|
| + { WebAccessibility::ROLE_SLIDER, NSAccessibilitySliderRole },
|
| + { WebAccessibility::ROLE_SLIDER_THUMB, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_SPLITTER, NSAccessibilitySplitterRole },
|
| + { WebAccessibility::ROLE_SPLIT_GROUP, NSAccessibilitySplitGroupRole },
|
| + { WebAccessibility::ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole },
|
| + { WebAccessibility::ROLE_STATUS, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_SYSTEM_WIDE, NSAccessibilityUnknownRole },
|
| + { WebAccessibility::ROLE_TAB, NSAccessibilityRadioButtonRole },
|
| + { WebAccessibility::ROLE_TAB_LIST, NSAccessibilityTabGroupRole },
|
| + { WebAccessibility::ROLE_TAB_PANEL, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_TABLE, NSAccessibilityTableRole },
|
| + { WebAccessibility::ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_TAB_GROUP, NSAccessibilityTabGroupRole },
|
| + { WebAccessibility::ROLE_TEXTAREA, NSAccessibilityTextAreaRole },
|
| + { WebAccessibility::ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole },
|
| + { WebAccessibility::ROLE_TIMER, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_TOOLBAR, NSAccessibilityToolbarRole },
|
| + { WebAccessibility::ROLE_TOOLTIP, NSAccessibilityGroupRole },
|
| + { WebAccessibility::ROLE_TREE, NSAccessibilityOutlineRole },
|
| + { WebAccessibility::ROLE_TREE_GRID, NSAccessibilityTableRole },
|
| + { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityRowRole },
|
| + { WebAccessibility::ROLE_VALUE_INDICATOR,
|
| + NSAccessibilityValueIndicatorRole },
|
| + { WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole },
|
| + { WebAccessibility::ROLE_WEB_AREA, @"AXWebArea" },
|
| + { WebAccessibility::ROLE_WINDOW, NSAccessibilityUnknownRole },
|
| + };
|
| +
|
| + RoleMap role_map;
|
| + for (size_t i = 0; i < arraysize(roles); ++i)
|
| + role_map[roles[i].webKitValue] = roles[i].nativeValue;
|
| + return role_map;
|
| +}
|
| +
|
| // A mapping of webkit roles to native roles.
|
| -std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeRole;
|
| +NSString* NativeRoleFromWebAccessibilityRole(
|
| + const WebAccessibility::Role& role) {
|
| + CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_role,
|
| + (BuildRoleMap()));
|
| + RoleMap::iterator it = web_accessibility_to_native_role.find(role);
|
| + if (it != web_accessibility_to_native_role.end())
|
| + return it->second;
|
| + else
|
| + return NSAccessibilityUnknownRole;
|
| +}
|
| +
|
| +RoleMap BuildSubroleMap() {
|
| + const MapEntry subroles[] = {
|
| + { WebAccessibility::ROLE_ALERT, @"AXApplicationAlert" },
|
| + { WebAccessibility::ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog" },
|
| + { WebAccessibility::ROLE_ARTICLE, @"AXDocumentArticle" },
|
| + { WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION, @"AXDefinition" },
|
| + { WebAccessibility::ROLE_DEFINITION_LIST_TERM, @"AXTerm" },
|
| + { WebAccessibility::ROLE_DIALOG, @"AXApplicationDialog" },
|
| + { WebAccessibility::ROLE_DOCUMENT, @"AXDocument" },
|
| + { WebAccessibility::ROLE_LANDMARK_APPLICATION, @"AXLandmarkApplication" },
|
| + { WebAccessibility::ROLE_LANDMARK_BANNER, @"AXLandmarkBanner" },
|
| + { WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY,
|
| + @"AXLandmarkComplementary" },
|
| + { WebAccessibility::ROLE_LANDMARK_CONTENTINFO, @"AXLandmarkContentInfo" },
|
| + { WebAccessibility::ROLE_LANDMARK_MAIN, @"AXLandmarkMain" },
|
| + { WebAccessibility::ROLE_LANDMARK_NAVIGATION, @"AXLandmarkNavigation" },
|
| + { WebAccessibility::ROLE_LANDMARK_SEARCH, @"AXLandmarkSearch" },
|
| + { WebAccessibility::ROLE_LOG, @"AXApplicationLog" },
|
| + { WebAccessibility::ROLE_MARQUEE, @"AXApplicationMarquee" },
|
| + { WebAccessibility::ROLE_MATH, @"AXDocumentMath" },
|
| + { WebAccessibility::ROLE_NOTE, @"AXDocumentNote" },
|
| + { WebAccessibility::ROLE_REGION, @"AXDocumentRegion" },
|
| + { WebAccessibility::ROLE_STATUS, @"AXApplicationStatus" },
|
| + { WebAccessibility::ROLE_TAB_PANEL, @"AXTabPanel" },
|
| + { WebAccessibility::ROLE_TIMER, @"AXApplicationTimer" },
|
| + { WebAccessibility::ROLE_TOOLTIP, @"AXUserInterfaceTooltip" },
|
| + { WebAccessibility::ROLE_TREE_ITEM, NSAccessibilityOutlineRowSubrole },
|
| + };
|
| +
|
| + RoleMap subrole_map;
|
| + for (size_t i = 0; i < arraysize(subroles); ++i)
|
| + subrole_map[subroles[i].webKitValue] = subroles[i].nativeValue;
|
| + return subrole_map;
|
| +}
|
| +
|
| // A mapping of webkit roles to native subroles.
|
| -std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeSubrole;
|
| +NSString* NativeSubroleFromWebAccessibilityRole(
|
| + const WebAccessibility::Role& role) {
|
| + CR_DEFINE_STATIC_LOCAL(RoleMap, web_accessibility_to_native_subrole,
|
| + (BuildSubroleMap()));
|
| + RoleMap::iterator it = web_accessibility_to_native_subrole.find(role);
|
| + if (it != web_accessibility_to_native_subrole.end())
|
| + return it->second;
|
| + else
|
| + return nil;
|
| +}
|
| +
|
| // A mapping from an accessibility attribute to its method name.
|
| NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| @@ -229,17 +268,6 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| @implementation BrowserAccessibilityCocoa
|
|
|
| + (void)initialize {
|
| - const size_t numRoles = sizeof(roles) / sizeof(roles[0]);
|
| - for (size_t i = 0; i < numRoles; ++i) {
|
| - webAccessibilityToNativeRole[roles[i].webKitValue] = roles[i].nativeValue;
|
| - }
|
| -
|
| - const size_t numSubroles = sizeof(subroles) / sizeof(subroles[0]);
|
| - for (size_t i = 0; i < numSubroles; ++i) {
|
| - webAccessibilityToNativeSubrole[subroles[i].webKitValue] =
|
| - subroles[i].nativeValue;
|
| - }
|
| -
|
| NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
|
| const size_t numAttributes = sizeof(attributeToMethodNameContainer) /
|
| sizeof(attributeToMethodNameContainer[0]);
|
| @@ -450,13 +478,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| static_cast<WebAccessibility::Role>( browserAccessibility_->role());
|
|
|
| // Roles that we only determine at runtime.
|
| - std::map<WebAccessibility::Role, NSString*>::iterator it =
|
| - webAccessibilityToNativeRole.find(browserAccessibilityRole);
|
| -
|
| - if (it != webAccessibilityToNativeRole.end())
|
| - return it->second;
|
| - else
|
| - return NSAccessibilityUnknownRole;
|
| + return NativeRoleFromWebAccessibilityRole(browserAccessibilityRole);
|
| }
|
|
|
| // Returns a string indicating the role description of this object.
|
| @@ -543,12 +565,7 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| }
|
| }
|
|
|
| - std::map<WebAccessibility::Role, NSString*>::iterator it =
|
| - webAccessibilityToNativeSubrole.find(browserAccessibilityRole);
|
| - if (it != webAccessibilityToNativeSubrole.end())
|
| - return it->second;
|
| - else
|
| - return nil;
|
| + return NativeSubroleFromWebAccessibilityRole(browserAccessibilityRole);
|
| }
|
|
|
| // Returns all tabs in this subtree.
|
|
|