| 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 a09e8ddd907a0224bf86dd478436f436d56756fc..9d49767d2667268e79c2e7ffda74590e36935bd5 100644
|
| --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| @@ -344,15 +344,11 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| return self;
|
| }
|
|
|
| -// Deletes our associated BrowserAccessibilityMac.
|
| -- (void)dealloc {
|
| +- (void)detach {
|
| if (browserAccessibility_) {
|
| NSAccessibilityUnregisterUniqueIdForUIElement(self);
|
| - delete browserAccessibility_;
|
| browserAccessibility_ = NULL;
|
| }
|
| -
|
| - [super dealloc];
|
| }
|
|
|
| - (NSString*)accessKey {
|
| @@ -997,6 +993,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| // Returns the accessibility value for the given attribute. If the value isn't
|
| // supported this will return nil.
|
| - (id)accessibilityAttributeValue:(NSString*)attribute {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| SEL selector =
|
| NSSelectorFromString([self methodNameForAttribute:attribute]);
|
| if (selector)
|
| @@ -1036,6 +1035,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| // value isn't supported this will return nil.
|
| - (id)accessibilityAttributeValue:(NSString*)attribute
|
| forParameter:(id)parameter {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| const std::vector<int32>& line_breaks = browserAccessibility_->line_breaks();
|
| int len = static_cast<int>(browserAccessibility_->value().size());
|
|
|
| @@ -1143,6 +1145,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| // Returns an array of parameterized attributes names that this object will
|
| // respond to.
|
| - (NSArray*)accessibilityParameterizedAttributeNames {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| if ([[self role] isEqualToString:NSAccessibilityTableRole] ||
|
| [[self role] isEqualToString:NSAccessibilityGridRole]) {
|
| return [NSArray arrayWithObjects:
|
| @@ -1168,6 +1173,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Returns an array of action names that this object will respond to.
|
| - (NSArray*)accessibilityActionNames {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| NSMutableArray* ret =
|
| [NSMutableArray arrayWithObject:NSAccessibilityShowMenuAction];
|
| NSString* role = [self role];
|
| @@ -1190,6 +1198,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| - (NSArray*)accessibilityArrayAttributeValues:(NSString*)attribute
|
| index:(NSUInteger)index
|
| maxCount:(NSUInteger)maxCount {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| NSArray* fullArray = [self accessibilityAttributeValue:attribute];
|
| if (!fullArray)
|
| return nil;
|
| @@ -1207,12 +1218,18 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Returns the count of the specified accessibility array attribute.
|
| - (NSUInteger)accessibilityArrayAttributeCount:(NSString*)attribute {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| NSArray* fullArray = [self accessibilityAttributeValue:attribute];
|
| return [fullArray count];
|
| }
|
|
|
| // Returns the list of accessibility attributes that this object supports.
|
| - (NSArray*)accessibilityAttributeNames {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| // General attributes.
|
| NSMutableArray* ret = [NSMutableArray arrayWithObjects:
|
| NSAccessibilityChildrenAttribute,
|
| @@ -1348,6 +1365,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Returns the index of the child in this objects array of children.
|
| - (NSUInteger)accessibilityGetIndexOf:(id)child {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| NSUInteger index = 0;
|
| for (BrowserAccessibilityCocoa* childToCheck in [self children]) {
|
| if ([child isEqual:childToCheck])
|
| @@ -1360,6 +1380,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| // Returns whether or not the specified attribute can be set by the
|
| // accessibility API via |accessibilitySetValue:forAttribute:|.
|
| - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
|
| return GetState(browserAccessibility_,
|
| AccessibilityNodeData::STATE_FOCUSABLE);
|
| @@ -1380,12 +1403,18 @@ NSDictionary* attributeToMethodNameMap = nil;
|
| // Returns whether or not this object should be ignored in the accessibilty
|
| // tree.
|
| - (BOOL)accessibilityIsIgnored {
|
| + if (!browserAccessibility_)
|
| + return true;
|
| +
|
| return [self isIgnored];
|
| }
|
|
|
| // Performs the given accessibilty action on the webkit accessibility object
|
| // that backs this object.
|
| - (void)accessibilityPerformAction:(NSString*)action {
|
| + if (!browserAccessibility_)
|
| + return;
|
| +
|
| // TODO(feldstein): Support more actions.
|
| if ([action isEqualToString:NSAccessibilityPressAction])
|
| [delegate_ doDefaultAction:browserAccessibility_->renderer_id()];
|
| @@ -1395,6 +1424,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Returns the description of the given action.
|
| - (NSString*)accessibilityActionDescription:(NSString*)action {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| return NSAccessibilityActionDescription(action);
|
| }
|
|
|
| @@ -1407,6 +1439,9 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Sets the value for an accessibility attribute via the accessibility API.
|
| - (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute {
|
| + if (!browserAccessibility_)
|
| + return;
|
| +
|
| if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
|
| NSNumber* focusedNumber = value;
|
| BOOL focused = [focusedNumber intValue];
|
| @@ -1424,8 +1459,12 @@ NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| // Returns the deepest accessibility child that should not be ignored.
|
| // It is assumed that the hit test has been narrowed down to this object
|
| -// or one of its children, so this will never return nil.
|
| +// or one of its children, so this will never return nil unless this
|
| +// object is invalid.
|
| - (id)accessibilityHitTest:(NSPoint)point {
|
| + if (!browserAccessibility_)
|
| + return nil;
|
| +
|
| BrowserAccessibilityCocoa* hit = self;
|
| for (BrowserAccessibilityCocoa* child in [self children]) {
|
| NSPoint origin = [child origin];
|
|
|