summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
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
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')
-rw-r--r--chrome/browser/accessibility/accessibility_win_browsertest.cc6
-rw-r--r--chrome/browser/accessibility/browser_accessibility_manager.cc63
-rw-r--r--chrome/browser/accessibility/browser_accessibility_manager.h16
3 files changed, 47 insertions, 38 deletions
diff --git a/chrome/browser/accessibility/accessibility_win_browsertest.cc b/chrome/browser/accessibility/accessibility_win_browsertest.cc
index 3f000d3..9d97988 100644
--- a/chrome/browser/accessibility/accessibility_win_browsertest.cc
+++ b/chrome/browser/accessibility/accessibility_win_browsertest.cc
@@ -553,9 +553,8 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
document_checker.CheckAccessible(GetRendererAccessible());
}
-// DISABLED crbug.com/61849
IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
- DISABLED_TestNotificationValueChanged) {
+ TestNotificationValueChanged) {
GURL tree_url("data:text/html,<body><input type='text' value='old value'/>"
"</body>");
browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
@@ -564,13 +563,11 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
// Check the browser's copy of the renderer accessibility tree.
- AccessibleChecker static_text_checker(L"", ROLE_SYSTEM_TEXT, L"old value");
AccessibleChecker text_field_div_checker(L"", L"div", L"");
AccessibleChecker text_field_checker(L"", ROLE_SYSTEM_TEXT, L"old value");
text_field_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE);
AccessibleChecker body_checker(L"", L"body", L"");
AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
- text_field_div_checker.AppendExpectedChild(&static_text_checker);
text_field_checker.AppendExpectedChild(&text_field_div_checker);
body_checker.AppendExpectedChild(&text_field_checker);
document_checker.AppendExpectedChild(&body_checker);
@@ -583,7 +580,6 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
// Check that the accessibility tree of the browser has been updated.
text_field_checker.SetExpectedValue(L"new value");
- static_text_checker.SetExpectedValue(L"new value");
document_checker.CheckAccessible(GetRendererAccessible());
}
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(
diff --git a/chrome/browser/accessibility/browser_accessibility_manager.h b/chrome/browser/accessibility/browser_accessibility_manager.h
index 23c1948..0abcd1c 100644
--- a/chrome/browser/accessibility/browser_accessibility_manager.h
+++ b/chrome/browser/accessibility/browser_accessibility_manager.h
@@ -133,12 +133,14 @@ class BrowserAccessibilityManager {
BrowserAccessibility* current_root,
const WebAccessibility& new_root);
- // Update the accessibility tree with an updated WebAccessibility tree or
- // subtree received from the renderer process. First attempts to modify
- // the tree in place, and if that fails, replaces the entire subtree.
- // Returns the updated node or NULL if no node was updated.
- BrowserAccessibility* UpdateTree(
- const WebAccessibility& acc_obj);
+ // Update an accessibility node with an updated WebAccessibility node
+ // received from the renderer process. When |include_children| is true
+ // the node's children will also be updated, otherwise only the node
+ // itself is updated. Returns the updated node or NULL if no node was
+ // updated.
+ BrowserAccessibility* UpdateNode(
+ const WebAccessibility& acc_obj,
+ bool include_children);
// Recursively build a tree of BrowserAccessibility objects from
// the WebAccessibility tree received from the renderer process.
@@ -168,7 +170,7 @@ class BrowserAccessibilityManager {
// A mapping from the IDs of objects in the renderer, to the child IDs
// we use internally here.
- base::hash_map<int, int32> renderer_id_to_child_id_map_;
+ base::hash_map<int32, int32> renderer_id_to_child_id_map_;
// A mapping from child IDs to BrowserAccessibility objects.
base::hash_map<int32, BrowserAccessibility*> child_id_map_;