[GTK] Don't use deprecated AccessibilityObject methods after r99502
authormario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Oct 2012 17:32:52 +0000 (17:32 +0000)
committermario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 22 Oct 2012 17:32:52 +0000 (17:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=99985

Reviewed by Chris Fleizach.

Source/WebCore:

Update callers for AccessibilityObject's title() and
accessibilityDescription() so they now use AccessibilityText.

* accessibility/gtk/WebKitAccessibleUtil.cpp:
(titleTagShouldBeUsedInDescriptionField): Internal helper function.
(accessibilityTitle): New helper function, returns an String with
the title for a AccessibilityObject, using AccessibleText.
(accessibilityDescription): New helper function, returns an String with
the description for a AccessibilityObject, using AccessibleText.
* accessibility/gtk/WebKitAccessibleUtil.h: Added public
declarations for accessibilityTitle and accessibilityDescription.

* accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
(webkitAccessibleGetName): Use new helpers for retrieving the title.
(webkitAccessibleGetDescription): Use new helpers for retrieving
the title and description.

* accessibility/gtk/WebKitAccessibleInterfaceImage.cpp:
(webkitAccessibleImageGetImageDescription): Use new helpers for
retrieving the title.

LayoutTests:

Update test and expectations to reflect the changes in the
accessible title (now it's the localized one) being returned.

* platform/gtk/accessibility/media-controls-panel-title-expected.txt: Updated.
* platform/gtk/accessibility/media-controls-panel-title.html: Updated.

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

LayoutTests/ChangeLog
LayoutTests/platform/gtk/accessibility/media-controls-panel-title-expected.txt
LayoutTests/platform/gtk/accessibility/media-controls-panel-title.html
Source/WebCore/ChangeLog
Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceImage.cpp
Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.cpp
Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h
Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp

index 4aec56c..801dd5d 100644 (file)
@@ -1,3 +1,16 @@
+2012-10-22  Mario Sanchez Prada  <msanchez@igalia.com>
+
+        [GTK] Don't use deprecated AccessibilityObject methods after r99502
+        https://bugs.webkit.org/show_bug.cgi?id=99985
+
+        Reviewed by Chris Fleizach.
+
+        Update test and expectations to reflect the changes in the
+        accessible title (now it's the localized one) being returned.
+
+        * platform/gtk/accessibility/media-controls-panel-title-expected.txt: Updated.
+        * platform/gtk/accessibility/media-controls-panel-title.html: Updated.
+
 2012-10-19  Emil A Eklund  <eae@chromium.org>
 
         Convert fast/sub-pixel/file-upload-control-at-fractional-offset-expected.html to ref test
index e3e3cef..5ecd16f 100644 (file)
@@ -6,7 +6,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 PASS element.role is 'AXRole: AXGroup'
 PASS element.title is 'AXTitle: '
 PASS element.role is 'AXRole: AXToolbar'
-PASS element.title is 'AXTitle: media controls'
+PASS element.title is 'AXTitle: video element controller'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1f7717a..6935522 100644 (file)
@@ -17,7 +17,7 @@ if (window.accessibilityController) {
     shouldBe("element.title", "'AXTitle: '");
     element = element.childAtIndex(0);
     shouldBe("element.role", "'AXRole: AXToolbar'");
-    shouldBe("element.title", "'AXTitle: media controls'");
+    shouldBe("element.title", "'AXTitle: video element controller'");
 }
 
 </script>
index 6a28de0..869ed4a 100644 (file)
@@ -1,3 +1,31 @@
+2012-10-22  Mario Sanchez Prada  <msanchez@igalia.com>
+
+        [GTK] Don't use deprecated AccessibilityObject methods after r99502
+        https://bugs.webkit.org/show_bug.cgi?id=99985
+
+        Reviewed by Chris Fleizach.
+
+        Update callers for AccessibilityObject's title() and
+        accessibilityDescription() so they now use AccessibilityText.
+
+        * accessibility/gtk/WebKitAccessibleUtil.cpp:
+        (titleTagShouldBeUsedInDescriptionField): Internal helper function.
+        (accessibilityTitle): New helper function, returns an String with
+        the title for a AccessibilityObject, using AccessibleText.
+        (accessibilityDescription): New helper function, returns an String with
+        the description for a AccessibilityObject, using AccessibleText.
+        * accessibility/gtk/WebKitAccessibleUtil.h: Added public
+        declarations for accessibilityTitle and accessibilityDescription.
+
+        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
+        (webkitAccessibleGetName): Use new helpers for retrieving the title.
+        (webkitAccessibleGetDescription): Use new helpers for retrieving
+        the title and description.
+
+        * accessibility/gtk/WebKitAccessibleInterfaceImage.cpp:
+        (webkitAccessibleImageGetImageDescription): Use new helpers for
+        retrieving the title.
+
 2012-10-16  Andrey Kosyakov  <caseq@chromium.org>
 
         Web Inspector: add timeline instrumentation for scrolling of a layer
index f9e42b8..3ecc964 100644 (file)
@@ -54,7 +54,7 @@ static void webkitAccessibleImageGetImagePosition(AtkImage* image, gint* x, gint
 
 static const gchar* webkitAccessibleImageGetImageDescription(AtkImage* image)
 {
-    return returnString(core(image)->accessibilityDescription());
+    return returnString(accessibilityDescription(core(image)));
 }
 
 static void webkitAccessibleImageGetImageSize(AtkImage* image, gint* width, gint* height)
index 43f413f..a3a0e17 100644 (file)
@@ -85,6 +85,65 @@ const char* returnString(const String& str)
     return returnedString.data();
 }
 
+// FIXME: Different kinds of elements are putting the title tag to use
+// in different AX fields. This might not be 100% correct but we will
+// keep it now in order to achieve consistency with previous behavior.
+static bool titleTagShouldBeUsedInDescriptionField(AccessibilityObject* coreObject)
+{
+    return (coreObject->isLink() && !coreObject->isImageMapLink()) || coreObject->isImage();
+}
+
+// This should be the "visible" text that's actually on the screen if possible.
+// If there's alternative text, that can override the title.
+String accessibilityTitle(AccessibilityObject* coreObject)
+{
+    Vector<AccessibilityText> textOrder;
+    coreObject->accessibilityText(textOrder);
+
+    unsigned length = textOrder.size();
+    for (unsigned k = 0; k < length; k++) {
+        const AccessibilityText& text = textOrder[k];
+
+        // Once we encounter visible text, or the text from our children that should be used foremost.
+        if (text.textSource == VisibleText || text.textSource == ChildrenText)
+            return text.text;
+
+        // If there's an element that labels this object and it's not exposed, then we should use
+        // that text as our title.
+        if (text.textSource == LabelByElementText && !coreObject->exposesTitleUIElement())
+            return text.text;
+
+        // Elements of role ToolbarRole will return its title as AlternativeText.
+        if (coreObject->roleValue() == ToolbarRole && text.textSource == AlternativeText)
+            return text.text;
+
+        // FIXME: The title tag is used in certain cases for the title. This usage should
+        // probably be in the description field since it's not "visible".
+        if (text.textSource == TitleTagText && !titleTagShouldBeUsedInDescriptionField(coreObject))
+            return text.text;
+    }
+    return String();
+}
+
+String accessibilityDescription(AccessibilityObject* coreObject)
+{
+    Vector<AccessibilityText> textOrder;
+    coreObject->accessibilityText(textOrder);
+
+    unsigned length = textOrder.size();
+    for (unsigned k = 0; k < length; k++) {
+        const AccessibilityText& text = textOrder[k];
+
+        if (text.textSource == AlternativeText)
+            return text.text;
+
+        if (text.textSource == TitleTagText && titleTagShouldBeUsedInDescriptionField(coreObject))
+            return text.text;
+    }
+
+    return String();
+}
+
 bool selectionBelongsToObject(AccessibilityObject* coreObject, VisibleSelection& selection)
 {
     if (!coreObject || !coreObject->isAccessibilityRenderObject())
index ec1cd51..cd69b29 100644 (file)
@@ -37,6 +37,10 @@ void contentsRelativeToAtkCoordinateType(WebCore::AccessibilityObject*, AtkCoord
 
 const char* returnString(const String&);
 
+String accessibilityTitle(WebCore::AccessibilityObject*);
+
+String accessibilityDescription(WebCore::AccessibilityObject*);
+
 bool selectionBelongsToObject(WebCore::AccessibilityObject*, WebCore::VisibleSelection&);
 
 #endif // WebKitAccessibleUtil_h
index b197cb2..a1f647b 100644 (file)
@@ -141,7 +141,7 @@ static const gchar* webkitAccessibleGetName(AtkObject* object)
 
     // Nothing worked so far, try with the AccessibilityObject's
     // title() before going ahead with stringValue().
-    String axTitle = coreObject->title();
+    String axTitle = accessibilityTitle(coreObject);
     if (!axTitle.isEmpty())
         return returnString(axTitle);
 
@@ -155,7 +155,7 @@ static const gchar* webkitAccessibleGetDescription(AtkObject* object)
     if (coreObject->isAccessibilityRenderObject())
         node = coreObject->node();
     if (!node || !node->isHTMLElement() || coreObject->ariaRoleAttribute() != UnknownRole)
-        return returnString(coreObject->accessibilityDescription());
+        return returnString(accessibilityDescription(coreObject));
 
     // atk_table_get_summary returns an AtkObject. We have no summary object, so expose summary here.
     if (coreObject->roleValue() == TableRole) {
@@ -170,7 +170,7 @@ static const gchar* webkitAccessibleGetDescription(AtkObject* object)
     if (!title.isEmpty())
         return returnString(title);
 
-    return returnString(coreObject->accessibilityDescription());
+    return returnString(accessibilityDescription(coreObject));
 }
 
 static void setAtkRelationSetFromCoreObject(AccessibilityObject* coreObject, AtkRelationSet* relationSet)