Title: [258067] trunk/Source/WebCore
Revision
258067
Author
[email protected]
Date
2020-03-07 01:13:29 -0800 (Sat, 07 Mar 2020)

Log Message

AXIsolatedObject support for documentLinks.
https://bugs.webkit.org/show_bug.cgi?id=208734

Reviewed by Chris Fleizach.

- Expose documentLinks through the AXCoreObject interface, so that
wrapper code works for both AXObject and AXIsolatedObjects.
- Struct NodeChange now retains wrapper which was causing crash as the
wrapper was destroyed before it was attached to the IsolatedObject.

* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityObjectInterface.h:
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::documentLinks):
(WebCore::AccessibilityRenderObject::getDocumentLinks): Deleted.
* accessibility/AccessibilityRenderObject.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeAttributeData):
* accessibility/isolatedtree/AXIsolatedObject.h:
* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::setFocusedNode):
(WebCore::AXIsolatedTree::applyPendingChanges):
* accessibility/isolatedtree/AXIsolatedTree.h:
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (258066 => 258067)


--- trunk/Source/WebCore/ChangeLog	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/ChangeLog	2020-03-07 09:13:29 UTC (rev 258067)
@@ -1,3 +1,31 @@
+2020-03-07  Andres Gonzalez  <[email protected]>
+
+        AXIsolatedObject support for documentLinks.
+        https://bugs.webkit.org/show_bug.cgi?id=208734
+
+        Reviewed by Chris Fleizach.
+
+        - Expose documentLinks through the AXCoreObject interface, so that
+        wrapper code works for both AXObject and AXIsolatedObjects.
+        - Struct NodeChange now retains wrapper which was causing crash as the
+        wrapper was destroyed before it was attached to the IsolatedObject.
+
+        * accessibility/AccessibilityObject.h:
+        * accessibility/AccessibilityObjectInterface.h:
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::documentLinks):
+        (WebCore::AccessibilityRenderObject::getDocumentLinks): Deleted.
+        * accessibility/AccessibilityRenderObject.h:
+        * accessibility/isolatedtree/AXIsolatedObject.cpp:
+        (WebCore::AXIsolatedObject::initializeAttributeData):
+        * accessibility/isolatedtree/AXIsolatedObject.h:
+        * accessibility/isolatedtree/AXIsolatedTree.cpp:
+        (WebCore::AXIsolatedTree::setFocusedNode):
+        (WebCore::AXIsolatedTree::applyPendingChanges):
+        * accessibility/isolatedtree/AXIsolatedTree.h:
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
 2020-03-07  chris fleizach  <[email protected]>
 
         Unreviewed, rolling out r258047.

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (258066 => 258067)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-03-07 09:13:29 UTC (rev 258067)
@@ -765,6 +765,7 @@
     uint64_t sessionID() const override;
     String documentURI() const override;
     String documentEncoding() const override;
+    AccessibilityChildrenVector documentLinks() override { return AccessibilityChildrenVector(); }
 
 protected:
     AccessibilityObject() = default;

Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (258066 => 258067)


--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-03-07 09:13:29 UTC (rev 258067)
@@ -1170,6 +1170,8 @@
     virtual uint64_t sessionID() const = 0;
     virtual String documentURI() const = 0;
     virtual String documentEncoding() const = 0;
+    virtual AccessibilityChildrenVector documentLinks() = 0;
+
 private:
     // Detaches this object from the objects it references and it is referenced by.
     virtual void detachRemoteParts(AccessibilityDetachmentType) = 0;

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (258066 => 258067)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2020-03-07 09:13:29 UTC (rev 258067)
@@ -1899,9 +1899,10 @@
     
     return nullptr;
 }
-    
-void AccessibilityRenderObject::getDocumentLinks(AccessibilityChildrenVector& result)
+
+AXCoreObject::AccessibilityChildrenVector AccessibilityRenderObject::documentLinks()
 {
+    AccessibilityChildrenVector result;
     Document& document = m_renderer->document();
     Ref<HTMLCollection> links = document.links();
     for (unsigned i = 0; auto* current = links->item(i); ++i) {
@@ -1923,6 +1924,8 @@
             }
         }
     }
+
+    return result;
 }
 
 FrameView* AccessibilityRenderObject::documentFrameView() const 

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h (258066 => 258067)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2020-03-07 09:13:29 UTC (rev 258067)
@@ -138,7 +138,7 @@
     String actionVerb() const override;
     Widget* widget() const override;
     Widget* widgetForAttachmentView() const override;
-    virtual void getDocumentLinks(AccessibilityChildrenVector&);
+    AccessibilityChildrenVector documentLinks() override;
     FrameView* documentFrameView() const override;
 
     void clearChildren() override;

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (258066 => 258067)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-03-07 09:13:29 UTC (rev 258067)
@@ -384,6 +384,7 @@
         setProperty(AXPropertyName::SessionID, object.sessionID());
         setProperty(AXPropertyName::DocumentURI, object.documentURI());
         setProperty(AXPropertyName::DocumentEncoding, object.documentEncoding());
+        setObjectVectorProperty(AXPropertyName::DocumentLinks, object.documentLinks());
     }
 }
 
@@ -637,6 +638,7 @@
         object->setSelected(value);
     });
 }
+
 void AXIsolatedObject::setSelectedRows(AccessibilityChildrenVector& value)
 {
     performFunctionOnMainThread([&value](AXCoreObject* object) {

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (258066 => 258067)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-03-07 09:13:29 UTC (rev 258067)
@@ -135,6 +135,7 @@
         DisclosedByRow,
         DisclosedRows,
         DocumentEncoding,
+        DocumentLinks,
         DocumentURI,
         EditableAncestor,
         ElementRect,
@@ -611,6 +612,7 @@
     AXCoreObject* incrementButton() override { return objectAttributeValue(AXPropertyName::IncrementButton); }
     AXCoreObject* decrementButton() override { return objectAttributeValue(AXPropertyName::DecrementButton); }
     bool isIncrementor() const override { return boolAttributeValue(AXPropertyName::IsIncrementor); }
+    AccessibilityChildrenVector documentLinks() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DocumentLinks)); }
 
     String stringValue() const override { return stringAttributeValue(AXPropertyName::StringValue); }
 

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp (258066 => 258067)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2020-03-07 09:13:29 UTC (rev 258067)
@@ -182,7 +182,7 @@
     for (const auto& item : m_pendingAppends) {
         if (item.m_isolatedObject->objectID() == m_focusedNodeID
             && m_readerThreadNodeMap.add(m_focusedNodeID, item.m_isolatedObject.get()) && item.m_wrapper)
-            m_readerThreadNodeMap.get(m_focusedNodeID)->attachPlatformWrapper(item.m_wrapper);
+            m_readerThreadNodeMap.get(m_focusedNodeID)->attachPlatformWrapper(item.m_wrapper.get());
     }
 }
 
@@ -238,7 +238,7 @@
         }
 
         if (m_readerThreadNodeMap.add(axID, item.m_isolatedObject.get()) && item.m_wrapper)
-            m_readerThreadNodeMap.get(axID)->attachPlatformWrapper(item.m_wrapper);
+            m_readerThreadNodeMap.get(axID)->attachPlatformWrapper(item.m_wrapper.get());
 
         // The reference count of the just added IsolatedObject must be 2
         // because it is referenced by m_readerThreadNodeMap and m_pendingAppends.

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (258066 => 258067)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2020-03-07 09:13:29 UTC (rev 258067)
@@ -64,7 +64,7 @@
 
     struct NodeChange {
         Ref<AXIsolatedObject> m_isolatedObject;
-        AccessibilityObjectWrapper* m_wrapper;
+        RetainPtr<AccessibilityObjectWrapper> m_wrapper;
         NodeChange(AXIsolatedObject&, AccessibilityObjectWrapper*);
         NodeChange(const NodeChange&);
     };

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (258066 => 258067)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2020-03-07 08:17:21 UTC (rev 258066)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2020-03-07 09:13:29 UTC (rev 258067)
@@ -2454,11 +2454,9 @@
 
 
     if (backingObject->isWebArea()) {
-        if ([attributeName isEqualToString:@"AXLinkUIElements"]) {
-            AccessibilityObject::AccessibilityChildrenVector links;
-            downcast<AccessibilityRenderObject>(*backingObject).getDocumentLinks(links);
-            return convertToNSArray(links);
-        }
+        if ([attributeName isEqualToString:@"AXLinkUIElements"])
+            return convertToNSArray(backingObject->documentLinks());
+
         if ([attributeName isEqualToString:@"AXLoaded"])
             return [NSNumber numberWithBool:backingObject->isLoaded()];
         if ([attributeName isEqualToString:@"AXLayoutCount"])
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to