Title: [285261] trunk/Tools
Revision
285261
Author
[email protected]
Date
2021-11-04 05:51:27 -0700 (Thu, 04 Nov 2021)

Log Message

Fix for crashes in layout tests in AX isolated tree mode.
https://bugs.webkit.org/show_bug.cgi?id=232680
<rdar://problem/84987971>

Reviewed by Chris Fleizach.

Changed the return value of WTR::AccessibilityUIElement::attributeValue
to be a RetainPtr<id> instead of id. This guaranties that the ObjC
object pointed by it is not freed when the value is computed on the AX
thread and utilized on the main thread.

The following tests were crashing before and now pass:
accessibility/mac/internal-link-when-document-has-fragment.html
accessibility/svg-remote-element.html
accessibility/url-test.html
accessibility/video-element-url-attribute.html

The following tests were failing before and now pass:
accessibility/add-children-pseudo-element.html
accessibility/aria-selected.html
accessibility/aria-table-with-presentational-elements.html
accessibility/mac/aria-columnrowheaders.html
accessibility/mac/aria-details.html
accessibility/mac/children-in-navigation-order-returns-children.html
accessibility/mac/descriptionlist-not-ignored.html
accessibility/mac/id-class-attributes.html
accessibility/mac/landmark-not-ignored.html
accessibility/mac/line-index-for-textmarker.html
accessibility/mac/table-visible-rows.html
accessibility/mac/treeitem-row-delegation.html
accessibility/math-has-non-presentational-children.html
accessibility/math-multiscript-attributes.html
accessibility/radio-button-group-members.html
accessibility/table-column-headers-with-captions.html
accessibility/table-header-calculation-for-header-rows.html
accessibility/table-roles-hierarchy.html
accessibility/treeitem-child-exposed.html

The following tests were timing out and now pass:
accessibility/aria-combobox-control-owns-elements.html
accessibility/loading-iframe-sends-notification.html

* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::attributeValue):
(WTR::AccessibilityUIElement::descriptionOfValue const):
(WTR::AccessibilityUIElement::attributeValue const):
(WTR::AccessibilityUIElement::domIdentifier const):
(WTR::AccessibilityUIElement::getLinkedUIElements):
(WTR::AccessibilityUIElement::getDocumentLinks):
(WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
(WTR::AccessibilityUIElement::children const):
(WTR::AccessibilityUIElement::getChildren):
(WTR::AccessibilityUIElement::rowHeaders const):
(WTR::AccessibilityUIElement::columnHeaders const):
(WTR::AccessibilityUIElement::elementForAttribute const):
(WTR::AccessibilityUIElement::elementForAttributeAtIndex const):
(WTR::AccessibilityUIElement::detailsElements const):
(WTR::AccessibilityUIElement::errorMessageElements const):
(WTR::AccessibilityUIElement::allAttributes):
(WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
(WTR::AccessibilityUIElement::stringAttributeValue):
(WTR::AccessibilityUIElement::numberAttributeValue):
(WTR::AccessibilityUIElement::uiElementAttributeValue const):
(WTR::AccessibilityUIElement::boolAttributeValue):
(WTR::AccessibilityUIElement::role):
(WTR::AccessibilityUIElement::subrole):
(WTR::AccessibilityUIElement::roleDescription):
(WTR::AccessibilityUIElement::computedRoleString):
(WTR::AccessibilityUIElement::title):
(WTR::AccessibilityUIElement::description):
(WTR::AccessibilityUIElement::orientation const):
(WTR::AccessibilityUIElement::stringValue):
(WTR::AccessibilityUIElement::language):
(WTR::AccessibilityUIElement::helpText const):
(WTR::AccessibilityUIElement::x):
(WTR::AccessibilityUIElement::y):
(WTR::AccessibilityUIElement::width):
(WTR::AccessibilityUIElement::height):
(WTR::AccessibilityUIElement::clickPointX):
(WTR::AccessibilityUIElement::clickPointY):
(WTR::AccessibilityUIElement::lineRectsAndText const):
(WTR::AccessibilityUIElement::intValue const):
(WTR::AccessibilityUIElement::minValue):
(WTR::AccessibilityUIElement::maxValue):
(WTR::AccessibilityUIElement::valueDescription):
(WTR::AccessibilityUIElement::insertionPointLineNumber):
(WTR::AccessibilityUIElement::isEnabled):
(WTR::AccessibilityUIElement::isRequired const):
(WTR::AccessibilityUIElement::isFocused const):
(WTR::AccessibilityUIElement::isSelected const):
(WTR::AccessibilityUIElement::isIndeterminate const):
(WTR::AccessibilityUIElement::isExpanded const):
(WTR::AccessibilityUIElement::currentStateValue const):
(WTR::AccessibilityUIElement::sortDirection const):
(WTR::AccessibilityUIElement::hierarchicalLevel const):
(WTR::AccessibilityUIElement::classList const):
(WTR::AccessibilityUIElement::speakAs):
(WTR::AccessibilityUIElement::ariaIsGrabbed const):
(WTR::AccessibilityUIElement::ariaDropEffects const):
(WTR::AccessibilityUIElement::attributesOfColumnHeaders):
(WTR::AccessibilityUIElement::attributesOfRowHeaders):
(WTR::AccessibilityUIElement::attributesOfColumns):
(WTR::AccessibilityUIElement::attributesOfRows):
(WTR::AccessibilityUIElement::attributesOfVisibleCells):
(WTR::AccessibilityUIElement::attributesOfHeader):
(WTR::AccessibilityUIElement::indexInTable):
(WTR::AccessibilityUIElement::rowIndexRange):
(WTR::AccessibilityUIElement::columnIndexRange):
(WTR::AccessibilityUIElement::horizontalScrollbar const):
(WTR::AccessibilityUIElement::verticalScrollbar const):
(WTR::AccessibilityUIElement::selectedTextRange):
(WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
(WTR::AccessibilityUIElement::removeSelectionAtIndex const):
(WTR::AccessibilityUIElement::documentEncoding):
(WTR::AccessibilityUIElement::documentURI):
(WTR::AccessibilityUIElement::url):
(WTR::AccessibilityUIElement::isMultiSelectable const):
(WTR::AccessibilityUIElement::isOnScreen const):
(WTR::AccessibilityUIElement::embeddedImageDescription const):
(WTR::AccessibilityUIElement::imageOverlayElements const):
(WTR::AccessibilityUIElement::hasPopup const):
(WTR::AccessibilityUIElement::popupValue const):
(WTR::AccessibilityUIElement::selectedTextMarkerRange):
(WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
(WTR::AccessibilityUIElement::startTextMarker):
(WTR::AccessibilityUIElement::endTextMarker):
(WTR::AccessibilityUIElement::mathPostscriptsDescription const):
(WTR::AccessibilityUIElement::mathPrescriptsDescription const):
(WTR::AccessibilityUIElement::mathRootRadicand const):
(WTR::AccessibilityUIElement::pathDescription const):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (285260 => 285261)


--- trunk/Tools/ChangeLog	2021-11-04 12:36:53 UTC (rev 285260)
+++ trunk/Tools/ChangeLog	2021-11-04 12:51:27 UTC (rev 285261)
@@ -1,3 +1,137 @@
+2021-11-04  Andres Gonzalez  <[email protected]>
+
+        Fix for crashes in layout tests in AX isolated tree mode.
+        https://bugs.webkit.org/show_bug.cgi?id=232680
+        <rdar://problem/84987971>
+
+        Reviewed by Chris Fleizach.
+
+        Changed the return value of WTR::AccessibilityUIElement::attributeValue
+        to be a RetainPtr<id> instead of id. This guaranties that the ObjC
+        object pointed by it is not freed when the value is computed on the AX
+        thread and utilized on the main thread.
+
+        The following tests were crashing before and now pass:
+        accessibility/mac/internal-link-when-document-has-fragment.html
+        accessibility/svg-remote-element.html
+        accessibility/url-test.html
+        accessibility/video-element-url-attribute.html
+
+        The following tests were failing before and now pass:
+        accessibility/add-children-pseudo-element.html
+        accessibility/aria-selected.html
+        accessibility/aria-table-with-presentational-elements.html
+        accessibility/mac/aria-columnrowheaders.html
+        accessibility/mac/aria-details.html
+        accessibility/mac/children-in-navigation-order-returns-children.html
+        accessibility/mac/descriptionlist-not-ignored.html
+        accessibility/mac/id-class-attributes.html
+        accessibility/mac/landmark-not-ignored.html
+        accessibility/mac/line-index-for-textmarker.html
+        accessibility/mac/table-visible-rows.html
+        accessibility/mac/treeitem-row-delegation.html
+        accessibility/math-has-non-presentational-children.html
+        accessibility/math-multiscript-attributes.html
+        accessibility/radio-button-group-members.html
+        accessibility/table-column-headers-with-captions.html
+        accessibility/table-header-calculation-for-header-rows.html
+        accessibility/table-roles-hierarchy.html
+        accessibility/treeitem-child-exposed.html
+
+        The following tests were timing out and now pass:
+        accessibility/aria-combobox-control-owns-elements.html
+        accessibility/loading-iframe-sends-notification.html
+
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
+        (WTR::attributeValue):
+        (WTR::AccessibilityUIElement::descriptionOfValue const):
+        (WTR::AccessibilityUIElement::attributeValue const):
+        (WTR::AccessibilityUIElement::domIdentifier const):
+        (WTR::AccessibilityUIElement::getLinkedUIElements):
+        (WTR::AccessibilityUIElement::getDocumentLinks):
+        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
+        (WTR::AccessibilityUIElement::children const):
+        (WTR::AccessibilityUIElement::getChildren):
+        (WTR::AccessibilityUIElement::rowHeaders const):
+        (WTR::AccessibilityUIElement::columnHeaders const):
+        (WTR::AccessibilityUIElement::elementForAttribute const):
+        (WTR::AccessibilityUIElement::elementForAttributeAtIndex const):
+        (WTR::AccessibilityUIElement::detailsElements const):
+        (WTR::AccessibilityUIElement::errorMessageElements const):
+        (WTR::AccessibilityUIElement::allAttributes):
+        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
+        (WTR::AccessibilityUIElement::stringAttributeValue):
+        (WTR::AccessibilityUIElement::numberAttributeValue):
+        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
+        (WTR::AccessibilityUIElement::boolAttributeValue):
+        (WTR::AccessibilityUIElement::role):
+        (WTR::AccessibilityUIElement::subrole):
+        (WTR::AccessibilityUIElement::roleDescription):
+        (WTR::AccessibilityUIElement::computedRoleString):
+        (WTR::AccessibilityUIElement::title):
+        (WTR::AccessibilityUIElement::description):
+        (WTR::AccessibilityUIElement::orientation const):
+        (WTR::AccessibilityUIElement::stringValue):
+        (WTR::AccessibilityUIElement::language):
+        (WTR::AccessibilityUIElement::helpText const):
+        (WTR::AccessibilityUIElement::x):
+        (WTR::AccessibilityUIElement::y):
+        (WTR::AccessibilityUIElement::width):
+        (WTR::AccessibilityUIElement::height):
+        (WTR::AccessibilityUIElement::clickPointX):
+        (WTR::AccessibilityUIElement::clickPointY):
+        (WTR::AccessibilityUIElement::lineRectsAndText const):
+        (WTR::AccessibilityUIElement::intValue const):
+        (WTR::AccessibilityUIElement::minValue):
+        (WTR::AccessibilityUIElement::maxValue):
+        (WTR::AccessibilityUIElement::valueDescription):
+        (WTR::AccessibilityUIElement::insertionPointLineNumber):
+        (WTR::AccessibilityUIElement::isEnabled):
+        (WTR::AccessibilityUIElement::isRequired const):
+        (WTR::AccessibilityUIElement::isFocused const):
+        (WTR::AccessibilityUIElement::isSelected const):
+        (WTR::AccessibilityUIElement::isIndeterminate const):
+        (WTR::AccessibilityUIElement::isExpanded const):
+        (WTR::AccessibilityUIElement::currentStateValue const):
+        (WTR::AccessibilityUIElement::sortDirection const):
+        (WTR::AccessibilityUIElement::hierarchicalLevel const):
+        (WTR::AccessibilityUIElement::classList const):
+        (WTR::AccessibilityUIElement::speakAs):
+        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
+        (WTR::AccessibilityUIElement::ariaDropEffects const):
+        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
+        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
+        (WTR::AccessibilityUIElement::attributesOfColumns):
+        (WTR::AccessibilityUIElement::attributesOfRows):
+        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
+        (WTR::AccessibilityUIElement::attributesOfHeader):
+        (WTR::AccessibilityUIElement::indexInTable):
+        (WTR::AccessibilityUIElement::rowIndexRange):
+        (WTR::AccessibilityUIElement::columnIndexRange):
+        (WTR::AccessibilityUIElement::horizontalScrollbar const):
+        (WTR::AccessibilityUIElement::verticalScrollbar const):
+        (WTR::AccessibilityUIElement::selectedTextRange):
+        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
+        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
+        (WTR::AccessibilityUIElement::documentEncoding):
+        (WTR::AccessibilityUIElement::documentURI):
+        (WTR::AccessibilityUIElement::url):
+        (WTR::AccessibilityUIElement::isMultiSelectable const):
+        (WTR::AccessibilityUIElement::isOnScreen const):
+        (WTR::AccessibilityUIElement::embeddedImageDescription const):
+        (WTR::AccessibilityUIElement::imageOverlayElements const):
+        (WTR::AccessibilityUIElement::hasPopup const):
+        (WTR::AccessibilityUIElement::popupValue const):
+        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
+        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
+        (WTR::AccessibilityUIElement::startTextMarker):
+        (WTR::AccessibilityUIElement::endTextMarker):
+        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
+        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
+        (WTR::AccessibilityUIElement::mathRootRadicand const):
+        (WTR::AccessibilityUIElement::pathDescription const):
+
 2021-11-03  Alex Christensen  <[email protected]>
 
         Remove QuickTimePluginReplacement and YouTubePluginReplacement

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (285260 => 285261)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2021-11-04 12:36:53 UTC (rev 285260)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2021-11-04 12:51:27 UTC (rev 285261)
@@ -64,7 +64,7 @@
 #if PLATFORM(COCOA)
     // Helper functions that dispatch the corresponding AccessibilityObjectWrapper method to the AX secondary thread when appropriate.
     friend RetainPtr<NSArray> supportedAttributes(id);
-    friend id attributeValue(id, NSString *);
+    friend RetainPtr<id> attributeValue(id, NSString *);
     friend void setAttributeValue(id, NSString *, id, bool synchronous);
 #endif
 
@@ -398,7 +398,7 @@
     AccessibilityUIElement(const AccessibilityUIElement&);
 
 #if PLATFORM(MAC)
-    id attributeValue(NSString *) const;
+    RetainPtr<id> attributeValue(NSString *) const;
     NSString *descriptionOfValue(id valueObject) const;
 #endif
 

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (285260 => 285261)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm	2021-11-04 12:36:53 UTC (rev 285260)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm	2021-11-04 12:51:27 UTC (rev 285261)
@@ -139,7 +139,7 @@
     return attributes;
 }
 
-id attributeValue(id element, NSString *attribute)
+RetainPtr<id> attributeValue(id element, NSString *attribute)
 {
     RetainPtr<id> value;
 
@@ -161,7 +161,7 @@
     });
     END_AX_OBJC_EXCEPTIONS
 
-    return value.get();
+    return value;
 }
 
 void setAttributeValue(id element, NSString* attribute, id value, bool synchronous = false)
@@ -207,11 +207,11 @@
 
     // Strip pointer locations
     if ([description rangeOfString:@"0x"].length) {
-        NSString *role = attributeValue(NSAccessibilityRoleAttribute);
-        NSString *title = attributeValue(NSAccessibilityTitleAttribute);
-        if (title.length)
-            return [NSString stringWithFormat:@"<%@: '%@'>", role, title];
-        return [NSString stringWithFormat:@"<%@>", role];
+        auto role = attributeValue(NSAccessibilityRoleAttribute);
+        auto title = attributeValue(NSAccessibilityTitleAttribute);
+        if ([title length])
+            return [NSString stringWithFormat:@"<%@: '%@'>", role.get(), title.get()];
+        return [NSString stringWithFormat:@"<%@>", role.get()];
     }
 
     return [valueObject description];
@@ -313,7 +313,7 @@
     return parameters;
 }
 
-inline id AccessibilityUIElement::attributeValue(NSString *attributeName) const
+inline RetainPtr<id> AccessibilityUIElement::attributeValue(NSString *attributeName) const
 {
     return WTR::attributeValue(m_element.get(), attributeName);
 }
@@ -320,7 +320,7 @@
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::domIdentifier() const
 {
-    id value = attributeValue(NSAccessibilityDOMIdentifierAttribute);
+    auto value = attributeValue(NSAccessibilityDOMIdentifierAttribute);
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     return nullptr;
@@ -328,25 +328,25 @@
 
 void AccessibilityUIElement::getLinkedUIElements(Vector<RefPtr<AccessibilityUIElement>>& elementVector)
 {
-    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityLinkedUIElementsAttribute));
+    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityLinkedUIElementsAttribute).get());
 }
 
 void AccessibilityUIElement::getDocumentLinks(Vector<RefPtr<AccessibilityUIElement>>& elementVector)
 {
-    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXLinkUIElements"));
+    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXLinkUIElements").get());
 }
 
 void AccessibilityUIElement::getUIElementsWithAttribute(JSStringRef attribute, Vector<RefPtr<AccessibilityUIElement>>& elements) const
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
     if ([value isKindOfClass:[NSArray class]])
-        elements = makeVector<RefPtr<AccessibilityUIElement>>(value);
+        elements = makeVector<RefPtr<AccessibilityUIElement>>(value.get());
 }
 
 JSValueRef AccessibilityUIElement::children() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityChildrenAttribute)));
+    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityChildrenAttribute).get()));
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -354,7 +354,7 @@
 
 void AccessibilityUIElement::getChildren(Vector<RefPtr<AccessibilityUIElement> >& elementVector)
 {
-    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityChildrenAttribute));
+    elementVector = makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(NSAccessibilityChildrenAttribute).get());
 }
 
 void AccessibilityUIElement::getChildrenWithRange(Vector<RefPtr<AccessibilityUIElement> >& elementVector, unsigned location, unsigned length)
@@ -372,9 +372,9 @@
 {
     BEGIN_AX_OBJC_EXCEPTIONS
     Vector<RefPtr<AccessibilityUIElement>> elements;
-    id value = attributeValue(NSAccessibilityRowHeaderUIElementsAttribute);
+    auto value = attributeValue(NSAccessibilityRowHeaderUIElementsAttribute);
     if ([value isKindOfClass:[NSArray class]])
-        elements = makeVector<RefPtr<AccessibilityUIElement>>(value);
+        elements = makeVector<RefPtr<AccessibilityUIElement>>(value.get());
     return makeJSArray(elements);
     END_AX_OBJC_EXCEPTIONS
 }
@@ -383,9 +383,9 @@
 {
     BEGIN_AX_OBJC_EXCEPTIONS
     Vector<RefPtr<AccessibilityUIElement>> elements;
-    id value = attributeValue(NSAccessibilityColumnHeaderUIElementsAttribute);
+    auto value = attributeValue(NSAccessibilityColumnHeaderUIElementsAttribute);
     if ([value isKindOfClass:[NSArray class]])
-        elements = makeVector<RefPtr<AccessibilityUIElement>>(value);
+        elements = makeVector<RefPtr<AccessibilityUIElement>>(value.get());
     return makeJSArray(elements);
     END_AX_OBJC_EXCEPTIONS
 }
@@ -433,14 +433,14 @@
 
 RefPtr<AccessibilityUIElement> AccessibilityUIElement::elementForAttribute(NSString* attribute) const
 {
-    id element = attributeValue(attribute);
-    return element ? AccessibilityUIElement::create(element) : RefPtr<AccessibilityUIElement>();
+    auto element = attributeValue(attribute);
+    return element ? AccessibilityUIElement::create(element.get()) : RefPtr<AccessibilityUIElement>();
 }
 
 RefPtr<AccessibilityUIElement> AccessibilityUIElement::elementForAttributeAtIndex(NSString* attribute, unsigned index) const
 {
-    NSArray* elements = attributeValue(attribute);
-    return index < elements.count ? AccessibilityUIElement::create([elements objectAtIndex:index]) : RefPtr<AccessibilityUIElement>();
+    auto elements = attributeValue(attribute);
+    return index < [elements count] ? AccessibilityUIElement::create([elements objectAtIndex:index]) : RefPtr<AccessibilityUIElement>();
 }
 
 RefPtr<AccessibilityUIElement> AccessibilityUIElement::linkedUIElementAtIndex(unsigned index)
@@ -451,9 +451,9 @@
 JSValueRef AccessibilityUIElement::detailsElements() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *elements = attributeValue(@"AXDetailsElements");
+    auto elements = attributeValue(@"AXDetailsElements");
     if ([elements isKindOfClass:NSArray.class])
-        return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(elements));
+        return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(elements.get()));
     END_AX_OBJC_EXCEPTIONS
 
     return { };
@@ -462,9 +462,9 @@
 JSValueRef AccessibilityUIElement::errorMessageElements() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *elements = attributeValue(@"AXErrorMessageElements");
+    auto elements = attributeValue(@"AXErrorMessageElements");
     if ([elements isKindOfClass:NSArray.class])
-        return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(elements));
+        return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(elements.get()));
     END_AX_OBJC_EXCEPTIONS
 
     return { };
@@ -576,7 +576,7 @@
             || [attribute isEqualToString:@"AXRelativeFrame"])
             continue;
 
-        NSString *value = descriptionOfValue(attributeValue(attribute));
+        NSString *value = descriptionOfValue(attributeValue(attribute).get());
         [values appendFormat:@"%@: %@\n", attribute, value];
     }
 
@@ -585,14 +585,14 @@
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::stringDescriptionOfAttributeValue(JSStringRef attribute)
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
-    NSString *valueDescription = descriptionOfValue(value);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    NSString *valueDescription = descriptionOfValue(value.get());
     return [valueDescription createJSStringRef];
 }
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRef attribute)
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     return nullptr;
@@ -600,7 +600,7 @@
 
 double AccessibilityUIElement::numberAttributeValue(JSStringRef attribute)
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
     if ([value isKindOfClass:[NSNumber class]])
         return [value doubleValue];
     return 0;
@@ -615,13 +615,13 @@
 
 RefPtr<AccessibilityUIElement> AccessibilityUIElement::uiElementAttributeValue(JSStringRef attribute) const
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
-    return AccessibilityUIElement::create(value);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    return AccessibilityUIElement::create(value.get());
 }
 
 bool AccessibilityUIElement::boolAttributeValue(JSStringRef attribute)
 {
-    id value = attributeValue([NSString stringWithJSStringRef:attribute]);
+    auto value = attributeValue([NSString stringWithJSStringRef:attribute]);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     return false;
@@ -693,7 +693,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::role()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *role = descriptionOfValue(attributeValue(NSAccessibilityRoleAttribute));
+    NSString *role = descriptionOfValue(attributeValue(NSAccessibilityRoleAttribute).get());
     return concatenateAttributeAndValue(@"AXRole", role);
     END_AX_OBJC_EXCEPTIONS
 
@@ -703,7 +703,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::subrole()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *subrole = descriptionOfValue(attributeValue(NSAccessibilitySubroleAttribute));
+    NSString *subrole = descriptionOfValue(attributeValue(NSAccessibilitySubroleAttribute).get());
     return concatenateAttributeAndValue(@"AXSubrole", subrole);
     END_AX_OBJC_EXCEPTIONS
 
@@ -713,7 +713,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::roleDescription()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *role = descriptionOfValue(attributeValue(NSAccessibilityRoleDescriptionAttribute));
+    NSString *role = descriptionOfValue(attributeValue(NSAccessibilityRoleDescriptionAttribute).get());
     return concatenateAttributeAndValue(@"AXRoleDescription", role);
     END_AX_OBJC_EXCEPTIONS
 
@@ -723,7 +723,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::computedRoleString()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *computedRoleString = descriptionOfValue(attributeValue(@"AXARIARole"));
+    NSString *computedRoleString = descriptionOfValue(attributeValue(@"AXARIARole").get());
     return [computedRoleString createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
 
@@ -733,7 +733,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::title()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *title = descriptionOfValue(attributeValue(NSAccessibilityTitleAttribute));
+    NSString *title = descriptionOfValue(attributeValue(NSAccessibilityTitleAttribute).get());
     return concatenateAttributeAndValue(@"AXTitle", title);
     END_AX_OBJC_EXCEPTIONS
 
@@ -743,7 +743,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::description()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityDescriptionAttribute));
+    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityDescriptionAttribute).get());
     return concatenateAttributeAndValue(@"AXDescription", description);
     END_AX_OBJC_EXCEPTIONS
 
@@ -753,7 +753,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityOrientationAttribute));
+    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityOrientationAttribute).get());
     return concatenateAttributeAndValue(@"AXOrientation", description);    
     END_AX_OBJC_EXCEPTIONS
 
@@ -763,7 +763,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::stringValue()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityValueAttribute));
+    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityValueAttribute).get());
     if (description)
         return concatenateAttributeAndValue(@"AXValue", description);
     END_AX_OBJC_EXCEPTIONS
@@ -774,7 +774,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::language()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *description = descriptionOfValue(attributeValue(@"AXLanguage"));
+    NSString *description = descriptionOfValue(attributeValue(@"AXLanguage").get());
     return concatenateAttributeAndValue(@"AXLanguage", description);
     END_AX_OBJC_EXCEPTIONS
 
@@ -784,7 +784,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::helpText() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityHelpAttribute));
+    NSString *description = descriptionOfValue(attributeValue(NSAccessibilityHelpAttribute).get());
     return concatenateAttributeAndValue(@"AXHelp", description);
     END_AX_OBJC_EXCEPTIONS
     
@@ -794,7 +794,7 @@
 double AccessibilityUIElement::x()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *positionValue = attributeValue(NSAccessibilityPositionAttribute);
+    auto positionValue = attributeValue(NSAccessibilityPositionAttribute);
     return static_cast<double>([positionValue pointValue].x);    
     END_AX_OBJC_EXCEPTIONS
 
@@ -804,7 +804,7 @@
 double AccessibilityUIElement::y()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *positionValue = attributeValue(NSAccessibilityPositionAttribute);
+    auto positionValue = attributeValue(NSAccessibilityPositionAttribute);
     return static_cast<double>([positionValue pointValue].y);    
     END_AX_OBJC_EXCEPTIONS
 
@@ -814,7 +814,7 @@
 double AccessibilityUIElement::width()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *sizeValue = attributeValue(NSAccessibilitySizeAttribute);
+    auto sizeValue = attributeValue(NSAccessibilitySizeAttribute);
     return static_cast<double>([sizeValue sizeValue].width);
     END_AX_OBJC_EXCEPTIONS
 
@@ -824,7 +824,7 @@
 double AccessibilityUIElement::height()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *sizeValue = attributeValue(NSAccessibilitySizeAttribute);
+    auto sizeValue = attributeValue(NSAccessibilitySizeAttribute);
     return static_cast<double>([sizeValue sizeValue].height);
     END_AX_OBJC_EXCEPTIONS
 
@@ -834,7 +834,7 @@
 double AccessibilityUIElement::clickPointX()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *positionValue = attributeValue(@"AXClickPoint");
+    auto positionValue = attributeValue(@"AXClickPoint");
     return static_cast<double>([positionValue pointValue].x);        
     END_AX_OBJC_EXCEPTIONS
 
@@ -844,7 +844,7 @@
 double AccessibilityUIElement::clickPointY()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *positionValue = attributeValue(@"AXClickPoint");
+    auto positionValue = attributeValue(@"AXClickPoint");
     return static_cast<double>([positionValue pointValue].y);
     END_AX_OBJC_EXCEPTIONS
 
@@ -854,7 +854,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::lineRectsAndText() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id lineRectsAndText = attributeValue(@"AXLineRectsAndText");
+    auto lineRectsAndText = attributeValue(@"AXLineRectsAndText");
     if (![lineRectsAndText isKindOfClass:NSArray.class])
         return { };
     return [[lineRectsAndText componentsJoinedByString:@"|"] createJSStringRef];
@@ -866,7 +866,7 @@
 double AccessibilityUIElement::intValue() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityValueAttribute);
+    auto value = attributeValue(NSAccessibilityValueAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [(NSNumber*)value doubleValue]; 
     END_AX_OBJC_EXCEPTIONS
@@ -877,7 +877,7 @@
 double AccessibilityUIElement::minValue()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityMinValueAttribute);
+    auto value = attributeValue(NSAccessibilityMinValueAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [(NSNumber*)value doubleValue]; 
     END_AX_OBJC_EXCEPTIONS
@@ -888,7 +888,7 @@
 double AccessibilityUIElement::maxValue()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityMaxValueAttribute);
+    auto value = attributeValue(NSAccessibilityMaxValueAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [(NSNumber*)value doubleValue]; 
     END_AX_OBJC_EXCEPTIONS
@@ -899,9 +899,9 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::valueDescription()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *valueDescription = attributeValue(NSAccessibilityValueDescriptionAttribute);
+    auto valueDescription = attributeValue(NSAccessibilityValueDescriptionAttribute);
     if ([valueDescription isKindOfClass:[NSString class]])
-        return concatenateAttributeAndValue(@"AXValueDescription", valueDescription);
+        return concatenateAttributeAndValue(@"AXValueDescription", valueDescription.get());
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -910,7 +910,7 @@
 int AccessibilityUIElement::insertionPointLineNumber()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityInsertionPointLineNumberAttribute);
+    auto value = attributeValue(NSAccessibilityInsertionPointLineNumberAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [(NSNumber *)value intValue]; 
     END_AX_OBJC_EXCEPTIONS
@@ -951,7 +951,7 @@
 bool AccessibilityUIElement::isEnabled()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityEnabledAttribute);
+    auto value = attributeValue(NSAccessibilityEnabledAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -962,7 +962,7 @@
 bool AccessibilityUIElement::isRequired() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXRequired");
+    auto value = attributeValue(@"AXRequired");
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -973,7 +973,7 @@
 bool AccessibilityUIElement::isFocused() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityFocusedAttribute);
+    auto value = attributeValue(NSAccessibilityFocusedAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -983,7 +983,7 @@
 
 bool AccessibilityUIElement::isSelected() const
 {
-    id value = attributeValue(NSAccessibilitySelectedAttribute);
+    auto value = attributeValue(NSAccessibilitySelectedAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     return false;
@@ -997,7 +997,7 @@
 bool AccessibilityUIElement::isIndeterminate() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityValueAttribute);
+    auto value = attributeValue(NSAccessibilityValueAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value intValue] == 2;
     END_AX_OBJC_EXCEPTIONS
@@ -1008,7 +1008,7 @@
 bool AccessibilityUIElement::isExpanded() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityExpandedAttribute);
+    auto value = attributeValue(NSAccessibilityExpandedAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1024,7 +1024,7 @@
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::currentStateValue() const
 {
-    id value = attributeValue(NSAccessibilityARIACurrentAttribute);
+    auto value = attributeValue(NSAccessibilityARIACurrentAttribute);
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     return nullptr;
@@ -1032,7 +1032,7 @@
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::sortDirection() const
 {
-    id value = attributeValue(NSAccessibilitySortDirectionAttribute);
+    auto value = attributeValue(NSAccessibilitySortDirectionAttribute);
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     return nullptr;
@@ -1041,7 +1041,7 @@
 int AccessibilityUIElement::hierarchicalLevel() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityDisclosureLevelAttribute);
+    auto value = attributeValue(NSAccessibilityDisclosureLevelAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value intValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1052,7 +1052,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::classList() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXDOMClassList");
+    auto value = attributeValue(@"AXDOMClassList");
     if (![value isKindOfClass:[NSArray class]])
         return nullptr;
 
@@ -1073,7 +1073,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::speakAs()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXDRTSpeechAttribute");
+    auto value = attributeValue(@"AXDRTSpeechAttribute");
     if ([value isKindOfClass:[NSArray class]])
         return [[(NSArray *)value componentsJoinedByString:@", "] createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
@@ -1084,7 +1084,7 @@
 bool AccessibilityUIElement::ariaIsGrabbed() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityGrabbedAttribute);
+    auto value = attributeValue(NSAccessibilityGrabbedAttribute);
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1095,7 +1095,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::ariaDropEffects() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(NSAccessibilityDropEffectsAttribute);
+    auto value = attributeValue(NSAccessibilityDropEffectsAttribute);
     if (![value isKindOfClass:[NSArray class]])
         return nullptr;
 
@@ -1270,8 +1270,8 @@
 {
     // not yet defined in AppKit... odd
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *columnHeadersArray = attributeValue(@"AXColumnHeaderUIElements");
-    auto columnHeadersVector = makeVector<RefPtr<AccessibilityUIElement>>(columnHeadersArray);
+    auto columnHeaders = attributeValue(@"AXColumnHeaderUIElements");
+    auto columnHeadersVector = makeVector<RefPtr<AccessibilityUIElement>>(columnHeaders.get());
     return descriptionOfElements(columnHeadersVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1281,8 +1281,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfRowHeaders()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *rowHeadersArray = attributeValue(@"AXRowHeaderUIElements");
-    auto rowHeadersVector = makeVector<RefPtr<AccessibilityUIElement>>(rowHeadersArray);
+    auto rowHeaders = attributeValue(@"AXRowHeaderUIElements");
+    auto rowHeadersVector = makeVector<RefPtr<AccessibilityUIElement>>(rowHeaders.get());
     return descriptionOfElements(rowHeadersVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1292,8 +1292,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfColumns()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *columnsArray = attributeValue(NSAccessibilityColumnsAttribute);
-    auto columnsVector = makeVector<RefPtr<AccessibilityUIElement>>(columnsArray);
+    auto columns = attributeValue(NSAccessibilityColumnsAttribute);
+    auto columnsVector = makeVector<RefPtr<AccessibilityUIElement>>(columns.get());
     return descriptionOfElements(columnsVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1303,8 +1303,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfRows()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *rowsArray = attributeValue(NSAccessibilityRowsAttribute);
-    auto rowsVector = makeVector<RefPtr<AccessibilityUIElement>>(rowsArray);
+    auto rows = attributeValue(NSAccessibilityRowsAttribute);
+    auto rowsVector = makeVector<RefPtr<AccessibilityUIElement>>(rows.get());
     return descriptionOfElements(rowsVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1314,8 +1314,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfVisibleCells()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *cellsArray = attributeValue(@"AXVisibleCells");
-    auto cellsVector = makeVector<RefPtr<AccessibilityUIElement>>(cellsArray);
+    auto cells = attributeValue(@"AXVisibleCells");
+    auto cellsVector = makeVector<RefPtr<AccessibilityUIElement>>(cells.get());
     return descriptionOfElements(cellsVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1325,12 +1325,12 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfHeader()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id headerObject = attributeValue(NSAccessibilityHeaderAttribute);
-    if (!headerObject)
+    auto header = attributeValue(NSAccessibilityHeaderAttribute);
+    if (!header)
         return [@"" createJSStringRef];
 
     Vector<RefPtr<AccessibilityUIElement>> headerVector;
-    headerVector.append(AccessibilityUIElement::create(headerObject));
+    headerVector.append(AccessibilityUIElement::create(header.get()));
     return descriptionOfElements(headerVector);
     END_AX_OBJC_EXCEPTIONS
 
@@ -1358,7 +1358,7 @@
 int AccessibilityUIElement::indexInTable()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSNumber *indexNumber = attributeValue(NSAccessibilityIndexAttribute);
+    auto indexNumber = attributeValue(NSAccessibilityIndexAttribute);
     if (indexNumber)
         return [indexNumber intValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1370,7 +1370,7 @@
 {
     NSRange range = NSMakeRange(0, 0);
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *indexRange = attributeValue(@"AXRowIndexRange");
+    auto indexRange = attributeValue(@"AXRowIndexRange");
     if (indexRange)
         range = [indexRange rangeValue];
     NSMutableString *rangeDescription = [NSMutableString stringWithFormat:@"{%lu, %lu}", static_cast<unsigned long>(range.location), static_cast<unsigned long>(range.length)];
@@ -1384,7 +1384,7 @@
 {
     NSRange range = NSMakeRange(0, 0);
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSNumber *indexRange = attributeValue(@"AXColumnIndexRange");
+    auto indexRange = attributeValue(@"AXColumnIndexRange");
     if (indexRange)
         range = [indexRange rangeValue];
     NSMutableString *rangeDescription = [NSMutableString stringWithFormat:@"{%lu, %lu}", static_cast<unsigned long>(range.location), static_cast<unsigned long>(range.length)];
@@ -1410,7 +1410,7 @@
         return nullptr;
 
     BEGIN_AX_OBJC_EXCEPTIONS
-    return AccessibilityUIElement::create(attributeValue(NSAccessibilityHorizontalScrollBarAttribute));
+    return AccessibilityUIElement::create(attributeValue(NSAccessibilityHorizontalScrollBarAttribute).get());
     END_AX_OBJC_EXCEPTIONS    
 
     return nullptr;
@@ -1422,7 +1422,7 @@
         return nullptr;
 
     BEGIN_AX_OBJC_EXCEPTIONS
-    return AccessibilityUIElement::create(attributeValue(NSAccessibilityVerticalScrollBarAttribute));
+    return AccessibilityUIElement::create(attributeValue(NSAccessibilityVerticalScrollBarAttribute).get());
     END_AX_OBJC_EXCEPTIONS        
 
     return nullptr;
@@ -1453,7 +1453,7 @@
 {
     NSRange range = NSMakeRange(NSNotFound, 0);
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSValue *indexRange = attributeValue(NSAccessibilitySelectedTextRangeAttribute);
+    auto indexRange = attributeValue(NSAccessibilitySelectedTextRangeAttribute);
     if (indexRange)
         range = [indexRange rangeValue];
     NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@"{%lu, %lu}", static_cast<unsigned long>(range.location), static_cast<unsigned long>(range.length)];
@@ -1550,7 +1550,7 @@
     if (!element)
         return;
 
-    NSArray *selectedChildren = attributeValue(NSAccessibilitySelectedChildrenAttribute);
+    auto selectedChildren = attributeValue(NSAccessibilitySelectedChildrenAttribute);
     NSArray *array = @[element->platformUIElement()];
     if (selectedChildren)
         array = [selectedChildren arrayByAddingObjectsFromArray:array];
@@ -1564,11 +1564,11 @@
     if (!element)
         return;
 
-    NSArray *selectedChildren = attributeValue(NSAccessibilitySelectedChildrenAttribute);
+    auto selectedChildren = attributeValue(NSAccessibilitySelectedChildrenAttribute);
     if (!selectedChildren)
         return;
 
-    NSMutableArray *array = [NSMutableArray arrayWithArray:selectedChildren];
+    NSMutableArray *array = [NSMutableArray arrayWithArray:selectedChildren.get()];
     [array removeObject:element->platformUIElement()];
 
     setAttributeValue(m_element.get(), NSAccessibilitySelectedChildrenAttribute, array, true);
@@ -1586,7 +1586,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::documentEncoding()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXDocumentEncoding");
+    auto value = attributeValue(@"AXDocumentEncoding");
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
@@ -1596,7 +1596,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::documentURI()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXDocumentURI");
+    auto value = attributeValue(@"AXDocumentURI");
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
@@ -1606,8 +1606,9 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::url()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSURL *url = ""
-    return [[url absoluteString] createJSStringRef];    
+    auto url = ""
+    if ([url isKindOfClass:[NSURL class]])
+        return [[url absoluteString] createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
     return nullptr;
 }
@@ -1662,7 +1663,7 @@
 bool AccessibilityUIElement::isMultiSelectable() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXIsMultiSelectable");
+    auto value = attributeValue(@"AXIsMultiSelectable");
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1676,7 +1677,7 @@
 
 bool AccessibilityUIElement::isOnScreen() const
 {
-    id value = attributeValue(@"AXIsOnScreen");
+    auto value = attributeValue(@"AXIsOnScreen");
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     return false;
@@ -1695,7 +1696,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSString *value = descriptionOfValue(attributeValue(@"AXEmbeddedImageDescription"));
+    NSString *value = descriptionOfValue(attributeValue(@"AXEmbeddedImageDescription").get());
     return concatenateAttributeAndValue(@"AXEmbeddedImageDescription", value);
     END_AX_OBJC_EXCEPTIONS
     return nullptr;
@@ -1704,7 +1705,7 @@
 JSValueRef AccessibilityUIElement::imageOverlayElements() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXImageOverlayElements")));
+    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXImageOverlayElements").get()));
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -1732,7 +1733,7 @@
 bool AccessibilityUIElement::hasPopup() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXHasPopup");
+    auto value = attributeValue(@"AXHasPopup");
     if ([value isKindOfClass:[NSNumber class]])
         return [value boolValue];
     END_AX_OBJC_EXCEPTIONS
@@ -1743,7 +1744,7 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::popupValue() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id value = attributeValue(@"AXPopupValue");
+    auto value = attributeValue(@"AXPopupValue");
     if ([value isKindOfClass:[NSString class]])
         return [value createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
@@ -1897,8 +1898,8 @@
 RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::selectedTextMarkerRange()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id textMarkerRange = attributeValue(NSAccessibilitySelectedTextMarkerRangeAttribute);
-    return AccessibilityTextMarkerRange::create(textMarkerRange);
+    auto textMarkerRange = attributeValue(NSAccessibilitySelectedTextMarkerRangeAttribute);
+    return AccessibilityTextMarkerRange::create(textMarkerRange.get());
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -1906,11 +1907,11 @@
 
 void AccessibilityUIElement::resetSelectedTextMarkerRange()
 {
-    id start = attributeValue(@"AXStartTextMarker");
+    auto start = attributeValue(@"AXStartTextMarker");
     if (!start)
         return;
 
-    NSArray* textMarkers = @[start, start];
+    NSArray *textMarkers = @[start.get(), start.get()];
     id textMarkerRange = [m_element accessibilityAttributeValue:@"AXTextMarkerRangeForUnorderedTextMarkers" forParameter:textMarkers];
     if (!textMarkerRange)
         return;
@@ -2120,8 +2121,8 @@
 RefPtr<AccessibilityTextMarker> AccessibilityUIElement::startTextMarker()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id textMarker = attributeValue(@"AXStartTextMarker");
-    return AccessibilityTextMarker::create(textMarker);
+    auto textMarker = attributeValue(@"AXStartTextMarker");
+    return AccessibilityTextMarker::create(textMarker.get());
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -2130,8 +2131,8 @@
 RefPtr<AccessibilityTextMarker> AccessibilityUIElement::endTextMarker()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    id textMarker = attributeValue(@"AXEndTextMarker");
-    return AccessibilityTextMarker::create(textMarker);
+    auto textMarker = attributeValue(@"AXEndTextMarker");
+    return AccessibilityTextMarker::create(textMarker.get());
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -2281,8 +2282,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::mathPostscriptsDescription() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *pairs = attributeValue(@"AXMathPostscripts");
-    return [_convertMathMultiscriptPairsToString(pairs) createJSStringRef];
+    auto pairs = attributeValue(@"AXMathPostscripts");
+    return [_convertMathMultiscriptPairsToString(pairs.get()) createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -2291,8 +2292,8 @@
 JSRetainPtr<JSStringRef> AccessibilityUIElement::mathPrescriptsDescription() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    NSArray *pairs = attributeValue(@"AXMathPrescripts");
-    return [_convertMathMultiscriptPairsToString(pairs) createJSStringRef];
+    auto pairs = attributeValue(@"AXMathPrescripts");
+    return [_convertMathMultiscriptPairsToString(pairs.get()) createJSStringRef];
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -2301,7 +2302,7 @@
 JSValueRef AccessibilityUIElement::mathRootRadicand() const
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXMathRootRadicand")));
+    return makeJSArray(makeVector<RefPtr<AccessibilityUIElement>>(attributeValue(@"AXMathRootRadicand").get()));
     END_AX_OBJC_EXCEPTIONS
 
     return nullptr;
@@ -2311,7 +2312,7 @@
 {
     BEGIN_AX_OBJC_EXCEPTIONS
     NSMutableString *result = [NSMutableString stringWithString:@"\nStart Path\n"];
-    NSBezierPath *bezierPath = attributeValue(NSAccessibilityPathAttribute);
+    auto bezierPath = attributeValue(NSAccessibilityPathAttribute);
 
     NSUInteger elementCount = [bezierPath elementCount];
     NSPoint points[3];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to