AccessibilityObject* AccessibilityTableColumn::headerObject() { if (!m_parent) return nullptr; RenderObject* renderer = m_parent->renderer(); if (!renderer) return nullptr; if (!is<AccessibilityTable>(*m_parent)) return nullptr; auto& parentTable = downcast<AccessibilityTable>(*m_parent); if (!parentTable.isExposableThroughAccessibility()) return nullptr; if (parentTable.isAriaTable()) { for (const auto& cell : children()) { if (cell->ariaRoleAttribute() == ColumnHeaderRole) return cell.get(); } return nullptr; } if (!is<RenderTable>(*renderer)) return nullptr; RenderTable& table = downcast<RenderTable>(*renderer); // try the <thead> section first. this doesn't require th tags if (auto* headerObject = headerObjectForSection(table.header(), false)) return headerObject; RenderTableSection* bodySection = table.firstBody(); while (bodySection && bodySection->isAnonymous()) bodySection = table.sectionBelow(bodySection, SkipEmptySections); // now try for <th> tags in the first body. If the first body is return headerObjectForSection(bodySection, true); }