Index: content/browser/accessibility/browser_accessibility_manager_unittest.cc |
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc |
index d30c2582b6a71e277bd356d68ef4acb20824e689..c9e6d833ead8ecfad8b77770dd7185c6e43f9d6d 100644 |
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc |
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc |
@@ -90,13 +90,15 @@ class TestBrowserAccessibilityDelegate |
return gfx::kNullAcceleratedWidget; |
} |
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override { |
- return NULL; |
+ return nullptr; |
} |
BrowserAccessibilityManager* AccessibilityGetChildFrame( |
int accessibility_node_id) override { |
- return NULL; |
+ return nullptr; |
+ } |
+ BrowserAccessibility* AccessibilityGetParentFrame() override { |
+ return nullptr; |
} |
- BrowserAccessibility* AccessibilityGetParentFrame() override { return NULL; } |
void AccessibilityGetAllChildFrames( |
std::vector<BrowserAccessibilityManager*>* child_frames) override {} |
@@ -141,7 +143,7 @@ TEST(BrowserAccessibilityManagerTest, TestNoLeaks) { |
BrowserAccessibilityManager* manager = |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, button, checkbox), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory()); |
ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
@@ -155,7 +157,7 @@ TEST(BrowserAccessibilityManagerTest, TestNoLeaks) { |
manager = |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, button, checkbox), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory()); |
ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_); |
@@ -246,7 +248,7 @@ TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects) { |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(tree1_root, |
tree1_child1, tree1_child2, tree1_child3), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory()); |
ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
@@ -422,7 +424,7 @@ TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects2) { |
tree1_child1, tree1_grandchild1, |
tree1_child2, tree1_grandchild2, |
tree1_child3, tree1_grandchild3), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory()); |
ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_); |
@@ -550,7 +552,7 @@ TEST(BrowserAccessibilityManagerTest, TestMoveChildUp) { |
BrowserAccessibilityManager* manager = |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory()); |
ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_); |
@@ -684,7 +686,7 @@ TEST(BrowserAccessibilityManagerTest, BoundsForRange) { |
scoped_ptr<BrowserAccessibilityManager> manager( |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory())); |
BrowserAccessibility* root_accessible = manager->GetRoot(); |
@@ -772,7 +774,7 @@ TEST(BrowserAccessibilityManagerTest, BoundsForRangeBiDi) { |
scoped_ptr<BrowserAccessibilityManager> manager( |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory())); |
BrowserAccessibility* root_accessible = manager->GetRoot(); |
@@ -832,7 +834,7 @@ TEST(BrowserAccessibilityManagerTest, BoundsForRangeScrolledWindow) { |
scoped_ptr<BrowserAccessibilityManager> manager( |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, static_text, inline_text), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory())); |
BrowserAccessibility* root_accessible = manager->GetRoot(); |
@@ -918,7 +920,7 @@ TEST(BrowserAccessibilityManagerTest, MAYBE_BoundsForRangeOnParentElement) { |
MakeAXTreeUpdate( |
root, div, static_text1, img, |
static_text2, inline_text1, inline_text2), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory())); |
BrowserAccessibility* root_accessible = manager->GetRoot(); |
@@ -965,7 +967,7 @@ TEST(BrowserAccessibilityManagerTest, NextPreviousInTreeOrder) { |
scoped_ptr<BrowserAccessibilityManager> manager( |
BrowserAccessibilityManager::Create( |
MakeAXTreeUpdate(root, node2, node3, node4, node5), |
- NULL, |
+ nullptr, |
new CountedBrowserAccessibilityFactory())); |
BrowserAccessibility* root_accessible = manager->GetRoot(); |
@@ -975,18 +977,69 @@ TEST(BrowserAccessibilityManagerTest, NextPreviousInTreeOrder) { |
node3_accessible->PlatformGetChild(0); |
BrowserAccessibility* node5_accessible = root_accessible->PlatformGetChild(2); |
- ASSERT_EQ(NULL, manager->NextInTreeOrder(NULL)); |
+ ASSERT_EQ(nullptr, manager->NextInTreeOrder(nullptr)); |
ASSERT_EQ(node2_accessible, manager->NextInTreeOrder(root_accessible)); |
ASSERT_EQ(node3_accessible, manager->NextInTreeOrder(node2_accessible)); |
ASSERT_EQ(node4_accessible, manager->NextInTreeOrder(node3_accessible)); |
ASSERT_EQ(node5_accessible, manager->NextInTreeOrder(node4_accessible)); |
- ASSERT_EQ(NULL, manager->NextInTreeOrder(node5_accessible)); |
+ ASSERT_EQ(nullptr, manager->NextInTreeOrder(node5_accessible)); |
- ASSERT_EQ(NULL, manager->PreviousInTreeOrder(NULL)); |
+ ASSERT_EQ(nullptr, manager->PreviousInTreeOrder(nullptr)); |
ASSERT_EQ(node4_accessible, manager->PreviousInTreeOrder(node5_accessible)); |
ASSERT_EQ(node3_accessible, manager->PreviousInTreeOrder(node4_accessible)); |
ASSERT_EQ(node2_accessible, manager->PreviousInTreeOrder(node3_accessible)); |
ASSERT_EQ(root_accessible, manager->PreviousInTreeOrder(node2_accessible)); |
} |
+TEST(BrowserAccessibilityManagerTest, DeletingFocusedNodeDoesNotCrash) { |
+ // Create a really simple tree with one root node and one focused child. |
+ ui::AXNodeData root; |
+ root.id = 1; |
+ root.role = ui::AX_ROLE_ROOT_WEB_AREA; |
+ root.state = 0; |
+ root.child_ids.push_back(2); |
+ |
+ ui::AXNodeData node2; |
+ node2.id = 2; |
+ node2.state = 1 << ui::AX_STATE_FOCUSED; |
+ |
+ scoped_ptr<BrowserAccessibilityManager> manager( |
+ BrowserAccessibilityManager::Create( |
+ MakeAXTreeUpdate(root, node2), |
+ nullptr, |
+ new CountedBrowserAccessibilityFactory())); |
+ |
+ ASSERT_EQ(1, manager->GetRoot()->GetId()); |
+ ASSERT_EQ(1, manager->GetFocus(manager->GetRoot())->GetId()); |
+ |
+ // Send the focus event for node 2. |
+ std::vector<AccessibilityHostMsg_EventParams> events; |
+ events.push_back(AccessibilityHostMsg_EventParams()); |
+ events[0].update = MakeAXTreeUpdate(node2); |
+ events[0].id = 2; |
+ events[0].event_type = ui::AX_EVENT_FOCUS; |
+ manager->OnAccessibilityEvents(events); |
+ |
+ ASSERT_EQ(1, manager->GetRoot()->GetId()); |
+ ASSERT_EQ(2, manager->GetFocus(manager->GetRoot())->GetId()); |
+ |
+ // Now replace the tree with a new tree consisting of a single root. |
+ ui::AXNodeData root2; |
+ root2.id = 3; |
+ root2.role = ui::AX_ROLE_ROOT_WEB_AREA; |
+ root2.state = 0; |
+ |
+ std::vector<AccessibilityHostMsg_EventParams> events2; |
+ events2.push_back(AccessibilityHostMsg_EventParams()); |
+ events2[0].update = MakeAXTreeUpdate(root2); |
+ events2[0].id = -1; |
+ events2[0].event_type = ui::AX_EVENT_NONE; |
+ manager->OnAccessibilityEvents(events2); |
+ |
+ // Make sure that the focused node was updated to the new root and |
+ // that this doesn't crash. |
+ ASSERT_EQ(3, manager->GetRoot()->GetId()); |
+ ASSERT_EQ(3, manager->GetFocus(manager->GetRoot())->GetId()); |
+} |
+ |
} // namespace content |