Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(424)

Unified Diff: chrome/browser/browser_accessibility_manager_win.cc

Issue 3250014: Update browser accessibility tree on a renderer accessibility object state ch... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fix lint errors Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/browser_accessibility_manager_win.cc
===================================================================
--- chrome/browser/browser_accessibility_manager_win.cc (revision 57984)
+++ chrome/browser/browser_accessibility_manager_win.cc (working copy)
@@ -114,18 +114,14 @@
}
void BrowserAccessibilityManager::OnAccessibilityObjectStateChange(
- int renderer_id) {
- base::hash_map<int, LONG>::iterator iter =
- renderer_id_to_child_id_map_.find(renderer_id);
- if (iter == renderer_id_to_child_id_map_.end())
- return;
+ const webkit_glue::WebAccessibility& acc_obj) {
+ BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj);
- LONG child_id = iter->second;
- ::NotifyWinEvent(
+ NotifyWinEvent(
EVENT_OBJECT_STATECHANGE,
parent_hwnd_,
OBJID_CLIENT,
- child_id);
+ new_browser_acc->child_id());
}
void BrowserAccessibilityManager::OnAccessibilityObjectChildrenChange(
@@ -136,23 +132,55 @@
// For each accessibility object child change.
for (unsigned int index = 0; index < acc_changes.size(); index++) {
const webkit_glue::WebAccessibility& acc_obj = acc_changes[index];
- base::hash_map<int, LONG>::iterator iter =
- renderer_id_to_child_id_map_.find(acc_obj.id);
- if (iter == renderer_id_to_child_id_map_.end())
- continue;
+ BrowserAccessibility* new_browser_acc = UpdateTree(acc_obj);
- LONG child_id = iter->second;
- BrowserAccessibility* old_browser_acc = GetFromChildID(child_id);
+ LONG child_id;
+ if (root_ != new_browser_acc) {
+ child_id = new_browser_acc->GetParent()->child_id();
+ } else {
+ child_id = CHILDID_SELF;
+ }
+ NotifyWinEvent(EVENT_OBJECT_REORDER, parent_hwnd_, OBJID_CLIENT, child_id);
+ }
+}
+
+BrowserAccessibility* BrowserAccessibilityManager::UpdateTree(
+ const webkit_glue::WebAccessibility& acc_obj) {
+ base::hash_map<int, LONG>::iterator iter =
+ renderer_id_to_child_id_map_.find(acc_obj.id);
+ if (iter == renderer_id_to_child_id_map_.end())
+ return NULL;
+
+ LONG child_id = iter->second;
+ BrowserAccessibility* old_browser_acc = GetFromChildID(child_id);
+
+ if (old_browser_acc->GetChildCount() == 0 && acc_obj.children.size() == 0) {
+ // Reinitialize the BrowserAccessibility if there are no children to update.
+ old_browser_acc->Initialize(
+ this,
dmazzoni 2010/09/01 15:10:52 nit: Indent 4 spaces
Chris Guillory 2010/09/01 15:35:27 Done.
+ old_browser_acc->GetParent(),
+ child_id,
+ old_browser_acc->index_in_parent(),
+ acc_obj);
+
+ return old_browser_acc;
+ } else {
+ BrowserAccessibility* old_focus = focus_;
+
BrowserAccessibility* new_browser_acc = CreateAccessibilityTree(
old_browser_acc->GetParent(),
child_id,
acc_obj,
old_browser_acc->index_in_parent());
- if (focus_->IsDescendantOf(old_browser_acc))
+ if (focus_->IsDescendantOf(old_browser_acc)) {
dmazzoni 2010/09/01 15:10:52 We definitely need to fix the focus (it can't poin
Chris Guillory 2010/09/01 15:35:27 That's a good thought. I remove this for now as th
focus_ = new_browser_acc;
+ if (delegate_)
+ delegate_->SetAccessibilityFocus(focus_->renderer_id());
+ }
+
if (old_browser_acc->GetParent()) {
old_browser_acc->GetParent()->ReplaceChild(
old_browser_acc,
@@ -165,13 +193,12 @@
old_browser_acc->Release();
child_id_map_[child_id] = new_browser_acc;
- if (root_ != new_browser_acc) {
+ if (focus_ != old_focus) {
NotifyWinEvent(
- EVENT_OBJECT_REORDER, parent_hwnd_, OBJID_CLIENT, child_id);
- } else {
- NotifyWinEvent(
- EVENT_OBJECT_REORDER, parent_hwnd_, OBJID_CLIENT, CHILDID_SELF);
+ EVENT_OBJECT_FOCUS, parent_hwnd_, OBJID_CLIENT, focus_->child_id());
}
+
+ return new_browser_acc;
}
}

Powered by Google App Engine
This is Rietveld 408576698