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 236cd2a75507caac6b60a0d39cdfb15fc718853a..c50a0bd5fe58a5002fb9ce0c5dd8b0e03c353906 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
@@ -547,7 +547,7 @@ AccessibilityRole AXNodeObject::NativeAccessibilityRoleIgnoringAria() const { |
return kHeadingRole; |
if (isHTMLDivElement(*GetNode())) |
- return kDivRole; |
+ return kGenericContainerRole; |
if (isHTMLMeterElement(*GetNode())) |
return kMeterRole; |
@@ -635,16 +635,16 @@ AccessibilityRole AXNodeObject::NativeAccessibilityRoleIgnoringAria() const { |
// There should only be one banner/contentInfo per page. If header/footer are |
// being used within an article or section then it should not be exposed as |
- // whole page's banner/contentInfo but as a group role. |
+ // whole page's banner/contentInfo but as a generic container role. |
if (GetNode()->HasTagName(headerTag)) { |
if (IsDescendantOfElementType(GetLandmarkRolesNotAllowed())) |
- return kGroupRole; |
+ return kGenericContainerRole; |
return kBannerRole; |
} |
if (GetNode()->HasTagName(footerTag)) { |
if (IsDescendantOfElementType(GetLandmarkRolesNotAllowed())) |
- return kGroupRole; |
+ return kGenericContainerRole; |
return kFooterRole; |
} |
@@ -693,7 +693,7 @@ AccessibilityRole AXNodeObject::DetermineAccessibilityRole() { |
// The layout checks for focusability aren't critical here; a false |
// positive would be harmless. |
if (element->IsInCanvasSubtree() && element->SupportsFocus()) |
- return kGroupRole; |
+ return kGenericContainerRole; |
} |
return kUnknownRole; |
} |
@@ -1867,27 +1867,29 @@ String AXNodeObject::TextAlternative(bool recursive, |
return text_alternative; |
// Step 2F / 2G from: http://www.w3.org/TR/accname-aam-1.1 |
- if (recursive || NameFromContents()) { |
- name_from = kAXNameFromContents; |
- if (name_sources) { |
- name_sources->push_back(NameSource(found_text_alternative)); |
- name_sources->back().type = name_from; |
- } |
- |
+ if (in_aria_labelled_by_traversal || NameFromContents(recursive)) { |
Node* node = this->GetNode(); |
- if (node && node->IsTextNode()) |
- text_alternative = ToText(node)->wholeText(); |
- else if (isHTMLBRElement(node)) |
- text_alternative = String("\n"); |
- else |
- text_alternative = TextFromDescendants(visited, false); |
- |
- if (!text_alternative.IsEmpty()) { |
+ if (!isHTMLSelectElement(node)) { // Avoid option descendant text |
+ name_from = kAXNameFromContents; |
if (name_sources) { |
- found_text_alternative = true; |
- name_sources->back().text = text_alternative; |
- } else { |
- return text_alternative; |
+ name_sources->push_back(NameSource(found_text_alternative)); |
+ name_sources->back().type = name_from; |
+ } |
+ |
+ if (node && node->IsTextNode()) |
+ text_alternative = ToText(node)->wholeText(); |
+ else if (isHTMLBRElement(node)) |
+ text_alternative = String("\n"); |
+ else |
+ text_alternative = TextFromDescendants(visited, false); |
+ |
+ if (!text_alternative.IsEmpty()) { |
+ if (name_sources) { |
+ found_text_alternative = true; |
+ name_sources->back().text = text_alternative; |
+ } else { |
+ return text_alternative; |
+ } |
} |
} |
} |
@@ -2019,19 +2021,6 @@ bool AXNodeObject::NameFromLabelElement() const { |
return false; |
} |
-bool AXNodeObject::NameFromContents() const { |
- Node* node = GetNode(); |
- if (!node || !node->IsElementNode()) |
- return AXObjectImpl::NameFromContents(); |
- // AXObjectImpl::nameFromContents determines whether an element should take |
- // its name from its descendant contents based on role. However, <select> is a |
- // special case, as unlike a typical pop-up button it contains its own pop-up |
- // menu's contents, which should not be used as the name. |
- if (isHTMLSelectElement(node)) |
- return false; |
- return AXObjectImpl::NameFromContents(); |
-} |
- |
void AXNodeObject::GetRelativeBounds( |
AXObjectImpl** out_container, |
FloatRect& out_bounds_in_container, |