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();