Chromium Code Reviews| 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 9d49767d2667268e79c2e7ffda74590e36935bd5..8bd608eb63965f0af2f60824478b0a1859ed5da7 100644 |
| --- a/content/browser/accessibility/browser_accessibility_cocoa.mm |
| +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm |
| @@ -33,15 +33,12 @@ namespace { |
| // Returns an autoreleased copy of the AccessibilityNodeData's attribute. |
| NSString* NSStringForStringAttribute( |
| - const std::map<StringAttribute, string16>& attributes, |
| + BrowserAccessibility* browserAccessibility, |
| StringAttribute attribute) { |
| - std::map<StringAttribute, string16>::const_iterator iter = |
| - attributes.find(attribute); |
| - NSString* returnValue = @""; |
| - if (iter != attributes.end()) { |
| - returnValue = base::SysUTF16ToNSString(iter->second); |
| - } |
| - return returnValue; |
| + std::string value; |
| + if (!browserAccessibility->GetStringAttribute(attribute, &value)) |
| + return @""; |
| + return base::SysUTF8ToNSString(value); |
| } |
| struct MapEntry { |
| @@ -353,8 +350,7 @@ NSDictionary* attributeToMethodNameMap = nil; |
| - (NSString*)accessKey { |
| return NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - AccessibilityNodeData::ATTR_ACCESS_KEY); |
| + browserAccessibility_, AccessibilityNodeData::ATTR_ACCESS_KEY); |
| } |
| - (NSNumber*)ariaAtomic { |
| @@ -373,14 +369,12 @@ NSDictionary* attributeToMethodNameMap = nil; |
| - (NSString*)ariaLive { |
| return NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - AccessibilityNodeData::ATTR_LIVE_STATUS); |
| + browserAccessibility_, AccessibilityNodeData::ATTR_LIVE_STATUS); |
| } |
| - (NSString*)ariaRelevant { |
| return NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - AccessibilityNodeData::ATTR_LIVE_RELEVANT); |
| + browserAccessibility_, AccessibilityNodeData::ATTR_LIVE_RELEVANT); |
| } |
| // Returns an array of BrowserAccessibilityCocoa objects, representing the |
| @@ -401,10 +395,11 @@ NSDictionary* attributeToMethodNameMap = nil; |
| } |
| // Also, add indirect children (if any). |
| - for (uint32 i = 0; |
| - i < browserAccessibility_->indirect_child_ids().size(); |
| - ++i) { |
| - int32 child_id = browserAccessibility_->indirect_child_ids()[i]; |
| + const std::vector<int32>& indirectChildIds = |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); |
| + for (uint32 i = 0; i < indirectChildIds.size(); ++i) { |
| + int32 child_id = indirectChildIds[i]; |
| BrowserAccessibility* child = |
| browserAccessibility_->manager()->GetFromRendererID(child_id); |
| @@ -437,7 +432,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| const std::vector<int32>& uniqueCellIds = |
| - browserAccessibility_->unique_cell_ids(); |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| int id = uniqueCellIds[i]; |
| BrowserAccessibility* cell = |
| @@ -473,35 +469,34 @@ NSDictionary* attributeToMethodNameMap = nil; |
| } |
| - (NSString*)description { |
| - const std::map<StringAttribute, string16>& attributes = |
| - browserAccessibility_->string_attributes(); |
| - std::map<StringAttribute, string16>::const_iterator iter = |
| - attributes.find(AccessibilityNodeData::ATTR_DESCRIPTION); |
| - if (iter != attributes.end()) |
| - return base::SysUTF16ToNSString(iter->second); |
| + std::string value; |
|
aboxhall
2013/07/31 18:34:47
I'm finding the name of this variable a little con
|
| + if (browserAccessibility_->GetStringAttribute( |
| + AccessibilityNodeData::ATTR_DESCRIPTION, &value)) { |
| + return base::SysUTF8ToNSString(value); |
| + } |
| // If the role is anything other than an image, or if there's |
| // a title or title UI element, just return an empty string. |
| if (![[self role] isEqualToString:NSAccessibilityImageRole]) |
| return @""; |
| - if (!browserAccessibility_->name().empty()) |
| + if (browserAccessibility_->GetStringAttribute( |
|
aboxhall
2013/07/31 18:34:47
Should this be negated, or the value of value (arg
dmazzoni
2013/08/06 17:36:34
I replaced this with HasStringAttribute to be more
|
| + AccessibilityNodeData::ATTR_NAME, &value)) { |
| return @""; |
| + } |
| if ([self titleUIElement]) |
| return @""; |
| // The remaining case is an image where there's no other title. |
| // Return the base part of the filename as the description. |
| - iter = attributes.find(AccessibilityNodeData::ATTR_URL); |
| - if (iter != attributes.end()) { |
| - string16 filename = iter->second; |
| + if (browserAccessibility_->GetStringAttribute( |
| + AccessibilityNodeData::ATTR_URL, &value)) { |
| // Given a url like http://foo.com/bar/baz.png, just return the |
| // base name, e.g., "baz.png". |
| - size_t leftIndex = filename.size(); |
| - while (leftIndex > 0 && filename[leftIndex - 1] != '/') |
| + size_t leftIndex = value.size(); |
|
aboxhall
2013/07/31 18:34:47
I realise this is effectively unchanged in this ch
dmazzoni
2013/08/06 17:36:34
Done.
|
| + while (leftIndex > 0 && value[leftIndex - 1] != '/') |
| leftIndex--; |
| - string16 basename = filename.substr(leftIndex); |
| - |
| - return base::SysUTF16ToNSString(basename); |
| + std::string basename = value.substr(leftIndex); |
| + return base::SysUTF8ToNSString(basename); |
| } |
| return @""; |
| @@ -581,8 +576,7 @@ NSDictionary* attributeToMethodNameMap = nil; |
| - (NSString*)help { |
| return NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - AccessibilityNodeData::ATTR_HELP); |
| + browserAccessibility_, AccessibilityNodeData::ATTR_HELP); |
| } |
| - (NSNumber*)index { |
| @@ -728,19 +722,14 @@ NSDictionary* attributeToMethodNameMap = nil; |
| if ([role isEqualToString:NSAccessibilityGroupRole] || |
| [role isEqualToString:NSAccessibilityRadioButtonRole]) { |
| - const std::vector<std::pair<string16, string16> >& htmlAttributes = |
| - browserAccessibility_->html_attributes(); |
| + std::string role; |
| + browserAccessibility_->GetHtmlAttribute("role", &role); |
| AccessibilityNodeData::Role browserAccessibilityRole = [self internalRole]; |
| if ((browserAccessibilityRole != AccessibilityNodeData::ROLE_GROUP && |
| browserAccessibilityRole != AccessibilityNodeData::ROLE_LIST_ITEM) || |
| browserAccessibilityRole == AccessibilityNodeData::ROLE_TAB) { |
| - for (size_t i = 0; i < htmlAttributes.size(); ++i) { |
| - const std::pair<string16, string16>& htmlAttribute = htmlAttributes[i]; |
| - if (htmlAttribute.first == ASCIIToUTF16("role")) { |
| - // TODO(dtseng): This is not localized; see crbug/84814. |
| - return base::SysUTF16ToNSString(htmlAttribute.second); |
| - } |
| - } |
| + // TODO(dtseng): This is not localized; see crbug/84814. |
| + return base::SysUTF8ToNSString(role); |
| } |
| } |
| @@ -767,7 +756,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| const std::vector<int32>& uniqueCellIds = |
| - browserAccessibility_->unique_cell_ids(); |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| int id = uniqueCellIds[i]; |
| BrowserAccessibility* cell = |
| @@ -804,7 +794,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| } |
| } else if ([self internalRole] == AccessibilityNodeData::ROLE_COLUMN) { |
| const std::vector<int32>& indirectChildIds = |
| - browserAccessibility_->indirect_child_ids(); |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_INDIRECT_CHILD_IDS); |
| for (uint32 i = 0; i < indirectChildIds.size(); ++i) { |
| int id = indirectChildIds[i]; |
| BrowserAccessibility* rowElement = |
| @@ -832,8 +823,7 @@ NSDictionary* attributeToMethodNameMap = nil; |
| } |
| NSString* htmlTag = NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - AccessibilityNodeData::ATTR_HTML_TAG); |
| + browserAccessibility_, AccessibilityNodeData::ATTR_HTML_TAG); |
| if (browserAccessibilityRole == AccessibilityNodeData::ROLE_LIST) { |
| if ([htmlTag isEqualToString:@"ul"] || |
| @@ -864,7 +854,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| } |
| - (NSString*)title { |
| - return base::SysUTF16ToNSString(browserAccessibility_->name()); |
| + return NSStringForStringAttribute( |
| + browserAccessibility_, AccessibilityNodeData::ATTR_NAME); |
| } |
| - (id)titleUIElement { |
| @@ -884,9 +875,7 @@ NSDictionary* attributeToMethodNameMap = nil; |
| [[self role] isEqualToString:@"AXWebArea"] ? |
| AccessibilityNodeData::ATTR_DOC_URL : |
| AccessibilityNodeData::ATTR_URL; |
| - return NSStringForStringAttribute( |
| - browserAccessibility_->string_attributes(), |
| - urlAttribute); |
| + return NSStringForStringAttribute(browserAccessibility_, urlAttribute); |
| } |
| - (id)value { |
| @@ -940,14 +929,13 @@ NSDictionary* attributeToMethodNameMap = nil; |
| r / 255., g / 255., b / 255.]; |
| } |
| - return base::SysUTF16ToNSString(browserAccessibility_->value()); |
| + return NSStringForStringAttribute( |
| + browserAccessibility_, AccessibilityNodeData::ATTR_VALUE); |
| } |
| - (NSString*)valueDescription { |
| - if (!browserAccessibility_->value().empty()) |
| - return base::SysUTF16ToNSString(browserAccessibility_->value()); |
| - else |
| - return nil; |
| + return NSStringForStringAttribute( |
| + browserAccessibility_, AccessibilityNodeData::ATTR_VALUE); |
| } |
| - (NSValue*)visibleCharacterRange { |
| @@ -958,7 +946,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| - (NSArray*)visibleCells { |
| NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; |
| const std::vector<int32>& uniqueCellIds = |
| - browserAccessibility_->unique_cell_ids(); |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_UNIQUE_CELL_IDS); |
| for (size_t i = 0; i < uniqueCellIds.size(); ++i) { |
| int id = uniqueCellIds[i]; |
| BrowserAccessibility* cell = |
| @@ -1013,7 +1002,8 @@ NSDictionary* attributeToMethodNameMap = nil; |
| if ([attribute isEqualToString: |
| NSAccessibilityInsertionPointLineNumberAttribute]) { |
| const std::vector<int32>& line_breaks = |
| - browserAccessibility_->line_breaks(); |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_LINE_BREAKS); |
| for (int i = 0; i < static_cast<int>(line_breaks.size()); ++i) { |
| if (line_breaks[i] > selStart) |
| return [NSNumber numberWithInt:i]; |
| @@ -1021,8 +1011,10 @@ NSDictionary* attributeToMethodNameMap = nil; |
| return [NSNumber numberWithInt:static_cast<int>(line_breaks.size())]; |
| } |
| if ([attribute isEqualToString:NSAccessibilitySelectedTextAttribute]) { |
| - return base::SysUTF16ToNSString(browserAccessibility_->value().substr( |
| - selStart, selLength)); |
| + std::string value; |
| + browserAccessibility_->GetStringAttribute( |
| + AccessibilityNodeData::ATTR_VALUE, &value); |
| + return base::SysUTF8ToNSString(value.substr(selStart, selLength)); |
| } |
| if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) { |
| return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; |
| @@ -1038,14 +1030,18 @@ NSDictionary* attributeToMethodNameMap = nil; |
| if (!browserAccessibility_) |
| return nil; |
| - const std::vector<int32>& line_breaks = browserAccessibility_->line_breaks(); |
| + const std::vector<int32>& line_breaks = |
| + browserAccessibility_->GetIntListAttribute( |
| + AccessibilityNodeData::ATTR_LINE_BREAKS); |
| int len = static_cast<int>(browserAccessibility_->value().size()); |
| if ([attribute isEqualToString: |
| NSAccessibilityStringForRangeParameterizedAttribute]) { |
| NSRange range = [(NSValue*)parameter rangeValue]; |
| - return base::SysUTF16ToNSString( |
| - browserAccessibility_->value().substr(range.location, range.length)); |
| + std::string value; |
| + browserAccessibility_->GetStringAttribute( |
| + AccessibilityNodeData::ATTR_VALUE, &value); |
| + return base::SysUTF8ToNSString(value.substr(range.location, range.length)); |
| } |
| if ([attribute isEqualToString: |