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

Side by Side Diff: third_party/WebKit/Source/modules/accessibility/AXTableRow.cpp

Issue 2539503003: ARIA 1.1: implementation for aria-col-* and aria-row-*. (Closed)
Patch Set: Address feedback Created 4 years 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 unified diff | Download patch
OLDNEW
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
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 that's then applied to all
aboxhall 2016/12/02 17:39:26 nit: this explanation may give the impression that
dmazzoni 2016/12/14 17:41:03 Done.
54 // cells within that row, if they're all contiguous.
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/accessibility/AXTableRow.h ('k') | third_party/WebKit/Source/web/WebAXObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698