Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1771)

Unified Diff: content/browser/accessibility/browser_accessibility_cocoa.mm

Issue 21269002: Make AccessibilityNodeData more compact. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix windows compile Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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:

Powered by Google App Engine
This is Rietveld 408576698