diff options
author | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-26 21:03:41 +0000 |
---|---|---|
committer | dtseng@chromium.org <dtseng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-26 21:03:41 +0000 |
commit | 9f697d5bb4ae0b7464ed02cb9f7ce3f43054a32f (patch) | |
tree | 9441b466f055287de018903aa058270033f86774 /chrome | |
parent | 33bd0f059a7caee231351163a208159de9a69a48 (diff) | |
download | chromium_src-9f697d5bb4ae0b7464ed02cb9f7ce3f43054a32f.zip chromium_src-9f697d5bb4ae0b7464ed02cb9f7ce3f43054a32f.tar.gz chromium_src-9f697d5bb4ae0b7464ed02cb9f7ce3f43054a32f.tar.bz2 |
Ensures detached subtrees have root nodes that retain the previous parent.
Also, removes ReplaceChild, which doesn't seem to be used anymore.
BUG=none
TEST=BrowserAccessibilityManagerTest.TestReuseBrowserAccessibilityObjects2
Review URL: http://codereview.chromium.org/6902038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83072 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
6 files changed, 9 insertions, 26 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility.cc b/chrome/browser/accessibility/browser_accessibility.cc index 03a51e8..a54eb1e 100644 --- a/chrome/browser/accessibility/browser_accessibility.cc +++ b/chrome/browser/accessibility/browser_accessibility.cc @@ -32,14 +32,6 @@ BrowserAccessibility::BrowserAccessibility() BrowserAccessibility::~BrowserAccessibility() { } -void BrowserAccessibility::ReplaceChild( - BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) { - DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc); - - old_acc = children_[old_acc->index_in_parent_]; - children_[old_acc->index_in_parent_] = new_acc; -} - void BrowserAccessibility::Initialize( BrowserAccessibilityManager* manager, BrowserAccessibility* parent, diff --git a/chrome/browser/accessibility/browser_accessibility.h b/chrome/browser/accessibility/browser_accessibility.h index 6f42911..9f28c27 100644 --- a/chrome/browser/accessibility/browser_accessibility.h +++ b/chrome/browser/accessibility/browser_accessibility.h @@ -48,11 +48,6 @@ class BrowserAccessibility { // have been reset with new values from the renderer process. virtual void Initialize(); - // Replace a child object. Used when updating the accessibility tree. - virtual void ReplaceChild( - BrowserAccessibility* old_acc, - BrowserAccessibility* new_acc); - // Initialize this object, reading attributes from |src|. Does not // recurse into children of |src| and build the whole subtree. void Initialize(BrowserAccessibilityManager* manager, diff --git a/chrome/browser/accessibility/browser_accessibility_mac.h b/chrome/browser/accessibility/browser_accessibility_mac.h index 2f8e04a..f3c6605 100644 --- a/chrome/browser/accessibility/browser_accessibility_mac.h +++ b/chrome/browser/accessibility/browser_accessibility_mac.h @@ -22,11 +22,6 @@ class BrowserAccessibilityMac : public BrowserAccessibility { virtual void NativeReleaseReference(); // Overrides from BrowserAccessibility. - // Used to know when to update the cocoa children. - virtual void ReplaceChild( - BrowserAccessibility* old_acc, - BrowserAccessibility* new_acc); - // The BrowserAccessibilityCocoa associated with us. BrowserAccessibilityCocoa* native_view() const { return browser_accessibility_cocoa_; diff --git a/chrome/browser/accessibility/browser_accessibility_mac.mm b/chrome/browser/accessibility/browser_accessibility_mac.mm index 97f016a..305e93c8 100644 --- a/chrome/browser/accessibility/browser_accessibility_mac.mm +++ b/chrome/browser/accessibility/browser_accessibility_mac.mm @@ -47,13 +47,6 @@ void BrowserAccessibilityMac::NativeReleaseReference() { } } -void BrowserAccessibilityMac::ReplaceChild( - BrowserAccessibility* old_acc, - BrowserAccessibility* new_acc) { - BrowserAccessibility::ReplaceChild(old_acc, new_acc); - [browser_accessibility_cocoa_ childrenChanged]; -} - BrowserAccessibilityCocoa* BrowserAccessibility::toBrowserAccessibilityCocoa() { return static_cast<BrowserAccessibilityMac*>(this)-> native_view(); diff --git a/chrome/browser/accessibility/browser_accessibility_manager.cc b/chrome/browser/accessibility/browser_accessibility_manager.cc index 3a12164..36cbfd2 100644 --- a/chrome/browser/accessibility/browser_accessibility_manager.cc +++ b/chrome/browser/accessibility/browser_accessibility_manager.cc @@ -282,6 +282,9 @@ BrowserAccessibility* BrowserAccessibilityManager::UpdateNode( return current; } + BrowserAccessibility* current_parent = current->parent(); + int current_index_in_parent = current->index_in_parent(); + // Detach all of the nodes in the old tree and get a single flat vector // of all node pointers. std::vector<BrowserAccessibility*> old_tree_nodes; @@ -289,7 +292,8 @@ BrowserAccessibility* BrowserAccessibilityManager::UpdateNode( // Build a new tree, reusing old nodes if possible. Each node that's // reused will have its reference count incremented by one. - current = CreateAccessibilityTree(NULL, src, -1); + current = + CreateAccessibilityTree(current_parent, src, current_index_in_parent); // Decrement the reference count of all nodes in the old tree, which will // delete any nodes no longer needed. diff --git a/chrome/browser/accessibility/browser_accessibility_manager_unittest.cc b/chrome/browser/accessibility/browser_accessibility_manager_unittest.cc index 1b6aa1a..4d8bb15 100644 --- a/chrome/browser/accessibility/browser_accessibility_manager_unittest.cc +++ b/chrome/browser/accessibility/browser_accessibility_manager_unittest.cc @@ -451,6 +451,10 @@ TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects2) { EXPECT_TRUE(child2_accessible->instance_active()); EXPECT_FALSE(child3_accessible->instance_active()); + // Ensure that we retain the parent of the detached subtree. + EXPECT_EQ(root_accessible, container_accessible->parent()); + EXPECT_EQ(0, container_accessible->index_in_parent()); + // Check that the index in parent has been updated. EXPECT_EQ(2, child2_accessible->index_in_parent()); |