Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1531)

Side by Side Diff: content/browser/accessibility/browser_accessibility_auralinux.cc

Issue 1762143002: Use unique IDs for accessibility nodes on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix null obj deref in DCHECK Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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_auralinux.h" 5 #include "content/browser/accessibility/browser_accessibility_auralinux.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "content/browser/accessibility/browser_accessibility_manager_auralinux. h" 11 #include "content/browser/accessibility/browser_accessibility_manager_auralinux. h"
12 #include "content/common/accessibility_messages.h" 12 #include "content/common/accessibility_messages.h"
13 13
14 namespace content { 14 namespace content {
15 15
16 static gpointer browser_accessibility_parent_class = NULL; 16 static gpointer browser_accessibility_parent_class = NULL;
17 17
18 static BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux( 18 static BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
19 BrowserAccessibilityAtk* atk_object) { 19 BrowserAccessibilityAtk* atk_object) {
20 if (!atk_object) 20 if (!atk_object)
21 return NULL; 21 return NULL;
22 22
23 return atk_object->m_object; 23 return atk_object->m_object;
24 } 24 }
25 25
26 const BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
27 const BrowserAccessibility* obj) {
28 DCHECK(!obj || obj->IsNative());
29 return static_cast<const BrowserAccessibilityAuraLinux*>(obj);
30 }
31
32 BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
33 BrowserAccessibility* obj) {
34 DCHECK(!obj || obj->IsNative());
35 return static_cast<BrowserAccessibilityAuraLinux*>(obj);
36 }
37
26 // 38 //
27 // AtkAction interface. 39 // AtkAction interface.
28 // 40 //
29 41
30 static BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux( 42 static BrowserAccessibilityAuraLinux* ToBrowserAccessibilityAuraLinux(
31 AtkAction* atk_action) { 43 AtkAction* atk_action) {
32 if (!IS_BROWSER_ACCESSIBILITY(atk_action)) 44 if (!IS_BROWSER_ACCESSIBILITY(atk_action))
33 return NULL; 45 return NULL;
34 46
35 return ToBrowserAccessibilityAuraLinux(BROWSER_ACCESSIBILITY(atk_action)); 47 return ToBrowserAccessibilityAuraLinux(BROWSER_ACCESSIBILITY(atk_action));
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 145
134 gfx::Point point(x, y); 146 gfx::Point point(x, y);
135 if (!obj->GetGlobalBoundsRect().Contains(point)) 147 if (!obj->GetGlobalBoundsRect().Contains(point))
136 return NULL; 148 return NULL;
137 149
138 BrowserAccessibility* result = obj->BrowserAccessibilityForPoint(point); 150 BrowserAccessibility* result = obj->BrowserAccessibilityForPoint(point);
139 if (!result) 151 if (!result)
140 return NULL; 152 return NULL;
141 153
142 AtkObject* atk_result = 154 AtkObject* atk_result =
143 result->ToBrowserAccessibilityAuraLinux()->GetAtkObject(); 155 ToBrowserAccessibilityAuraLinux(result)->GetAtkObject();
144 g_object_ref(atk_result); 156 g_object_ref(atk_result);
145 return atk_result; 157 return atk_result;
146 } 158 }
147 159
148 static void browser_accessibility_get_extents(AtkComponent* atk_component, 160 static void browser_accessibility_get_extents(AtkComponent* atk_component,
149 gint* x, 161 gint* x,
150 gint* y, 162 gint* y,
151 gint* width, 163 gint* width,
152 gint* height, 164 gint* height,
153 AtkCoordType coord_type) { 165 AtkCoordType coord_type) {
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 479
468 return obj->GetStringAttribute(ui::AX_ATTR_DESCRIPTION).c_str(); 480 return obj->GetStringAttribute(ui::AX_ATTR_DESCRIPTION).c_str();
469 } 481 }
470 482
471 static AtkObject* browser_accessibility_get_parent(AtkObject* atk_object) { 483 static AtkObject* browser_accessibility_get_parent(AtkObject* atk_object) {
472 BrowserAccessibilityAuraLinux* obj = 484 BrowserAccessibilityAuraLinux* obj =
473 ToBrowserAccessibilityAuraLinux(atk_object); 485 ToBrowserAccessibilityAuraLinux(atk_object);
474 if (!obj) 486 if (!obj)
475 return NULL; 487 return NULL;
476 if (obj->GetParent()) 488 if (obj->GetParent())
477 return obj->GetParent()->ToBrowserAccessibilityAuraLinux()->GetAtkObject(); 489 return ToBrowserAccessibilityAuraLinux(obj->GetParent())->GetAtkObject();
478 490
479 BrowserAccessibilityManagerAuraLinux* manager = 491 BrowserAccessibilityManagerAuraLinux* manager =
480 static_cast<BrowserAccessibilityManagerAuraLinux*>(obj->manager()); 492 static_cast<BrowserAccessibilityManagerAuraLinux*>(obj->manager());
481 return manager->parent_object(); 493 return manager->parent_object();
482 } 494 }
483 495
484 static gint browser_accessibility_get_n_children(AtkObject* atk_object) { 496 static gint browser_accessibility_get_n_children(AtkObject* atk_object) {
485 BrowserAccessibilityAuraLinux* obj = 497 BrowserAccessibilityAuraLinux* obj =
486 ToBrowserAccessibilityAuraLinux(atk_object); 498 ToBrowserAccessibilityAuraLinux(atk_object);
487 if (!obj) 499 if (!obj)
488 return 0; 500 return 0;
489 501
490 return obj->PlatformChildCount(); 502 return obj->PlatformChildCount();
491 } 503 }
492 504
493 static AtkObject* browser_accessibility_ref_child(AtkObject* atk_object, 505 static AtkObject* browser_accessibility_ref_child(AtkObject* atk_object,
494 gint index) { 506 gint index) {
495 BrowserAccessibilityAuraLinux* obj = 507 BrowserAccessibilityAuraLinux* obj =
496 ToBrowserAccessibilityAuraLinux(atk_object); 508 ToBrowserAccessibilityAuraLinux(atk_object);
497 if (!obj) 509 if (!obj)
498 return NULL; 510 return NULL;
499 511
500 if (index < 0 || index >= static_cast<gint>(obj->PlatformChildCount())) 512 if (index < 0 || index >= static_cast<gint>(obj->PlatformChildCount()))
501 return NULL; 513 return NULL;
502 514
503 AtkObject* result = obj->InternalGetChild(index) 515 AtkObject* result = ToBrowserAccessibilityAuraLinux(
504 ->ToBrowserAccessibilityAuraLinux() 516 obj->InternalGetChild(index))->GetAtkObject();
505 ->GetAtkObject();
506 g_object_ref(result); 517 g_object_ref(result);
507 return result; 518 return result;
508 } 519 }
509 520
510 static gint browser_accessibility_get_index_in_parent(AtkObject* atk_object) { 521 static gint browser_accessibility_get_index_in_parent(AtkObject* atk_object) {
511 BrowserAccessibilityAuraLinux* obj = 522 BrowserAccessibilityAuraLinux* obj =
512 ToBrowserAccessibilityAuraLinux(atk_object); 523 ToBrowserAccessibilityAuraLinux(atk_object);
513 if (!obj) 524 if (!obj)
514 return 0; 525 return 0;
515 return obj->GetIndexInParent(); 526 return obj->GetIndexInParent();
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 739
729 void browser_accessibility_detach(BrowserAccessibilityAtk* atk_object) { 740 void browser_accessibility_detach(BrowserAccessibilityAtk* atk_object) {
730 atk_object->m_object = NULL; 741 atk_object->m_object = NULL;
731 } 742 }
732 743
733 // static 744 // static
734 BrowserAccessibility* BrowserAccessibility::Create() { 745 BrowserAccessibility* BrowserAccessibility::Create() {
735 return new BrowserAccessibilityAuraLinux(); 746 return new BrowserAccessibilityAuraLinux();
736 } 747 }
737 748
738 const BrowserAccessibilityAuraLinux*
739 BrowserAccessibility::ToBrowserAccessibilityAuraLinux() const {
740 return static_cast<const BrowserAccessibilityAuraLinux*>(this);
741 }
742
743 BrowserAccessibilityAuraLinux*
744 BrowserAccessibility::ToBrowserAccessibilityAuraLinux() {
745 return static_cast<BrowserAccessibilityAuraLinux*>(this);
746 }
747
748 BrowserAccessibilityAuraLinux::BrowserAccessibilityAuraLinux() 749 BrowserAccessibilityAuraLinux::BrowserAccessibilityAuraLinux()
749 : atk_object_(NULL) { 750 : atk_object_(NULL) {
750 } 751 }
751 752
752 BrowserAccessibilityAuraLinux::~BrowserAccessibilityAuraLinux() { 753 BrowserAccessibilityAuraLinux::~BrowserAccessibilityAuraLinux() {
753 browser_accessibility_detach(BROWSER_ACCESSIBILITY(atk_object_)); 754 browser_accessibility_detach(BROWSER_ACCESSIBILITY(atk_object_));
754 if (atk_object_) 755 if (atk_object_)
755 g_object_unref(atk_object_); 756 g_object_unref(atk_object_);
756 } 757 }
757 758
(...skipping 17 matching lines...) Expand all
775 atk_object_ = NULL; 776 atk_object_ = NULL;
776 } 777 }
777 } 778 }
778 779
779 if (!atk_object_) { 780 if (!atk_object_) {
780 interface_mask_ = GetInterfaceMaskFromObject(this); 781 interface_mask_ = GetInterfaceMaskFromObject(this);
781 atk_object_ = ATK_OBJECT(browser_accessibility_new(this)); 782 atk_object_ = ATK_OBJECT(browser_accessibility_new(this));
782 if (this->GetParent()) { 783 if (this->GetParent()) {
783 atk_object_set_parent( 784 atk_object_set_parent(
784 atk_object_, 785 atk_object_,
785 this->GetParent()->ToBrowserAccessibilityAuraLinux()->GetAtkObject()); 786 ToBrowserAccessibilityAuraLinux(this->GetParent())->GetAtkObject());
786 } 787 }
787 } 788 }
788 } 789 }
789 790
790 bool BrowserAccessibilityAuraLinux::IsNative() const { 791 bool BrowserAccessibilityAuraLinux::IsNative() const {
791 return true; 792 return true;
792 } 793 }
793 794
794 void BrowserAccessibilityAuraLinux::InitRoleAndState() { 795 void BrowserAccessibilityAuraLinux::InitRoleAndState() {
795 switch (GetRole()) { 796 switch (GetRole()) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 case ui::AX_ROLE_TREE_ITEM: 934 case ui::AX_ROLE_TREE_ITEM:
934 atk_role_ = ATK_ROLE_TREE_ITEM; 935 atk_role_ = ATK_ROLE_TREE_ITEM;
935 break; 936 break;
936 default: 937 default:
937 atk_role_ = ATK_ROLE_UNKNOWN; 938 atk_role_ = ATK_ROLE_UNKNOWN;
938 break; 939 break;
939 } 940 }
940 } 941 }
941 942
942 } // namespace content 943 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698