Diff
Modified: trunk/Source/WebCore/ChangeLog (284759 => 284760)
--- trunk/Source/WebCore/ChangeLog 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/ChangeLog 2021-10-24 17:14:00 UTC (rev 284760)
@@ -1,3 +1,84 @@
+2021-10-24 Tyler Wilcock <[email protected]>
+
+ AX: Any addition of children should funnel through AccessibilityObject::addChild
+ https://bugs.webkit.org/show_bug.cgi?id=231914
+
+ Reviewed by Chris Fleizach.
+
+ All addition of children now goes through
+ AccessibilityObject::addChild. This is good for two reasons:
+
+ 1. It ensures we aren't inserting ignored elements into the tree.
+ `insertChild` (downstream of `addChild`) checks this. Prior to this
+ patch, there were cases where we could insert ignored children into the
+ tree because no check was made.
+
+ 2. We can reliably set state on the child based on the state of the
+ parent at insertion time. For example, children can set a flag if
+ any of their ancestors have an application or document role, which can
+ be useful for some AX clients.
+
+ * accessibility/AccessibilityARIAGrid.cpp:
+ (WebCore::AccessibilityARIAGrid::addTableCellChild):
+ (WebCore::AccessibilityARIAGrid::addChildren):
+ * accessibility/AccessibilityLabel.cpp:
+ (WebCore::AccessibilityLabel::insertChild):
+ Add DescendIfIgnored parameter.
+
+ * accessibility/AccessibilityLabel.h:
+ * accessibility/AccessibilityListBox.cpp:
+ (WebCore::AccessibilityListBox::addChildren):
+ * accessibility/AccessibilityMenuList.cpp:
+ (WebCore::AccessibilityMenuList::addChildren):
+ * accessibility/AccessibilityMenuListOption.cpp:
+ (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
+ (WebCore::AccessibilityMenuListOption::isVisible const):
+ (WebCore::AccessibilityMenuListOption::elementRect const):
+ * accessibility/AccessibilityMenuListOption.h:
+ (WebCore::AccessibilityMenuListOption::setParent):
+ (WebCore::AccessibilityMenuListOption::parentObject const):
+ Add missing `parentObject` (and corresponding `setParent`) methods.
+ Prior to this patch, these objects always returned `nullptr` from
+ the `AccessibilityObject::parentObject()`.
+ * accessibility/AccessibilityMenuListPopup.cpp:
+ (WebCore::AccessibilityMenuListPopup::addChildren):
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::isTableComponent): Added.
+ (WebCore::AccessibilityObject::insertChild):
+ (WebCore::AccessibilityObject::addChild):
+ Add DescendIfIgnored::{Yes, No} to control whether or not
+ these functions descend to and add the child's children if the given
+ child is ignored.
+
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityObjectInterface.h:
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::addImageMapChildren):
+ (WebCore::AccessibilityRenderObject::addTextFieldChildren):
+ (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
+ * accessibility/AccessibilityScrollView.cpp:
+ (WebCore::AccessibilityScrollView::addChildScrollbar):
+ * accessibility/AccessibilitySlider.cpp:
+ (WebCore::AccessibilitySlider::addChildren):
+ * accessibility/AccessibilitySpinButton.cpp:
+ (WebCore::AccessibilitySpinButton::addChildren):
+ * accessibility/AccessibilityTable.cpp:
+ (WebCore::AccessibilityTable::addChildren):
+ (WebCore::AccessibilityTable::addTableCellChild):
+ * accessibility/AccessibilityTableColumn.cpp:
+ (WebCore::AccessibilityTableColumn::addChildren):
+ * accessibility/AccessibilityTableHeaderContainer.cpp:
+ (WebCore::AccessibilityTableHeaderContainer::addChildren):
+ * accessibility/AccessibilityTableRow.cpp:
+ (WebCore::AccessibilityTableRow::addChildren):
+ * accessibility/isolatedtree/AXIsolatedObject.cpp:
+ (WebCore::AXIsolatedObject::addChild):
+ (WebCore::AXIsolatedObject::insertChild):
+ Add DescendIfIgnored parameter.
+
+ * accessibility/isolatedtree/AXIsolatedObject.h:
+
2021-10-24 Alexey Shvayka <[email protected]>
document.open() and friends use incorrect document as a source for reseted document's URL
Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -67,14 +67,7 @@
row.setRowIndex((int)m_rows.size());
m_rows.append(&row);
-
- // Try adding the row if it's not ignoring accessibility,
- // otherwise add its children (the cells) as the grid's children.
- if (!row.accessibilityIsIgnored())
- m_children.append(&row);
- else
- m_children.appendVector(row.children());
-
+ addChild(&row);
appendedRows.add(&row);
return true;
}
@@ -142,13 +135,10 @@
column.setColumnIndex(i);
column.setParent(this);
m_columns.append(&column);
- if (!column.accessibilityIsIgnored())
- m_children.append(&column);
+ addChild(&column, DescendIfIgnored::No);
}
- auto* headerContainerObject = headerContainer();
- if (headerContainerObject && !headerContainerObject->accessibilityIsIgnored())
- m_children.append(headerContainerObject);
+ addChild(headerContainer(), DescendIfIgnored::No);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/accessibility/AccessibilityLabel.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityLabel.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityLabel.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -125,9 +125,9 @@
m_containsOnlyStaticTextDirty = false;
}
-void AccessibilityLabel::insertChild(AXCoreObject* object, unsigned index)
+void AccessibilityLabel::insertChild(AXCoreObject* object, unsigned index, DescendIfIgnored descendIfIgnored)
{
- AccessibilityRenderObject::insertChild(object, index);
+ AccessibilityObject::insertChild(object, index, descendIfIgnored);
m_containsOnlyStaticTextDirty = true;
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityLabel.h (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityLabel.h 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityLabel.h 2021-10-24 17:14:00 UTC (rev 284760)
@@ -48,7 +48,7 @@
String stringValue() const final;
void updateChildrenIfNecessary() final;
void clearChildren() final;
- void insertChild(AXCoreObject*, unsigned) final;
+ void insertChild(AXCoreObject*, unsigned, DescendIfIgnored = DescendIfIgnored::Yes) final;
bool m_containsOnlyStaticTextDirty : 1;
bool m_containsOnlyStaticText : 1;
};
Modified: trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -73,11 +73,8 @@
m_haveChildren = true;
- for (const auto& listItem : downcast<HTMLSelectElement>(*selectNode).listItems()) {
- AccessibilityObject* listOption = listBoxOptionAccessibilityObject(listItem);
- if (listOption && !listOption->accessibilityIsIgnored())
- m_children.append(listOption);
- }
+ for (const auto& listItem : downcast<HTMLSelectElement>(*selectNode).listItems())
+ addChild(listBoxOptionAccessibilityObject(listItem), DescendIfIgnored::No);
}
void AccessibilityListBox::setSelectedChildren(const AccessibilityChildrenVector& children)
Modified: trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -82,8 +82,7 @@
}
m_haveChildren = true;
- m_children.append(list);
-
+ addChild(list);
list->addChildren();
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -39,6 +39,7 @@
AccessibilityMenuListOption::AccessibilityMenuListOption(HTMLOptionElement& element)
: m_element(element)
+ , m_parent(nullptr)
{
}
@@ -68,8 +69,8 @@
return false;
// In a single-option select with the popup collapsed, only the selected item is considered visible.
- auto parent = m_element->document().axObjectCache()->getOrCreate(m_element->ownerSelectElement());
- return parent && (!parent->isOffScreen() || isSelected());
+ auto ownerSelectElement = m_element->document().axObjectCache()->getOrCreate(m_element->ownerSelectElement());
+ return ownerSelectElement && (!ownerSelectElement->isOffScreen() || isSelected());
}
bool AccessibilityMenuListOption::isOffScreen() const
@@ -109,9 +110,10 @@
LayoutRect AccessibilityMenuListOption::elementRect() const
{
AccessibilityObject* parent = parentObject();
+ // Our parent should've been set to be a menu-list popup before this method is called.
+ ASSERT(parent && parent->isMenuListPopup());
if (!parent)
return boundingBoxRect();
- ASSERT(parent->isMenuListPopup());
AccessibilityObject* grandparent = parent->parentObject();
if (!grandparent)
Modified: trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.h (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.h 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.h 2021-10-24 17:14:00 UTC (rev 284760)
@@ -34,6 +34,7 @@
class AccessibilityMenuListOption final : public AccessibilityObject {
public:
static Ref<AccessibilityMenuListOption> create(HTMLOptionElement&);
+ void setParent(AccessibilityObject* parent) { m_parent = parent; }
private:
explicit AccessibilityMenuListOption(HTMLOptionElement&);
@@ -42,6 +43,7 @@
AccessibilityRole roleValue() const final { return AccessibilityRole::MenuListOption; }
bool canHaveChildren() const final { return false; }
+ AccessibilityObject* parentObject() const final { return m_parent; }
Element* actionElement() const final;
Node* node() const final;
@@ -57,6 +59,7 @@
bool computeAccessibilityIsIgnored() const final;
WeakPtr<HTMLOptionElement> m_element;
+ AccessibilityObject* m_parent;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -97,9 +97,10 @@
m_haveChildren = true;
for (const auto& listItem : downcast<HTMLSelectElement>(*selectNode).listItems()) {
- // FIXME: Why does AccessibilityListBox::addChildren check accessibilityIsIgnored but this does not?
- if (auto option = menuListOptionAccessibilityObject(listItem))
- m_children.append(option);
+ if (auto* menuListOptionObject = menuListOptionAccessibilityObject(listItem)) {
+ menuListOptionObject->setParent(this);
+ addChild(menuListOptionObject, DescendIfIgnored::No);
+ }
}
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -483,9 +483,16 @@
if (object)
results.append(object);
}
-
-void AccessibilityObject::insertChild(AXCoreObject* child, unsigned index)
+
+#ifndef NDEBUG
+static bool isTableComponent(AXCoreObject& axObject)
{
+ return axObject.isTable() || axObject.isTableColumn() || axObject.isTableRow() || axObject.isTableCell();
+}
+#endif
+
+void AccessibilityObject::insertChild(AXCoreObject* child, unsigned index, DescendIfIgnored descendIfIgnored)
+{
if (!child)
return;
@@ -511,12 +518,16 @@
setIsIgnoredFromParentDataForChild(child);
if (child->accessibilityIsIgnored()) {
- const auto& children = child->children();
- size_t length = children.size();
- for (size_t i = 0; i < length; ++i)
- m_children.insert(index + i, children[i]);
+ if (descendIfIgnored == DescendIfIgnored::Yes) {
+ const auto& children = child->children();
+ size_t length = children.size();
+ for (size_t i = 0; i < length; ++i)
+ m_children.insert(index + i, children[i]);
+ }
} else {
- ASSERT(child->parentObject() == this);
+ // Table component child-parent relationships often don't line up properly, hence the need for methods
+ // like parentTable() and parentRow(). Exclude them from this ASSERT.
+ ASSERT((!isTableComponent(*child) && !isTableComponent(*this)) ? child->parentObject() == this : true);
m_children.insert(index, child);
}
@@ -524,9 +535,9 @@
child->clearIsIgnoredFromParentData();
}
-void AccessibilityObject::addChild(AXCoreObject* child)
+void AccessibilityObject::addChild(AXCoreObject* child, DescendIfIgnored descendIfIgnored)
{
- insertChild(child, m_children.size());
+ insertChild(child, m_children.size(), descendIfIgnored);
}
void AccessibilityObject::findMatchingObjects(AccessibilitySearchCriteria* criteria, AccessibilityChildrenVector& results)
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-10-24 17:14:00 UTC (rev 284760)
@@ -491,8 +491,8 @@
void updateAccessibilityRole() override { }
const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) override;
void addChildren() override { }
- void addChild(AXCoreObject*) override;
- void insertChild(AXCoreObject*, unsigned) override;
+ void addChild(AXCoreObject*, DescendIfIgnored = DescendIfIgnored::Yes) override;
+ void insertChild(AXCoreObject*, unsigned, DescendIfIgnored = DescendIfIgnored::Yes) override;
bool canHaveChildren() const override { return true; }
bool hasChildren() const override { return m_haveChildren; }
Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-10-24 17:14:00 UTC (rev 284760)
@@ -1238,9 +1238,14 @@
virtual void updateAccessibilityRole() = 0;
virtual const AccessibilityChildrenVector& children(bool updateChildrenIfNeeded = true) = 0;
+
+ enum class DescendIfIgnored : uint8_t {
+ No,
+ Yes
+ };
virtual void addChildren() = 0;
- virtual void addChild(AXCoreObject*) = 0;
- virtual void insertChild(AXCoreObject*, unsigned) = 0;
+ virtual void addChild(AXCoreObject*, DescendIfIgnored = DescendIfIgnored::Yes) = 0;
+ virtual void insertChild(AXCoreObject*, unsigned, DescendIfIgnored = DescendIfIgnored::Yes) = 0;
Vector<AXID> childrenIDs();
virtual bool canHaveChildren() const = 0;
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -3283,7 +3283,7 @@
areaObject.setHTMLMapElement(map);
areaObject.setParent(this);
if (!areaObject.accessibilityIsIgnored())
- m_children.append(&areaObject);
+ addChild(&areaObject);
else
axObjectCache()->remove(areaObject.objectID());
}
@@ -3310,7 +3310,7 @@
auto& axSpinButton = downcast<AccessibilitySpinButton>(*axObjectCache()->create(AccessibilityRole::SpinButton));
axSpinButton.setSpinButtonElement(downcast<SpinButtonElement>(spinButtonElement));
axSpinButton.setParent(this);
- m_children.append(&axSpinButton);
+ addChild(&axSpinButton);
}
bool AccessibilityRenderObject::isSVGImage() const
@@ -3374,12 +3374,7 @@
// In order to connect the AX hierarchy from the SVG root element from the loaded resource
// the parent must be set, because there's no other way to get back to who created the image.
root->setParent(this);
-
- if (root->accessibilityIsIgnored()) {
- for (const auto& child : root->children())
- m_children.append(child);
- } else
- m_children.append(root);
+ addChild(root);
}
void AccessibilityRenderObject::addCanvasChildren()
Modified: trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -163,7 +163,7 @@
auto& scrollBarObject = downcast<AccessibilityScrollbar>(*cache->getOrCreate(scrollbar));
scrollBarObject.setParent(this);
- m_children.append(&scrollBarObject);
+ addChild(&scrollBarObject);
return &scrollBarObject;
}
Modified: trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -100,7 +100,7 @@
if (thumb.accessibilityIsIgnored())
cache->remove(thumb.objectID());
else
- m_children.append(&thumb);
+ addChild(&thumb);
}
const AtomString& AccessibilitySlider::getAttribute(const QualifiedName& attribute) const
Modified: trunk/Source/WebCore/accessibility/AccessibilitySpinButton.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilitySpinButton.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilitySpinButton.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -91,12 +91,12 @@
auto& incrementor = downcast<AccessibilitySpinButtonPart>(*cache->create(AccessibilityRole::SpinButtonPart));
incrementor.setIsIncrementor(true);
incrementor.setParent(this);
- m_children.append(&incrementor);
+ addChild(&incrementor);
auto& decrementor = downcast<AccessibilitySpinButtonPart>(*cache->create(AccessibilityRole::SpinButtonPart));
decrementor.setIsIncrementor(false);
decrementor.setParent(this);
- m_children.append(&decrementor);
+ addChild(&decrementor);
}
void AccessibilitySpinButton::step(int amount)
Modified: trunk/Source/WebCore/accessibility/AccessibilityTable.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityTable.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityTable.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -394,8 +394,7 @@
if (HTMLTableElement* tableElement = this->tableElement()) {
if (auto caption = tableElement->caption()) {
AccessibilityObject* axCaption = axObjectCache()->getOrCreate(caption.get());
- if (axCaption && !axCaption->accessibilityIsIgnored())
- m_children.append(axCaption);
+ addChild(axCaption, DescendIfIgnored::No);
}
}
@@ -420,14 +419,10 @@
column.setColumnIndex(i);
column.setParent(this);
m_columns.append(&column);
- if (!column.accessibilityIsIgnored())
- m_children.append(&column);
+ addChild(&column, DescendIfIgnored::No);
}
+ addChild(headerContainer(), DescendIfIgnored::No);
- auto* headerContainerObject = headerContainer();
- if (headerContainerObject && !headerContainerObject->accessibilityIsIgnored())
- m_children.append(headerContainerObject);
-
// Sometimes the cell gets the wrong role initially because it is created before the parent
// determines whether it is an accessibility table. Iterate all the cells and allow them to
// update their roles now that the table knows its status.
@@ -451,8 +446,7 @@
row.setRowIndex(static_cast<int>(m_rows.size()));
m_rows.append(&row);
- if (!row.accessibilityIsIgnored())
- m_children.append(&row);
+ addChild(&row, DescendIfIgnored::No);
appendedRows.add(&row);
// store the maximum number of columns
Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -202,7 +202,7 @@
if (m_children.size() > 0 && m_children.last() == cell)
continue;
- m_children.append(cell);
+ addChild(cell);
}
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -73,7 +73,8 @@
if (!parentTable.isExposable())
return;
- m_children = parentTable.columnHeaders();
+ for (auto& columnHeader : parentTable.columnHeaders())
+ addChild(columnHeader.get());
for (const auto& child : m_children)
m_headerRect.unite(child->elementRect());
Modified: trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -109,7 +109,7 @@
return nullptr;
}
-
+
AXCoreObject* AccessibilityTableRow::headerObject()
{
if (!m_renderer || !m_renderer->isTableRow())
@@ -150,10 +150,12 @@
void AccessibilityTableRow::addChildren()
{
// If the element specifies its cells through aria-owns, return that first.
- AccessibilityChildrenVector ariaOwns;
- ariaOwnsElements(ariaOwns);
- if (ariaOwns.size())
- m_children = WTFMove(ariaOwns);
+ AccessibilityChildrenVector ariaOwnedElements;
+ ariaOwnsElements(ariaOwnedElements);
+ if (ariaOwnedElements.size()) {
+ for (auto& ariaOwnedElement : ariaOwnedElements)
+ addChild(ariaOwnedElement.get(), DescendIfIgnored::No);
+ }
else
AccessibilityRenderObject::addChildren();
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (284759 => 284760)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2021-10-24 17:14:00 UTC (rev 284760)
@@ -2143,12 +2143,12 @@
ASSERT_NOT_REACHED();
}
-void AXIsolatedObject::addChild(AXCoreObject*)
+void AXIsolatedObject::addChild(AXCoreObject*, DescendIfIgnored)
{
ASSERT_NOT_REACHED();
}
-void AXIsolatedObject::insertChild(AXCoreObject*, unsigned)
+void AXIsolatedObject::insertChild(AXCoreObject*, unsigned, DescendIfIgnored)
{
ASSERT_NOT_REACHED();
}
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (284759 => 284760)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-10-24 16:53:01 UTC (rev 284759)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-10-24 17:14:00 UTC (rev 284760)
@@ -607,8 +607,8 @@
void childrenChanged() override;
void updateAccessibilityRole() override;
void addChildren() override;
- void addChild(AXCoreObject*) override;
- void insertChild(AXCoreObject*, unsigned) override;
+ void addChild(AXCoreObject*, DescendIfIgnored = DescendIfIgnored::Yes) override;
+ void insertChild(AXCoreObject*, unsigned, DescendIfIgnored = DescendIfIgnored::Yes) override;
bool canHaveChildren() const override;
bool hasChildren() const override { return boolAttributeValue(AXPropertyName::HasChildren); }
void setNeedsToUpdateChildren() override;