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

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

Issue 2967193003: Relation list properties for Accessibility Object Model phase 1 (Closed)
Patch Set: Created 3 years, 5 months 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/AXObject.cpp
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index f7145d1222ce32544ce1452749a5150af2eccd15..9b57268a1c7413016d765461dcacf817af08ca56 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -392,6 +392,25 @@ Element* AXObject::GetAOMPropertyOrARIAAttribute(
return target ? target->element() : nullptr;
}
+bool AXObject::HasAOMProperty(AOMRelationListProperty property,
+ HeapVector<Member<Element>>& result) const {
+ Element* element = this->GetElement();
+ if (!element)
+ return false;
+
+ return AccessibleNode::GetProperty(element, property, result);
+}
+
+bool AXObject::HasAOMPropertyOrARIAAttribute(
+ AOMRelationListProperty property,
+ HeapVector<Member<Element>>& result) const {
+ Element* element = this->GetElement();
+ if (!element)
+ return false;
+
+ return AccessibleNode::GetPropertyOrARIAAttribute(element, property, result);
+}
+
bool AXObject::HasAOMPropertyOrARIAAttribute(AOMBooleanProperty property,
bool& result) const {
Element* element = this->GetElement();
@@ -975,6 +994,43 @@ String AXObject::AriaTextAlternative(bool recursive,
}
// Step 2B from: http://www.w3.org/TR/accname-aam-1.1
+ // AOM version
+ // If you change this logic, update AXNodeObject::nameFromLabelElement, too.
+ if (!in_aria_labelled_by_traversal && !already_visited) {
+ name_from = kAXNameFromRelatedElement;
+ if (name_sources) {
+ name_sources->push_back(
+ NameSource(*found_text_alternative, aria_labeledbyAttr));
aboxhall 2017/07/06 05:37:14 Hm, I think we should have a different source for
dmazzoni 2017/07/06 06:34:25 For aria-label and almost every other place in the
aboxhall 2017/07/06 06:55:15 Makes sense!
+ name_sources->back().type = name_from;
+ }
+
+ HeapVector<Member<Element>> elements;
+ if (HasAOMProperty(AOMRelationListProperty::kLabeledBy, elements)) {
+ // Operate on a copy of |visited| so that if |nameSources| is not null,
+ // the set of visited objects is preserved unmodified for future
+ // calculations.
+ AXObjectSet visited_copy = visited;
+ text_alternative =
+ TextFromElements(true, visited_copy, elements, related_objects);
+ if (!text_alternative.IsNull()) {
+ if (name_sources) {
+ NameSource& source = name_sources->back();
+ source.type = name_from;
+ source.related_objects = *related_objects;
+ source.text = text_alternative;
+ *found_text_alternative = true;
+ } else {
+ *found_text_alternative = true;
+ return text_alternative;
+ }
+ } else if (name_sources) {
+ name_sources->back().invalid = true;
+ }
+ }
+ }
+
+ // Step 2B from: http://www.w3.org/TR/accname-aam-1.1
+ // ARIA version
// If you change this logic, update AXNodeObject::nameFromLabelElement, too.
if (!in_aria_labelled_by_traversal && !already_visited) {
const QualifiedName& attr =

Powered by Google App Engine
This is Rietveld 408576698