Chromium Code Reviews| 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..c872ad55a875cd278168f2b4938435c1c1108298 100644 |
| --- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc |
| +++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc |
| @@ -989,4 +989,55 @@ TEST(BrowserAccessibilityManagerTest, NextPreviousInTreeOrder) { |
| 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), |
| + NULL, |
|
dcheng
2015/07/15 00:58:10
Nit: nullptr
dmazzoni
2015/07/22 18:44:26
Done throughout this file.
|
| + 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 |