diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 12:43:35 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 12:43:35 +0000 |
commit | 18f1a3ca657aad67fb2ce987f21451e101fd08c1 (patch) | |
tree | c9bfcebc6adc3b1998f8810d4e94980798079426 | |
parent | b68c07b987b2b4058ca8b800a7d40c44671a2149 (diff) | |
download | chromium_src-18f1a3ca657aad67fb2ce987f21451e101fd08c1.zip chromium_src-18f1a3ca657aad67fb2ce987f21451e101fd08c1.tar.gz chromium_src-18f1a3ca657aad67fb2ce987f21451e101fd08c1.tar.bz2 |
Return AXURL from NSAccessibilityURLAttribute.
We have to be careful, VoiceOver crashes if we return an empty string
as a url, so now we only expose the attribute if there is a valid url.
BUG=83173
Review URL: https://codereview.chromium.org/239503003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264181 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/browser/accessibility/browser_accessibility_cocoa.h | 2 | ||||
-rw-r--r-- | content/browser/accessibility/browser_accessibility_cocoa.mm | 17 |
2 files changed, 15 insertions, 4 deletions
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.h b/content/browser/accessibility/browser_accessibility_cocoa.h index 11b44ac..479c362 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.h +++ b/content/browser/accessibility/browser_accessibility_cocoa.h @@ -97,7 +97,7 @@ @property(nonatomic, readonly) NSArray* tabs; @property(nonatomic, readonly) NSString* title; @property(nonatomic, readonly) id titleUIElement; -@property(nonatomic, readonly) NSString* url; +@property(nonatomic, readonly) NSURL* url; @property(nonatomic, readonly) NSString* value; @property(nonatomic, readonly) NSString* valueDescription; @property(nonatomic, readonly) NSValue* visibleCharacterRange; diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 7a3a44b..f16db1a 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm @@ -888,12 +888,17 @@ NSDictionary* attributeToMethodNameMap = nil; return nil; } -- (NSString*)url { +- (NSURL*)url { StringAttribute urlAttribute = [[self role] isEqualToString:@"AXWebArea"] ? ui::AX_ATTR_DOC_URL : ui::AX_ATTR_URL; - return NSStringForStringAttribute(browserAccessibility_, urlAttribute); + + std::string urlStr = browserAccessibility_->GetStringAttribute(urlAttribute); + if (urlStr.empty()) + return nil; + + return [NSURL URLWithString:(base::SysUTF8ToNSString(urlStr))]; } - (id)value { @@ -1287,7 +1292,6 @@ NSDictionary* attributeToMethodNameMap = nil; NSAccessibilityTopLevelUIElementAttribute, NSAccessibilityValueAttribute, NSAccessibilityWindowAttribute, - NSAccessibilityURLAttribute, @"AXAccessKey", @"AXInvalid", @"AXRequired", @@ -1374,6 +1378,13 @@ NSDictionary* attributeToMethodNameMap = nil; } } + // Add the url attribute only if it has a valid url. + if ([self url] != nil) { + [ret addObjectsFromArray:[NSArray arrayWithObjects: + NSAccessibilityURLAttribute, + nil]]; + } + // Live regions. if (browserAccessibility_->HasStringAttribute( ui::AX_ATTR_LIVE_STATUS)) { |