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); |
} |
} |