summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/browser_accessibility.mm
diff options
context:
space:
mode:
authorfeldstein@chromium.org <feldstein@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-27 00:20:56 +0000
committerfeldstein@chromium.org <feldstein@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-27 00:20:56 +0000
commit198d45d62ccf710566c479536e8342efda52f966 (patch)
tree24f33ad8b7fe97ccffdf6dd62c5e025560462cb4 /chrome/browser/cocoa/browser_accessibility.mm
parent57f73e1db48580045957b1494ad0a402505d0d60 (diff)
downloadchromium_src-198d45d62ccf710566c479536e8342efda52f966.zip
chromium_src-198d45d62ccf710566c479536e8342efda52f966.tar.gz
chromium_src-198d45d62ccf710566c479536e8342efda52f966.tar.bz2
Readability review for Obj-C for feldstein
Readibility review code using the cocoa browser accessibility stuff for objective c Review URL: http://codereview.chromium.org/2951011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53723 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/browser_accessibility.mm')
-rw-r--r--chrome/browser/cocoa/browser_accessibility.mm133
1 files changed, 90 insertions, 43 deletions
diff --git a/chrome/browser/cocoa/browser_accessibility.mm b/chrome/browser/cocoa/browser_accessibility.mm
index 6dbf3ce..cea970a 100644
--- a/chrome/browser/cocoa/browser_accessibility.mm
+++ b/chrome/browser/cocoa/browser_accessibility.mm
@@ -4,9 +4,10 @@
#include <execinfo.h>
+#import "chrome/browser/cocoa/browser_accessibility.h"
+
#include "base/string16.h"
#include "base/sys_string_conversions.h"
-#include "chrome/browser/cocoa/browser_accessibility.h"
#include "chrome/browser/renderer_host/render_widget_host_view_mac.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
@@ -16,9 +17,9 @@ namespace {
// Returns an autoreleased copy of the WebAccessibility's attribute.
NSString* NSStringForWebAccessibilityAttribute(
- std::map<int32, string16>& attributes,
+ const std::map<int32, string16>& attributes,
WebAccessibility::Attribute attribute) {
- std::map<int32, string16>::iterator iter =
+ std::map<int32, string16>::const_iterator iter =
attributes.find(attribute);
NSString* returnValue = @"";
if (iter != attributes.end()) {
@@ -54,15 +55,17 @@ static const RoleEntry roles[] = {
{ WebAccessibility::ROLE_WEBCORE_LINK, NSAccessibilityLinkRole},
};
+// GetState checks the bitmask used in webaccessibility.h to check
+// if the given state was set on the accessibility object.
bool GetState(WebAccessibility accessibility, int state) {
return ((accessibility.state >> state) & 1);
}
-} // anonymous namespace
+} // namespace
@implementation BrowserAccessibility
-- (id)initWithObject:(const WebAccessibility)accessibility
+- (id)initWithObject:(const WebAccessibility&)accessibility
delegate:(id<BrowserAccessibilityDelegate>)delegate
parent:(id)parent {
if ((self = [super init])) {
@@ -73,6 +76,8 @@ bool GetState(WebAccessibility accessibility, int state) {
return self;
}
+// Returns an array of BrowserAccessibility objects, representing the
+// accessibility children of this object.
- (NSArray*)children {
if (!children_.get()) {
const std::vector<WebAccessibility>& accessibilityChildren =
@@ -83,28 +88,33 @@ bool GetState(WebAccessibility accessibility, int state) {
std::vector<WebAccessibility>::const_iterator iterator;
for (iterator = accessibilityChildren.begin();
iterator != accessibilityChildren.end();
- iterator++) {
- BrowserAccessibility* child =
+ ++iterator) {
+ scoped_nsobject<BrowserAccessibility> child(
[[BrowserAccessibility alloc]
initWithObject:*iterator
delegate:delegate_
- parent:self];
- [child autorelease];
+ parent:self]);
[children_ addObject:child];
}
}
return children_;
}
+// Returns whether or not this node should be ignored in the
+// accessibility tree.
- (BOOL)isIgnored {
return webAccessibility_.role == WebAccessibility::ROLE_IGNORED;
}
+// The origin of this accessibility object in the page's document.
+// This is relative to webkit's top-left origin, not Cocoa's
+// bottom-left origin.
- (NSPoint)origin {
return NSMakePoint(webAccessibility_.location.x,
webAccessibility_.location.y);
}
+// Returns a string indicating the role of this object.
- (NSString*)role {
NSString* role = NSAccessibilityUnknownRole;
WebAccessibility::Role value = webAccessibility_.role;
@@ -118,46 +128,59 @@ bool GetState(WebAccessibility accessibility, int state) {
return role;
}
+// Returns the size of this object.
- (NSSize)size {
return NSMakeSize(webAccessibility_.location.width,
webAccessibility_.location.height);
}
-- (id)accessibilityAttributeValue:(NSString *)attribute {
+// Returns the accessibility value for the given attribute. If the value isn't
+// supported this will return nil.
+- (id)accessibilityAttributeValue:(NSString*)attribute {
if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
return [self role];
- } else if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute]) {
return NSStringForWebAccessibilityAttribute(webAccessibility_.attributes,
WebAccessibility::ATTR_DESCRIPTION);
- } else if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
return [NSValue valueWithPoint:[delegate_ accessibilityPointInScreen:self]];
- } else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
return [NSValue valueWithSize:[self size]];
- } else if (
- [attribute isEqualToString:NSAccessibilityTopLevelUIElementAttribute] ||
+ }
+ if ([attribute isEqualToString:NSAccessibilityTopLevelUIElementAttribute] ||
[attribute isEqualToString:NSAccessibilityWindowAttribute]) {
return [delegate_ window];
- } else if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
return [self children];
- } else if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
if (parent_) {
return NSAccessibilityUnignoredAncestor(parent_);
}
- } else if ([attribute isEqualToString:NSAccessibilityTitleAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityTitleAttribute]) {
return base::SysUTF16ToNSString(webAccessibility_.name);
- } else if ([attribute isEqualToString:NSAccessibilityHelpAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityHelpAttribute]) {
return NSStringForWebAccessibilityAttribute(webAccessibility_.attributes,
WebAccessibility::ATTR_HELP);
- } else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
return base::SysUTF16ToNSString(webAccessibility_.value);
- } else if (
- [attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
return NSAccessibilityRoleDescription([self role], nil);
- } else if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
+ }
+ if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
NSNumber* ret = [NSNumber numberWithBool:
GetState(webAccessibility_, WebAccessibility::STATE_FOCUSED)];
return ret;
- } else if ([attribute isEqualToString:NSAccessibilityEnabledAttribute] ||
+ }
+ if ([attribute isEqualToString:NSAccessibilityEnabledAttribute] ||
[attribute isEqualToString:@"AXVisited"] ||
[attribute isEqualToString:@"AXLoaded"]) {
return [NSNumber numberWithBool:YES];
@@ -165,14 +188,21 @@ bool GetState(WebAccessibility accessibility, int state) {
return nil;
}
-- (NSArray *)accessibilityActionNames {
+// Returns an array of action names that this object will respond to.
+- (NSArray*)accessibilityActionNames {
return [NSArray arrayWithObjects:
NSAccessibilityPressAction, NSAccessibilityShowMenuAction, nil];
}
-- (NSArray *)accessibilityArrayAttributeValues:(NSString *)attribute
- index:(NSUInteger)index
- maxCount:(NSUInteger)maxCount {
+// Returns a sub-array of values for the given attribute value, starting at
+// index, with up to maxCount items. If the given index is out of bounds,
+// or there are no values for the given attribute, it will return nil.
+// This method is used for querying subsets of values, without having to
+// return a large set of data, such as elements with a large number of
+// children.
+- (NSArray*)accessibilityArrayAttributeValues:(NSString*)attribute
+ index:(NSUInteger)index
+ maxCount:(NSUInteger)maxCount {
NSArray* fullArray = [self accessibilityAttributeValue:attribute];
if (!fullArray)
return nil;
@@ -188,34 +218,39 @@ bool GetState(WebAccessibility accessibility, int state) {
return [fullArray subarrayWithRange:subRange];
}
-- (NSUInteger)accessibilityArrayAttributeCount:(NSString *)attribute {
+// Returns the count of the specified accessibility array attribute.
+- (NSUInteger)accessibilityArrayAttributeCount:(NSString*)attribute {
NSArray* fullArray = [self accessibilityAttributeValue:attribute];
return [fullArray count];
}
-- (NSArray *)accessibilityAttributeNames {
+// Returns the list of accessibility attributes that this object supports.
+- (NSArray*)accessibilityAttributeNames {
return [NSArray arrayWithObjects:
- NSAccessibilityRoleAttribute,
- NSAccessibilityRoleDescriptionAttribute,
NSAccessibilityChildrenAttribute,
+ NSAccessibilityDescriptionAttribute,
+ NSAccessibilityEnabledAttribute,
+ NSAccessibilityFocusedAttribute,
NSAccessibilityHelpAttribute,
NSAccessibilityParentAttribute,
NSAccessibilityPositionAttribute,
+ NSAccessibilityRoleAttribute,
+ NSAccessibilityRoleDescriptionAttribute,
NSAccessibilitySizeAttribute,
NSAccessibilityTitleAttribute,
- NSAccessibilityDescriptionAttribute,
+ NSAccessibilityTopLevelUIElementAttribute,
NSAccessibilityValueAttribute,
- NSAccessibilityFocusedAttribute,
- NSAccessibilityEnabledAttribute,
NSAccessibilityWindowAttribute,
- NSAccessibilityTopLevelUIElementAttribute,
nil];
}
+// Returns the deepest child that has user focus.
+// TODO(feldstein): This does not work yet.
- (id)accessibilityFocusedUIElement {
return self;
}
+// Returns the index of the child in this objects array of children.
- (NSUInteger)accessibilityIndexOfChild:(id)child {
NSUInteger index = 0;
for (BrowserAccessibility* childToCheck in [self children]) {
@@ -227,34 +262,43 @@ bool GetState(WebAccessibility accessibility, int state) {
return NSNotFound;
}
-- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
- if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
+// Returns whether or not the specified attribute can be set by the
+// accessibility API via |accessibilitySetValue:forAttribute:|.
+- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute {
+ if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
return GetState(webAccessibility_, WebAccessibility::STATE_FOCUSABLE);
- } else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
+ if ([attribute isEqualToString:NSAccessibilityValueAttribute])
return !GetState(webAccessibility_, WebAccessibility::STATE_READONLY);
- }
return NO;
}
+// Returns whether or not this object should be ignored in the accessibilty
+// tree.
- (BOOL)accessibilityIsIgnored {
return [self isIgnored];
}
-- (void)accessibilityPerformAction:(NSString *)action {
+// Performs the given accessibilty action on the webkit accessibility object
+// that backs this object.
+- (void)accessibilityPerformAction:(NSString*)action {
// TODO(feldstein): Support more actions.
[delegate_ doDefaultAction:webAccessibility_.id];
}
+// Returns the description of the given action.
- (NSString*)accessibilityActionDescription:(NSString*)action {
return NSAccessibilityActionDescription(action);
}
+// Sets an override value for a specific accessibility attribute.
+// This class does not support this.
- (BOOL)accessibilitySetOverrideValue:(id)value
- forAttribute:(NSString *)attribute {
+ forAttribute:(NSString*)attribute {
return NO;
}
-- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
+// Sets the value for an accessibility attribute via the accessibility API.
+- (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute {
if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
NSNumber* focusedNumber = value;
BOOL focused = [focusedNumber intValue];
@@ -263,6 +307,9 @@ bool GetState(WebAccessibility accessibility, int state) {
}
}
+// 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.
- (id)accessibilityHitTest:(NSPoint)point {
id hit = self;
for (id child in [self children]) {