Title: [287969] trunk/Source/WebCore
Revision
287969
Author
andresg...@apple.com
Date
2022-01-12 19:21:22 -0800 (Wed, 12 Jan 2022)

Log Message

Process deferred ChildrenChanged notifications before creating an isolated subtree.
https://bugs.webkit.org/show_bug.cgi?id=235115
<rdar://problem/87458790>

Reviewed by Chris Fleizach.

Fixes ~20 tests in isolated tree mode.

Before creating an isolated subtree, it is necessary to handle any
pending, deferred children change so that the AXObject tree is updated.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::processDeferredChildrenChangedList):
Added this method in order to be called from AXIsolatedTree::createSubtree.
(WebCore::AXObjectCache::performDeferredCacheUpdate):
* accessibility/AXObjectCache.h:
* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::createSubtree):
Calls AXObjectCache::processDeferredChildrenChangedList once before
start creating a new subtree.
* accessibility/isolatedtree/AXIsolatedTree.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (287968 => 287969)


--- trunk/Source/WebCore/ChangeLog	2022-01-13 02:52:00 UTC (rev 287968)
+++ trunk/Source/WebCore/ChangeLog	2022-01-13 03:21:22 UTC (rev 287969)
@@ -1,3 +1,27 @@
+2022-01-12  Andres Gonzalez  <andresg...@apple.com>
+
+        Process deferred ChildrenChanged notifications before creating an isolated subtree.
+        https://bugs.webkit.org/show_bug.cgi?id=235115
+        <rdar://problem/87458790>
+
+        Reviewed by Chris Fleizach.
+
+        Fixes ~20 tests in isolated tree mode.
+
+        Before creating an isolated subtree, it is necessary to handle any
+        pending, deferred children change so that the AXObject tree is updated.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::processDeferredChildrenChangedList):
+        Added this method in order to be called from AXIsolatedTree::createSubtree.
+        (WebCore::AXObjectCache::performDeferredCacheUpdate):
+        * accessibility/AXObjectCache.h:
+        * accessibility/isolatedtree/AXIsolatedTree.cpp:
+        (WebCore::AXIsolatedTree::createSubtree):
+        Calls AXObjectCache::processDeferredChildrenChangedList once before
+        start creating a new subtree.
+        * accessibility/isolatedtree/AXIsolatedTree.h:
+
 2022-01-12  Fujii Hironori  <hironori.fu...@sony.com>
 
         [WinCairo] Tiling scroll support

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (287968 => 287969)


--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2022-01-13 02:52:00 UTC (rev 287968)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2022-01-13 03:21:22 UTC (rev 287969)
@@ -3211,12 +3211,18 @@
     // This is most likely the cause of problems with the isolated tree updates..
 }
 
+void AXObjectCache::processDeferredChildrenChangedList()
+{
+    for (auto& child : m_deferredChildrenChangedList)
+        handleChildrenChanged(*child);
+    m_deferredChildrenChangedList.clear();
+}
+
 void AXObjectCache::performDeferredCacheUpdate()
 {
     AXTRACE("AXObjectCache::performDeferredCacheUpdate");
     if (m_performingDeferredCacheUpdate)
         return;
-
     SetForScope<bool> performingDeferredCacheUpdate(m_performingDeferredCacheUpdate, true);
 
     for (auto* nodeChild : m_deferredChildrenChangedNodeList) {
@@ -3225,9 +3231,7 @@
     }
     m_deferredChildrenChangedNodeList.clear();
 
-    for (auto& child : m_deferredChildrenChangedList)
-        handleChildrenChanged(*child);
-    m_deferredChildrenChangedList.clear();
+    processDeferredChildrenChangedList();
 
     for (auto* node : m_deferredTextChangedList)
         textChanged(node);

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.h (287968 => 287969)


--- trunk/Source/WebCore/accessibility/AXObjectCache.h	2022-01-13 02:52:00 UTC (rev 287968)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.h	2022-01-13 03:21:22 UTC (rev 287969)
@@ -143,6 +143,7 @@
 
 class AXObjectCache {
     WTF_MAKE_NONCOPYABLE(AXObjectCache); WTF_MAKE_FAST_ALLOCATED;
+    friend class AXIsolatedTree;
     friend WTF::TextStream& operator<<(WTF::TextStream&, AXObjectCache&);
 public:
     explicit AXObjectCache(Document&);
@@ -429,7 +430,6 @@
     CharacterOffset characterOffsetForPoint(const IntPoint&);
     LayoutRect localCaretRectForCharacterOffset(RenderObject*&, const CharacterOffset&);
     bool shouldSkipBoundary(const CharacterOffset&, const CharacterOffset&);
-
 private:
     AccessibilityObject* rootWebArea();
     static AccessibilityObject* focusedImageMapUIElement(HTMLAreaElement*);
@@ -449,6 +449,7 @@
     bool enqueuePasswordValueChangeNotification(AccessibilityObject*);
     void passwordNotificationPostTimerFired();
 
+    void processDeferredChildrenChangedList();
     void handleChildrenChanged(AccessibilityObject&);
     void handleMenuOpened(Node*);
     void handleLiveRegionCreated(Node*);
@@ -471,7 +472,7 @@
     Element* currentModalNode();
     bool isNodeVisible(Node*) const;
     void handleModalChange(Element&);
-    
+
     Document& m_document;
     const std::optional<PageIdentifier> m_pageID; // constant for object's lifetime.
     HashMap<AXID, RefPtr<AccessibilityObject>> m_objects;

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp (287968 => 287969)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2022-01-13 02:52:00 UTC (rev 287968)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2022-01-13 03:21:22 UTC (rev 287969)
@@ -33,6 +33,7 @@
 #include "FrameView.h"
 #include "Page.h"
 #include <wtf/NeverDestroyed.h>
+#include <wtf/SetForScope.h>
 
 namespace WebCore {
 
@@ -206,6 +207,10 @@
     AXTRACE("AXIsolatedTree::createSubtree");
     ASSERT(isMainThread());
 
+    if (!m_creatingSubtree)
+        axObjectCache()->processDeferredChildrenChangedList();
+    SetForScope<bool> creatingSubtree(m_creatingSubtree, true);
+
     auto object = AXIsolatedObject::create(axObject, this, parentID);
     if (!object->objectID().isValid()) {
         // Either the axObject has an invalid ID or something else went terribly wrong. Don't bother doing anything else.

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (287968 => 287969)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2022-01-13 02:52:00 UTC (rev 287968)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2022-01-13 03:21:22 UTC (rev 287969)
@@ -409,6 +409,8 @@
     AXID m_pendingFocusedNodeID WTF_GUARDED_BY_LOCK(m_changeLogLock);
     AXID m_focusedNodeID;
     Lock m_changeLogLock;
+
+    bool m_creatingSubtree { false };
 };
 
 inline AXObjectCache* AXIsolatedTree::axObjectCache() const
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to