summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility/browser_accessibility_manager.cc
diff options
context:
space:
mode:
authorctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 01:59:37 +0000
committerctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 01:59:37 +0000
commit70eee34d2d158dc51086b9571e62a61ace16727b (patch)
treeb6532b9fe9fb38f8fcb6cbe89a9fb36b1c2d964b /chrome/browser/accessibility/browser_accessibility_manager.cc
parenta9a430111290193028dc2b39be75c176d49d7bd3 (diff)
downloadchromium_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.cc63
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(