| Index: content/browser/accessibility/accessibility_tree_formatter_blink.cc
|
| diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
|
| index 00d9a0693847085b85d48198cbd752c625420ad1..a028cff57caf4677229a7e4cad06df6037a355e3 100644
|
| --- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc
|
| +++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
|
| +#include "content/browser/accessibility/browser_accessibility_manager.h"
|
| #include "ui/gfx/geometry/rect_conversions.h"
|
| #include "ui/gfx/transform.h"
|
|
|
| @@ -79,8 +80,20 @@ void AccessibilityTreeFormatterBlink::AddProperties(
|
| attr_index <= ui::AX_INT_ATTRIBUTE_LAST;
|
| ++attr_index) {
|
| auto attr = static_cast<ui::AXIntAttribute>(attr_index);
|
| - if (node.HasIntAttribute(attr))
|
| - dict->SetInteger(ui::ToString(attr), node.GetIntAttribute(attr));
|
| + if (node.HasIntAttribute(attr)) {
|
| + int value = node.GetIntAttribute(attr);
|
| + if (ui::IsNodeIdIntAttribute(attr)) {
|
| + BrowserAccessibility* target = node.manager()->GetFromID(value);
|
| + if (target) {
|
| + dict->SetString(ui::ToString(attr),
|
| + ui::ToString(target->GetData().role));
|
| + } else {
|
| + dict->SetString(ui::ToString(attr), "null");
|
| + }
|
| + } else {
|
| + dict->SetInteger(ui::ToString(attr), value);
|
| + }
|
| + }
|
| }
|
|
|
| for (int attr_index = ui::AX_FLOAT_ATTRIBUTE_NONE;
|
| @@ -107,8 +120,17 @@ void AccessibilityTreeFormatterBlink::AddProperties(
|
| std::vector<int32_t> values;
|
| node.GetIntListAttribute(attr, &values);
|
| base::ListValue* value_list = new base::ListValue;
|
| - for (size_t i = 0; i < values.size(); ++i)
|
| - value_list->AppendInteger(values[i]);
|
| + for (size_t i = 0; i < values.size(); ++i) {
|
| + if (ui::IsNodeIdIntListAttribute(attr)) {
|
| + BrowserAccessibility* target = node.manager()->GetFromID(values[i]);
|
| + if (target)
|
| + value_list->AppendString(ui::ToString(target->GetData().role));
|
| + else
|
| + value_list->AppendString("null");
|
| + } else {
|
| + value_list->AppendInteger(values[i]);
|
| + }
|
| + }
|
| dict->Set(ui::ToString(attr), value_list);
|
| }
|
| }
|
| @@ -178,15 +200,27 @@ base::string16 AccessibilityTreeFormatterBlink::ToString(
|
| attr_index <= ui::AX_INT_ATTRIBUTE_LAST;
|
| ++attr_index) {
|
| auto attr = static_cast<ui::AXIntAttribute>(attr_index);
|
| - int int_value;
|
| - if (!dict.GetInteger(ui::ToString(attr), &int_value))
|
| - continue;
|
| - WriteAttribute(false,
|
| - base::StringPrintf(
|
| - "%s=%d",
|
| - ui::ToString(attr).c_str(),
|
| - int_value),
|
| - &line);
|
| + if (ui::IsNodeIdIntAttribute(attr)) {
|
| + std::string string_value;
|
| + if (!dict.GetString(ui::ToString(attr), &string_value))
|
| + continue;
|
| + WriteAttribute(false,
|
| + base::StringPrintf(
|
| + "%s=%s",
|
| + ui::ToString(attr).c_str(),
|
| + string_value.c_str()),
|
| + &line);
|
| + } else {
|
| + int int_value;
|
| + if (!dict.GetInteger(ui::ToString(attr), &int_value))
|
| + continue;
|
| + WriteAttribute(false,
|
| + base::StringPrintf(
|
| + "%s=%d",
|
| + ui::ToString(attr).c_str(),
|
| + int_value),
|
| + &line);
|
| + }
|
| }
|
|
|
| for (int attr_index = ui::AX_BOOL_ATTRIBUTE_NONE;
|
| @@ -213,11 +247,17 @@ base::string16 AccessibilityTreeFormatterBlink::ToString(
|
| continue;
|
| std::string attr_string = ui::ToString(attr) + "=";
|
| for (size_t i = 0; i < value->GetSize(); ++i) {
|
| - int int_value;
|
| - value->GetInteger(i, &int_value);
|
| if (i > 0)
|
| attr_string += ",";
|
| - attr_string += base::IntToString(int_value);
|
| + if (ui::IsNodeIdIntListAttribute(attr)) {
|
| + std::string string_value;
|
| + value->GetString(i, &string_value);
|
| + attr_string += string_value;
|
| + } else {
|
| + int int_value;
|
| + value->GetInteger(i, &int_value);
|
| + attr_string += base::IntToString(int_value);
|
| + }
|
| }
|
| WriteAttribute(false, attr_string, &line);
|
| }
|
|
|