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..96ca9dd7109fd262736b01ba1fee7a5b4ee454cb 100644 |
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm |
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm |
@@ -218,9 +218,44 @@ bool GetState(BrowserAccessibility* accessibility, int state) { |
} |
// A mapping of webkit roles to native roles. |
-std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeRole; |
+NSString* NativeRoleFromWebAccessibilityRole( |
+ const WebAccessibility::Role& role) { |
+ CR_DEFINE_STATIC_LOCAL(std::map<WebAccessibility::Role, NSString*>, |
+ webAccessibilityToNativeRole, ()); |
Mark Mentovai
2011/11/07 22:34:15
This would properly be named web_accessibility_to_
Nico
2011/11/07 23:29:21
Done.
|
+ if (webAccessibilityToNativeRole.empty()) { |
Mark Mentovai
2011/11/07 22:34:15
I don’t like this pattern, because it treats “empt
Nico
2011/11/07 23:29:21
Done-ish
|
+ for (size_t i = 0; i < arraysize(roles); ++i) { |
+ webAccessibilityToNativeRole[roles[i].webKitValue] = roles[i].nativeValue; |
+ } |
+ } |
+ |
+ std::map<WebAccessibility::Role, NSString*>::iterator it = |
+ webAccessibilityToNativeRole.find(role); |
+ if (it != webAccessibilityToNativeRole.end()) |
+ return it->second; |
+ else |
+ return NSAccessibilityUnknownRole; |
+} |
+ |
// A mapping of webkit roles to native subroles. |
-std::map<WebAccessibility::Role, NSString*> webAccessibilityToNativeSubrole; |
+NSString* NativeSubroleFromWebAccessibilityRole( |
+ const WebAccessibility::Role& role) { |
+ CR_DEFINE_STATIC_LOCAL(std::map<WebAccessibility::Role, NSString*>, |
+ webAccessibilityToNativeSubrole, ()); |
Mark Mentovai
2011/11/07 22:34:15
Same.
Nico
2011/11/07 23:29:21
Done.
|
+ if (webAccessibilityToNativeSubrole.empty()) { |
Mark Mentovai
2011/11/07 22:34:15
And same.
Nico
2011/11/07 23:29:21
Done.
|
+ for (size_t i = 0; i < arraysize(subroles); ++i) { |
+ webAccessibilityToNativeSubrole[subroles[i].webKitValue] = |
+ subroles[i].nativeValue; |
+ } |
+ } |
+ |
+ std::map<WebAccessibility::Role, NSString*>::iterator it = |
+ webAccessibilityToNativeSubrole.find(role); |
+ if (it != webAccessibilityToNativeSubrole.end()) |
+ return it->second; |
+ else |
+ return nil; |
+} |
+ |
// A mapping from an accessibility attribute to its method name. |
NSDictionary* attributeToMethodNameMap = nil; |
@@ -229,17 +264,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 +474,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 +561,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. |