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"])