nsresult nsTextEquivUtils::AppendFromDOMNode(nsIContent *aContent, nsAString *aString) { nsresult rv = AppendTextEquivFromTextContent(aContent, aString); NS_ENSURE_SUCCESS(rv, rv); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) return NS_OK; if (aContent->IsXUL()) { nsAutoString textEquivalent; nsCOMPtr<nsIDOMXULLabeledControlElement> labeledEl = do_QueryInterface(aContent); if (labeledEl) { labeledEl->GetLabel(textEquivalent); } else { if (aContent->NodeInfo()->Equals(nsAccessibilityAtoms::label, kNameSpaceID_XUL)) aContent->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, textEquivalent); if (textEquivalent.IsEmpty()) aContent->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::tooltiptext, textEquivalent); } AppendString(aString, textEquivalent); } return AppendFromDOMChildren(aContent, aString); }
nsresult nsTextEquivUtils::AppendFromAccessible(nsIAccessible *aAccessible, nsAString *aString) { nsCOMPtr<nsIAccessNode> accessNode(do_QueryInterface(aAccessible)); nsCOMPtr<nsIDOMNode> DOMNode; accessNode->GetDOMNode(getter_AddRefs(DOMNode)); nsCOMPtr<nsIContent> content(do_QueryInterface(DOMNode)); NS_ASSERTION(content, "There is no content!"); if (content) { nsresult rv = AppendTextEquivFromTextContent(content, aString); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) return rv; } nsAutoString text; nsresult rv = aAccessible->GetName(text); NS_ENSURE_SUCCESS(rv, rv); PRBool isEmptyTextEquiv = PR_TRUE; // If the name is from tooltip then append it to result string in the end // (see h. step of name computation guide). if (rv != NS_OK_NAME_FROM_TOOLTIP) isEmptyTextEquiv = !AppendString(aString, text); // Implementation of f. step. rv = AppendFromValue(aAccessible, aString); NS_ENSURE_SUCCESS(rv, rv); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) isEmptyTextEquiv = PR_FALSE; // Implementation of g) step of text equivalent computation guide. Go down // into subtree if accessible allows "text equivalent from subtree rule" or // it's not root and not control. if (isEmptyTextEquiv) { PRUint32 role = nsAccUtils::Role(aAccessible); PRUint32 nameRule = gRoleToNameRulesMap[role]; if (nameRule & eFromSubtreeIfRec) { rv = AppendFromAccessibleChildren(aAccessible, aString); NS_ENSURE_SUCCESS(rv, rv); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) isEmptyTextEquiv = PR_FALSE; } } // Implementation of h. step if (isEmptyTextEquiv && !text.IsEmpty()) { AppendString(aString, text); return NS_OK; } return rv; }
nsresult nsTextEquivUtils::AppendFromAccessible(nsAccessible *aAccessible, nsAString *aString) { //XXX: is it necessary to care the accessible is not a document? if (aAccessible->IsContent()) { nsresult rv = AppendTextEquivFromTextContent(aAccessible->GetContent(), aString); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) return rv; } nsAutoString text; nsresult rv = aAccessible->GetName(text); NS_ENSURE_SUCCESS(rv, rv); bool isEmptyTextEquiv = true; // If the name is from tooltip then append it to result string in the end // (see h. step of name computation guide). if (rv != NS_OK_NAME_FROM_TOOLTIP) isEmptyTextEquiv = !AppendString(aString, text); // Implementation of f. step. rv = AppendFromValue(aAccessible, aString); NS_ENSURE_SUCCESS(rv, rv); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) isEmptyTextEquiv = PR_FALSE; // Implementation of g) step of text equivalent computation guide. Go down // into subtree if accessible allows "text equivalent from subtree rule" or // it's not root and not control. if (isEmptyTextEquiv) { PRUint32 nameRule = gRoleToNameRulesMap[aAccessible->Role()]; if (nameRule & eFromSubtreeIfRec) { rv = AppendFromAccessibleChildren(aAccessible, aString); NS_ENSURE_SUCCESS(rv, rv); if (rv != NS_OK_NO_NAME_CLAUSE_HANDLED) isEmptyTextEquiv = PR_FALSE; } } // Implementation of h. step if (isEmptyTextEquiv && !text.IsEmpty()) { AppendString(aString, text); return NS_OK; } return rv; }