| 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 nullptr; | 93 return NULL; |
| 94 } | 94 } |
| 95 BrowserAccessibilityManager* AccessibilityGetChildFrame( | 95 BrowserAccessibilityManager* AccessibilityGetChildFrame( |
| 96 int accessibility_node_id) override { | 96 int accessibility_node_id) override { |
| 97 return nullptr; | 97 return NULL; |
| 98 } | 98 } |
| 99 BrowserAccessibility* AccessibilityGetParentFrame() override { | 99 BrowserAccessibility* AccessibilityGetParentFrame() override { return NULL; } |
| 100 return nullptr; | |
| 101 } | |
| 102 void AccessibilityGetAllChildFrames( | 100 void AccessibilityGetAllChildFrames( |
| 103 std::vector<BrowserAccessibilityManager*>* child_frames) override {} | 101 std::vector<BrowserAccessibilityManager*>* child_frames) override {} |
| 104 | 102 |
| 105 bool got_fatal_error() const { return got_fatal_error_; } | 103 bool got_fatal_error() const { return got_fatal_error_; } |
| 106 void reset_got_fatal_error() { got_fatal_error_ = false; } | 104 void reset_got_fatal_error() { got_fatal_error_ = false; } |
| 107 | 105 |
| 108 private: | 106 private: |
| 109 bool got_fatal_error_; | 107 bool got_fatal_error_; |
| 110 }; | 108 }; |
| 111 | 109 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 136 root.child_ids.push_back(3); | 134 root.child_ids.push_back(3); |
| 137 | 135 |
| 138 // Construct a BrowserAccessibilityManager with this | 136 // Construct a BrowserAccessibilityManager with this |
| 139 // ui::AXNodeData tree and a factory for an instance-counting | 137 // ui::AXNodeData tree and a factory for an instance-counting |
| 140 // BrowserAccessibility, and ensure that exactly 3 instances were | 138 // BrowserAccessibility, and ensure that exactly 3 instances were |
| 141 // created. Note that the manager takes ownership of the factory. | 139 // created. Note that the manager takes ownership of the factory. |
| 142 CountedBrowserAccessibility::global_obj_count_ = 0; | 140 CountedBrowserAccessibility::global_obj_count_ = 0; |
| 143 BrowserAccessibilityManager* manager = | 141 BrowserAccessibilityManager* manager = |
| 144 BrowserAccessibilityManager::Create( | 142 BrowserAccessibilityManager::Create( |
| 145 MakeAXTreeUpdate(root, button, checkbox), | 143 MakeAXTreeUpdate(root, button, checkbox), |
| 146 nullptr, | 144 NULL, |
| 147 new CountedBrowserAccessibilityFactory()); | 145 new CountedBrowserAccessibilityFactory()); |
| 148 | 146 |
| 149 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); | 147 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
| 150 | 148 |
| 151 // Delete the manager and test that all 3 instances are deleted. | 149 // Delete the manager and test that all 3 instances are deleted. |
| 152 delete manager; | 150 delete manager; |
| 153 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); | 151 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_); |
| 154 | 152 |
| 155 // Construct a manager again, and this time save references to two of | 153 // Construct a manager again, and this time save references to two of |
| 156 // the three nodes in the tree. | 154 // the three nodes in the tree. |
| 157 manager = | 155 manager = |
| 158 BrowserAccessibilityManager::Create( | 156 BrowserAccessibilityManager::Create( |
| 159 MakeAXTreeUpdate(root, button, checkbox), | 157 MakeAXTreeUpdate(root, button, checkbox), |
| 160 nullptr, | 158 NULL, |
| 161 new CountedBrowserAccessibilityFactory()); | 159 new CountedBrowserAccessibilityFactory()); |
| 162 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); | 160 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
| 163 | 161 |
| 164 CountedBrowserAccessibility* root_accessible = | 162 CountedBrowserAccessibility* root_accessible = |
| 165 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 163 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
| 166 root_accessible->NativeAddReference(); | 164 root_accessible->NativeAddReference(); |
| 167 CountedBrowserAccessibility* child1_accessible = | 165 CountedBrowserAccessibility* child1_accessible = |
| 168 static_cast<CountedBrowserAccessibility*>( | 166 static_cast<CountedBrowserAccessibility*>( |
| 169 root_accessible->PlatformGetChild(1)); | 167 root_accessible->PlatformGetChild(1)); |
| 170 child1_accessible->NativeAddReference(); | 168 child1_accessible->NativeAddReference(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 tree2_root.child_ids.push_back(5); | 239 tree2_root.child_ids.push_back(5); |
| 242 tree2_root.child_ids.push_back(2); | 240 tree2_root.child_ids.push_back(2); |
| 243 tree2_root.child_ids.push_back(3); | 241 tree2_root.child_ids.push_back(3); |
| 244 | 242 |
| 245 // Construct a BrowserAccessibilityManager with tree1. | 243 // Construct a BrowserAccessibilityManager with tree1. |
| 246 CountedBrowserAccessibility::global_obj_count_ = 0; | 244 CountedBrowserAccessibility::global_obj_count_ = 0; |
| 247 BrowserAccessibilityManager* manager = | 245 BrowserAccessibilityManager* manager = |
| 248 BrowserAccessibilityManager::Create( | 246 BrowserAccessibilityManager::Create( |
| 249 MakeAXTreeUpdate(tree1_root, | 247 MakeAXTreeUpdate(tree1_root, |
| 250 tree1_child1, tree1_child2, tree1_child3), | 248 tree1_child1, tree1_child2, tree1_child3), |
| 251 nullptr, | 249 NULL, |
| 252 new CountedBrowserAccessibilityFactory()); | 250 new CountedBrowserAccessibilityFactory()); |
| 253 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); | 251 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
| 254 | 252 |
| 255 // Save references to all of the objects. | 253 // Save references to all of the objects. |
| 256 CountedBrowserAccessibility* root_accessible = | 254 CountedBrowserAccessibility* root_accessible = |
| 257 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 255 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
| 258 root_accessible->NativeAddReference(); | 256 root_accessible->NativeAddReference(); |
| 259 CountedBrowserAccessibility* child1_accessible = | 257 CountedBrowserAccessibility* child1_accessible = |
| 260 static_cast<CountedBrowserAccessibility*>( | 258 static_cast<CountedBrowserAccessibility*>( |
| 261 root_accessible->PlatformGetChild(0)); | 259 root_accessible->PlatformGetChild(0)); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 tree2_container.child_ids.push_back(5); | 415 tree2_container.child_ids.push_back(5); |
| 418 | 416 |
| 419 // Construct a BrowserAccessibilityManager with tree1. | 417 // Construct a BrowserAccessibilityManager with tree1. |
| 420 CountedBrowserAccessibility::global_obj_count_ = 0; | 418 CountedBrowserAccessibility::global_obj_count_ = 0; |
| 421 BrowserAccessibilityManager* manager = | 419 BrowserAccessibilityManager* manager = |
| 422 BrowserAccessibilityManager::Create( | 420 BrowserAccessibilityManager::Create( |
| 423 MakeAXTreeUpdate(tree1_root, tree1_container, | 421 MakeAXTreeUpdate(tree1_root, tree1_container, |
| 424 tree1_child1, tree1_grandchild1, | 422 tree1_child1, tree1_grandchild1, |
| 425 tree1_child2, tree1_grandchild2, | 423 tree1_child2, tree1_grandchild2, |
| 426 tree1_child3, tree1_grandchild3), | 424 tree1_child3, tree1_grandchild3), |
| 427 nullptr, | 425 NULL, |
| 428 new CountedBrowserAccessibilityFactory()); | 426 new CountedBrowserAccessibilityFactory()); |
| 429 ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_); | 427 ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_); |
| 430 | 428 |
| 431 // Save references to some objects. | 429 // Save references to some objects. |
| 432 CountedBrowserAccessibility* root_accessible = | 430 CountedBrowserAccessibility* root_accessible = |
| 433 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); | 431 static_cast<CountedBrowserAccessibility*>(manager->GetRoot()); |
| 434 root_accessible->NativeAddReference(); | 432 root_accessible->NativeAddReference(); |
| 435 CountedBrowserAccessibility* container_accessible = | 433 CountedBrowserAccessibility* container_accessible = |
| 436 static_cast<CountedBrowserAccessibility*>( | 434 static_cast<CountedBrowserAccessibility*>( |
| 437 root_accessible->PlatformGetChild(0)); | 435 root_accessible->PlatformGetChild(0)); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 tree2_1.id = 1; | 543 tree2_1.id = 1; |
| 546 tree2_1.state = 0; | 544 tree2_1.state = 0; |
| 547 tree2_1.child_ids.push_back(4); | 545 tree2_1.child_ids.push_back(4); |
| 548 tree2_1.child_ids.push_back(5); | 546 tree2_1.child_ids.push_back(5); |
| 549 | 547 |
| 550 // Construct a BrowserAccessibilityManager with tree1. | 548 // Construct a BrowserAccessibilityManager with tree1. |
| 551 CountedBrowserAccessibility::global_obj_count_ = 0; | 549 CountedBrowserAccessibility::global_obj_count_ = 0; |
| 552 BrowserAccessibilityManager* manager = | 550 BrowserAccessibilityManager* manager = |
| 553 BrowserAccessibilityManager::Create( | 551 BrowserAccessibilityManager::Create( |
| 554 MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4), | 552 MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4), |
| 555 nullptr, | 553 NULL, |
| 556 new CountedBrowserAccessibilityFactory()); | 554 new CountedBrowserAccessibilityFactory()); |
| 557 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); | 555 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
| 558 | 556 |
| 559 // Process a notification containing the changed subtree. | 557 // Process a notification containing the changed subtree. |
| 560 std::vector<AccessibilityHostMsg_EventParams> params; | 558 std::vector<AccessibilityHostMsg_EventParams> params; |
| 561 params.push_back(AccessibilityHostMsg_EventParams()); | 559 params.push_back(AccessibilityHostMsg_EventParams()); |
| 562 AccessibilityHostMsg_EventParams* msg = ¶ms[0]; | 560 AccessibilityHostMsg_EventParams* msg = ¶ms[0]; |
| 563 msg->event_type = ui::AX_EVENT_CHILDREN_CHANGED; | 561 msg->event_type = ui::AX_EVENT_CHILDREN_CHANGED; |
| 564 msg->update.nodes.push_back(tree2_1); | 562 msg->update.nodes.push_back(tree2_1); |
| 565 msg->update.nodes.push_back(tree2_4); | 563 msg->update.nodes.push_back(tree2_4); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 character_offsets2.push_back(20); | 677 character_offsets2.push_back(20); |
| 680 character_offsets2.push_back(25); | 678 character_offsets2.push_back(25); |
| 681 character_offsets2.push_back(28); | 679 character_offsets2.push_back(28); |
| 682 inline_text2.AddIntListAttribute( | 680 inline_text2.AddIntListAttribute( |
| 683 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 681 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
| 684 static_text.child_ids.push_back(4); | 682 static_text.child_ids.push_back(4); |
| 685 | 683 |
| 686 scoped_ptr<BrowserAccessibilityManager> manager( | 684 scoped_ptr<BrowserAccessibilityManager> manager( |
| 687 BrowserAccessibilityManager::Create( | 685 BrowserAccessibilityManager::Create( |
| 688 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 686 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
| 689 nullptr, | 687 NULL, |
| 690 new CountedBrowserAccessibilityFactory())); | 688 new CountedBrowserAccessibilityFactory())); |
| 691 | 689 |
| 692 BrowserAccessibility* root_accessible = manager->GetRoot(); | 690 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 693 BrowserAccessibility* static_text_accessible = | 691 BrowserAccessibility* static_text_accessible = |
| 694 root_accessible->PlatformGetChild(0); | 692 root_accessible->PlatformGetChild(0); |
| 695 | 693 |
| 696 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), | 694 EXPECT_EQ(gfx::Rect(100, 100, 6, 9).ToString(), |
| 697 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 695 static_text_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
| 698 | 696 |
| 699 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), | 697 EXPECT_EQ(gfx::Rect(100, 100, 26, 9).ToString(), |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 character_offsets2.push_back(10); | 765 character_offsets2.push_back(10); |
| 768 character_offsets2.push_back(20); | 766 character_offsets2.push_back(20); |
| 769 character_offsets2.push_back(30); | 767 character_offsets2.push_back(30); |
| 770 inline_text2.AddIntListAttribute( | 768 inline_text2.AddIntListAttribute( |
| 771 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 769 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
| 772 static_text.child_ids.push_back(4); | 770 static_text.child_ids.push_back(4); |
| 773 | 771 |
| 774 scoped_ptr<BrowserAccessibilityManager> manager( | 772 scoped_ptr<BrowserAccessibilityManager> manager( |
| 775 BrowserAccessibilityManager::Create( | 773 BrowserAccessibilityManager::Create( |
| 776 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), | 774 MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
| 777 nullptr, | 775 NULL, |
| 778 new CountedBrowserAccessibilityFactory())); | 776 new CountedBrowserAccessibilityFactory())); |
| 779 | 777 |
| 780 BrowserAccessibility* root_accessible = manager->GetRoot(); | 778 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 781 BrowserAccessibility* static_text_accessible = | 779 BrowserAccessibility* static_text_accessible = |
| 782 root_accessible->PlatformGetChild(0); | 780 root_accessible->PlatformGetChild(0); |
| 783 | 781 |
| 784 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), | 782 EXPECT_EQ(gfx::Rect(100, 100, 60, 20).ToString(), |
| 785 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); | 783 static_text_accessible->GetLocalBoundsForRange(0, 6).ToString()); |
| 786 | 784 |
| 787 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), | 785 EXPECT_EQ(gfx::Rect(100, 100, 10, 20).ToString(), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 character_offsets1.push_back(6); // 0 | 825 character_offsets1.push_back(6); // 0 |
| 828 character_offsets1.push_back(11); // 1 | 826 character_offsets1.push_back(11); // 1 |
| 829 character_offsets1.push_back(16); // 2 | 827 character_offsets1.push_back(16); // 2 |
| 830 inline_text.AddIntListAttribute( | 828 inline_text.AddIntListAttribute( |
| 831 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); | 829 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets1); |
| 832 static_text.child_ids.push_back(3); | 830 static_text.child_ids.push_back(3); |
| 833 | 831 |
| 834 scoped_ptr<BrowserAccessibilityManager> manager( | 832 scoped_ptr<BrowserAccessibilityManager> manager( |
| 835 BrowserAccessibilityManager::Create( | 833 BrowserAccessibilityManager::Create( |
| 836 MakeAXTreeUpdate(root, static_text, inline_text), | 834 MakeAXTreeUpdate(root, static_text, inline_text), |
| 837 nullptr, | 835 NULL, |
| 838 new CountedBrowserAccessibilityFactory())); | 836 new CountedBrowserAccessibilityFactory())); |
| 839 | 837 |
| 840 BrowserAccessibility* root_accessible = manager->GetRoot(); | 838 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 841 BrowserAccessibility* static_text_accessible = | 839 BrowserAccessibility* static_text_accessible = |
| 842 root_accessible->PlatformGetChild(0); | 840 root_accessible->PlatformGetChild(0); |
| 843 | 841 |
| 844 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { | 842 if (manager->UseRootScrollOffsetsWhenComputingBounds()) { |
| 845 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), | 843 EXPECT_EQ(gfx::Rect(75, 50, 16, 9).ToString(), |
| 846 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); | 844 static_text_accessible->GetLocalBoundsForRange(0, 3).ToString()); |
| 847 } else { | 845 } else { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 character_offsets2.push_back(20); // 0 | 911 character_offsets2.push_back(20); // 0 |
| 914 character_offsets2.push_back(40); // 1 | 912 character_offsets2.push_back(40); // 1 |
| 915 inline_text2.AddIntListAttribute( | 913 inline_text2.AddIntListAttribute( |
| 916 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); | 914 ui::AX_ATTR_CHARACTER_OFFSETS, character_offsets2); |
| 917 | 915 |
| 918 scoped_ptr<BrowserAccessibilityManager> manager( | 916 scoped_ptr<BrowserAccessibilityManager> manager( |
| 919 BrowserAccessibilityManager::Create( | 917 BrowserAccessibilityManager::Create( |
| 920 MakeAXTreeUpdate( | 918 MakeAXTreeUpdate( |
| 921 root, div, static_text1, img, | 919 root, div, static_text1, img, |
| 922 static_text2, inline_text1, inline_text2), | 920 static_text2, inline_text1, inline_text2), |
| 923 nullptr, | 921 NULL, |
| 924 new CountedBrowserAccessibilityFactory())); | 922 new CountedBrowserAccessibilityFactory())); |
| 925 BrowserAccessibility* root_accessible = manager->GetRoot(); | 923 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 926 | 924 |
| 927 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), | 925 EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(), |
| 928 root_accessible->GetLocalBoundsForRange(0, 1).ToString()); | 926 root_accessible->GetLocalBoundsForRange(0, 1).ToString()); |
| 929 | 927 |
| 930 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), | 928 EXPECT_EQ(gfx::Rect(100, 100, 40, 20).ToString(), |
| 931 root_accessible->GetLocalBoundsForRange(0, 2).ToString()); | 929 root_accessible->GetLocalBoundsForRange(0, 2).ToString()); |
| 932 | 930 |
| 933 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), | 931 EXPECT_EQ(gfx::Rect(100, 100, 80, 20).ToString(), |
| (...skipping 26 matching lines...) Expand all Loading... |
| 960 node4.id = 4; | 958 node4.id = 4; |
| 961 node3.child_ids.push_back(4); | 959 node3.child_ids.push_back(4); |
| 962 | 960 |
| 963 ui::AXNodeData node5; | 961 ui::AXNodeData node5; |
| 964 node5.id = 5; | 962 node5.id = 5; |
| 965 root.child_ids.push_back(5); | 963 root.child_ids.push_back(5); |
| 966 | 964 |
| 967 scoped_ptr<BrowserAccessibilityManager> manager( | 965 scoped_ptr<BrowserAccessibilityManager> manager( |
| 968 BrowserAccessibilityManager::Create( | 966 BrowserAccessibilityManager::Create( |
| 969 MakeAXTreeUpdate(root, node2, node3, node4, node5), | 967 MakeAXTreeUpdate(root, node2, node3, node4, node5), |
| 970 nullptr, | 968 NULL, |
| 971 new CountedBrowserAccessibilityFactory())); | 969 new CountedBrowserAccessibilityFactory())); |
| 972 | 970 |
| 973 BrowserAccessibility* root_accessible = manager->GetRoot(); | 971 BrowserAccessibility* root_accessible = manager->GetRoot(); |
| 974 BrowserAccessibility* node2_accessible = root_accessible->PlatformGetChild(0); | 972 BrowserAccessibility* node2_accessible = root_accessible->PlatformGetChild(0); |
| 975 BrowserAccessibility* node3_accessible = root_accessible->PlatformGetChild(1); | 973 BrowserAccessibility* node3_accessible = root_accessible->PlatformGetChild(1); |
| 976 BrowserAccessibility* node4_accessible = | 974 BrowserAccessibility* node4_accessible = |
| 977 node3_accessible->PlatformGetChild(0); | 975 node3_accessible->PlatformGetChild(0); |
| 978 BrowserAccessibility* node5_accessible = root_accessible->PlatformGetChild(2); | 976 BrowserAccessibility* node5_accessible = root_accessible->PlatformGetChild(2); |
| 979 | 977 |
| 980 ASSERT_EQ(nullptr, manager->NextInTreeOrder(nullptr)); | 978 ASSERT_EQ(NULL, manager->NextInTreeOrder(NULL)); |
| 981 ASSERT_EQ(node2_accessible, manager->NextInTreeOrder(root_accessible)); | 979 ASSERT_EQ(node2_accessible, manager->NextInTreeOrder(root_accessible)); |
| 982 ASSERT_EQ(node3_accessible, manager->NextInTreeOrder(node2_accessible)); | 980 ASSERT_EQ(node3_accessible, manager->NextInTreeOrder(node2_accessible)); |
| 983 ASSERT_EQ(node4_accessible, manager->NextInTreeOrder(node3_accessible)); | 981 ASSERT_EQ(node4_accessible, manager->NextInTreeOrder(node3_accessible)); |
| 984 ASSERT_EQ(node5_accessible, manager->NextInTreeOrder(node4_accessible)); | 982 ASSERT_EQ(node5_accessible, manager->NextInTreeOrder(node4_accessible)); |
| 985 ASSERT_EQ(nullptr, manager->NextInTreeOrder(node5_accessible)); | 983 ASSERT_EQ(NULL, manager->NextInTreeOrder(node5_accessible)); |
| 986 | 984 |
| 987 ASSERT_EQ(nullptr, manager->PreviousInTreeOrder(nullptr)); | 985 ASSERT_EQ(NULL, manager->PreviousInTreeOrder(NULL)); |
| 988 ASSERT_EQ(node4_accessible, manager->PreviousInTreeOrder(node5_accessible)); | 986 ASSERT_EQ(node4_accessible, manager->PreviousInTreeOrder(node5_accessible)); |
| 989 ASSERT_EQ(node3_accessible, manager->PreviousInTreeOrder(node4_accessible)); | 987 ASSERT_EQ(node3_accessible, manager->PreviousInTreeOrder(node4_accessible)); |
| 990 ASSERT_EQ(node2_accessible, manager->PreviousInTreeOrder(node3_accessible)); | 988 ASSERT_EQ(node2_accessible, manager->PreviousInTreeOrder(node3_accessible)); |
| 991 ASSERT_EQ(root_accessible, manager->PreviousInTreeOrder(node2_accessible)); | 989 ASSERT_EQ(root_accessible, manager->PreviousInTreeOrder(node2_accessible)); |
| 992 } | 990 } |
| 993 | 991 |
| 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 | |
| 1045 } // namespace content | 992 } // namespace content |
| OLD | NEW |