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.h" | 5 #include "content/browser/accessibility/browser_accessibility.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 uint32_t child_index) const { | 245 uint32_t child_index) const { |
246 if (!node_ || !manager_ || child_index >= InternalChildCount()) | 246 if (!node_ || !manager_ || child_index >= InternalChildCount()) |
247 return nullptr; | 247 return nullptr; |
248 | 248 |
249 const auto child_node = node_->ChildAtIndex(child_index); | 249 const auto child_node = node_->ChildAtIndex(child_index); |
250 DCHECK(child_node); | 250 DCHECK(child_node); |
251 return manager_->GetFromAXNode(child_node); | 251 return manager_->GetFromAXNode(child_node); |
252 } | 252 } |
253 | 253 |
254 BrowserAccessibility* BrowserAccessibility::GetParent() const { | 254 BrowserAccessibility* BrowserAccessibility::GetParent() const { |
255 if (!node_ || !manager_) | 255 if (!instance_active()) |
256 return NULL; | 256 return nullptr; |
| 257 |
257 ui::AXNode* parent = node_->parent(); | 258 ui::AXNode* parent = node_->parent(); |
258 if (parent) | 259 if (parent) |
259 return manager_->GetFromAXNode(parent); | 260 return manager_->GetFromAXNode(parent); |
260 | 261 |
261 return manager_->GetParentNodeFromParentTree(); | 262 return manager_->GetParentNodeFromParentTree(); |
262 } | 263 } |
263 | 264 |
264 BrowserAccessibility* BrowserAccessibility::InternalGetParent() const { | 265 BrowserAccessibility* BrowserAccessibility::InternalGetParent() const { |
265 if (!node_ || !manager_) | 266 if (!node_ || !manager_) |
266 return nullptr; | 267 return nullptr; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 if (child_end < start) | 378 if (child_end < start) |
378 continue; | 379 continue; |
379 | 380 |
380 int overlap_start = std::max(start, child_start); | 381 int overlap_start = std::max(start, child_start); |
381 int overlap_end = std::min(end, child_end); | 382 int overlap_end = std::min(end, child_end); |
382 | 383 |
383 int local_start = overlap_start - child_start; | 384 int local_start = overlap_start - child_start; |
384 int local_end = overlap_end - child_start; | 385 int local_end = overlap_end - child_start; |
385 | 386 |
386 gfx::Rect child_rect = child->GetLocation(); | 387 gfx::Rect child_rect = child->GetLocation(); |
387 int text_direction = child->GetIntAttribute( | 388 auto text_direction = static_cast<ui::AXTextDirection>( |
388 ui::AX_ATTR_TEXT_DIRECTION); | 389 child->GetIntAttribute(ui::AX_ATTR_TEXT_DIRECTION)); |
389 const std::vector<int32_t>& character_offsets = | 390 const std::vector<int32_t>& character_offsets = |
390 child->GetIntListAttribute(ui::AX_ATTR_CHARACTER_OFFSETS); | 391 child->GetIntListAttribute(ui::AX_ATTR_CHARACTER_OFFSETS); |
391 int start_pixel_offset = | 392 int start_pixel_offset = |
392 local_start > 0 ? character_offsets[local_start - 1] : 0; | 393 local_start > 0 ? character_offsets[local_start - 1] : 0; |
393 int end_pixel_offset = | 394 int end_pixel_offset = |
394 local_end > 0 ? character_offsets[local_end - 1] : 0; | 395 local_end > 0 ? character_offsets[local_end - 1] : 0; |
395 | 396 |
396 gfx::Rect child_overlap_rect; | 397 gfx::Rect child_overlap_rect; |
397 switch (text_direction) { | 398 switch (text_direction) { |
398 case ui::AX_TEXT_DIRECTION_NONE: | 399 case ui::AX_TEXT_DIRECTION_NONE: |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 float BrowserAccessibility::GetFloatAttribute( | 651 float BrowserAccessibility::GetFloatAttribute( |
651 ui::AXFloatAttribute attribute) const { | 652 ui::AXFloatAttribute attribute) const { |
652 return GetData().GetFloatAttribute(attribute); | 653 return GetData().GetFloatAttribute(attribute); |
653 } | 654 } |
654 | 655 |
655 bool BrowserAccessibility::GetFloatAttribute( | 656 bool BrowserAccessibility::GetFloatAttribute( |
656 ui::AXFloatAttribute attribute, float* value) const { | 657 ui::AXFloatAttribute attribute, float* value) const { |
657 return GetData().GetFloatAttribute(attribute, value); | 658 return GetData().GetFloatAttribute(attribute, value); |
658 } | 659 } |
659 | 660 |
| 661 bool BrowserAccessibility::HasInheritedStringAttribute( |
| 662 ui::AXStringAttribute attribute) const { |
| 663 if (!instance_active()) |
| 664 return false; |
| 665 |
| 666 if (GetData().HasStringAttribute(attribute)) |
| 667 return true; |
| 668 return GetParent() && GetParent()->HasInheritedStringAttribute(attribute); |
| 669 } |
| 670 |
| 671 const std::string& BrowserAccessibility::GetInheritedStringAttribute( |
| 672 ui::AXStringAttribute attribute) const { |
| 673 if (!instance_active()) |
| 674 return base::EmptyString(); |
| 675 |
| 676 const BrowserAccessibility* current_object = this; |
| 677 do { |
| 678 if (current_object->GetData().HasStringAttribute(attribute)) |
| 679 return current_object->GetData().GetStringAttribute(attribute); |
| 680 current_object = current_object->GetParent(); |
| 681 } while (current_object); |
| 682 return base::EmptyString(); |
| 683 } |
| 684 |
| 685 bool BrowserAccessibility::GetInheritedStringAttribute( |
| 686 ui::AXStringAttribute attribute, |
| 687 std::string* value) const { |
| 688 if (!instance_active()) { |
| 689 *value = std::string(); |
| 690 return false; |
| 691 } |
| 692 |
| 693 if (GetData().GetStringAttribute(attribute, value)) |
| 694 return true; |
| 695 return GetParent() && |
| 696 GetParent()->GetData().GetStringAttribute(attribute, value); |
| 697 } |
| 698 |
| 699 base::string16 BrowserAccessibility::GetInheritedString16Attribute( |
| 700 ui::AXStringAttribute attribute) const { |
| 701 if (!instance_active()) |
| 702 return base::string16(); |
| 703 |
| 704 const BrowserAccessibility* current_object = this; |
| 705 do { |
| 706 if (current_object->GetData().HasStringAttribute(attribute)) |
| 707 return current_object->GetData().GetString16Attribute(attribute); |
| 708 current_object = current_object->GetParent(); |
| 709 } while (current_object); |
| 710 return base::string16(); |
| 711 } |
| 712 |
| 713 bool BrowserAccessibility::GetInheritedString16Attribute( |
| 714 ui::AXStringAttribute attribute, |
| 715 base::string16* value) const { |
| 716 if (!instance_active()) { |
| 717 *value = base::string16(); |
| 718 return false; |
| 719 } |
| 720 |
| 721 if (GetData().GetString16Attribute(attribute, value)) |
| 722 return true; |
| 723 return GetParent() && |
| 724 GetParent()->GetData().GetString16Attribute(attribute, value); |
| 725 } |
| 726 |
660 bool BrowserAccessibility::HasIntAttribute( | 727 bool BrowserAccessibility::HasIntAttribute( |
661 ui::AXIntAttribute attribute) const { | 728 ui::AXIntAttribute attribute) const { |
662 return GetData().HasIntAttribute(attribute); | 729 return GetData().HasIntAttribute(attribute); |
663 } | 730 } |
664 | 731 |
665 int BrowserAccessibility::GetIntAttribute(ui::AXIntAttribute attribute) const { | 732 int BrowserAccessibility::GetIntAttribute(ui::AXIntAttribute attribute) const { |
666 return GetData().GetIntAttribute(attribute); | 733 return GetData().GetIntAttribute(attribute); |
667 } | 734 } |
668 | 735 |
669 bool BrowserAccessibility::GetIntAttribute( | 736 bool BrowserAccessibility::GetIntAttribute( |
(...skipping 14 matching lines...) Expand all Loading... |
684 bool BrowserAccessibility::GetStringAttribute( | 751 bool BrowserAccessibility::GetStringAttribute( |
685 ui::AXStringAttribute attribute, std::string* value) const { | 752 ui::AXStringAttribute attribute, std::string* value) const { |
686 return GetData().GetStringAttribute(attribute, value); | 753 return GetData().GetStringAttribute(attribute, value); |
687 } | 754 } |
688 | 755 |
689 base::string16 BrowserAccessibility::GetString16Attribute( | 756 base::string16 BrowserAccessibility::GetString16Attribute( |
690 ui::AXStringAttribute attribute) const { | 757 ui::AXStringAttribute attribute) const { |
691 return GetData().GetString16Attribute(attribute); | 758 return GetData().GetString16Attribute(attribute); |
692 } | 759 } |
693 | 760 |
694 bool BrowserAccessibility::GetString16Attribute( | 761 bool BrowserAccessibility::GetString16Attribute(ui::AXStringAttribute attribute, |
695 ui::AXStringAttribute attribute, | 762 base::string16* value) const { |
696 base::string16* value) const { | |
697 return GetData().GetString16Attribute(attribute, value); | 763 return GetData().GetString16Attribute(attribute, value); |
698 } | 764 } |
699 | 765 |
700 bool BrowserAccessibility::HasIntListAttribute( | 766 bool BrowserAccessibility::HasIntListAttribute( |
701 ui::AXIntListAttribute attribute) const { | 767 ui::AXIntListAttribute attribute) const { |
702 return GetData().HasIntListAttribute(attribute); | 768 return GetData().HasIntListAttribute(attribute); |
703 } | 769 } |
704 | 770 |
705 const std::vector<int32_t>& BrowserAccessibility::GetIntListAttribute( | 771 const std::vector<int32_t>& BrowserAccessibility::GetIntListAttribute( |
706 ui::AXIntListAttribute attribute) const { | 772 ui::AXIntListAttribute attribute) const { |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
978 } | 1044 } |
979 need_to_offset_web_area = true; | 1045 need_to_offset_web_area = true; |
980 } | 1046 } |
981 parent = parent->GetParent(); | 1047 parent = parent->GetParent(); |
982 } | 1048 } |
983 | 1049 |
984 return bounds; | 1050 return bounds; |
985 } | 1051 } |
986 | 1052 |
987 } // namespace content | 1053 } // namespace content |
OLD | NEW |