Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(976)

Unified Diff: third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp

Issue 1477043003: Handle aria-owns and presentational children in AX name calc. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@garaventa_visibility_hidden
Patch Set: Rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
index 2f0d1f481a4f854539337825e1a2382f74de9825..3cdf1598ef6a527f2f43feb6f9e7b9cc1647b7d4 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -1533,7 +1533,7 @@ String AXNodeObject::textAlternative(bool recursive, bool inAriaLabelledByTraver
else if (isHTMLBRElement(node))
textAlternative = String("\n");
else
- textAlternative = textFromDescendants(visited);
+ textAlternative = textFromDescendants(visited, false);
if (!textAlternative.isEmpty()) {
if (nameSources) {
@@ -1579,11 +1579,26 @@ String AXNodeObject::textAlternative(bool recursive, bool inAriaLabelledByTraver
return String();
}
-String AXNodeObject::textFromDescendants(AXObjectSet& visited) const
+String AXNodeObject::textFromDescendants(AXObjectSet& visited, bool recursive) const
{
+ if (!canHaveChildren() && recursive)
+ return String();
+
StringBuilder accumulatedText;
AXObject* previous = nullptr;
- for (AXObject* child = rawFirstChild(); child; child = child->rawFirstSibling()) {
+
+ AXObjectVector children;
+
+ HeapVector<Member<AXObject>> ownedChildren;
+ computeAriaOwnsChildren(ownedChildren);
+ for (AXObject* obj = rawFirstChild(); obj; obj = obj->rawNextSibling()) {
+ if (!axObjectCache().isAriaOwned(obj))
+ children.append(obj);
+ }
+ for (const auto& ownedChild : ownedChildren)
+ children.append(ownedChild);
+
+ for (AXObject* child : children) {
// Skip hidden children
if (child->isInertOrAriaHidden())
continue;
@@ -1598,7 +1613,11 @@ String AXNodeObject::textFromDescendants(AXObjectSet& visited) const
accumulatedText.append(' ');
}
- String result = recursiveTextAlternative(*child, false, visited);
+ String result;
+ if (child->isPresentational())
+ result = child->textFromDescendants(visited, true);
+ else
+ result = recursiveTextAlternative(*child, false, visited);
accumulatedText.append(result);
previous = child;
}
@@ -1735,7 +1754,7 @@ AXObject* AXNodeObject::rawFirstChild() const
return axObjectCache().getOrCreate(firstChild);
}
-AXObject* AXNodeObject::rawFirstSibling() const
+AXObject* AXNodeObject::rawNextSibling() const
{
if (!node())
return 0;
@@ -2071,7 +2090,7 @@ void AXNodeObject::updateAccessibilityRole()
childrenChanged();
}
-void AXNodeObject::computeAriaOwnsChildren(HeapVector<Member<AXObject>>& ownedChildren)
+void AXNodeObject::computeAriaOwnsChildren(HeapVector<Member<AXObject>>& ownedChildren) const
{
if (!hasAttribute(aria_ownsAttr))
return;
@@ -2596,7 +2615,7 @@ String AXNodeObject::description(AXNameFrom nameFrom, AXDescriptionFrom& descrip
}
AXObjectSet visited;
- description = textFromDescendants(visited);
+ description = textFromDescendants(visited, false);
if (!description.isEmpty()) {
if (descriptionSources) {

Powered by Google App Engine
This is Rietveld 408576698