diff options
author | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 01:59:37 +0000 |
---|---|---|
committer | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 01:59:37 +0000 |
commit | 70eee34d2d158dc51086b9571e62a61ace16727b (patch) | |
tree | b6532b9fe9fb38f8fcb6cbe89a9fb36b1c2d964b /chrome/browser/accessibility/browser_accessibility_manager.cc | |
parent | a9a430111290193028dc2b39be75c176d49d7bd3 (diff) | |
download | chromium_src-70eee34d2d158dc51086b9571e62a61ace16727b.zip chromium_src-70eee34d2d158dc51086b9571e62a61ace16727b.tar.gz chromium_src-70eee34d2d158dc51086b9571e62a61ace16727b.tar.bz2 |
Only send child node updates on load and children changed notifications.
BUG=none
TEST=interactive_ui_tests:AccessibilityWinBrowserTest.*
Review URL: http://codereview.chromium.org/4272002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65170 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility/browser_accessibility_manager.cc')
-rw-r--r-- | chrome/browser/accessibility/browser_accessibility_manager.cc | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_manager.cc b/chrome/browser/accessibility/browser_accessibility_manager.cc index b8b6ead..00c5221 100644 --- a/chrome/browser/accessibility/browser_accessibility_manager.cc +++ b/chrome/browser/accessibility/browser_accessibility_manager.cc @@ -109,7 +109,7 @@ void BrowserAccessibilityManager::OnAccessibilityNotifications( void BrowserAccessibilityManager::OnAccessibilityObjectStateChange( const WebAccessibility& acc_obj) { - BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj); + BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); if (!new_browser_acc) return; @@ -121,7 +121,7 @@ void BrowserAccessibilityManager::OnAccessibilityObjectStateChange( void BrowserAccessibilityManager::OnAccessibilityObjectChildrenChange( const WebAccessibility& acc_obj) { - BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj); + BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, true); if (!new_browser_acc) return; @@ -133,7 +133,7 @@ void BrowserAccessibilityManager::OnAccessibilityObjectChildrenChange( void BrowserAccessibilityManager::OnAccessibilityObjectFocusChange( const WebAccessibility& acc_obj) { - BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj); + BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); if (!new_browser_acc) return; @@ -169,7 +169,7 @@ void BrowserAccessibilityManager::OnAccessibilityObjectLoadComplete( void BrowserAccessibilityManager::OnAccessibilityObjectValueChange( const WebAccessibility& acc_obj) { - BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj); + BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); if (!new_browser_acc) return; @@ -181,7 +181,7 @@ void BrowserAccessibilityManager::OnAccessibilityObjectValueChange( void BrowserAccessibilityManager::OnAccessibilityObjectTextChange( const WebAccessibility& acc_obj) { - BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj); + BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); if (!new_browser_acc) return; @@ -263,10 +263,10 @@ void BrowserAccessibilityManager::ModifyTreeInPlace( new_root); } - -BrowserAccessibility* BrowserAccessibilityManager::UpdateTree( - const WebAccessibility& acc_obj) { - base::hash_map<int, int32>::iterator iter = +BrowserAccessibility* BrowserAccessibilityManager::UpdateNode( + const WebAccessibility& acc_obj, + bool include_children) { + base::hash_map<int32, int32>::iterator iter = renderer_id_to_child_id_map_.find(acc_obj.id); if (iter == renderer_id_to_child_id_map_.end()) return NULL; @@ -276,30 +276,41 @@ BrowserAccessibility* BrowserAccessibilityManager::UpdateTree( if (!old_browser_acc) return NULL; + if (!include_children) { + DCHECK_EQ(0U, acc_obj.children.size()); + old_browser_acc->Initialize( + this, + old_browser_acc->GetParent(), + old_browser_acc->child_id(), + old_browser_acc->index_in_parent(), + acc_obj); + return old_browser_acc; + } + if (CanModifyTreeInPlace(old_browser_acc, acc_obj)) { ModifyTreeInPlace(old_browser_acc, acc_obj); return old_browser_acc; } BrowserAccessibility* new_browser_acc = CreateAccessibilityTree( - old_browser_acc->GetParent(), - child_id, - acc_obj, - old_browser_acc->index_in_parent()); - - if (old_browser_acc->GetParent()) { - old_browser_acc->GetParent()->ReplaceChild( - old_browser_acc, - new_browser_acc); - } else { - DCHECK_EQ(old_browser_acc, root_); - root_ = new_browser_acc; - } - old_browser_acc->ReleaseTree(); - old_browser_acc->ReleaseReference(); - child_id_map_[child_id] = new_browser_acc; + old_browser_acc->GetParent(), + child_id, + acc_obj, + old_browser_acc->index_in_parent()); + + if (old_browser_acc->GetParent()) { + old_browser_acc->GetParent()->ReplaceChild( + old_browser_acc, + new_browser_acc); + } else { + DCHECK_EQ(old_browser_acc, root_); + root_ = new_browser_acc; + } + old_browser_acc->ReleaseTree(); + old_browser_acc->ReleaseReference(); + child_id_map_[child_id] = new_browser_acc; - return new_browser_acc; + return new_browser_acc; } BrowserAccessibility* BrowserAccessibilityManager::CreateAccessibilityTree( |