JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRef attribute) { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); String atkAttributeName = coreAttributeToAtkAttribute(attribute); // Try object attributes first. String attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, atkAttributeName); // Try text attributes if the requested one was not found and we have an AtkText object. if (attributeValue.isEmpty() && ATK_IS_TEXT(m_element.get())) attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), TextAttributeType, atkAttributeName); // Additional check to make sure that the exposure of the state ATK_STATE_INVALID_ENTRY // is consistent with the exposure of aria-invalid as a text attribute, if present. if (atkAttributeName == attributesMap[InvalidNameIndex][AtkDomain]) { bool isInvalidState = checkElementState(m_element.get(), ATK_STATE_INVALID_ENTRY); if (attributeValue.isEmpty()) return JSStringCreateWithUTF8CString(isInvalidState ? "true" : "false"); // If the text attribute was there, check that it's consistent with // what the state says or force the test to fail otherwise. bool isAriaInvalid = attributeValue != "false"; if (isInvalidState != isAriaInvalid) return JSStringCreateWithCharacters(0, 0); } return JSStringCreateWithUTF8CString(attributeValue.utf8().data()); }
JSStringRef AccessibilityUIElement::stringAttributeValue(JSStringRef attribute) { if (!m_element) return JSStringCreateWithCharacters(0, 0); String atkAttributeName = coreAttributeToAtkAttribute(attribute); if (atkAttributeName.isEmpty()) return JSStringCreateWithCharacters(0, 0); String attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element), atkAttributeName.utf8().data()); return JSStringCreateWithUTF8CString(attributeValue.utf8().data()); }
bool AccessibilityUIElement::isAttributeSupported(JSStringRef attribute) { if (!ATK_IS_OBJECT(m_element.get())) return false; String atkAttributeName = coreAttributeToAtkAttribute(attribute); if (atkAttributeName.isEmpty()) return false; // For now, an attribute is supported whether it's exposed as a object or a text attribute. String attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, atkAttributeName); if (attributeValue.isEmpty()) attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), TextAttributeType, atkAttributeName); return !attributeValue.isEmpty(); }
JSStringRef AccessibilityUIElement::stringAttributeValue(JSStringRef attribute) { if (!m_element) return JSStringCreateWithCharacters(0, 0); String atkAttributeName = coreAttributeToAtkAttribute(attribute); if (atkAttributeName.isEmpty()) return JSStringCreateWithCharacters(0, 0); for (GSList* atkAttributes = atk_object_get_attributes(ATK_OBJECT(m_element)); atkAttributes; atkAttributes = atkAttributes->next) { AtkAttribute* atkAttribute = static_cast<AtkAttribute*>(atkAttributes->data); if (!strcmp(atkAttribute->name, atkAttributeName.utf8().data())) return JSStringCreateWithUTF8CString(atkAttribute->value); } return JSStringCreateWithCharacters(0, 0); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRef attribute) { if (!m_element) return JSStringCreateWithCharacters(0, 0); String atkAttributeName = coreAttributeToAtkAttribute(attribute); if (atkAttributeName.isNull()) return JSStringCreateWithCharacters(0, 0); GOwnPtr<gchar> attributeValue; GOwnPtr<GSList> objectAttributes(atk_object_get_attributes(ATK_OBJECT(m_element.get()))); for (GSList* attributes = objectAttributes.get(); attributes; attributes = attributes->next) { AtkAttribute* atkAttribute = static_cast<AtkAttribute*>(attributes->data); if (!strcmp(atkAttribute->name, atkAttributeName.utf8().data())) { attributeValue.set(g_strdup(atkAttribute->value)); break; } } attributesClear(objectAttributes.get()); return JSStringCreateWithUTF8CString(attributeValue.get()); }