[Webkit-unassigned] [Bug 261680] AX: columnHeaders() and rowHeaders() are performed on the main thread in ITM
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Thu Sep 21 07:10:41 PDT 2023
https://bugs.webkit.org/show_bug.cgi?id=261680
--- Comment #17 from Andres Gonzalez <andresg_22 at apple.com> ---
(In reply to Joshua Hoffman from comment #15)
> Created attachment 467805 [details]
> Patch
diff --git a/Source/WebCore/accessibility/AXCoreObject.cpp b/Source/WebCore/accessibility/AXCoreObject.cpp
index 1f32cd90b66a..74a9324a9a8a 100644
--- a/Source/WebCore/accessibility/AXCoreObject.cpp
+++ b/Source/WebCore/accessibility/AXCoreObject.cpp
@@ -276,6 +276,23 @@ unsigned AXCoreObject::tableLevel() const
return level;
}
+bool AXCoreObject::isTableCellInSameRowGroup(AXCoreObject* otherTableCell)
+{
+ if (!otherTableCell)
+ return false;
+
+ AXID ancestorID = rowGroupAncestorID();
+ return ancestorID.isValid() && ancestorID == otherTableCell->rowGroupAncestorID();
+}
+
+bool AXCoreObject::isTableCellInSameColGroup(AXCoreObject* tableCell)
+{
+ auto columnRange = columnIndexRange();
+ auto otherColumnRange = tableCell->columnIndexRange();
AG: tableCell can be null. If not, change the param of the method to be const AXCoreObject&.
+
+ return columnRange.first <= otherColumnRange.first + otherColumnRange.second;
+}
+
String AXCoreObject::ariaLandmarkRoleDescription() const
{
switch (roleValue()) {
diff --git a/Source/WebCore/accessibility/AXCoreObject.h b/Source/WebCore/accessibility/AXCoreObject.h
index f364792fe5fa..b220306e58c7 100644
--- a/Source/WebCore/accessibility/AXCoreObject.h
+++ b/Source/WebCore/accessibility/AXCoreObject.h
@@ -897,6 +897,12 @@ public:
// Table cell support.
virtual bool isTableCell() const = 0;
virtual bool isExposedTableCell() const = 0;
+ virtual bool isColumnHeader() const { return false; }
+ virtual bool isRowHeader() const { return false; }
+ bool isTableCellInSameRowGroup(AXCoreObject*);
+ bool isTableCellInSameColGroup(AXCoreObject*);
+ virtual AXID rowGroupAncestorID() const { return { }; }
+ virtual String scope() const { return { }; }
AG: cellScope() ?
// Returns the start location and row span of the cell.
virtual std::pair<unsigned, unsigned> rowIndexRange() const = 0;
// Returns the start location and column span of the cell.
@@ -912,6 +918,7 @@ public:
// Table row support.
virtual bool isTableRow() const = 0;
virtual unsigned rowIndex() const = 0;
+ virtual AXCoreObject* rowHeaderCell() { return nullptr; }
AG: rowHeader ? Cell is redundant in the name.
// ARIA tree/grid row support.
virtual bool isARIATreeGridRow() const = 0;
diff --git a/Source/WebCore/accessibility/AXLogger.cpp b/Source/WebCore/accessibility/AXLogger.cpp
index 92625adbcc4a..f2db3626b7db 100644
--- a/Source/WebCore/accessibility/AXLogger.cpp
+++ b/Source/WebCore/accessibility/AXLogger.cpp
@@ -640,6 +640,9 @@ TextStream& operator<<(TextStream& stream, AXObjectCache::AXNotification notific
case AXObjectCache::AXNotification::AXRowSpanChanged:
stream << "AXRowSpanChanged";
break;
+ case AXObjectCache::AXNotification::AXScopeChanged:
+ stream << "AXScopeChanged";
+ break;
case AXObjectCache::AXNotification::AXSelectedChildrenChanged:
stream << "AXSelectedChildrenChanged";
break;
diff --git a/Source/WebCore/accessibility/AXObjectCache.cpp b/Source/WebCore/accessibility/AXObjectCache.cpp
index bed612dfe2e1..06bfdd7a2243 100644
--- a/Source/WebCore/accessibility/AXObjectCache.cpp
+++ b/Source/WebCore/accessibility/AXObjectCache.cpp
@@ -2436,7 +2436,8 @@ void AXObjectCache::handleAttributeChange(Element* element, const QualifiedName&
} else if (attrName == colspanAttr) {
postNotification(element, AXColumnSpanChanged);
recomputeParentTableProperties(element, TableProperty::CellSlots);
- }
+ } else if (attrName == scopeAttr)
+ postNotification(element, AXScopeChanged);
if (!attrName.localName().string().startsWith("aria-"_s))
return;
@@ -4143,6 +4144,9 @@ void AXObjectCache::updateIsolatedTree(const Vector<std::pair<RefPtr<Accessibili
case AXRowIndexChanged:
tree->updateNodeProperty(*notification.first, AXPropertyName::AXRowIndex);
break;
+ case AXScopeChanged:
+ tree->updateNodeProperties(*notification.first, { AXPropertyName::Scope, AXPropertyName::IsColumnHeader, AXPropertyName::IsRowHeader });
+ break;
// FIXME: Contrary to the name "AXSelectedCellsChanged", this notification can be posted on a cell
// who has changed selected state, not just on table or grid who has changed its selected cells.
case AXSelectedCellsChanged:
diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h
index ee4c3d9bac6f..30f3f8e25a19 100644
--- a/Source/WebCore/accessibility/AXObjectCache.h
+++ b/Source/WebCore/accessibility/AXObjectCache.h
@@ -365,6 +365,7 @@ public:
AXRoleDescriptionChanged,
AXRowIndexChanged,
AXRowSpanChanged,
+ AXScopeChanged,
AG: conversely, should this be CellScope?
AXSelectedChildrenChanged,
AXSelectedCellsChanged,
AXSelectedStateChanged,
diff --git a/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp b/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
index 0b1403411dce..adf0347875e5 100644
--- a/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
+++ b/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
@@ -147,7 +147,7 @@ AccessibilityTable* AccessibilityARIAGridRow::parentTable() const
}));
}
-AXCoreObject* AccessibilityARIAGridRow::headerObject()
+AXCoreObject* AccessibilityARIAGridRow::rowHeaderCell()
{
for (const auto& child : children()) {
if (child->roleValue() == AccessibilityRole::RowHeader)
diff --git a/Source/WebCore/accessibility/AccessibilityARIAGridRow.h b/Source/WebCore/accessibility/AccessibilityARIAGridRow.h
index 43d55762b7be..4834eeb625e1 100644
--- a/Source/WebCore/accessibility/AccessibilityARIAGridRow.h
+++ b/Source/WebCore/accessibility/AccessibilityARIAGridRow.h
@@ -43,7 +43,7 @@ public:
AccessibilityChildrenVector disclosedRows() override;
AXCoreObject* disclosedByRow() const override;
- AXCoreObject* headerObject() override;
+ AXCoreObject* rowHeaderCell() final;
private:
explicit AccessibilityARIAGridRow(RenderObject*);
diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h
index 840982e7d6cc..0ac044c71ad7 100644
--- a/Source/WebCore/accessibility/AccessibilityObject.h
+++ b/Source/WebCore/accessibility/AccessibilityObject.h
@@ -151,6 +151,7 @@ public:
AccessibilityChildrenVector columnHeaders() override { return AccessibilityChildrenVector(); }
AccessibilityChildrenVector rowHeaders() override { return AccessibilityChildrenVector(); }
AccessibilityChildrenVector visibleRows() override { return AccessibilityChildrenVector(); }
+ String scope() const final { return getAttribute(HTMLNames::scopeAttr); }
AXCoreObject* headerContainer() override { return nullptr; }
int axColumnCount() const override { return 0; }
int axRowCount() const override { return 0; }
@@ -163,8 +164,6 @@ public:
std::pair<unsigned, unsigned> rowIndexRange() const override { return { 0, 1 }; }
// Returns the start location and column span of the cell.
std::pair<unsigned, unsigned> columnIndexRange() const override { return { 0, 1 }; }
- virtual bool isColumnHeaderCell() const { return false; }
- virtual bool isRowHeaderCell() const { return false; }
int axColumnIndex() const override { return -1; }
int axRowIndex() const override { return -1; }
diff --git a/Source/WebCore/accessibility/AccessibilityTable.cpp b/Source/WebCore/accessibility/AccessibilityTable.cpp
index 3087200d4d97..1983aed238e5 100644
--- a/Source/WebCore/accessibility/AccessibilityTable.cpp
+++ b/Source/WebCore/accessibility/AccessibilityTable.cpp
@@ -741,7 +741,7 @@ AXCoreObject::AccessibilityChildrenVector AccessibilityTable::rowHeaders()
// Sometimes m_rows can be reset during the iteration, we cache it here to be safe.
AccessibilityChildrenVector rowsCopy = m_rows;
for (const auto& row : rowsCopy) {
- if (auto* header = downcast<AccessibilityTableRow>(*row).headerObject())
+ if (auto* header = downcast<AccessibilityTableRow>(*row).rowHeaderCell())
headers.append(header);
}
diff --git a/Source/WebCore/accessibility/AccessibilityTableCell.cpp b/Source/WebCore/accessibility/AccessibilityTableCell.cpp
index 894462dd065c..ae36ec7afe08 100644
--- a/Source/WebCore/accessibility/AccessibilityTableCell.cpp
+++ b/Source/WebCore/accessibility/AccessibilityTableCell.cpp
@@ -144,9 +144,9 @@ AccessibilityRole AccessibilityTableCell::determineAccessibilityRole()
if (!isExposedTableCell())
return defaultRole;
- if (isColumnHeaderCell())
+ if (isColumnHeader())
return AccessibilityRole::ColumnHeader;
- if (isRowHeaderCell())
+ if (isRowHeader())
return AccessibilityRole::RowHeader;
return AccessibilityRole::Cell;
@@ -173,7 +173,7 @@ bool AccessibilityTableCell::isTableHeaderCell() const
return false;
}
-bool AccessibilityTableCell::isColumnHeaderCell() const
+bool AccessibilityTableCell::isColumnHeader() const
{
const AtomString& scope = getAttribute(scopeAttr);
if (scope == "col"_s || scope == "colgroup"_s)
@@ -201,7 +201,7 @@ bool AccessibilityTableCell::isColumnHeaderCell() const
return false;
}
-bool AccessibilityTableCell::isRowHeaderCell() const
+bool AccessibilityTableCell::isRowHeader() const
{
const AtomString& scope = getAttribute(scopeAttr);
if (scope == "row"_s || scope == "rowgroup"_s)
@@ -226,32 +226,16 @@ bool AccessibilityTableCell::isRowHeaderCell() const
}
return false;
}
-
-bool AccessibilityTableCell::isTableCellInSameRowGroup(AXCoreObject* otherTableCell)
-{
- Node* parentNode = node();
- for ( ; parentNode; parentNode = parentNode->parentNode()) {
- if (parentNode->hasTagName(theadTag) || parentNode->hasTagName(tbodyTag) || parentNode->hasTagName(tfootTag))
- break;
- }
- Node* otherParentNode = otherTableCell->node();
- for ( ; otherParentNode; otherParentNode = otherParentNode->parentNode()) {
- if (otherParentNode->hasTagName(theadTag) || otherParentNode->hasTagName(tbodyTag) || otherParentNode->hasTagName(tfootTag))
- break;
- }
-
- return otherParentNode == parentNode;
-}
-
-bool AccessibilityTableCell::isTableCellInSameColGroup(AXCoreObject* tableCell)
+AXID AccessibilityTableCell::rowGroupAncestorID() const
{
- auto colRange = columnIndexRange();
- auto otherColRange = tableCell->columnIndexRange();
+ auto* rowGroup = Accessibility::findAncestor<AccessibilityObject>(*this, false, [] (const auto& ancestor) {
+ return ancestor.hasTagName(theadTag) || ancestor.hasTagName(tbodyTag) || ancestor.hasTagName(tfootTag);
+ });
+ if (!rowGroup)
+ return { };
- if (colRange.first <= (otherColRange.first + otherColRange.second))
- return true;
- return false;
+ return rowGroup->objectID();
}
String AccessibilityTableCell::expandedTextValue() const
@@ -285,10 +269,9 @@ AXCoreObject::AccessibilityChildrenVector AccessibilityTableCell::columnHeaders(
continue;
ASSERT(is<AccessibilityObject>(tableCell));
- const AtomString& scope = downcast<AccessibilityObject>(tableCell)->getAttribute(scopeAttr);
- if (scope == "colgroup"_s && isTableCellInSameColGroup(tableCell))
+ if (tableCell->scope() == "colgroup"_s && isTableCellInSameColGroup(tableCell))
headers.append(tableCell);
- else if (downcast<AccessibilityObject>(tableCell)->isColumnHeaderCell())
+ else if (downcast<AccessibilityObject>(tableCell)->isColumnHeader())
headers.append(tableCell);
}
@@ -309,11 +292,10 @@ AXCoreObject::AccessibilityChildrenVector AccessibilityTableCell::rowHeaders()
auto* tableCell = parent->cellForColumnAndRow(column, rowRange.first);
if (!tableCell || tableCell == this || headers.contains(tableCell))
continue;
-
- const AtomString& scope = downcast<AccessibilityObject>(tableCell)->getAttribute(scopeAttr);
- if (scope == "rowgroup"_s && isTableCellInSameRowGroup(tableCell))
+
+ if (tableCell->scope() == "rowgroup"_s && isTableCellInSameRowGroup(tableCell))
headers.append(tableCell);
- else if (downcast<AccessibilityObject>(tableCell)->isRowHeaderCell())
+ else if (downcast<AccessibilityObject>(tableCell)->isRowHeader())
headers.append(tableCell);
}
diff --git a/Source/WebCore/accessibility/AccessibilityTableCell.h b/Source/WebCore/accessibility/AccessibilityTableCell.h
index 86252ab79b2b..8ea7c934b5a2 100644
--- a/Source/WebCore/accessibility/AccessibilityTableCell.h
+++ b/Source/WebCore/accessibility/AccessibilityTableCell.h
@@ -44,8 +44,10 @@ public:
bool isExposedTableCell() const final;
bool isTableHeaderCell() const;
- bool isColumnHeaderCell() const override;
- bool isRowHeaderCell() const override;
+ bool isColumnHeader() const override;
+ bool isRowHeader() const override;
+
+ AXID rowGroupAncestorID() const final;
virtual AccessibilityTable* parentTable() const;
@@ -93,8 +95,6 @@ private:
AccessibilityTableRow* ariaOwnedByParent() const;
void ensureIndexesUpToDate() const;
- bool isTableCellInSameRowGroup(AXCoreObject*);
- bool isTableCellInSameColGroup(AXCoreObject*);
};
} // namespace WebCore
diff --git a/Source/WebCore/accessibility/AccessibilityTableRow.cpp b/Source/WebCore/accessibility/AccessibilityTableRow.cpp
index 3528e38d8a9f..3002700d0511 100644
--- a/Source/WebCore/accessibility/AccessibilityTableRow.cpp
+++ b/Source/WebCore/accessibility/AccessibilityTableRow.cpp
@@ -116,7 +116,7 @@ AccessibilityTable* AccessibilityTableRow::parentTable() const
return nullptr;
}
-AXCoreObject* AccessibilityTableRow::headerObject()
+AXCoreObject* AccessibilityTableRow::rowHeaderCell()
{
const auto& rowChildren = children();
if (rowChildren.isEmpty())
diff --git a/Source/WebCore/accessibility/AccessibilityTableRow.h b/Source/WebCore/accessibility/AccessibilityTableRow.h
index edbdac785d38..ccb1f22c1dd2 100644
--- a/Source/WebCore/accessibility/AccessibilityTableRow.h
+++ b/Source/WebCore/accessibility/AccessibilityTableRow.h
@@ -41,7 +41,7 @@ public:
virtual ~AccessibilityTableRow();
// retrieves the "row" header (a th tag in the rightmost column)
- virtual AXCoreObject* headerObject();
+ AXCoreObject* rowHeaderCell() override;
virtual AccessibilityTable* parentTable() const;
void setRowIndex(unsigned rowIndex) { m_rowIndex = rowIndex; }
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
index 79a35120c760..ddbdcbb95642 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
@@ -209,6 +209,10 @@ void AXIsolatedObject::initializeProperties(const Ref<AccessibilityObject>& axOb
setProperty(AXPropertyName::RowIndexRange, object.rowIndexRange());
setProperty(AXPropertyName::AXColumnIndex, object.axColumnIndex());
setProperty(AXPropertyName::AXRowIndex, object.axRowIndex());
+ setProperty(AXPropertyName::IsColumnHeader, object.isColumnHeader());
+ setProperty(AXPropertyName::IsRowHeader, object.isRowHeader());
+ setProperty(AXPropertyName::Scope, object.scope().isolatedCopy());
+ setProperty(AXPropertyName::RowGroupAncestorID, object.rowGroupAncestorID());
}
if (object.isTableColumn()) {
@@ -226,6 +230,9 @@ void AXIsolatedObject::initializeProperties(const Ref<AccessibilityObject>& axOb
setObjectProperty(AXPropertyName::DisclosedByRow, object.disclosedByRow());
}
+ if (object.isARIATreeGridRow() || object.isTableRow())
+ setObjectProperty(AXPropertyName::RowHeaderCell, object.rowHeaderCell());
+
if (object.isTreeItem()) {
setProperty(AXPropertyName::IsTreeItem, true);
setObjectVectorProperty(AXPropertyName::ARIATreeItemContent, object.ariaTreeItemContent());
@@ -940,18 +947,12 @@ T AXIsolatedObject::getOrRetrievePropertyValue(AXPropertyName propertyName)
});
break;
}
- case AXPropertyName::ColumnHeaders:
- value = axIDs(axObject->columnHeaders());
- break;
case AXPropertyName::InnerHTML:
value = axObject->innerHTML().isolatedCopy();
break;
case AXPropertyName::OuterHTML:
value = axObject->outerHTML().isolatedCopy();
break;
- case AXPropertyName::RowHeaders:
- value = axIDs(axObject->rowHeaders());
- break;
default:
break;
}
@@ -1834,7 +1835,40 @@ std::optional<String> AXIsolatedObject::attributeValue(const String& attributeNa
AXCoreObject::AccessibilityChildrenVector AXIsolatedObject::columnHeaders()
{
- return tree()->objectsForIDs(const_cast<AXIsolatedObject*>(this)->getOrRetrievePropertyValue<Vector<AXID>>(AXPropertyName::ColumnHeaders));
+ AccessibilityChildrenVector headers;
+ if (isTable()) {
+ auto columnsCopy = columns();
+ for (const auto& column : columnsCopy) {
+ if (auto* header = column->columnHeader())
+ headers.append(header);
+ }
+ } else if (isExposedTableCell()) {
+ auto* parent = exposedTableAncestor();
+ if (!parent)
+ return { };
+
+ // Choose columnHeaders as the place where the "headers" attribute is reported.
+ headers = relatedObjects(AXRelationType::Headers);
+ // If the headers attribute returned valid values, then do not further search for column headers.
+ if (!headers.isEmpty())
+ return headers;
+
+ auto rowRange = rowIndexRange();
+ auto colRange = columnIndexRange();
+
+ for (unsigned row = 0; row < rowRange.first; row++) {
+ auto* tableCell = parent->cellForColumnAndRow(colRange.first, row);
+ if (!tableCell || tableCell == this || headers.contains(tableCell))
+ continue;
+
+ if (tableCell->scope() == "colgroup"_s && isTableCellInSameColGroup(tableCell))
+ headers.append(tableCell);
+ else if (tableCell->isColumnHeader())
+ headers.append(tableCell);
+ }
+ }
+
+ return headers;
}
String AXIsolatedObject::innerHTML() const
@@ -1849,7 +1883,33 @@ String AXIsolatedObject::outerHTML() const
AXCoreObject::AccessibilityChildrenVector AXIsolatedObject::rowHeaders()
{
- return tree()->objectsForIDs(const_cast<AXIsolatedObject*>(this)->getOrRetrievePropertyValue<Vector<AXID>>(AXPropertyName::RowHeaders));
+ AccessibilityChildrenVector headers;
+ if (isTable()) {
+ auto rowsCopy = rows();
+ for (const auto& row : rowsCopy) {
+ if (auto* header = row->rowHeaderCell())
+ headers.append(header);
+ }
+ } else if (isExposedTableCell()) {
+ auto* parent = exposedTableAncestor();
+ if (!parent)
+ return { };
+
+ auto rowRange = rowIndexRange();
+ auto colRange = columnIndexRange();
+ for (unsigned column = 0; column < colRange.first; column++) {
+ auto* tableCell = parent->cellForColumnAndRow(column, rowRange.first);
+ if (!tableCell || tableCell == this || headers.contains(tableCell))
+ continue;
+
+ if (tableCell->scope() == "rowgroup"_s && isTableCellInSameRowGroup(tableCell))
+ headers.append(tableCell);
+ else if (tableCell->isRowHeader())
+ headers.append(tableCell);
+ }
+ }
+
+ return headers;
}
#if !PLATFORM(MAC)
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
index b0caa179c3aa..8d189ec4d99a 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
@@ -162,6 +162,10 @@ private:
std::pair<unsigned, unsigned> columnIndexRange() const override { return pairAttributeValue<unsigned>(AXPropertyName::ColumnIndexRange); }
int axColumnIndex() const override { return intAttributeValue(AXPropertyName::AXColumnIndex); }
int axRowIndex() const override { return intAttributeValue(AXPropertyName::AXRowIndex); }
+ bool isColumnHeader() const final { return boolAttributeValue(AXPropertyName::IsColumnHeader); }
+ bool isRowHeader() const final { return boolAttributeValue(AXPropertyName::IsRowHeader); }
+ String scope() const final { return stringAttributeValue(AXPropertyName::Scope); }
+ AXID rowGroupAncestorID() const final { return propertyValue<AXID>(AXPropertyName::RowGroupAncestorID); }
// Table column support.
bool isTableColumn() const override { return boolAttributeValue(AXPropertyName::IsTableColumn); }
@@ -171,6 +175,7 @@ private:
// Table row support.
bool isTableRow() const override { return boolAttributeValue(AXPropertyName::IsTableRow); }
unsigned rowIndex() const override { return unsignedAttributeValue(AXPropertyName::RowIndex); }
+ AXCoreObject* rowHeaderCell() final { return objectAttributeValue(AXPropertyName::RowHeaderCell); };
// ARIA tree/grid row support.
bool isARIATreeGridRow() const override { return boolAttributeValue(AXPropertyName::IsARIATreeGridRow); }
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
index 8490f48585a7..4504615099b9 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
@@ -531,6 +531,9 @@ void AXIsolatedTree::updateNodeProperties(AXCoreObject& axObject, const Vector<A
propertyMap.set(AXPropertyName::IsChecked, axObject.isChecked());
propertyMap.set(AXPropertyName::ButtonState, axObject.checkboxOrRadioValue());
break;
+ case AXPropertyName::IsColumnHeader:
+ propertyMap.set(AXPropertyName::IsColumnHeader, axObject.isColumnHeader());
+ break;
case AXPropertyName::IsEnabled:
propertyMap.set(AXPropertyName::IsEnabled, axObject.isEnabled());
break;
@@ -543,6 +546,9 @@ void AXIsolatedTree::updateNodeProperties(AXCoreObject& axObject, const Vector<A
case AXPropertyName::IsSelected:
propertyMap.set(AXPropertyName::IsSelected, axObject.isSelected());
break;
+ case AXPropertyName::IsRowHeader:
+ propertyMap.set(AXPropertyName::IsRowHeader, axObject.isRowHeader());
+ break;
case AXPropertyName::MaxValueForRange:
propertyMap.set(AXPropertyName::MaxValueForRange, axObject.maxValueForRange());
break;
@@ -564,6 +570,9 @@ void AXIsolatedTree::updateNodeProperties(AXCoreObject& axObject, const Vector<A
case AXPropertyName::AXRowIndex:
propertyMap.set(AXPropertyName::AXRowIndex, axObject.axRowIndex());
break;
+ case AXPropertyName::Scope:
+ propertyMap.set(AXPropertyName::Scope, axObject.scope());
AG: isolatedCopy()
+ break;
case AXPropertyName::SetSize:
propertyMap.set(AXPropertyName::SetSize, axObject.setSize());
break;
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
index 7e35a7781b80..2a1b9fa944b3 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
@@ -119,6 +119,7 @@ enum class AXPropertyName : uint16_t {
IsAttachment,
IsBusy,
IsChecked,
+ IsColumnHeader,
IsControl,
IsEnabled,
IsExpanded,
@@ -148,6 +149,7 @@ enum class AXPropertyName : uint16_t {
IsMultiSelectable,
IsPressed,
IsRequired,
+ IsRowHeader,
IsSecureField,
IsSelected,
IsSelectedOptionActive,
@@ -196,10 +198,13 @@ enum class AXPropertyName : uint16_t {
RolePlatformString,
RoleDescription,
Rows,
+ RowGroupAncestorID,
+ RowHeaderCell,
AG: RowHeader ?
RowHeaders,
RowIndex,
RowIndexRange,
ScreenRelativePosition,
+ Scope,
AG: CellScope ?
SelectedChildren,
SessionID,
SetSize,
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20230921/ba70e23d/attachment-0001.htm>
More information about the webkit-unassigned
mailing list