| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/accessibility/browser_accessibility_gtk.h" | 5 #include "content/browser/accessibility/browser_accessibility_gtk.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "content/browser/accessibility/browser_accessibility_manager_gtk.h" | 10 #include "content/browser/accessibility/browser_accessibility_manager_gtk.h" |
| 11 #include "content/common/accessibility_messages.h" | 11 #include "content/common/accessibility_messages.h" |
| 12 | 12 |
| 13 namespace content { | 13 namespace content { |
| 14 | 14 |
| 15 // The maximum length of an autogenerated unique type name string, | |
| 16 // generated from the 16-bit interface mask from an AtkObject. | |
| 17 // 30 is enough for the prefix "WAIType" + 5 hex chars (max) */ | |
| 18 static const int kWAITypeNameLen = 30; | |
| 19 | |
| 20 static gpointer browser_accessibility_parent_class = NULL; | 15 static gpointer browser_accessibility_parent_class = NULL; |
| 21 | 16 |
| 22 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( | 17 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( |
| 23 BrowserAccessibilityAtk* atk_object) { | 18 BrowserAccessibilityAtk* atk_object) { |
| 24 if (!atk_object) | 19 if (!atk_object) |
| 25 return NULL; | 20 return NULL; |
| 26 | 21 |
| 27 return atk_object->m_object; | 22 return atk_object->m_object; |
| 28 } | 23 } |
| 29 | 24 |
| 25 // |
| 26 // AtkComponent interface. |
| 27 // |
| 28 |
| 29 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( |
| 30 AtkComponent* atk_object) { |
| 31 if (!IS_BROWSER_ACCESSIBILITY(atk_object)) |
| 32 return NULL; |
| 33 |
| 34 return ToBrowserAccessibilityGtk(BROWSER_ACCESSIBILITY(atk_object)); |
| 35 } |
| 36 |
| 37 static AtkObject* browser_accessibility_accessible_at_point( |
| 38 AtkComponent* component, gint x, gint y, AtkCoordType coord_type) { |
| 39 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(component); |
| 40 if (!obj) |
| 41 return NULL; |
| 42 |
| 43 gfx::Point point(x, y); |
| 44 if (!obj->GetGlobalBoundsRect().Contains(point)) |
| 45 return NULL; |
| 46 |
| 47 BrowserAccessibility* result = obj->BrowserAccessibilityForPoint(point); |
| 48 if (!result) |
| 49 return NULL; |
| 50 |
| 51 AtkObject* atk_result = result->ToBrowserAccessibilityGtk()->GetAtkObject(); |
| 52 g_object_ref(atk_result); |
| 53 return atk_result; |
| 54 } |
| 55 |
| 56 static void browser_accessibility_get_extents( |
| 57 AtkComponent* component, gint* x, gint* y, gint* width, gint* height, |
| 58 AtkCoordType coord_type) { |
| 59 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(component); |
| 60 if (!obj) |
| 61 return; |
| 62 |
| 63 gfx::Rect bounds = obj->GetGlobalBoundsRect(); |
| 64 *x = bounds.x(); |
| 65 *y = bounds.y(); |
| 66 *width = bounds.width(); |
| 67 *height = bounds.height(); |
| 68 } |
| 69 |
| 70 static gboolean browser_accessibility_grab_focus(AtkComponent* component) { |
| 71 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(component); |
| 72 if (!obj) |
| 73 return false; |
| 74 |
| 75 obj->manager()->SetFocus(obj, true); |
| 76 return true; |
| 77 } |
| 78 |
| 79 static void ComponentInterfaceInit(AtkComponentIface* iface) { |
| 80 iface->ref_accessible_at_point = browser_accessibility_accessible_at_point; |
| 81 iface->get_extents = browser_accessibility_get_extents; |
| 82 iface->grab_focus = browser_accessibility_grab_focus; |
| 83 } |
| 84 |
| 85 static const GInterfaceInfo ComponentInfo = { |
| 86 reinterpret_cast<GInterfaceInitFunc>(ComponentInterfaceInit), 0, 0 |
| 87 }; |
| 88 |
| 89 // |
| 90 // AtkValue interface. |
| 91 // |
| 92 |
| 93 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( |
| 94 AtkValue* atk_object) { |
| 95 if (!IS_BROWSER_ACCESSIBILITY(atk_object)) |
| 96 return NULL; |
| 97 |
| 98 return ToBrowserAccessibilityGtk(BROWSER_ACCESSIBILITY(atk_object)); |
| 99 } |
| 100 |
| 101 static void browser_accessibility_get_current_value( |
| 102 AtkValue* atk_object, GValue* value) { |
| 103 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(atk_object); |
| 104 if (!obj) |
| 105 return; |
| 106 |
| 107 float float_val; |
| 108 if (obj->GetFloatAttribute(AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, |
| 109 &float_val)) { |
| 110 memset(value, 0, sizeof(*value)); |
| 111 g_value_init(value, G_TYPE_FLOAT); |
| 112 g_value_set_float(value, float_val); |
| 113 } |
| 114 } |
| 115 |
| 116 static void browser_accessibility_get_minimum_value( |
| 117 AtkValue* atk_object, GValue* value) { |
| 118 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(atk_object); |
| 119 if (!obj) |
| 120 return; |
| 121 |
| 122 float float_val; |
| 123 if (obj->GetFloatAttribute(AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE, |
| 124 &float_val)) { |
| 125 memset(value, 0, sizeof(*value)); |
| 126 g_value_init(value, G_TYPE_FLOAT); |
| 127 g_value_set_float(value, float_val); |
| 128 } |
| 129 } |
| 130 |
| 131 static void browser_accessibility_get_maximum_value( |
| 132 AtkValue* atk_object, GValue* value) { |
| 133 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(atk_object); |
| 134 if (!obj) |
| 135 return; |
| 136 |
| 137 float float_val; |
| 138 if (obj->GetFloatAttribute(AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE, |
| 139 &float_val)) { |
| 140 memset(value, 0, sizeof(*value)); |
| 141 g_value_init(value, G_TYPE_FLOAT); |
| 142 g_value_set_float(value, float_val); |
| 143 } |
| 144 } |
| 145 |
| 146 static void browser_accessibility_get_minimum_increment( |
| 147 AtkValue* atk_object, GValue* value) { |
| 148 // TODO(dmazzoni): get the correct value from an <input type=range>. |
| 149 memset(value, 0, sizeof(*value)); |
| 150 g_value_init(value, G_TYPE_FLOAT); |
| 151 g_value_set_float(value, 1.0); |
| 152 } |
| 153 |
| 154 static void ValueInterfaceInit(AtkValueIface* iface) { |
| 155 iface->get_current_value = browser_accessibility_get_current_value; |
| 156 iface->get_minimum_value = browser_accessibility_get_minimum_value; |
| 157 iface->get_maximum_value = browser_accessibility_get_maximum_value; |
| 158 iface->get_minimum_increment = browser_accessibility_get_minimum_increment; |
| 159 } |
| 160 |
| 161 static const GInterfaceInfo ValueInfo = { |
| 162 reinterpret_cast<GInterfaceInitFunc>(ValueInterfaceInit), 0, 0 |
| 163 }; |
| 164 |
| 165 // |
| 166 // AtkObject interface |
| 167 // |
| 168 |
| 30 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( | 169 static BrowserAccessibilityGtk* ToBrowserAccessibilityGtk( |
| 31 AtkObject* atk_object) { | 170 AtkObject* atk_object) { |
| 32 if (!IS_BROWSER_ACCESSIBILITY(atk_object)) | 171 if (!IS_BROWSER_ACCESSIBILITY(atk_object)) |
| 33 return NULL; | 172 return NULL; |
| 34 | 173 |
| 35 return ToBrowserAccessibilityGtk(BROWSER_ACCESSIBILITY(atk_object)); | 174 return ToBrowserAccessibilityGtk(BROWSER_ACCESSIBILITY(atk_object)); |
| 36 } | 175 } |
| 37 | 176 |
| 38 static const gchar* browser_accessibility_get_name(AtkObject* atk_object) { | 177 static const gchar* browser_accessibility_get_name(AtkObject* atk_object) { |
| 39 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(atk_object); | 178 BrowserAccessibilityGtk* obj = ToBrowserAccessibilityGtk(atk_object); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 } | 258 } |
| 120 | 259 |
| 121 static AtkRelationSet* browser_accessibility_ref_relation_set( | 260 static AtkRelationSet* browser_accessibility_ref_relation_set( |
| 122 AtkObject* atk_object) { | 261 AtkObject* atk_object) { |
| 123 AtkRelationSet* relation_set = | 262 AtkRelationSet* relation_set = |
| 124 ATK_OBJECT_CLASS(browser_accessibility_parent_class) | 263 ATK_OBJECT_CLASS(browser_accessibility_parent_class) |
| 125 ->ref_relation_set(atk_object); | 264 ->ref_relation_set(atk_object); |
| 126 return relation_set; | 265 return relation_set; |
| 127 } | 266 } |
| 128 | 267 |
| 268 // |
| 269 // The rest of the BrowserAccessibilityGtk code, not specific to one |
| 270 // of the Atk* interfaces. |
| 271 // |
| 272 |
| 129 static void browser_accessibility_init(AtkObject* atk_object, gpointer data) { | 273 static void browser_accessibility_init(AtkObject* atk_object, gpointer data) { |
| 130 if (ATK_OBJECT_CLASS(browser_accessibility_parent_class)->initialize) { | 274 if (ATK_OBJECT_CLASS(browser_accessibility_parent_class)->initialize) { |
| 131 ATK_OBJECT_CLASS(browser_accessibility_parent_class)->initialize( | 275 ATK_OBJECT_CLASS(browser_accessibility_parent_class)->initialize( |
| 132 atk_object, data); | 276 atk_object, data); |
| 133 } | 277 } |
| 134 | 278 |
| 135 BROWSER_ACCESSIBILITY(atk_object)->m_object = | 279 BROWSER_ACCESSIBILITY(atk_object)->m_object = |
| 136 reinterpret_cast<BrowserAccessibilityGtk*>(data); | 280 reinterpret_cast<BrowserAccessibilityGtk*>(data); |
| 137 } | 281 } |
| 138 | 282 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 }; | 320 }; |
| 177 | 321 |
| 178 GType type = g_type_register_static( | 322 GType type = g_type_register_static( |
| 179 ATK_TYPE_OBJECT, "BrowserAccessibility", &tinfo, GTypeFlags(0)); | 323 ATK_TYPE_OBJECT, "BrowserAccessibility", &tinfo, GTypeFlags(0)); |
| 180 g_once_init_leave(&type_volatile, type); | 324 g_once_init_leave(&type_volatile, type); |
| 181 } | 325 } |
| 182 | 326 |
| 183 return type_volatile; | 327 return type_volatile; |
| 184 } | 328 } |
| 185 | 329 |
| 186 static guint16 GetInterfaceMaskFromObject(BrowserAccessibilityGtk* obj) { | 330 static const char* GetUniqueAccessibilityTypeName(int interface_mask) |
| 187 return 0; | |
| 188 } | |
| 189 | |
| 190 static const char* GetUniqueAccessibilityTypeName(guint16 interface_mask) | |
| 191 { | 331 { |
| 192 static char name[kWAITypeNameLen + 1]; | 332 // 20 characters is enough for "Chrome%x" with any integer value. |
| 193 | 333 static char name[20]; |
| 194 sprintf(name, "WAIType%x", interface_mask); | 334 snprintf(name, sizeof(name), "Chrome%x", interface_mask); |
| 195 name[kWAITypeNameLen] = '\0'; | |
| 196 | |
| 197 return name; | 335 return name; |
| 198 } | 336 } |
| 199 | 337 |
| 200 static const GInterfaceInfo AtkInterfacesInitFunctions[] = { | 338 enum AtkInterfaces { |
| 339 ATK_ACTION_INTERFACE, |
| 340 ATK_COMPONENT_INTERFACE, |
| 341 ATK_DOCUMENT_INTERFACE, |
| 342 ATK_EDITABLE_TEXT_INTERFACE, |
| 343 ATK_HYPERLINK_INTERFACE, |
| 344 ATK_HYPERTEXT_INTERFACE, |
| 345 ATK_IMAGE_INTERFACE, |
| 346 ATK_SELECTION_INTERFACE, |
| 347 ATK_TABLE_INTERFACE, |
| 348 ATK_TEXT_INTERFACE, |
| 349 ATK_VALUE_INTERFACE, |
| 201 }; | 350 }; |
| 202 | 351 |
| 203 enum WAIType { | 352 static int GetInterfaceMaskFromObject(BrowserAccessibilityGtk* obj) { |
| 204 WAI_ACTION, | 353 int interface_mask = 0; |
| 205 WAI_SELECTION, | |
| 206 WAI_EDITABLE_TEXT, | |
| 207 WAI_TEXT, | |
| 208 WAI_COMPONENT, | |
| 209 WAI_IMAGE, | |
| 210 WAI_TABLE, | |
| 211 WAI_HYPERTEXT, | |
| 212 WAI_HYPERLINK, | |
| 213 WAI_DOCUMENT, | |
| 214 WAI_VALUE, | |
| 215 }; | |
| 216 | 354 |
| 217 static GType GetAtkInterfaceTypeFromWAIType(WAIType type) { | 355 // Component interface is always supported. |
| 218 switch (type) { | 356 interface_mask |= 1 << ATK_COMPONENT_INTERFACE; |
| 219 case WAI_ACTION: | 357 |
| 220 return ATK_TYPE_ACTION; | 358 int role = obj->role(); |
| 221 case WAI_SELECTION: | 359 if (role == AccessibilityNodeData::ROLE_PROGRESS_INDICATOR || |
| 222 return ATK_TYPE_SELECTION; | 360 role == AccessibilityNodeData::ROLE_SCROLLBAR || |
| 223 case WAI_EDITABLE_TEXT: | 361 role == AccessibilityNodeData::ROLE_SLIDER) { |
| 224 return ATK_TYPE_EDITABLE_TEXT; | 362 interface_mask |= 1 << ATK_VALUE_INTERFACE; |
| 225 case WAI_TEXT: | |
| 226 return ATK_TYPE_TEXT; | |
| 227 case WAI_COMPONENT: | |
| 228 return ATK_TYPE_COMPONENT; | |
| 229 case WAI_IMAGE: | |
| 230 return ATK_TYPE_IMAGE; | |
| 231 case WAI_TABLE: | |
| 232 return ATK_TYPE_TABLE; | |
| 233 case WAI_HYPERTEXT: | |
| 234 return ATK_TYPE_HYPERTEXT; | |
| 235 case WAI_HYPERLINK: | |
| 236 return ATK_TYPE_HYPERLINK_IMPL; | |
| 237 case WAI_DOCUMENT: | |
| 238 return ATK_TYPE_DOCUMENT; | |
| 239 case WAI_VALUE: | |
| 240 return ATK_TYPE_VALUE; | |
| 241 } | 363 } |
| 242 | 364 |
| 243 return G_TYPE_INVALID; | 365 return interface_mask; |
| 244 } | 366 } |
| 245 | 367 |
| 246 static GType GetAccessibilityTypeFromObject(BrowserAccessibilityGtk* obj) { | 368 static GType GetAccessibilityTypeFromObject(BrowserAccessibilityGtk* obj) { |
| 247 static const GTypeInfo type_info = { | 369 static const GTypeInfo type_info = { |
| 248 sizeof(BrowserAccessibilityAtkClass), | 370 sizeof(BrowserAccessibilityAtkClass), |
| 249 (GBaseInitFunc) 0, | 371 (GBaseInitFunc) 0, |
| 250 (GBaseFinalizeFunc) 0, | 372 (GBaseFinalizeFunc) 0, |
| 251 (GClassInitFunc) 0, | 373 (GClassInitFunc) 0, |
| 252 (GClassFinalizeFunc) 0, | 374 (GClassFinalizeFunc) 0, |
| 253 0, /* class data */ | 375 0, /* class data */ |
| 254 sizeof(BrowserAccessibilityAtk), /* instance size */ | 376 sizeof(BrowserAccessibilityAtk), /* instance size */ |
| 255 0, /* nb preallocs */ | 377 0, /* nb preallocs */ |
| 256 (GInstanceInitFunc) 0, | 378 (GInstanceInitFunc) 0, |
| 257 0 /* value table */ | 379 0 /* value table */ |
| 258 }; | 380 }; |
| 259 | 381 |
| 260 guint16 interface_mask = GetInterfaceMaskFromObject(obj); | 382 int interface_mask = GetInterfaceMaskFromObject(obj); |
| 261 const char* atk_type_name = GetUniqueAccessibilityTypeName(interface_mask); | 383 const char* atk_type_name = GetUniqueAccessibilityTypeName(interface_mask); |
| 262 GType type = g_type_from_name(atk_type_name); | 384 GType type = g_type_from_name(atk_type_name); |
| 263 if (type) | 385 if (type) |
| 264 return type; | 386 return type; |
| 265 | 387 |
| 266 type = g_type_register_static(BROWSER_ACCESSIBILITY_TYPE, | 388 type = g_type_register_static(BROWSER_ACCESSIBILITY_TYPE, |
| 267 atk_type_name, | 389 atk_type_name, |
| 268 &type_info, | 390 &type_info, |
| 269 GTypeFlags(0)); | 391 GTypeFlags(0)); |
| 270 for (guint i = 0; i < G_N_ELEMENTS(AtkInterfacesInitFunctions); i++) { | 392 if (interface_mask & (1 << ATK_COMPONENT_INTERFACE)) |
| 271 if (interface_mask & (1 << i)) { | 393 g_type_add_interface_static(type, ATK_TYPE_COMPONENT, &ComponentInfo); |
| 272 g_type_add_interface_static( | 394 if (interface_mask & (1 << ATK_VALUE_INTERFACE)) |
| 273 type, | 395 g_type_add_interface_static(type, ATK_TYPE_VALUE, &ValueInfo); |
| 274 GetAtkInterfaceTypeFromWAIType(static_cast<WAIType>(i)), | |
| 275 &AtkInterfacesInitFunctions[i]); | |
| 276 } | |
| 277 } | |
| 278 | 396 |
| 279 return type; | 397 return type; |
| 280 } | 398 } |
| 281 | 399 |
| 282 BrowserAccessibilityAtk* browser_accessibility_new( | 400 BrowserAccessibilityAtk* browser_accessibility_new( |
| 283 BrowserAccessibilityGtk* obj) { | 401 BrowserAccessibilityGtk* obj) { |
| 284 GType type = GetAccessibilityTypeFromObject(obj); | 402 GType type = GetAccessibilityTypeFromObject(obj); |
| 285 AtkObject* atk_object = static_cast<AtkObject*>(g_object_new(type, 0)); | 403 AtkObject* atk_object = static_cast<AtkObject*>(g_object_new(type, 0)); |
| 286 | 404 |
| 287 atk_object_initialize(atk_object, obj); | 405 atk_object_initialize(atk_object, obj); |
| 288 | 406 |
| 289 return BROWSER_ACCESSIBILITY(atk_object); | 407 return BROWSER_ACCESSIBILITY(atk_object); |
| 290 } | 408 } |
| 291 | 409 |
| 292 void browser_accessibility_detach(BrowserAccessibilityAtk* atk_object) { | 410 void browser_accessibility_detach(BrowserAccessibilityAtk* atk_object) { |
| 293 atk_object->m_object = NULL; | 411 atk_object->m_object = NULL; |
| 294 } | 412 } |
| 295 | 413 |
| 296 // static | 414 // static |
| 297 BrowserAccessibility* BrowserAccessibility::Create() { | 415 BrowserAccessibility* BrowserAccessibility::Create() { |
| 298 return new BrowserAccessibilityGtk(); | 416 return new BrowserAccessibilityGtk(); |
| 299 } | 417 } |
| 300 | 418 |
| 301 BrowserAccessibilityGtk* BrowserAccessibility::ToBrowserAccessibilityGtk() { | 419 BrowserAccessibilityGtk* BrowserAccessibility::ToBrowserAccessibilityGtk() { |
| 302 return static_cast<BrowserAccessibilityGtk*>(this); | 420 return static_cast<BrowserAccessibilityGtk*>(this); |
| 303 } | 421 } |
| 304 | 422 |
| 305 BrowserAccessibilityGtk::BrowserAccessibilityGtk() { | 423 BrowserAccessibilityGtk::BrowserAccessibilityGtk() |
| 306 atk_object_ = ATK_OBJECT(browser_accessibility_new(this)); | 424 : atk_object_(NULL) { |
| 307 } | 425 } |
| 308 | 426 |
| 309 BrowserAccessibilityGtk::~BrowserAccessibilityGtk() { | 427 BrowserAccessibilityGtk::~BrowserAccessibilityGtk() { |
| 310 browser_accessibility_detach(BROWSER_ACCESSIBILITY(atk_object_)); | 428 browser_accessibility_detach(BROWSER_ACCESSIBILITY(atk_object_)); |
| 311 g_object_unref(atk_object_); | 429 if (atk_object_) |
| 430 g_object_unref(atk_object_); |
| 312 } | 431 } |
| 313 | 432 |
| 314 AtkObject* BrowserAccessibilityGtk::GetAtkObject() const { | 433 AtkObject* BrowserAccessibilityGtk::GetAtkObject() const { |
| 315 if (!G_IS_OBJECT(atk_object_)) | 434 if (!G_IS_OBJECT(atk_object_)) |
| 316 return NULL; | 435 return NULL; |
| 317 return atk_object_; | 436 return atk_object_; |
| 318 } | 437 } |
| 319 | 438 |
| 320 void BrowserAccessibilityGtk::PreInitialize() { | 439 void BrowserAccessibilityGtk::PreInitialize() { |
| 321 BrowserAccessibility::PreInitialize(); | 440 BrowserAccessibility::PreInitialize(); |
| 322 InitRoleAndState(); | 441 InitRoleAndState(); |
| 323 | 442 |
| 324 if (this->parent()) { | 443 if (atk_object_) { |
| 325 atk_object_set_parent( | 444 // If the object's role changes and that causes its |
| 326 atk_object_, | 445 // interface mask to change, we need to create a new |
| 327 this->parent()->ToBrowserAccessibilityGtk()->GetAtkObject()); | 446 // AtkObject for it. |
| 447 int interface_mask = GetInterfaceMaskFromObject(this); |
| 448 if (interface_mask != interface_mask_) { |
| 449 g_object_unref(atk_object_); |
| 450 atk_object_ = NULL; |
| 451 } |
| 452 } |
| 453 |
| 454 if (!atk_object_) { |
| 455 interface_mask_ = GetInterfaceMaskFromObject(this); |
| 456 atk_object_ = ATK_OBJECT(browser_accessibility_new(this)); |
| 457 if (this->parent()) { |
| 458 atk_object_set_parent( |
| 459 atk_object_, |
| 460 this->parent()->ToBrowserAccessibilityGtk()->GetAtkObject()); |
| 461 } |
| 328 } | 462 } |
| 329 } | 463 } |
| 330 | 464 |
| 331 bool BrowserAccessibilityGtk::IsNative() const { | 465 bool BrowserAccessibilityGtk::IsNative() const { |
| 332 return true; | 466 return true; |
| 333 } | 467 } |
| 334 | 468 |
| 335 void BrowserAccessibilityGtk::InitRoleAndState() { | 469 void BrowserAccessibilityGtk::InitRoleAndState() { |
| 336 atk_acc_name_ = UTF16ToUTF8(name()); | 470 atk_acc_name_ = UTF16ToUTF8(name()); |
| 337 | 471 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 case AccessibilityNodeData::ROLE_WEBCORE_LINK: | 510 case AccessibilityNodeData::ROLE_WEBCORE_LINK: |
| 377 atk_role_ = ATK_ROLE_LINK; | 511 atk_role_ = ATK_ROLE_LINK; |
| 378 break; | 512 break; |
| 379 default: | 513 default: |
| 380 atk_role_ = ATK_ROLE_UNKNOWN; | 514 atk_role_ = ATK_ROLE_UNKNOWN; |
| 381 break; | 515 break; |
| 382 } | 516 } |
| 383 } | 517 } |
| 384 | 518 |
| 385 } // namespace content | 519 } // namespace content |
| OLD | NEW |