AX: Make AXIsolatedTree compile again
https://bugs.webkit.org/show_bug.cgi?id=202702
<rdar://problem/56084968>
Patch by Andres Gonzalez <andresg_22@apple.com> on 2019-10-15
Reviewed by Joanmarie Diggs.
Re-submitting r251045 with a fix for internal builds.
Source/WebCore:
* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::remove):
(WebCore::AXObjectCache::createIsolatedAccessibilityTreeHierarchy):
* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::treePageCache):
(WebCore::AXIsolatedTree::nodeForID const):
(WebCore::AXIsolatedTree::applyPendingChanges):
(WebCore::AXIsolatedTree::initializePageTreeForID): Deleted.
(WebCore::AXIsolatedTree::setInitialRequestInProgress): Deleted.
* accessibility/isolatedtree/AXIsolatedTree.h:
* accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
(WebCore::AXIsolatedTreeNode::setTreeIdentifier):
(WebCore::AXIsolatedTreeNode::rectAttributeValue const):
* accessibility/isolatedtree/AXIsolatedTreeNode.h:
* accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
(convertToNSArray):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper childrenVectorArray]):
Source/WebKit:
* Platform/spi/mac/AccessibilityPrivSPI.h:
* WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
(-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251171 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 69ecc05..6c382f5 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,32 @@
+2019-10-15 Andres Gonzalez <andresg_22@apple.com>
+
+ AX: Make AXIsolatedTree compile again
+ https://bugs.webkit.org/show_bug.cgi?id=202702
+ <rdar://problem/56084968>
+
+ Reviewed by Joanmarie Diggs.
+
+ Re-submitting r251045 with a fix for internal builds.
+
+ * accessibility/AXObjectCache.cpp:
+ (WebCore::AXObjectCache::remove):
+ (WebCore::AXObjectCache::createIsolatedAccessibilityTreeHierarchy):
+ * accessibility/isolatedtree/AXIsolatedTree.cpp:
+ (WebCore::AXIsolatedTree::treePageCache):
+ (WebCore::AXIsolatedTree::nodeForID const):
+ (WebCore::AXIsolatedTree::applyPendingChanges):
+ (WebCore::AXIsolatedTree::initializePageTreeForID): Deleted.
+ (WebCore::AXIsolatedTree::setInitialRequestInProgress): Deleted.
+ * accessibility/isolatedtree/AXIsolatedTree.h:
+ * accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
+ (WebCore::AXIsolatedTreeNode::setTreeIdentifier):
+ (WebCore::AXIsolatedTreeNode::rectAttributeValue const):
+ * accessibility/isolatedtree/AXIsolatedTreeNode.h:
+ * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
+ (convertToNSArray):
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper childrenVectorArray]):
+
2019-10-15 Ryosuke Niwa <rniwa@webkit.org>
[iOS] Crash in WebCore::DOMWindow::incrementScrollEventListenersCount
diff --git a/Source/WebCore/accessibility/AXObjectCache.cpp b/Source/WebCore/accessibility/AXObjectCache.cpp
index e0bbda2..aae4d86 100644
--- a/Source/WebCore/accessibility/AXObjectCache.cpp
+++ b/Source/WebCore/accessibility/AXObjectCache.cpp
@@ -730,8 +730,10 @@
m_idsInUse.remove(axID);
#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
- if (auto pageID = m_document.pageID())
- AXIsolatedTree::treeForPageID(*pageID)->removeNode(axID);
+ if (auto pageID = m_document.pageID()) {
+ if (auto tree = AXIsolatedTree::treeForPageID(*pageID))
+ tree->removeNode(axID);
+ }
#endif
ASSERT(m_objects.size() >= m_idsInUse.size());
@@ -2946,6 +2948,7 @@
auto isolatedTreeNode = AXIsolatedTreeNode::create(object);
nodeChanges.append(isolatedTreeNode.copyRef());
+ isolatedTreeNode->setTreeIdentifier(tree.treeIdentifier());
isolatedTreeNode->setParent(parentID);
associateIsolatedTreeNode(object, isolatedTreeNode, tree.treeIdentifier());
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
index 0e7d542..586adf0 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
@@ -42,9 +42,9 @@
return ++s_currentTreeID;
}
-HashMap<uint64_t, Ref<AXIsolatedTree>>& AXIsolatedTree::treePageCache()
+HashMap<PageIdentifier, Ref<AXIsolatedTree>>& AXIsolatedTree::treePageCache()
{
- static NeverDestroyed<HashMap<uint64_t, Ref<AXIsolatedTree>>> map;
+ static NeverDestroyed<HashMap<PageIdentifier, Ref<AXIsolatedTree>>> map;
return map;
}
@@ -67,16 +67,6 @@
return adoptRef(*new AXIsolatedTree());
}
-Ref<AXIsolatedTree> AXIsolatedTree::initializePageTreeForID(PageIdentifier pageID, AXObjectCache& cache)
-{
- RELEASE_ASSERT(isMainThread());
- auto tree = cache->generateIsolatedAccessibilityTree();
- tree->setInitialRequestInProgress(true);
- tree->applyPendingChanges();
- tree->setInitialRequestInProgress(false);
- return tree;
-}
-
RefPtr<AXIsolatedTreeNode> AXIsolatedTree::nodeInTreeForID(AXIsolatedTreeID treeID, AXID axID)
{
return treeForID(treeID)->nodeForID(axID);
@@ -109,7 +99,6 @@
RefPtr<AXIsolatedTreeNode> AXIsolatedTree::nodeForID(AXID axID) const
{
- RELEASE_ASSERT(!isMainThread() || initialRequest);
if (!axID)
return nullptr;
return m_readerThreadNodeMap.get(axID);
@@ -150,14 +139,9 @@
m_pendingAppends.append(node.copyRef());
}
-void AXIsolatedTree::setInitialRequestInProgress(bool initialRequestInProgress)
-{
- m_initialRequestInProgress = initialRequestInProgress;
-}
-
void AXIsolatedTree::applyPendingChanges()
{
- RELEASE_ASSERT(!isMainThread() || initialRequest);
+ RELEASE_ASSERT(!isMainThread());
LockHolder locker { m_changeLogLock };
Vector<Ref<AXIsolatedTreeNode>> appendCopy;
std::swap(appendCopy, m_pendingAppends);
@@ -169,10 +153,8 @@
m_rootNodeID = m_pendingRootNodeID;
m_focusedNodeID = m_pendingFocusedNodeID;
- for (auto& item : appendCopy) {
- item->setTreeIdentifier(m_treeID);
+ for (auto& item : appendCopy)
m_readerThreadNodeMap.add(item->identifier(), WTFMove(item));
- }
for (auto item : removeCopy)
m_readerThreadNodeMap.remove(item);
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
index 6eec264..6abd783 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
@@ -37,15 +37,14 @@
class Page;
-class AXIsolatedTree : public ThreadSafeRefCounted<AXIsolatedTree>, public CanMakeWeakPtr<AXIsolatedTree> {
+class AXIsolatedTree : public ThreadSafeRefCounted<AXIsolatedTree> {
WTF_MAKE_NONCOPYABLE(AXIsolatedTree); WTF_MAKE_FAST_ALLOCATED;
public:
static Ref<AXIsolatedTree> create();
virtual ~AXIsolatedTree();
- static Ref<AXIsolatedTree> createTreeForPageID(PageIdentifier);
- WEBCORE_EXPORT static Ref<AXIsolatedTree> initializePageTreeForID(PageIdentifier, AXObjectCache&);
+ WEBCORE_EXPORT static Ref<AXIsolatedTree> createTreeForPageID(PageIdentifier);
WEBCORE_EXPORT static RefPtr<AXIsolatedTree> treeForPageID(PageIdentifier);
WEBCORE_EXPORT static RefPtr<AXIsolatedTree> treeForID(AXIsolatedTreeID);
@@ -64,7 +63,6 @@
// Call on AX thread
WEBCORE_EXPORT void applyPendingChanges();
- WEBCORE_EXPORT void setInitialRequestInProgress(bool);
AXIsolatedTreeID treeIdentifier() const { return m_treeID; }
private:
@@ -86,7 +84,6 @@
AXIsolatedTreeID m_treeID;
AXID m_rootNodeID { InvalidAXID };
AXID m_focusedNodeID { InvalidAXID };
- bool m_initialRequestInProgress;
};
} // namespace WebCore
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp
index e2ef412..d8dbb9f 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp
@@ -95,7 +95,7 @@
{
m_treeIdentifier = treeIdentifier;
if (auto tree = AXIsolatedTree::treeForID(m_treeIdentifier))
- m_cachedTree = makeWeakPtr(tree.get());
+ m_cachedTree = tree;
}
AccessibilityObjectInterface* AXIsolatedTreeNode::focusedUIElement() const
@@ -132,7 +132,7 @@
{
auto value = m_attributeMap.get(propertyName);
return WTF::switchOn(value,
- [&zeroRect] (Optional<FloatRect> typedValue) {
+ [&] (Optional<FloatRect> typedValue) {
if (!typedValue)
return FloatRect { };
return typedValue.value();
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h
index 4374535..934d63f 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h
@@ -45,7 +45,7 @@
class AXIsolatedTree;
class AccessibilityObject;
-class AXIsolatedTreeNode final : public AccessibilityObjectInterface, public ThreadSafeRefCounted<AXIsolatedTreeNode>, public CanMakeWeakPtr<AXIsolatedTreeNode> {
+class AXIsolatedTreeNode final : public AccessibilityObjectInterface, public ThreadSafeRefCounted<AXIsolatedTreeNode> {
public:
enum class AXPropertyName : uint8_t {
@@ -131,7 +131,7 @@
AXID m_identifier;
bool m_initialized { false };
AXIsolatedTreeID m_treeIdentifier;
- WeakPtr<AXIsolatedTree> m_cachedTree;
+ RefPtr<AXIsolatedTree> m_cachedTree;
Vector<AXID> m_children;
#if PLATFORM(COCOA)
diff --git a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
index b53b4ae..daf34f1 100644
--- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
+++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
@@ -280,7 +280,7 @@
{
NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:children.size()];
for (auto& child : children)
- addChildToArray(*child, result)
+ addChildToArray(*child, result);
return [result autorelease];
}
#endif
diff --git a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
index cb222b4..0150fca 100644
--- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
+++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
@@ -2023,7 +2023,7 @@
children.reserveInitialCapacity(nodeChildren.size());
auto tree = treeNode->tree();
for (auto childID : nodeChildren)
- children.uncheckedAppend(tree->nodeForID(child));
+ children.uncheckedAppend(tree->nodeForID(childID));
return convertToNSArray(children);
}
#endif
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 5bec270..0172a14 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,17 @@
+2019-10-15 Andres Gonzalez <andresg_22@apple.com>
+
+ AX: Make AXIsolatedTree compile again
+ https://bugs.webkit.org/show_bug.cgi?id=202702
+ <rdar://problem/56084968>
+
+ Reviewed by Joanmarie Diggs.
+
+ Re-submitting r251045 with a fix for internal builds.
+
+ * Platform/spi/mac/AccessibilityPrivSPI.h:
+ * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:
+ (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]):
+
2019-10-15 Chris Dumez <cdumez@apple.com>
Webview's drawing area may stay frozen on cross-site back/forward navigation
diff --git a/Source/WebKit/Platform/spi/mac/AccessibilityPrivSPI.h b/Source/WebKit/Platform/spi/mac/AccessibilityPrivSPI.h
index bbf9177..784cda3 100644
--- a/Source/WebKit/Platform/spi/mac/AccessibilityPrivSPI.h
+++ b/Source/WebKit/Platform/spi/mac/AccessibilityPrivSPI.h
@@ -29,7 +29,11 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundef"
+
+#if PLATFORM(MAC)
#include <HIServices/AccessibilityPriv.h>
+#endif
+
#pragma clang diagnostic pop
#else
diff --git a/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm b/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm
index 4273db5..d0d5657 100644
--- a/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm
+++ b/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm
@@ -26,6 +26,7 @@
#import "config.h"
#import "WKAccessibilityWebPageObjectBase.h"
+#import "AccessibilityPrivSPI.h"
#import "WebFrame.h"
#import "WebPage.h"
#import "WKArray.h"
@@ -96,7 +97,7 @@
{
if (isMainThread()) {
if (auto cache = [self axObjectCache]) {
- auto tree = AXIsolatedTree::initializeTreeForPageId(m_pageID, *cache);
+ auto tree = cache->generateIsolatedAccessibilityTree();
// Now that we have created our tree, initialize the secondary thread,
// so future requests come in on the other thread.
@@ -105,7 +106,7 @@
return rootNode->wrapper();
}
} else {
- auto tree = AXIsolatedTree::treeForPageID(m_pageID);
+ auto tree = WebCore::AXIsolatedTree::treeForPageID(m_pageID);
tree->applyPendingChanges();
if (auto rootNode = tree->rootNode())
return rootNode->wrapper();