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