Chromium Code Reviews| Index: content/browser/accessibility/accessibility_tree_formatter.cc |
| diff --git a/content/browser/accessibility/accessibility_tree_formatter.cc b/content/browser/accessibility/accessibility_tree_formatter.cc |
| index f8b4cc735230a139c6e660a862f3653d8181a2cc..781498833c2a649322ca8a000ce30f60e84df3ae 100644 |
| --- a/content/browser/accessibility/accessibility_tree_formatter.cc |
| +++ b/content/browser/accessibility/accessibility_tree_formatter.cc |
| @@ -4,6 +4,7 @@ |
| #include "content/browser/accessibility/accessibility_tree_formatter.h" |
| +#include "base/json/json_writer.h" |
| #include "base/logging.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/string_util.h" |
| @@ -21,8 +22,8 @@ const char* kSkipString = "@NO_DUMP"; |
| } |
| AccessibilityTreeFormatter::AccessibilityTreeFormatter( |
| - BrowserAccessibility* node) |
| - : node_(node) { |
| + BrowserAccessibility* root) |
| + : root_(root) { |
| Initialize(); |
| } |
| @@ -45,26 +46,44 @@ AccessibilityTreeFormatter* AccessibilityTreeFormatter::Create( |
| AccessibilityTreeFormatter::~AccessibilityTreeFormatter() { |
| } |
| +void AccessibilityTreeFormatter::BuildAccessibilityTree( |
| + DictionaryValue* dict) { |
| + RecursiveBuildAccessibilityTree(root_, dict); |
| +} |
| + |
| void AccessibilityTreeFormatter::FormatAccessibilityTree( |
| string16* contents) { |
| - RecursiveFormatAccessibilityTree(node_, contents, 0); |
| + DictionaryValue dict; |
| + BuildAccessibilityTree(&dict); |
| + RecursiveFormatAccessibilityTree(&dict, contents); |
| } |
| -void AccessibilityTreeFormatter::RecursiveFormatAccessibilityTree( |
| - BrowserAccessibility* node, string16* contents, int indent) { |
| - scoped_array<char> prefix(new char[indent + 1]); |
| - for (int i = 0; i < indent; ++i) |
| - prefix[i] = ' '; |
| - prefix[indent] = '\0'; |
| +void AccessibilityTreeFormatter::RecursiveBuildAccessibilityTree( |
| + BrowserAccessibility* node, DictionaryValue* dict) { |
| + AddProperties(node, dict); |
| + ListValue* children = new ListValue; |
| + dict->Set("children", children); |
|
dmazzoni
2013/04/08 05:46:35
Put dict field names in a constant at the top of t
aboxhall
2013/04/10 03:09:34
Done (there was actually only this one).
|
| + for (size_t i = 0; i < node->children().size(); ++i) { |
| + BrowserAccessibility* child_node = node->children()[i]; |
| + DictionaryValue* child_dict = new DictionaryValue; |
| + children->Append(child_dict); |
| + RecursiveBuildAccessibilityTree(child_node, child_dict); |
| + } |
| +} |
| - string16 line = ToString(node, prefix.get()); |
| +void AccessibilityTreeFormatter::RecursiveFormatAccessibilityTree( |
| + DictionaryValue* dict, string16* contents, int depth) { |
| + string16 line = ToString(dict, string16(depth * kIndentSpaces, ' ')); |
|
dmazzoni
2013/04/08 05:46:35
Thanks - I didn't realize you could construct a st
aboxhall
2013/04/10 03:09:34
Hehe - I was thinking "surely there's a more effic
|
| if (line.find(ASCIIToUTF16(kSkipString)) != string16::npos) |
| return; |
| *contents += line; |
| - for (size_t i = 0; i < node->children().size(); ++i) { |
| - RecursiveFormatAccessibilityTree(node->children()[i], contents, |
| - indent + kIndentSpaces); |
| + ListValue* children; |
| + dict->GetList("children", &children); |
|
dmazzoni
2013/04/08 05:46:35
Make sure this uses the constant!
aboxhall
2013/04/10 03:09:34
Done.
aboxhall
2013/04/10 03:09:34
Done.
|
| + DictionaryValue* child_dict; |
| + for (size_t i = 0; i < children->GetSize(); i++) { |
| + children->GetDictionary(i, &child_dict); |
| + RecursiveFormatAccessibilityTree(child_dict, contents, depth + 1); |
| } |
| } |
| @@ -127,23 +146,15 @@ bool AccessibilityTreeFormatter::MatchesFilters( |
| return allow; |
| } |
| -void AccessibilityTreeFormatter::StartLine() { |
| - line_.clear(); |
| -} |
| - |
| -void AccessibilityTreeFormatter::Add( |
| - bool include_by_default, const string16& attr) { |
| +void AccessibilityTreeFormatter::WriteAttribute( |
| + bool include_by_default, const string16& attr, string16* line) { |
| if (attr.empty()) |
| return; |
| if (!MatchesFilters(attr, include_by_default)) |
| return; |
| - if (!line_.empty()) |
| - line_ += ASCIIToUTF16(" "); |
| - line_ += attr; |
| -} |
| - |
| -string16 AccessibilityTreeFormatter::FinishLine() { |
| - return line_; |
| + if (!line->empty()) |
| + *line += ASCIIToUTF16(" "); |
| + *line += attr; |
| } |
| } // namespace content |