[ATK] Expose state of aria-invalid as ATK_STATE_INVALID_ENTRY
authormario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Oct 2013 10:55:25 +0000 (10:55 +0000)
committermario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Oct 2013 10:55:25 +0000 (10:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=122104

Reviewed by Chris Fleizach.

Source/WebCore:

Map invalid state of an AccessibilityObject to the proper AtkState.

* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(setAtkStateSetFromCoreObject): Add the mapping.

Tools:

Updated stringAttributeValue to double check that the exposure of
aria-invalid as a state is consistent with its exposure as a text
attribute as well, when it applies (implementations of AtkText).

* DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
(AccessibilityUIElement::stringAttributeValue): Add double check.
* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::stringAttributeValue): Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157096 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp
Tools/ChangeLog
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp

index f71f7cb..d9aefda 100644 (file)
@@ -1,3 +1,15 @@
+2013-10-08  Mario Sanchez Prada  <mario.prada@samsung.com>
+
+        [ATK] Expose state of aria-invalid as ATK_STATE_INVALID_ENTRY
+        https://bugs.webkit.org/show_bug.cgi?id=122104
+
+        Reviewed by Chris Fleizach.
+
+        Map invalid state of an AccessibilityObject to the proper AtkState.
+
+        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
+        (setAtkStateSetFromCoreObject): Add the mapping.
+
 2013-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>
 
 
index db1f60d..10a7215 100644 (file)
@@ -725,6 +725,9 @@ static void setAtkStateSetFromCoreObject(AccessibilityObject* coreObject, AtkSta
     if (coreObject->isIndeterminate())
         atk_state_set_add_state(stateSet, ATK_STATE_INDETERMINATE);
 
+    if (coreObject->invalidStatus() != "false")
+        atk_state_set_add_state(stateSet, ATK_STATE_INVALID_ENTRY);
+
     if (coreObject->isMultiSelectable())
         atk_state_set_add_state(stateSet, ATK_STATE_MULTISELECTABLE);
 
index 1553616..2deeaeb 100644 (file)
@@ -1,3 +1,19 @@
+2013-10-08  Mario Sanchez Prada  <mario.prada@samsung.com>
+
+        [ATK] Expose state of aria-invalid as ATK_STATE_INVALID_ENTRY
+        https://bugs.webkit.org/show_bug.cgi?id=122104
+
+        Reviewed by Chris Fleizach.
+
+        Updated stringAttributeValue to double check that the exposure of
+        aria-invalid as a state is consistent with its exposure as a text
+        attribute as well, when it applies (implementations of AtkText).
+
+        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
+        (AccessibilityUIElement::stringAttributeValue): Add double check.
+        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
+        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
+
 2013-10-07  Filip Pizlo  <fpizlo@apple.com>
 
         run-jsc-stress-tests progress meter should update more quickly on older Rubies
index 78ad9f1..5b32db2 100644 (file)
@@ -1038,6 +1038,20 @@ JSStringRef AccessibilityUIElement::stringAttributeValue(JSStringRef attribute)
     if (attributeValue.isEmpty() && ATK_IS_TEXT(m_element))
         attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element), 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, 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());
 }
 
index 01171c2..2b62b4e 100644 (file)
@@ -658,6 +658,20 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRe
     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());
 }