Index: trunk/src/content/browser/accessibility/accessibility_tree_formatter_mac.mm |
=================================================================== |
--- trunk/src/content/browser/accessibility/accessibility_tree_formatter_mac.mm (revision 194894) |
+++ trunk/src/content/browser/accessibility/accessibility_tree_formatter_mac.mm (working copy) |
@@ -7,173 +7,129 @@ |
#import <Cocoa/Cocoa.h> |
#include "base/files/file_path.h" |
-#include "base/stringprintf.h" |
-#include "base/strings/sys_string_conversions.h" |
#include "base/utf_string_conversions.h" |
#include "content/browser/accessibility/browser_accessibility_cocoa.h" |
#include "content/browser/accessibility/browser_accessibility_mac.h" |
#include "content/browser/accessibility/browser_accessibility_manager.h" |
-using base::StringPrintf; |
-using base::SysNSStringToUTF8; |
-using base::SysNSStringToUTF16; |
-using std::string; |
- |
namespace content { |
namespace { |
-NSArray* ALL_ATTRIBUTES = [NSArray arrayWithObjects: |
- NSAccessibilityRoleDescriptionAttribute, |
- NSAccessibilityTitleAttribute, |
- NSAccessibilityValueAttribute, |
- NSAccessibilityMinValueAttribute, |
- NSAccessibilityMaxValueAttribute, |
- NSAccessibilityValueDescriptionAttribute, |
- NSAccessibilityDescriptionAttribute, |
- NSAccessibilityHelpAttribute, |
- @"AXInvalid", |
- NSAccessibilityDisclosingAttribute, |
- NSAccessibilityDisclosureLevelAttribute, |
- @"AXAccessKey", |
- @"AXARIAAtomic", |
- @"AXARIABusy", |
- @"AXARIALive", |
- @"AXARIARelevant", |
- NSAccessibilityEnabledAttribute, |
- NSAccessibilityFocusedAttribute, |
- @"AXLoaded", |
- @"AXLoadingProcess", |
- NSAccessibilityNumberOfCharactersAttribute, |
- NSAccessibilityOrientationAttribute, |
- @"AXRequired", |
- NSAccessibilityURLAttribute, |
- NSAccessibilityVisibleCharacterRangeAttribute, |
- @"AXVisited", |
- nil]; |
- |
-const char* kPositionDictAttr = "position"; |
-const char* kXCoordDictAttr = "x"; |
-const char* kYCoordDictAttr = "y"; |
-const char* kSizeDictAttr = "size"; |
-const char* kWidthDictAttr = "width"; |
-const char* kHeightDictAttr = "height"; |
+string16 Format(const char *prefix, |
+ id value, |
+ const char *suffix) { |
+ if (value == nil) |
+ return UTF8ToUTF16(""); |
+ NSString* format_str = |
+ [NSString stringWithFormat:@"%s%%@%s", prefix, suffix]; |
+ NSString* tmp = [NSString stringWithFormat:format_str, value]; |
+ return UTF8ToUTF16([tmp cStringUsingEncoding:NSUTF8StringEncoding]); |
+} |
-scoped_ptr<DictionaryValue> PopulatePosition(const BrowserAccessibility& node) { |
- scoped_ptr<DictionaryValue> position(new DictionaryValue); |
+string16 FormatPosition(BrowserAccessibility* node) { |
// The NSAccessibility position of an object is in global coordinates and |
// based on the lower-left corner of the object. To make this easier and less |
// confusing, convert it to local window coordinates using the top-left |
// corner when dumping the position. |
- BrowserAccessibility* root = node.manager()->GetRoot(); |
+ BrowserAccessibility* root = node->manager()->GetRoot(); |
BrowserAccessibilityCocoa* cocoa_root = root->ToBrowserAccessibilityCocoa(); |
NSPoint root_position = [[cocoa_root position] pointValue]; |
NSSize root_size = [[cocoa_root size] sizeValue]; |
int root_top = -static_cast<int>(root_position.y + root_size.height); |
int root_left = static_cast<int>(root_position.x); |
- BrowserAccessibilityCocoa* cocoa_node = |
- const_cast<BrowserAccessibility*>(&node)->ToBrowserAccessibilityCocoa(); |
+ BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa(); |
NSPoint node_position = [[cocoa_node position] pointValue]; |
NSSize node_size = [[cocoa_node size] sizeValue]; |
- position->SetInteger(kXCoordDictAttr, |
- static_cast<int>(node_position.x - root_left)); |
- position->SetInteger(kYCoordDictAttr, |
- static_cast<int>(-node_position.y - node_size.height - root_top)); |
- return position.Pass(); |
+ NSString* position_str = |
+ [NSString stringWithFormat:@"position=(%d, %d)", |
+ static_cast<int>(node_position.x - root_left), |
+ static_cast<int>( |
+ -node_position.y - node_size.height - root_top)]; |
+ return UTF8ToUTF16([position_str cStringUsingEncoding:NSUTF8StringEncoding]); |
} |
-scoped_ptr<DictionaryValue> |
-PopulateSize(const BrowserAccessibilityCocoa* cocoa_node) { |
- scoped_ptr<DictionaryValue> size(new DictionaryValue); |
+string16 FormatSize(BrowserAccessibility* node) { |
+ BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa(); |
NSSize node_size = [[cocoa_node size] sizeValue]; |
- size->SetInteger(kHeightDictAttr, static_cast<int>(node_size.height)); |
- size->SetInteger(kWidthDictAttr, static_cast<int>(node_size.width)); |
- return size.Pass(); |
+ NSString* size_str = |
+ [NSString stringWithFormat:@"size=(%d, %d)", |
+ static_cast<int>(node_size.width), |
+ static_cast<int>(node_size.height)]; |
+ return UTF8ToUTF16([size_str cStringUsingEncoding:NSUTF8StringEncoding]); |
} |
} // namespace |
void AccessibilityTreeFormatter::Initialize() {} |
-void AccessibilityTreeFormatter::AddProperties(const BrowserAccessibility& node, |
- DictionaryValue* dict) { |
- BrowserAccessibilityCocoa* cocoa_node = |
- const_cast<BrowserAccessibility*>(&node)->ToBrowserAccessibilityCocoa(); |
- NSArray* supportedAttributes = [cocoa_node accessibilityAttributeNames]; |
+string16 AccessibilityTreeFormatter::ToString(BrowserAccessibility* node, |
+ char* prefix) { |
+ StartLine(); |
+ NSArray* requestedAttributes = [NSArray arrayWithObjects: |
+ NSAccessibilityRoleDescriptionAttribute, |
+ NSAccessibilityTitleAttribute, |
+ NSAccessibilityValueAttribute, |
+ NSAccessibilityMinValueAttribute, |
+ NSAccessibilityMaxValueAttribute, |
+ NSAccessibilityValueDescriptionAttribute, |
+ NSAccessibilityDescriptionAttribute, |
+ NSAccessibilityHelpAttribute, |
+ @"AXInvalid", |
+ NSAccessibilityDisclosingAttribute, |
+ NSAccessibilityDisclosureLevelAttribute, |
+ @"AXAccessKey", |
+ @"AXARIAAtomic", |
+ @"AXARIABusy", |
+ @"AXARIALive", |
+ @"AXARIARelevant", |
+ NSAccessibilityEnabledAttribute, |
+ NSAccessibilityFocusedAttribute, |
+ @"AXLoaded", |
+ @"AXLoadingProcess", |
+ NSAccessibilityNumberOfCharactersAttribute, |
+ NSAccessibilityOrientationAttribute, |
+ @"AXRequired", |
+ NSAccessibilityURLAttribute, |
+ NSAccessibilityVisibleCharacterRangeAttribute, |
+ @"AXVisited", |
+ nil]; |
+ |
+ NSArray* defaultAttributes = [NSArray arrayWithObjects: |
+ NSAccessibilityTitleAttribute, |
+ NSAccessibilityValueAttribute, |
+ nil]; |
- string role = SysNSStringToUTF8( |
- [cocoa_node accessibilityAttributeValue:NSAccessibilityRoleAttribute]); |
- dict->SetString(SysNSStringToUTF8(NSAccessibilityRoleAttribute), role); |
- |
- NSString* subrole = |
- [cocoa_node accessibilityAttributeValue:NSAccessibilitySubroleAttribute]; |
- if (subrole != nil) { |
- dict->SetString(SysNSStringToUTF8(NSAccessibilitySubroleAttribute), |
- SysNSStringToUTF8(subrole)); |
- } |
+ BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa(); |
+ NSArray* supportedAttributes = [cocoa_node accessibilityAttributeNames]; |
- for (NSString* requestedAttribute in ALL_ATTRIBUTES) { |
+ Add(true, |
+ Format("", [cocoa_node accessibilityAttributeValue: |
+ NSAccessibilityRoleAttribute], |
+ "")); |
+ Add(false, |
+ Format("subrole=", [cocoa_node accessibilityAttributeValue: |
+ NSAccessibilitySubroleAttribute], |
+ "")); |
+ for (NSString* requestedAttribute in requestedAttributes) { |
if (![supportedAttributes containsObject:requestedAttribute]) { |
continue; |
} |
- id value = [cocoa_node accessibilityAttributeValue:requestedAttribute]; |
- if (value != nil) { |
- dict->SetString( |
- SysNSStringToUTF8(requestedAttribute), |
- SysNSStringToUTF16([NSString stringWithFormat:@"%@", value])); |
- } |
- } |
- dict->Set(kPositionDictAttr, PopulatePosition(node).release()); |
- dict->Set(kSizeDictAttr, PopulateSize(cocoa_node).release()); |
-} |
- |
-string16 AccessibilityTreeFormatter::ToString(const DictionaryValue& dict, |
- const string16& indent) { |
- string16 line; |
- NSArray* defaultAttributes = |
- [NSArray arrayWithObjects:NSAccessibilityTitleAttribute, |
- NSAccessibilityValueAttribute, |
- nil]; |
- string s_value; |
- dict.GetString(SysNSStringToUTF8(NSAccessibilityRoleAttribute), &s_value); |
- WriteAttribute(true, UTF8ToUTF16(s_value), &line); |
- |
- string subroleAttribute = SysNSStringToUTF8(NSAccessibilitySubroleAttribute); |
- if (dict.GetString(subroleAttribute, &s_value)) { |
- WriteAttribute(false, |
- StringPrintf("%s=%s", |
- subroleAttribute.c_str(), s_value.c_str()), |
- &line); |
- } |
- |
- for (NSString* requestedAttribute in ALL_ATTRIBUTES) { |
- string requestedAttributeUTF8 = SysNSStringToUTF8(requestedAttribute); |
- if (!dict.GetString(requestedAttributeUTF8, &s_value)) |
- continue; |
- WriteAttribute([defaultAttributes containsObject:requestedAttribute], |
- StringPrintf("%s='%s'", |
- requestedAttributeUTF8.c_str(), |
- s_value.c_str()), |
- &line); |
- } |
- const DictionaryValue* d_value = NULL; |
- if (dict.GetDictionary(kPositionDictAttr, &d_value)) { |
- WriteAttribute(false, |
- FormatCoordinates(kPositionDictAttr, |
- kXCoordDictAttr, kYCoordDictAttr, |
- *d_value), |
- &line); |
- } |
- if (dict.GetDictionary(kSizeDictAttr, &d_value)) { |
- WriteAttribute(false, |
- FormatCoordinates(kSizeDictAttr, |
- kWidthDictAttr, kHeightDictAttr, *d_value), |
- &line); |
+ NSString* methodName = |
+ [cocoa_node methodNameForAttribute:requestedAttribute]; |
+ Add([defaultAttributes containsObject:requestedAttribute], |
+ Format([[NSString stringWithFormat:@"%@='", methodName] |
+ cStringUsingEncoding:NSUTF8StringEncoding], |
+ [cocoa_node accessibilityAttributeValue: |
+ requestedAttribute], |
+ "'")); |
} |
+ Add(false, FormatPosition(node)); |
+ Add(false, FormatSize(node)); |
- return indent + line + ASCIIToUTF16("\n"); |
+ return ASCIIToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n"); |
} |
// static |
@@ -189,17 +145,17 @@ |
} |
// static |
-const string AccessibilityTreeFormatter::GetAllowEmptyString() { |
+const std::string AccessibilityTreeFormatter::GetAllowEmptyString() { |
return "@MAC-ALLOW-EMPTY:"; |
} |
// static |
-const string AccessibilityTreeFormatter::GetAllowString() { |
+const std::string AccessibilityTreeFormatter::GetAllowString() { |
return "@MAC-ALLOW:"; |
} |
// static |
-const string AccessibilityTreeFormatter::GetDenyString() { |
+const std::string AccessibilityTreeFormatter::GetDenyString() { |
return "@MAC-DENY:"; |
} |