Title: [284760] trunk/Source/WebCore
Revision
284760
Author
[email protected]
Date
2021-10-24 10:14:00 -0700 (Sun, 24 Oct 2021)

Log Message

AX: Any addition of children should funnel through AccessibilityObject::addChild
https://bugs.webkit.org/show_bug.cgi?id=231914

Patch by Tyler Wilcock <[email protected]> on 2021-10-24
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:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to