Index: content/browser/accessibility/browser_accessibility_auralinux.cc |
diff --git a/content/browser/accessibility/browser_accessibility_auralinux.cc b/content/browser/accessibility/browser_accessibility_auralinux.cc |
index d3a41e923532d32d49e51389616d0b2ce822349c..9fb8e4b3e93d24be6d40de299c934cc7e4746bf0 100644 |
--- a/content/browser/accessibility/browser_accessibility_auralinux.cc |
+++ b/content/browser/accessibility/browser_accessibility_auralinux.cc |
@@ -269,6 +269,77 @@ static const GInterfaceInfo DocumentInfo = { |
reinterpret_cast<GInterfaceInitFunc>(DocumentInterfaceInit), 0, 0}; |
// |
+// AtkImage interface. |
+// |
+ |
+static BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux( |
+ AtkImage* atk_img) { |
+ if (!IS_BROWSER_ACCESSIBILITY(atk_img)) |
+ return NULL; |
+ |
+ return ToBrowserAccessibilityAuraLinux(BROWSER_ACCESSIBILITY(atk_img)); |
+} |
+ |
+void GetImagePositionSize(BrowserAccessibilityAuraLinux* obj, |
+ gint* x, |
+ gint* y, |
+ gint* width, |
+ gint* height) { |
+ gfx::Rect img_pos_size = obj->GetGlobalBoundsRect(); |
+ |
+ if (x) |
+ *x = img_pos_size.x(); |
+ if (y) |
+ *y = img_pos_size.y(); |
+ if (width) |
+ *width = img_pos_size.width(); |
+ if (height) |
+ *height = img_pos_size.height(); |
+} |
+ |
+static void browser_accessibility_get_image_position(AtkImage* atk_img, |
+ gint* x, |
+ gint* y, |
+ AtkCoordType coordType) { |
+ g_return_if_fail(ATK_IMAGE(atk_img)); |
+ BrowserAccessibilityAuraLinux* obj = ToBrowserAccessibilityAuraLinux(atk_img); |
+ if (!obj) |
+ return; |
+ |
+ GetImagePositionSize(obj, x, y, nullptr, nullptr); |
+} |
+ |
+static const gchar* browser_accessibility_get_image_description( |
+ AtkImage* atk_img) { |
+ g_return_val_if_fail(ATK_IMAGE(atk_img), 0); |
+ BrowserAccessibilityAuraLinux* obj = ToBrowserAccessibilityAuraLinux(atk_img); |
+ if (!obj) |
+ return 0; |
+ |
+ return obj->GetStringAttribute(ui::AX_ATTR_DESCRIPTION).c_str(); |
+} |
+ |
+static void browser_accessibility_get_image_size(AtkImage* atk_img, |
+ gint* width, |
+ gint* height) { |
+ g_return_if_fail(ATK_IMAGE(atk_img)); |
+ BrowserAccessibilityAuraLinux* obj = ToBrowserAccessibilityAuraLinux(atk_img); |
+ if (!obj) |
+ return; |
+ |
+ GetImagePositionSize(obj, nullptr, nullptr, width, height); |
+} |
+ |
+void ImageInterfaceInit(AtkImageIface* iface) { |
+ iface->get_image_position = browser_accessibility_get_image_position; |
+ iface->get_image_description = browser_accessibility_get_image_description; |
+ iface->get_image_size = browser_accessibility_get_image_size; |
+} |
+ |
+static const GInterfaceInfo ImageInfo = { |
+ reinterpret_cast<GInterfaceInitFunc>(ImageInterfaceInit), 0, 0}; |
+ |
+// |
// AtkValue interface. |
// |
@@ -590,6 +661,10 @@ static int GetInterfaceMaskFromObject(BrowserAccessibilityAuraLinux* obj) { |
role == ui::AX_ROLE_WEB_AREA) |
interface_mask |= 1 << ATK_DOCUMENT_INTERFACE; |
+ // Image Interface |
+ if (role == ui::AX_ROLE_IMAGE || role == ui::AX_ROLE_IMAGE_MAP) |
+ interface_mask |= 1 << ATK_IMAGE_INTERFACE; |
+ |
return interface_mask; |
} |
@@ -622,6 +697,8 @@ static GType GetAccessibilityTypeFromObject( |
g_type_add_interface_static(type, ATK_TYPE_COMPONENT, &ComponentInfo); |
if (interface_mask & (1 << ATK_DOCUMENT_INTERFACE)) |
g_type_add_interface_static(type, ATK_TYPE_DOCUMENT, &DocumentInfo); |
+ if (interface_mask & (1 << ATK_IMAGE_INTERFACE)) |
+ g_type_add_interface_static(type, ATK_TYPE_IMAGE, &ImageInfo); |
if (interface_mask & (1 << ATK_VALUE_INTERFACE)) |
g_type_add_interface_static(type, ATK_TYPE_VALUE, &ValueInfo); |