Index: third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp |
index 48a180ea9f5bf0ebf6b15414443ca24dc5598ba0..58fb6b107a106c52e3991ece36156833fe95deeb 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp |
@@ -47,6 +47,23 @@ AXTableRow* AXTableRow::create(LayoutObject* layoutObject, |
return new AXTableRow(layoutObject, axObjectCache); |
} |
+void AXTableRow::addChildren() { |
+ AXLayoutObject::addChildren(); |
+ |
+ // A row is allowed to have a column index, indicating the index of the |
+ // first cell in that row, and each subsequent cell gets the next index. |
+ int colIndex = ariaColumnIndex(); |
+ if (!colIndex) |
+ return; |
+ |
+ unsigned index = 0; |
+ for (const auto& cell : children()) { |
+ if (cell->isTableCell()) |
+ toAXTableCell(cell.get())->setARIAColIndexFromRow(colIndex + index); |
+ index++; |
+ } |
+} |
+ |
AccessibilityRole AXTableRow::determineAccessibilityRole() { |
if (!isTableRow()) |
return AXLayoutObject::determineAccessibilityRole(); |
@@ -96,6 +113,22 @@ AXObject* AXTableRow::headerObject() { |
return headers[0].get(); |
} |
+unsigned AXTableRow::ariaColumnIndex() const { |
+ const AtomicString& colIndexValue = getAttribute(aria_colindexAttr); |
+ if (colIndexValue.toInt() >= 1) |
+ return colIndexValue.toInt(); |
+ |
+ return 0; |
+} |
+ |
+unsigned AXTableRow::ariaRowIndex() const { |
+ const AtomicString& rowIndexValue = getAttribute(aria_rowindexAttr); |
+ if (rowIndexValue.toInt() >= 1) |
+ return rowIndexValue.toInt(); |
+ |
+ return 0; |
+} |
+ |
void AXTableRow::headerObjectsForRow(AXObjectVector& headers) { |
if (!m_layoutObject || !m_layoutObject->isTableRow()) |
return; |