Index: content/browser/accessibility/dump_accessibility_tree_helper_mac.mm |
diff --git a/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm b/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm |
index 08ec4da6886e1c093bad1c74578b2ff93f51d03b..f5ba910845f78ae51085f52665df460c890e43b1 100644 |
--- a/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm |
+++ b/content/browser/accessibility/dump_accessibility_tree_helper_mac.mm |
@@ -10,9 +10,12 @@ |
#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" |
namespace content { |
+ |
namespace { |
+ |
string16 Format(BrowserAccessibility* node, |
const char *prefix, |
SEL selector, |
@@ -26,8 +29,43 @@ string16 Format(BrowserAccessibility* node, |
NSString* tmp = [NSString stringWithFormat:format_str, value]; |
return UTF8ToUTF16([tmp cStringUsingEncoding:NSUTF8StringEncoding]); |
} |
+ |
+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(); |
+ 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 = node->ToBrowserAccessibilityCocoa(); |
+ NSPoint node_position = [[cocoa_node position] pointValue]; |
+ NSSize node_size = [[cocoa_node size] sizeValue]; |
+ |
+ 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]); |
} |
+string16 FormatSize(BrowserAccessibility* node) { |
+ BrowserAccessibilityCocoa* cocoa_node = node->ToBrowserAccessibilityCocoa(); |
+ NSSize node_size = [[cocoa_node size] sizeValue]; |
+ 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 DumpAccessibilityTreeHelper::Initialize() {} |
string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node, |
@@ -63,13 +101,14 @@ string16 DumpAccessibilityTreeHelper::ToString(BrowserAccessibility* node, |
Add(false, Format(node, "numberOfCharacters='", |
@selector(numberOfCharacters), "'")); |
Add(false, Format(node, "orientation='", @selector(orientation), "'")); |
- Add(false, Format(node, "position='", @selector(position), "'")); |
Add(false, Format(node, "required='", @selector(required), "'")); |
- Add(false, Format(node, "size='", @selector(size), "'")); |
Add(false, Format(node, "url='", @selector(url), "'")); |
Add(false, Format(node, "visibleCharacterRange='", |
@selector(visibleCharacterRange), "'")); |
Add(false, Format(node, "visited='", @selector(visited), "'")); |
+ Add(false, FormatPosition(node)); |
+ Add(false, FormatSize(node)); |
+ |
return ASCIIToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n"); |
} |