Chromium Code Reviews| 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..34ed810ebf86b925d947f265fbac4bada53756bd 100644 |
| --- a/content/renderer/accessibility/accessibility_node_serializer.cc |
| +++ b/content/renderer/accessibility/accessibility_node_serializer.cc |
| @@ -158,6 +158,11 @@ void SerializeAccessibilityNode( |
| dst->AddIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT, |
| src.titleUIElement().axID()); |
| } |
| + if (!src.activeDescendant().isDetached()) { |
| + dst->AddIntAttribute(ui::AX_ATTR_ACTIVEDESCENDANT_ID, |
| + src.activeDescendant().axID()); |
| + } |
| + |
| if (!src.url().isEmpty()) |
| dst->AddStringAttribute(ui::AX_ATTR_URL, src.url().spec()); |
| @@ -409,15 +414,60 @@ 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.controls(controls)) { |
| + std::vector<int32> controls_ids; |
| + for(size_t i = 0; i < controls.size(); i++) |
| + controls_ids.push_back(controls[i].axID()); |
| + if (controls_ids.size() > 0) |
| + dst->AddIntListAttribute(ui::AX_ATTR_CONTROLS_IDS, controls_ids); |
| + } |
| + |
| + WebVector<WebAXObject> describedby; |
| + if (src.describedby(describedby)) { |
| + std::vector<int32> describedby_ids; |
| + for(size_t i = 0; i < describedby.size(); i++) |
|
dmazzoni
2014/03/11 23:37:52
Maybe a helper function here too - that goes from
aboxhall
2014/03/12 17:50:47
Done.
|
| + describedby_ids.push_back(describedby[i].axID()); |
| + if (describedby_ids.size() > 0) |
| + dst->AddIntListAttribute(ui::AX_ATTR_DESCRIBEDBY_IDS, describedby_ids); |
| + } |
| + |
| + WebVector<WebAXObject> flowTo; |
| + if (src.flowTo(flowTo)) { |
| + std::vector<int32> flowTo_ids; |
| + for(size_t i = 0; i < flowTo.size(); i++) |
| + flowTo_ids.push_back(flowTo[i].axID()); |
| + if (flowTo_ids.size() > 0) |
| + dst->AddIntListAttribute(ui::AX_ATTR_FLOWTO_IDS, flowTo_ids); |
| + } |
| + |
| + WebVector<WebAXObject> labelledby; |
| + if (src.labelledby(labelledby)) { |
| + std::vector<int32> labelledby_ids; |
| + for(size_t i = 0; i < labelledby.size(); i++) |
| + labelledby_ids.push_back(labelledby[i].axID()); |
| + if (labelledby_ids.size() > 0) |
| + dst->AddIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS, labelledby_ids); |
| + } |
| + |
| + WebVector<WebAXObject> owns; |
| + if (src.owns(owns)) { |
| + std::vector<int32> owns_ids; |
| + for(size_t i = 0; i < owns.size(); i++) |
| + owns_ids.push_back(owns[i].axID()); |
| + if (owns_ids.size() > 0) |
| + dst->AddIntListAttribute(ui::AX_ATTR_OWNS_IDS, owns_ids); |
| } |
| } |