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 "base/strings/string16.h" | 5 #include "base/strings/string16.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
7 #include "content/browser/accessibility/browser_accessibility.h" | 7 #include "content/browser/accessibility/browser_accessibility.h" |
8 #include "content/browser/accessibility/browser_accessibility_manager.h" | 8 #include "content/browser/accessibility/browser_accessibility_manager.h" |
9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
10 #include "content/browser/accessibility/browser_accessibility_win.h" | 10 #include "content/browser/accessibility/browser_accessibility_win.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 const gfx::Rect& bounds) const override { | 83 const gfx::Rect& bounds) const override { |
84 return gfx::Point(); | 84 return gfx::Point(); |
85 } | 85 } |
86 void AccessibilityHitTest(const gfx::Point& point) override {} | 86 void AccessibilityHitTest(const gfx::Point& point) override {} |
87 void AccessibilitySetAccessibilityFocus(int acc_obj_id) override {} | 87 void AccessibilitySetAccessibilityFocus(int acc_obj_id) override {} |
88 void AccessibilityFatalError() override { got_fatal_error_ = true; } | 88 void AccessibilityFatalError() override { got_fatal_error_ = true; } |
89 gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() override { | 89 gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() override { |
90 return gfx::kNullAcceleratedWidget; | 90 return gfx::kNullAcceleratedWidget; |
91 } | 91 } |
92 gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override { | 92 gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override { |
93 return NULL; | 93 return nullptr; |
94 } | 94 } |
95 BrowserAccessibilityManager* AccessibilityGetChildFrame( | 95 BrowserAccessibilityManager* AccessibilityGetChildFrame( |
96 int accessibility_node_id) override { | 96 int accessibility_node_id) override { |
97 return NULL; | 97 return nullptr; |
98 } | 98 } |
99 BrowserAccessibility* AccessibilityGetParentFrame() override { return NULL; } | 99 BrowserAccessibility* AccessibilityGetParentFrame() override { |
| 100 return nullptr; |
| 101 } |
100 void AccessibilityGetAllChildFrames( | 102 void AccessibilityGetAllChildFrames( |
101 std::vector<BrowserAccessibilityManager*>* child_frames) override {} | 103 std::vector<BrowserAccessibilityManager*>* child_frames) override {} |
102 | 104 |
103 bool got_fatal_error() const { return got_fatal_error_; } | 105 bool got_fatal_error() const { return got_fatal_error_; } |
104 void reset_got_fatal_error() { got_fatal_error_ = false; } | 106 void reset_got_fatal_error() { got_fatal_error_ = false; } |
105 | 107 |
106 private: | 108 private: |
107 bool got_fatal_error_; | 109 bool got_fatal_error_; |
108 }; | 110 }; |
109 | 111 |
(...skipping 24 matching lines...) Expand all Loading... |
134 root.child_ids.push_back(3); | 136 root.child_ids.push_back(3); |
135 | 137 |
136 // Construct a BrowserAccessibilityManager with this | 138 // Construct a BrowserAccessibilityManager with this |
137 // ui::AXNodeData tree and a factory for an instance-counting | 139 // ui::AXNodeData tree and a factory for an instance-counting |
138 // BrowserAccessibility, and ensure that exactly 3 instances were | 140 // BrowserAccessibility, and ensure that exactly 3 instances were |
139 // created. Note that the manager takes ownership of the factory. | 141 // created. Note that the manager takes ownership of the factory. |
140 CountedBrowserAccessibility::global_obj_count_ = 0; | 142 CountedBrowserAccessibility::global_obj_count_ = 0; |
141 BrowserAccessibilityManager* manager = | 143 BrowserAccessibilityManager* manager = |
142 BrowserAccessibilityManager::Create( | 144 BrowserAccessibilityManager::Create( |
143 MakeAXTreeUpdate(root, button, checkbox), | 145 MakeAXTreeUpdate(root, button, checkbox), |
144 NULL, | 146 nullptr, |
145 new CountedBrowserAccessibilityFactory()); | 147 new CountedBrowserAccessibilityFactory()); |
146 | 148 |
147 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); | 149 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
148 | 150 |
149 // Delete the manager and test that all 3 instances are deleted. | 151 // Delete the manager and test that all 3 instances are deleted. |
150 delete manager; | 152 delete manager; |
151 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); | 153 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); |
152 | 154 |
153 // Construct a manager again, and this time save references to two of | 155 // Construct a manager again, and this time save references to two of |
154 // the three nodes in the tree. | 156 // the three nodes in the tree. |
155 manager = | 157 manager = |
156 BrowserAccessibilityManager::Create( | 158 BrowserAccessibilityManager::Create( |
157 MakeAXTreeUpdate(root, button, checkbox), | 159 MakeAXTreeUpdate(root, button, checkbox), |
158 NULL, | 160 nullptr, |
159 new CountedBrowserAccessibilityFactory()); | 161 new CountedBrowserAccessibilityFactory()); |
160 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); | 162 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
161 | 163 |
162 CountedBrowserAccessibility* root_accessible = | 164 CountedBrowserAccessibility* root_accessible = |
163 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 165 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
164 root_accessible->NativeAddReference(); | 166 root_accessible->NativeAddReference(); |
165 CountedBrowserAccessibility* child1_accessible = | 167 CountedBrowserAccessibility* child1_accessible = |
166 static_cast<CountedBrowserAccessibility*>( | 168 static_cast<CountedBrowserAccessibility*>( |
167 root_accessible->PlatformGetChild(1)); | 169 root_accessible->PlatformGetChild(1)); |
168 child1_accessible->NativeAddReference(); | 170 child1_accessible->NativeAddReference(); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 tree2_root.child_ids.push_back(5); | 241 tree2_root.child_ids.push_back(5); |
240 tree2_root.child_ids.push_back(2); | 242 tree2_root.child_ids.push_back(2); |
241 tree2_root.child_ids.push_back(3); | 243 tree2_root.child_ids.push_back(3); |
242 | 244 |
243 // Construct a BrowserAccessibilityManager with tree1. | 245 // Construct a BrowserAccessibilityManager with tree1. |
244 CountedBrowserAccessibility::global_obj_count_ = 0; | 246 CountedBrowserAccessibility::global_obj_count_ = 0; |
245 BrowserAccessibilityManager* manager = | 247 BrowserAccessibilityManager* manager = |
246 BrowserAccessibilityManager::Create( | 248 BrowserAccessibilityManager::Create( |
247 MakeAXTreeUpdate(tree1_root, | 249 MakeAXTreeUpdate(tree1_root, |
248 tree1_child1, tree1_child2, tree1_child3), | 250 tree1_child1, tree1_child2, tree1_child3), |
249 NULL, | 251 nullptr, |
250 new CountedBrowserAccessibilityFactory()); | 252 new CountedBrowserAccessibilityFactory()); |
251 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); | 253 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
252 | 254 |
253 // Save references to all of the objects. | 255 // Save references to all of the objects. |
254 CountedBrowserAccessibility* root_accessible = | 256 CountedBrowserAccessibility* root_accessible = |
255 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 257 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
256 root_accessible->NativeAddReference(); | 258 root_accessible->NativeAddReference(); |
257 CountedBrowserAccessibility* child1_accessible = | 259 CountedBrowserAccessibility* child1_accessible = |
258 static_cast<CountedBrowserAccessibility*>( | 260 static_cast<CountedBrowserAccessibility*>( |
259 root_accessible->PlatformGetChild(0)); | 261 root_accessible->PlatformGetChild(0)); |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 tree2_container.child_ids.push_back(5); | 417 tree2_container.child_ids.push_back(5); |
416 | 418 |
417 // Construct a BrowserAccessibilityManager with tree1. | 419 // Construct a BrowserAccessibilityManager with tree1. |
418 CountedBrowserAccessibility::global_obj_count_ = 0; | 420 CountedBrowserAccessibility::global_obj_count_ = 0; |
419 BrowserAccessibilityManager* manager = | 421 BrowserAccessibilityManager* manager = |
420 BrowserAccessibilityManager::Create( | 422 BrowserAccessibilityManager::Create( |
421 MakeAXTreeUpdate(tree1_root, tree1_container, | 423 MakeAXTreeUpdate(tree1_root, tree1_container, |
422 tree1_child1, tree1_grandchild1, | 424 tree1_child1, tree1_grandchild1, |
423 tree1_child2, tree1_grandchild2, | 425 tree1_child2, tree1_grandchild2, |
424 tree1_child3, tree1_grandchild3), | 426 tree1_child3, tree1_grandchild3), |
425 NULL, | 427 nullptr, |
426 new CountedBrowserAccessibilityFactory()); | 428 new CountedBrowserAccessibilityFactory()); |
427 ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_); | 429 ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_); |
428 | 430 |
429 // Save references to some objects. | 431 // Save references to some objects. |
430 CountedBrowserAccessibility* root_accessible = | 432 CountedBrowserAccessibility* root_accessible = |
431 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 433 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
432 root_accessible->NativeAddReference(); | 434 root_accessible->NativeAddReference(); |
433 CountedBrowserAccessibility* container_accessible = | 435 CountedBrowserAccessibility* container_accessible = |
434 static_cast<CountedBrowserAccessibility*>( | 436 static_cast<CountedBrowserAccessibility*>( |
435 root_accessible->PlatformGetChild(0)); | 437 root_accessible->PlatformGetChild(0)); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 tree2_1.id = 1; | 545 tree2_1.id = 1; |
544 tree2_1.state = 0; | 546 tree2_1.state = 0; |
545 tree2_1.child_ids.push_back(4); | 547 tree2_1.child_ids.push_back(4); |
546 tree2_1.child_ids.push_back(5); | 548 tree2_1.child_ids.push_back(5); |
547 | 549 |
548 // Construct a BrowserAccessibilityManager with tree1. | 550 // Construct a BrowserAccessibilityManager with tree1. |
549 CountedBrowserAccessibility::global_obj_count_ = 0; | 551 CountedBrowserAccessibility::global_obj_count_ = 0; |
550 BrowserAccessibilityManager* manager = | 552 BrowserAccessibilityManager* manager = |
551 BrowserAccessibilityManager::Create( | 553 BrowserAccessibilityManager::Create( |
552 MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4), | 554 MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4), |
553 NULL, | 555 nullptr, |
554 new CountedBrowserAccessibilityFactory()); | 556 new CountedBrowserAccessibilityFactory()); |
555 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); | 557 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
556 | 558 |
557 // Process a notification containing the changed subtree. | 559 // Process a notification containing the changed subtree. |
558 std::vector<AccessibilityHostMsg_EventParams> params; | 560 std::vector<AccessibilityHostMsg_EventParams> params; |
559 params.push_back(AccessibilityHostMsg_EventParams()); | 561 params.push_back(AccessibilityHostMsg_EventParams()); |
560 AccessibilityHostMsg_EventParams* msg = ¶ms[0]; | 562 AccessibilityHostMsg_EventParams* msg = ¶ms[0]; |
561 msg->event_type = ui::AX_EVENT_CHILDREN_CHANGED; | 563 msg->event_type = ui::AX_EVENT_CHILDREN_CHANGED; |
562 msg->update.nodes.push_back(tree2_1); | 564 msg->update.nodes.push_back(tree2_1); |
563 msg->update.nodes.push_back(tree2_4); | 565 msg->update.nodes.push_back(tree2_4); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 character_offsets2.push_back(20); | 679 character_offsets2.push_back(20); |
678 character_offsets2.push_back(25); | 680 character_offsets2.push_back(25); |
679 character_offsets2.push_back(28); | 681 character_offsets2.push_back(28); |
680 inline_text2.AddIntListAttribute( | 682 inline_text2.AddIntListAttribute( |
681 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 683 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
682 static_text.child_ids.push_back(4); | 684 static_text.child_ids.push_back(4); |
683 | 685 |
684 scoped_ptr<BrowserAccessibilityManager> manager( | 686 scoped_ptr<BrowserAccessibilityManager> manager( |
685 BrowserAccessibilityManager::Create( | 687 BrowserAccessibilityManager::Create( |
686 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 688 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
687 NULL, | 689 nullptr, |
688 new CountedBrowserAccessibilityFactory())); | 690 new CountedBrowserAccessibilityFactory())); |
689 | 691 |
690 BrowserAccessibility* root_accessible = manager->GetRoot(); | 692 BrowserAccessibility* root_accessible = manager->GetRoot(); |
691 BrowserAccessibility* static_text_accessible = | 693 BrowserAccessibility* static_text_accessible = |
692 root_accessible->PlatformGetChild(0); | 694 root_accessible->PlatformGetChild(0); |
693 | 695 |
694 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), | 696 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), |
695 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 697 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
696 | 698 |
697 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), | 699 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 character_offsets2.push_back(10); | 767 character_offsets2.push_back(10); |
766 character_offsets2.push_back(20); | 768 character_offsets2.push_back(20); |
767 character_offsets2.push_back(30); | 769 character_offsets2.push_back(30); |
768 inline_text2.AddIntListAttribute( | 770 inline_text2.AddIntListAttribute( |
769 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 771 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
770 static_text.child_ids.push_back(4); | 772 static_text.child_ids.push_back(4); |
771 | 773 |
772 scoped_ptr<BrowserAccessibilityManager> manager( | 774 scoped_ptr<BrowserAccessibilityManager> manager( |
773 BrowserAccessibilityManager::Create( | 775 BrowserAccessibilityManager::Create( |
774 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 776 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
775 NULL, | 777 nullptr, |
776 new CountedBrowserAccessibilityFactory())); | 778 new CountedBrowserAccessibilityFactory())); |
777 | 779 |
778 BrowserAccessibility* root_accessible = manager->GetRoot(); | 780 BrowserAccessibility* root_accessible = manager->GetRoot(); |
779 BrowserAccessibility* static_text_accessible = | 781 BrowserAccessibility* static_text_accessible = |
780 root_accessible->PlatformGetChild(0); | 782 root_accessible->PlatformGetChild(0); |
781 | 783 |
782 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), | 784 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), |
783 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); | 785 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); |
784 | 786 |
785 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), | 787 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 character_offsets1.push_back(6); // 0 | 827 character_offsets1.push_back(6); // 0 |
826 character_offsets1.push_back(11); // 1 | 828 character_offsets1.push_back(11); // 1 |
827 character_offsets1.push_back(16); // 2 | 829 character_offsets1.push_back(16); // 2 |
828 inline_text.AddIntListAttribute( | 830 inline_text.AddIntListAttribute( |
829 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); | 831 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); |
830 static_text.child_ids.push_back(3); | 832 static_text.child_ids.push_back(3); |
831 | 833 |
832 scoped_ptr<BrowserAccessibilityManager> manager( | 834 scoped_ptr<BrowserAccessibilityManager> manager( |
833 BrowserAccessibilityManager::Create( | 835 BrowserAccessibilityManager::Create( |
834 MakeAXTreeUpdate(root, static_text, inline_text), | 836 MakeAXTreeUpdate(root, static_text, inline_text), |
835 NULL, | 837 nullptr, |
836 new CountedBrowserAccessibilityFactory())); | 838 new CountedBrowserAccessibilityFactory())); |
837 | 839 |
838 BrowserAccessibility* root_accessible = manager->GetRoot(); | 840 BrowserAccessibility* root_accessible = manager->GetRoot(); |
839 BrowserAccessibility* static_text_accessible = | 841 BrowserAccessibility* static_text_accessible = |
840 root_accessible->PlatformGetChild(0); | 842 root_accessible->PlatformGetChild(0); |
841 | 843 |
842 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { | 844 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { |
843 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), | 845 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), |
844 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 846 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); |
845 } else { | 847 } else { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 character_offsets2.push_back(20); // 0 | 913 character_offsets2.push_back(20); // 0 |
912 character_offsets2.push_back(40); // 1 | 914 character_offsets2.push_back(40); // 1 |
913 inline_text2.AddIntListAttribute( | 915 inline_text2.AddIntListAttribute( |
914 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 916 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
915 | 917 |
916 scoped_ptr<BrowserAccessibilityManager> manager( | 918 scoped_ptr<BrowserAccessibilityManager> manager( |
917 BrowserAccessibilityManager::Create( | 919 BrowserAccessibilityManager::Create( |
918 MakeAXTreeUpdate( | 920 MakeAXTreeUpdate( |
919 root, div, static_text1, img, | 921 root, div, static_text1, img, |
920 static_text2, inline_text1, inline_text2), | 922 static_text2, inline_text1, inline_text2), |
921 NULL, | 923 nullptr, |
922 new CountedBrowserAccessibilityFactory())); | 924 new CountedBrowserAccessibilityFactory())); |
923 BrowserAccessibility* root_accessible = manager->GetRoot(); | 925 BrowserAccessibility* root_accessible = manager->GetRoot(); |
924 | 926 |
925 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), | 927 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), |
926 root_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 928 root_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
927 | 929 |
928 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), | 930 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), |
929 root_accessible->GetLocalBoundsForRange(0, 2).ToString()); | 931 root_accessible->GetLocalBoundsForRange(0, 2).ToString()); |
930 | 932 |
931 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), | 933 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), |
(...skipping 26 matching lines...) Expand all Loading... |
958 node4.id = 4; | 960 node4.id = 4; |
959 node3.child_ids.push_back(4); | 961 node3.child_ids.push_back(4); |
960 | 962 |
961 ui::AXNodeData node5; | 963 ui::AXNodeData node5; |
962 node5.id = 5; | 964 node5.id = 5; |
963 root.child_ids.push_back(5); | 965 root.child_ids.push_back(5); |
964 | 966 |
965 scoped_ptr<BrowserAccessibilityManager> manager( | 967 scoped_ptr<BrowserAccessibilityManager> manager( |
966 BrowserAccessibilityManager::Create( | 968 BrowserAccessibilityManager::Create( |
967 MakeAXTreeUpdate(root, node2, node3, node4, node5), | 969 MakeAXTreeUpdate(root, node2, node3, node4, node5), |
968 NULL, | 970 nullptr, |
969 new CountedBrowserAccessibilityFactory())); | 971 new CountedBrowserAccessibilityFactory())); |
970 | 972 |
971 BrowserAccessibility* root_accessible = manager->GetRoot(); | 973 BrowserAccessibility* root_accessible = manager->GetRoot(); |
972 BrowserAccessibility* node2_accessible = root_accessible->PlatformGetChild(0); | 974 BrowserAccessibility* node2_accessible = root_accessible->PlatformGetChild(0); |
973 BrowserAccessibility* node3_accessible = root_accessible->PlatformGetChild(1); | 975 BrowserAccessibility* node3_accessible = root_accessible->PlatformGetChild(1); |
974 BrowserAccessibility* node4_accessible = | 976 BrowserAccessibility* node4_accessible = |
975 node3_accessible->PlatformGetChild(0); | 977 node3_accessible->PlatformGetChild(0); |
976 BrowserAccessibility* node5_accessible = root_accessible->PlatformGetChild(2); | 978 BrowserAccessibility* node5_accessible = root_accessible->PlatformGetChild(2); |
977 | 979 |
978 ASSERT_EQ(NULL, manager->NextInTreeOrder(NULL)); | 980 ASSERT_EQ(nullptr, manager->NextInTreeOrder(nullptr)); |
979 ASSERT_EQ(node2_accessible, manager->NextInTreeOrder(root_accessible)); | 981 ASSERT_EQ(node2_accessible, manager->NextInTreeOrder(root_accessible)); |
980 ASSERT_EQ(node3_accessible, manager->NextInTreeOrder(node2_accessible)); | 982 ASSERT_EQ(node3_accessible, manager->NextInTreeOrder(node2_accessible)); |
981 ASSERT_EQ(node4_accessible, manager->NextInTreeOrder(node3_accessible)); | 983 ASSERT_EQ(node4_accessible, manager->NextInTreeOrder(node3_accessible)); |
982 ASSERT_EQ(node5_accessible, manager->NextInTreeOrder(node4_accessible)); | 984 ASSERT_EQ(node5_accessible, manager->NextInTreeOrder(node4_accessible)); |
983 ASSERT_EQ(NULL, manager->NextInTreeOrder(node5_accessible)); | 985 ASSERT_EQ(nullptr, manager->NextInTreeOrder(node5_accessible)); |
984 | 986 |
985 ASSERT_EQ(NULL, manager->PreviousInTreeOrder(NULL)); | 987 ASSERT_EQ(nullptr, manager->PreviousInTreeOrder(nullptr)); |
986 ASSERT_EQ(node4_accessible, manager->PreviousInTreeOrder(node5_accessible)); | 988 ASSERT_EQ(node4_accessible, manager->PreviousInTreeOrder(node5_accessible)); |
987 ASSERT_EQ(node3_accessible, manager->PreviousInTreeOrder(node4_accessible)); | 989 ASSERT_EQ(node3_accessible, manager->PreviousInTreeOrder(node4_accessible)); |
988 ASSERT_EQ(node2_accessible, manager->PreviousInTreeOrder(node3_accessible)); | 990 ASSERT_EQ(node2_accessible, manager->PreviousInTreeOrder(node3_accessible)); |
989 ASSERT_EQ(root_accessible, manager->PreviousInTreeOrder(node2_accessible)); | 991 ASSERT_EQ(root_accessible, manager->PreviousInTreeOrder(node2_accessible)); |
990 } | 992 } |
991 | 993 |
| 994 TEST(BrowserAccessibilityManagerTest, DeletingFocusedNodeDoesNotCrash) { |
| 995 // Create a really simple tree with one root node and one focused child. |
| 996 ui::AXNodeData root; |
| 997 root.id = 1; |
| 998 root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
| 999 root.state = 0; |
| 1000 root.child_ids.push_back(2); |
| 1001 |
| 1002 ui::AXNodeData node2; |
| 1003 node2.id = 2; |
| 1004 node2.state = 1 << ui::AX_STATE_FOCUSED; |
| 1005 |
| 1006 scoped_ptr<BrowserAccessibilityManager> manager( |
| 1007 BrowserAccessibilityManager::Create( |
| 1008 MakeAXTreeUpdate(root, node2), |
| 1009 nullptr, |
| 1010 new CountedBrowserAccessibilityFactory())); |
| 1011 |
| 1012 ASSERT_EQ(1, manager->GetRoot()->GetId()); |
| 1013 ASSERT_EQ(1, manager->GetFocus(manager->GetRoot())->GetId()); |
| 1014 |
| 1015 // Send the focus event for node 2. |
| 1016 std::vector<AccessibilityHostMsg_EventParams> events; |
| 1017 events.push_back(AccessibilityHostMsg_EventParams()); |
| 1018 events[0].update = MakeAXTreeUpdate(node2); |
| 1019 events[0].id = 2; |
| 1020 events[0].event_type = ui::AX_EVENT_FOCUS; |
| 1021 manager->OnAccessibilityEvents(events); |
| 1022 |
| 1023 ASSERT_EQ(1, manager->GetRoot()->GetId()); |
| 1024 ASSERT_EQ(2, manager->GetFocus(manager->GetRoot())->GetId()); |
| 1025 |
| 1026 // Now replace the tree with a new tree consisting of a single root. |
| 1027 ui::AXNodeData root2; |
| 1028 root2.id = 3; |
| 1029 root2.role = ui::AX_ROLE_ROOT_WEB_AREA; |
| 1030 root2.state = 0; |
| 1031 |
| 1032 std::vector<AccessibilityHostMsg_EventParams> events2; |
| 1033 events2.push_back(AccessibilityHostMsg_EventParams()); |
| 1034 events2[0].update = MakeAXTreeUpdate(root2); |
| 1035 events2[0].id = -1; |
| 1036 events2[0].event_type = ui::AX_EVENT_NONE; |
| 1037 manager->OnAccessibilityEvents(events2); |
| 1038 |
| 1039 // Make sure that the focused node was updated to the new root and |
| 1040 // that this doesn't crash. |
| 1041 ASSERT_EQ(3, manager->GetRoot()->GetId()); |
| 1042 ASSERT_EQ(3, manager->GetFocus(manager->GetRoot())->GetId()); |
| 1043 } |
| 1044 |
992 } // namespace content | 1045 } // namespace content |
OLD | NEW |