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()); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); const gchar* axOrientation = nullptr; if (checkElementState(m_element.get(), ATK_STATE_HORIZONTAL)) axOrientation = "AXOrientation: AXHorizontalOrientation"; else if (checkElementState(m_element.get(), ATK_STATE_VERTICAL)) axOrientation = "AXOrientation: AXVerticalOrientation"; if (!axOrientation) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(axOrientation); }
JSStringRef AccessibilityUIElement::orientation() const { if (!m_element || !ATK_IS_OBJECT(m_element)) return JSStringCreateWithCharacters(0, 0); const char* axOrientation = 0; if (checkElementState(m_element, ATK_STATE_HORIZONTAL)) axOrientation = "AXOrientation: AXHorizontalOrientation"; else if (checkElementState(m_element, ATK_STATE_VERTICAL)) axOrientation = "AXOrientation: AXVerticalOrientation"; if (!axOrientation) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(axOrientation); }
bool AccessibilityUIElement::isSelected() const { return checkElementState(m_element, ATK_STATE_SELECTED); }
bool AccessibilityUIElement::isEnabled() { return checkElementState(m_element, ATK_STATE_ENABLED); }
bool AccessibilityUIElement::isMultiSelectable() const { return checkElementState(m_element, ATK_STATE_MULTISELECTABLE); }
bool AccessibilityUIElement::isVisible() const { return checkElementState(m_element.get(), ATK_STATE_VISIBLE); }
bool AccessibilityUIElement::isSelectable() const { return checkElementState(m_element.get(), ATK_STATE_SELECTABLE); }
bool AccessibilityUIElement::isFocusable() const { return checkElementState(m_element.get(), ATK_STATE_FOCUSABLE); }
bool AccessibilityUIElement::isChecked() const { return checkElementState(m_element.get(), ATK_STATE_CHECKED); }
bool AccessibilityUIElement::isExpanded() const { return checkElementState(m_element.get(), ATK_STATE_EXPANDED); }
bool AccessibilityUIElement::isRequired() const { return checkElementState(m_element.get(), ATK_STATE_REQUIRED); }