Diff
Modified: trunk/Source/WebCore/ChangeLog (257472 => 257473)
--- trunk/Source/WebCore/ChangeLog 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/ChangeLog 2020-02-26 16:16:57 UTC (rev 257473)
@@ -1,3 +1,39 @@
+2020-02-26 Andres Gonzalez <[email protected]>
+
+ AXIsolatedObject support for table column objects.
+ https://bugs.webkit.org/show_bug.cgi?id=208215
+
+ Reviewed by Chris Fleizach.
+
+ Covered by existing tests.
+
+ - AccessibilityTableColumn interface is now exposed through
+ AXCoreObject.
+ - Separated isTableColumn from isAccessibilityTableColumnInstance.
+ - This eliminates to need to downcast in the wrapper code, and hence
+ makes it possible that the same code works for both AccessibilityObjects
+ and AXIsolatedObjects.
+ - Completed the caching of table column properties in AXIsolatedObject.
+ - Some minor code cleanup.
+
+ * accessibility/AccessibilityARIAGrid.cpp:
+ (WebCore::AccessibilityARIAGrid::addChildren): Removed unnecessary cast.
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityObjectInterface.h:
+ * accessibility/AccessibilityTable.cpp:
+ (WebCore::AccessibilityTable::addChildren): Removed unnecessary cast.
+ (WebCore::AccessibilityTable::columnHeaders):
+ * accessibility/AccessibilityTableColumn.cpp:
+ (WebCore::AccessibilityTableColumn::columnHeader):
+ (WebCore::AccessibilityTableColumn::headerObject): Renamed columnHeader.
+ * accessibility/AccessibilityTableColumn.h:
+ * accessibility/isolatedtree/AXIsolatedObject.cpp:
+ (WebCore::AXIsolatedObject::initializeAttributeData):
+ (WebCore::AXIsolatedObject::isAccessibilityTableColumnInstance const):
+ * accessibility/isolatedtree/AXIsolatedObject.h:
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
2020-02-26 Youenn Fablet <[email protected]>
Conversion between MediaSample and RemoteVideoSample should preserve the rotation information
Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp 2020-02-26 16:16:57 UTC (rev 257473)
@@ -139,7 +139,7 @@
// make the columns based on the number of columns in the first body
for (unsigned i = 0; i < columnCount; ++i) {
auto& column = downcast<AccessibilityTableColumn>(*axCache->getOrCreate(AccessibilityRole::Column));
- column.setColumnIndex(static_cast<int>(i));
+ column.setColumnIndex(i);
column.setParent(this);
m_columns.append(&column);
if (!column.accessibilityIsIgnored())
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2020-02-26 16:16:57 UTC (rev 257473)
@@ -116,6 +116,8 @@
bool isAccessibilityTableInstance() const override { return false; }
bool isAccessibilityProgressIndicatorInstance() const override { return false; }
+ bool isAccessibilityTableColumnInstance() const override { return false; }
+
bool isAttachmentElement() const override { return false; }
bool isHeading() const override { return false; }
bool isLink() const override { return false; }
@@ -170,7 +172,11 @@
int axRowCount() const override { return 0; }
bool isTableRow() const override { return false; }
+
bool isTableColumn() const override { return false; }
+ unsigned columnIndex() const override { return 0; }
+ AXCoreObject* columnHeader() override { return nullptr; }
+
bool isTableCell() const override { return false; }
bool isFieldset() const override { return false; }
bool isGroup() const override { return false; }
Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2020-02-26 16:16:57 UTC (rev 257473)
@@ -489,6 +489,7 @@
virtual bool isAccessibilitySVGRoot() const = 0;
virtual bool isAccessibilitySVGElement() const = 0;
virtual bool isAccessibilityTableInstance() const = 0;
+ virtual bool isAccessibilityTableColumnInstance() const = 0;
virtual bool isAccessibilityProgressIndicatorInstance() const = 0;
virtual bool isAttachmentElement() const = 0;
@@ -552,7 +553,12 @@
virtual int axRowCount() const = 0;
virtual bool isTableRow() const = 0;
+
+ // Table column support.
virtual bool isTableColumn() const = 0;
+ virtual unsigned columnIndex() const = 0;
+ virtual AXCoreObject* columnHeader() = 0;
+
virtual bool isTableCell() const = 0;
virtual bool isFieldset() const = 0;
Modified: trunk/Source/WebCore/accessibility/AccessibilityTable.cpp (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityTable.cpp 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTable.cpp 2020-02-26 16:16:57 UTC (rev 257473)
@@ -418,7 +418,7 @@
unsigned length = maxColumnCount;
for (unsigned i = 0; i < length; ++i) {
auto& column = downcast<AccessibilityTableColumn>(*axCache->getOrCreate(AccessibilityRole::Column));
- column.setColumnIndex((int)i);
+ column.setColumnIndex(i);
column.setParent(this);
m_columns.append(&column);
if (!column.accessibilityIsIgnored())
@@ -538,7 +538,7 @@
AccessibilityChildrenVector columnsCopy = m_columns;
for (const auto& column : columnsCopy) {
- if (AXCoreObject* header = downcast<AccessibilityTableColumn>(*column).headerObject())
+ if (auto* header = column->columnHeader())
headers.append(header);
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp 2020-02-26 16:16:57 UTC (rev 257473)
@@ -69,21 +69,18 @@
return columnRect;
}
-AXCoreObject* AccessibilityTableColumn::headerObject()
+AXCoreObject* AccessibilityTableColumn::columnHeader()
{
- if (!m_parent)
+ if (!m_parent || !is<AccessibilityTable>(*m_parent)
+ || !m_parent->isExposable())
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.isExposable())
- return nullptr;
-
+
if (parentTable.isAriaTable()) {
for (const auto& cell : children()) {
if (cell->ariaRoleAttribute() == AccessibilityRole::ColumnHeader)
Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h (257472 => 257473)
--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h 2020-02-26 16:16:57 UTC (rev 257473)
@@ -41,13 +41,13 @@
static Ref<AccessibilityTableColumn> create();
virtual ~AccessibilityTableColumn();
- AXCoreObject* headerObject();
+ AXCoreObject* columnHeader() override;
AccessibilityRole roleValue() const override { return AccessibilityRole::Column; }
-
- void setColumnIndex(int columnIndex) { m_columnIndex = columnIndex; }
- int columnIndex() const { return m_columnIndex; }
-
+
+ void setColumnIndex(unsigned columnIndex) { m_columnIndex = columnIndex; }
+ unsigned columnIndex() const override { return m_columnIndex; }
+
void addChildren() override;
void setParent(AccessibilityObject*) override;
@@ -60,9 +60,10 @@
bool computeAccessibilityIsIgnored() const override;
bool isTableColumn() const override { return true; }
+ bool isAccessibilityTableColumnInstance() const final { return true; }
unsigned m_columnIndex;
};
} // namespace WebCore
-SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityTableColumn, isTableColumn())
+SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityTableColumn, isAccessibilityTableColumnInstance())
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (257472 => 257473)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2020-02-26 16:16:57 UTC (rev 257473)
@@ -115,7 +115,6 @@
setProperty(AXPropertyName::IsSlider, object.isSlider());
setProperty(AXPropertyName::IsStyleFormatGroup, object.isStyleFormatGroup());
setProperty(AXPropertyName::IsTableCell, object.isTableCell());
- setProperty(AXPropertyName::IsTableColumn, object.isTableColumn());
setProperty(AXPropertyName::IsTableRow, object.isTableRow());
setProperty(AXPropertyName::IsTextControl, object.isTextControl());
setProperty(AXPropertyName::IsTree, object.isTree());
@@ -237,6 +236,12 @@
setProperty(AXPropertyName::AXRowCount, object.axRowCount());
}
+ if (object.isTableColumn()) {
+ setProperty(AXPropertyName::IsTableColumn, object.isTableColumn());
+ setProperty(AXPropertyName::ColumnIndex, object.columnIndex());
+ setProperty(AXPropertyName::ColumnHeader, object.columnHeader());
+ }
+
if (object.isTextControl())
setProperty(AXPropertyName::TextLength, object.textLength());
@@ -937,6 +942,12 @@
return false;
}
+bool AXIsolatedObject::isAccessibilityTableColumnInstance() const
+{
+ ASSERT_NOT_REACHED();
+ return false;
+}
+
bool AXIsolatedObject::isAccessibilityProgressIndicatorInstance() const
{
ASSERT_NOT_REACHED();
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (257472 => 257473)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2020-02-26 16:16:57 UTC (rev 257473)
@@ -120,7 +120,9 @@
ColorValue,
Columns,
ColumnCount,
+ ColumnHeader,
ColumnHeaders,
+ ColumnIndex,
ComputedLabel,
ComputedRoleString,
CurrentState,
@@ -399,7 +401,12 @@
int axRowCount() const override { return intAttributeValue(AXPropertyName::AXRowCount); }
bool isTableRow() const override { return boolAttributeValue(AXPropertyName::IsTableRow); }
+
+ // Table column support.
bool isTableColumn() const override { return boolAttributeValue(AXPropertyName::IsTableColumn); }
+ unsigned columnIndex() const override { return unsignedAttributeValue(AXPropertyName::ColumnIndex); }
+ AXCoreObject* columnHeader() override { return objectAttributeValue(AXPropertyName::ColumnHeader); }
+
bool isTableCell() const override { return boolAttributeValue(AXPropertyName::IsTableCell); }
bool isFieldset() const override { return boolAttributeValue(AXPropertyName::IsFieldset); }
bool isGroup() const override { return boolAttributeValue(AXPropertyName::IsGroup); }
@@ -689,7 +696,9 @@
bool isAccessibilitySVGRoot() const override;
bool isAccessibilitySVGElement() const override;
bool isAccessibilityTableInstance() const override;
+ bool isAccessibilityTableColumnInstance() const override;
bool isAccessibilityProgressIndicatorInstance() const override;
+
bool isAttachmentElement() const override;
bool isNativeImage() const override;
bool isImageButton() const override;
Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (257472 => 257473)
--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2020-02-26 16:16:57 UTC (rev 257473)
@@ -2743,21 +2743,18 @@
return @(backingObject->axRowCount());
}
- if (is<AccessibilityTableColumn>(*backingObject)) {
- auto& column = downcast<AccessibilityTableColumn>(*backingObject);
+ if (backingObject->isTableColumn()) {
if ([attributeName isEqualToString:NSAccessibilityIndexAttribute])
- return [NSNumber numberWithInt:column.columnIndex()];
+ return [NSNumber numberWithUnsignedInt:backingObject->columnIndex()];
// rows attribute for a column is the list of all the elements in that column at each row
- if ([attributeName isEqualToString:NSAccessibilityRowsAttribute] ||
- [attributeName isEqualToString:NSAccessibilityVisibleRowsAttribute]) {
- return convertToNSArray(column.children());
- }
+ if ([attributeName isEqualToString:NSAccessibilityRowsAttribute]
+ || [attributeName isEqualToString:NSAccessibilityVisibleRowsAttribute])
+ return convertToNSArray(backingObject->children());
+
if ([attributeName isEqualToString:NSAccessibilityHeaderAttribute]) {
- AXCoreObject* header = column.headerObject();
- if (!header)
- return nil;
- return header->wrapper();
+ auto* header = backingObject->columnHeader();
+ return header ? header->wrapper() : nil;
}
}