| Index: content/renderer/accessibility/accessibility_node_serializer.cc
|
| diff --git a/content/renderer/accessibility/accessibility_node_serializer.cc b/content/renderer/accessibility/accessibility_node_serializer.cc
|
| index 9912332d63f9613b373cf7d4d5c1f6afd999c386..08e6f1deb1e319caacf81703c5ccfe9e6765b763 100644
|
| --- a/content/renderer/accessibility/accessibility_node_serializer.cc
|
| +++ b/content/renderer/accessibility/accessibility_node_serializer.cc
|
| @@ -75,6 +75,17 @@ std::string GetEquivalentAriaRoleString(const ui::AXRole role) {
|
| return std::string();
|
| }
|
|
|
| +void AddIntListAttributeFromWebObjects(ui::AXIntListAttribute attr,
|
| + WebVector<WebAXObject> objects,
|
| + ui::AXNodeData* dst) {
|
| + std::vector<int32> ids;
|
| + for(size_t i = 0; i < objects.size(); i++)
|
| + ids.push_back(objects[i].axID());
|
| + if (ids.size() > 0)
|
| + dst->AddIntListAttribute(attr, ids);
|
| +}
|
| +
|
| +
|
| } // Anonymous namespace
|
|
|
| void SerializeAccessibilityNode(
|
| @@ -158,6 +169,11 @@ void SerializeAccessibilityNode(
|
| dst->AddIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT,
|
| src.titleUIElement().axID());
|
| }
|
| + if (!src.ariaActiveDescendant().isDetached()) {
|
| + dst->AddIntAttribute(ui::AX_ATTR_ACTIVEDESCENDANT_ID,
|
| + src.ariaActiveDescendant().axID());
|
| + }
|
| +
|
| if (!src.url().isEmpty())
|
| dst->AddStringAttribute(ui::AX_ATTR_URL, src.url().spec());
|
|
|
| @@ -409,16 +425,40 @@ void SerializeAccessibilityNode(
|
| // parent is the row, the row adds it as a child, and the column adds it
|
| // as an indirect child.
|
| int child_count = src.childCount();
|
| + std::vector<int32> indirect_child_ids;
|
| for (int i = 0; i < child_count; ++i) {
|
| WebAXObject child = src.childAt(i);
|
| - std::vector<int32> indirect_child_ids;
|
| if (!is_iframe && !child.isDetached() && !IsParentUnignoredOf(src, child))
|
| indirect_child_ids.push_back(child.axID());
|
| - if (indirect_child_ids.size() > 0) {
|
| - dst->AddIntListAttribute(
|
| - ui::AX_ATTR_INDIRECT_CHILD_IDS, indirect_child_ids);
|
| - }
|
| }
|
| + if (indirect_child_ids.size() > 0) {
|
| + dst->AddIntListAttribute(ui::AX_ATTR_INDIRECT_CHILD_IDS,
|
| + indirect_child_ids);
|
| + }
|
| +
|
| + WebVector<WebAXObject> controls;
|
| + if (src.ariaControls(controls))
|
| + AddIntListAttributeFromWebObjects(ui::AX_ATTR_CONTROLS_IDS, controls, dst);
|
| +
|
| + WebVector<WebAXObject> describedby;
|
| + if (src.ariaDescribedby(describedby)) {
|
| + AddIntListAttributeFromWebObjects(
|
| + ui::AX_ATTR_DESCRIBEDBY_IDS, describedby, dst);
|
| + }
|
| +
|
| + WebVector<WebAXObject> flowTo;
|
| + if (src.ariaFlowTo(flowTo))
|
| + AddIntListAttributeFromWebObjects(ui::AX_ATTR_FLOWTO_IDS, flowTo, dst);
|
| +
|
| + WebVector<WebAXObject> labelledby;
|
| + if (src.ariaLabelledby(labelledby)) {
|
| + AddIntListAttributeFromWebObjects(
|
| + ui::AX_ATTR_LABELLEDBY_IDS, labelledby, dst);
|
| + }
|
| +
|
| + WebVector<WebAXObject> owns;
|
| + if (src.ariaOwns(owns))
|
| + AddIntListAttributeFromWebObjects(ui::AX_ATTR_OWNS_IDS, owns, dst);
|
| }
|
|
|
| bool ShouldIncludeChildNode(
|
|
|