OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 29 matching lines...) Expand all Loading... |
40 AXObjectCacheImpl& axObjectCache) | 40 AXObjectCacheImpl& axObjectCache) |
41 : AXLayoutObject(layoutObject, axObjectCache) {} | 41 : AXLayoutObject(layoutObject, axObjectCache) {} |
42 | 42 |
43 AXTableRow::~AXTableRow() {} | 43 AXTableRow::~AXTableRow() {} |
44 | 44 |
45 AXTableRow* AXTableRow::create(LayoutObject* layoutObject, | 45 AXTableRow* AXTableRow::create(LayoutObject* layoutObject, |
46 AXObjectCacheImpl& axObjectCache) { | 46 AXObjectCacheImpl& axObjectCache) { |
47 return new AXTableRow(layoutObject, axObjectCache); | 47 return new AXTableRow(layoutObject, axObjectCache); |
48 } | 48 } |
49 | 49 |
| 50 void AXTableRow::addChildren() { |
| 51 AXLayoutObject::addChildren(); |
| 52 |
| 53 // A row is allowed to have a column index, indicating the index of the |
| 54 // first cell in that row, and each subsequent cell gets the next index. |
| 55 int colIndex = ariaColumnIndex(); |
| 56 if (!colIndex) |
| 57 return; |
| 58 |
| 59 unsigned index = 0; |
| 60 for (const auto& cell : children()) { |
| 61 if (cell->isTableCell()) |
| 62 toAXTableCell(cell.get())->setARIAColIndexFromRow(colIndex + index); |
| 63 index++; |
| 64 } |
| 65 } |
| 66 |
50 AccessibilityRole AXTableRow::determineAccessibilityRole() { | 67 AccessibilityRole AXTableRow::determineAccessibilityRole() { |
51 if (!isTableRow()) | 68 if (!isTableRow()) |
52 return AXLayoutObject::determineAccessibilityRole(); | 69 return AXLayoutObject::determineAccessibilityRole(); |
53 | 70 |
54 if ((m_ariaRole = determineAriaRoleAttribute()) != UnknownRole) | 71 if ((m_ariaRole = determineAriaRoleAttribute()) != UnknownRole) |
55 return m_ariaRole; | 72 return m_ariaRole; |
56 | 73 |
57 return RowRole; | 74 return RowRole; |
58 } | 75 } |
59 | 76 |
(...skipping 29 matching lines...) Expand all Loading... |
89 | 106 |
90 AXObject* AXTableRow::headerObject() { | 107 AXObject* AXTableRow::headerObject() { |
91 AXObjectVector headers; | 108 AXObjectVector headers; |
92 headerObjectsForRow(headers); | 109 headerObjectsForRow(headers); |
93 if (!headers.size()) | 110 if (!headers.size()) |
94 return 0; | 111 return 0; |
95 | 112 |
96 return headers[0].get(); | 113 return headers[0].get(); |
97 } | 114 } |
98 | 115 |
| 116 unsigned AXTableRow::ariaColumnIndex() const { |
| 117 const AtomicString& colIndexValue = getAttribute(aria_colindexAttr); |
| 118 if (colIndexValue.toInt() >= 1) |
| 119 return colIndexValue.toInt(); |
| 120 |
| 121 return 0; |
| 122 } |
| 123 |
| 124 unsigned AXTableRow::ariaRowIndex() const { |
| 125 const AtomicString& rowIndexValue = getAttribute(aria_rowindexAttr); |
| 126 if (rowIndexValue.toInt() >= 1) |
| 127 return rowIndexValue.toInt(); |
| 128 |
| 129 return 0; |
| 130 } |
| 131 |
99 void AXTableRow::headerObjectsForRow(AXObjectVector& headers) { | 132 void AXTableRow::headerObjectsForRow(AXObjectVector& headers) { |
100 if (!m_layoutObject || !m_layoutObject->isTableRow()) | 133 if (!m_layoutObject || !m_layoutObject->isTableRow()) |
101 return; | 134 return; |
102 | 135 |
103 for (const auto& cell : children()) { | 136 for (const auto& cell : children()) { |
104 if (!cell->isTableCell()) | 137 if (!cell->isTableCell()) |
105 continue; | 138 continue; |
106 | 139 |
107 if (toAXTableCell(cell.get())->scanToDecideHeaderRole() == RowHeaderRole) | 140 if (toAXTableCell(cell.get())->scanToDecideHeaderRole() == RowHeaderRole) |
108 headers.append(cell); | 141 headers.append(cell); |
109 } | 142 } |
110 } | 143 } |
111 | 144 |
112 } // namespace blink | 145 } // namespace blink |
OLD | NEW |