Skip to content

Commit

Permalink
AX: AccessibilityNodeObject never resets m_childrenDirty to false
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=245322
rdar://problem/100073372

Reviewed by Chris Fleizach.

In https://bugs.webkit.org/show_bug.cgi?id=245212, we moved these
methods from AccessibilityRenderObject to AccessibilityNodeObject:

  - updateChildrenIfNecessary
  - setNeedsToUpdateChildren
  - needsToUpdateChildren
  - setNeedsToUpdateSubtree

But crucially, we did not move the implementation of clearChildren,
which is what resets m_childrenDirty to false when necessary, causing a
performance issue (not a correctness issue) for these objects.

* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::clearChildren):
* Source/WebCore/accessibility/AccessibilityNodeObject.h:
* Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::clearChildren): Deleted.
* Source/WebCore/accessibility/AccessibilityRenderObject.h:

Canonical link: https://commits.webkit.org/254600@main
  • Loading branch information
twilco committed Sep 18, 2022
1 parent e789884 commit d729137
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 8 deletions.
6 changes: 6 additions & 0 deletions Source/WebCore/accessibility/AccessibilityNodeObject.cpp
Expand Up @@ -455,6 +455,12 @@ void AccessibilityNodeObject::updateChildrenIfNecessary()
AccessibilityObject::updateChildrenIfNecessary();
}

void AccessibilityNodeObject::clearChildren()
{
AccessibilityObject::clearChildren();
m_childrenDirty = false;
}

void AccessibilityNodeObject::addChildren()
{
// If the need to add more children in addition to existing children arises,
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/accessibility/AccessibilityNodeObject.h
Expand Up @@ -164,6 +164,7 @@ class AccessibilityNodeObject : public AccessibilityObject {
AccessibilityRole remapAriaRoleDueToParent(AccessibilityRole) const;

void addChildren() override;
void clearChildren() override;
void updateChildrenIfNecessary() override;
bool canHaveChildren() const override;
bool isDescendantOfBarrenParent() const override;
Expand Down
6 changes: 0 additions & 6 deletions Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Expand Up @@ -2902,12 +2902,6 @@ bool AccessibilityRenderObject::canSetTextRangeAttributes() const
return isTextControl();
}

void AccessibilityRenderObject::clearChildren()
{
AccessibilityObject::clearChildren();
m_childrenDirty = false;
}

void AccessibilityRenderObject::addImageMapChildren()
{
RenderBoxModelObject* cssBox = renderBoxModelObject();
Expand Down
2 changes: 0 additions & 2 deletions Source/WebCore/accessibility/AccessibilityRenderObject.h
Expand Up @@ -133,8 +133,6 @@ class AccessibilityRenderObject : public AccessibilityNodeObject {
AccessibilityChildrenVector documentLinks() override;
FrameView* documentFrameView() const override;

void clearChildren() override;

void setFocused(bool) override;
void setSelectedTextRange(const PlainTextRange&) override;
bool setValue(const String&) override;
Expand Down

0 comments on commit d729137

Please sign in to comment.