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 | |
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')
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_; |