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

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

Issue 1112153002: Use explicit DOM cast template for presentationalRole handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/accessibility/AXNodeObject.cpp
diff --git a/Source/modules/accessibility/AXNodeObject.cpp b/Source/modules/accessibility/AXNodeObject.cpp
index 95bb285944bb55a94d5305a67b80532964ccdd9f..d0b033a36e26e356bb0b60c266aab2918a3498f5 100644
--- a/Source/modules/accessibility/AXNodeObject.cpp
+++ b/Source/modules/accessibility/AXNodeObject.cpp
@@ -183,10 +183,13 @@ static bool isListElement(Node* node)
return isHTMLUListElement(*node) || isHTMLOListElement(*node) || isHTMLDListElement(*node);
}
-static bool isPresentationRoleInTable(AXObject* parent, Node* child)
+static bool isPresentationalInTable(AXObject* parent, HTMLElement* currentElement)
{
+ if (!currentElement)
+ return false;
+
Node* parentNode = parent->node();
- if (!parentNode || !parentNode->isElementNode())
+ if (!parentNode || !parentNode->isHTMLElement())
return false;
// AXTable determines the role as checking isTableXXX.
@@ -196,10 +199,10 @@ static bool isPresentationRoleInTable(AXObject* parent, Node* child)
// cell(its role)-> tr(tr role)-> tfoot, tbody, thead(ignored role) -> table(table role).
// If table has presentation role, it will be like
// cell(group)-> tr(unknown) -> tfoot, tbody, thead(ignored) -> table(presentation).
- if (child && isHTMLTableCellElement(*child) && isHTMLTableRowElement(*parentNode))
+ if (isHTMLTableCellElement(*currentElement) && isHTMLTableRowElement(*parentNode))
return parent->hasInheritedPresentationalRole();
- if (isHTMLTableRowElement(child) && isHTMLTableSectionElement(*parentNode)) {
+ if (isHTMLTableRowElement(*currentElement) && isHTMLTableSectionElement(toHTMLElement(*parentNode))) {
// Because TableSections have ignored role, presentation should be checked with its parent node
AXObject* tableObject = parent->parentObject();
Node* tableNode = tableObject ? tableObject->node() : 0;
@@ -208,23 +211,25 @@ static bool isPresentationRoleInTable(AXObject* parent, Node* child)
return false;
}
-static bool isRequiredOwnedElement(AXObject* parent, AccessibilityRole childRole, Node* childNode)
+static bool isRequiredOwnedElement(AXObject* parent, AccessibilityRole currentRole, HTMLElement* currentElement)
{
Node* parentNode = parent->node();
- if (!parentNode || !parentNode->isElementNode())
+ if (!parentNode || !parentNode->isHTMLElement())
return false;
- if (childRole == ListItemRole)
+ if (currentRole == ListItemRole)
return isListElement(parentNode);
- if (childRole == ListMarkerRole)
+ if (currentRole == ListMarkerRole)
return isHTMLLIElement(*parentNode);
- if (childRole == MenuItemCheckBoxRole || childRole == MenuItemRole || childRole == MenuItemRadioRole)
+ if (currentRole == MenuItemCheckBoxRole || currentRole == MenuItemRole || currentRole == MenuItemRadioRole)
return isHTMLMenuElement(*parentNode);
- if (childNode && isHTMLTableCellElement(*childNode))
+ if (!currentElement)
+ return false;
+ if (isHTMLTableCellElement(*currentElement))
return isHTMLTableRowElement(*parentNode);
- if (isHTMLTableRowElement(childNode))
- return isHTMLTableSectionElement(*parentNode);
+ if (isHTMLTableRowElement(*currentElement))
+ return isHTMLTableSectionElement(toHTMLElement(*parentNode));
// In case of ListboxRole and it's child, ListBoxOptionRole,
// Inheritance of presentation role is handled in AXListBoxOption
@@ -253,14 +258,15 @@ const AXObject* AXNodeObject::inheritsPresentationalRoleFrom() const
if (!parent)
return 0;
- Node* curNode = node();
+ HTMLElement* element = nullptr;
+ if (node() && node()->isHTMLElement())
+ element = toHTMLElement(node());
if (!parent->hasInheritedPresentationalRole()
- && !isPresentationRoleInTable(parent, curNode))
+ && !isPresentationalInTable(parent, element))
return 0;
-
// ARIA spec says that when a parent object is presentational and this object
// is a required owned element of that parent, then this object is also presentational.
- if (isRequiredOwnedElement(parent, roleValue(), curNode))
+ if (isRequiredOwnedElement(parent, roleValue(), element))
return parent;
return 0;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698