Chromium Code Reviews| Index: content/browser/accessibility/browser_accessibility_manager.cc |
| =================================================================== |
| --- content/browser/accessibility/browser_accessibility_manager.cc (revision 98225) |
| +++ content/browser/accessibility/browser_accessibility_manager.cc (working copy) |
| @@ -61,7 +61,7 @@ |
| delegate_(delegate), |
| factory_(factory), |
| focus_(NULL) { |
| - root_ = CreateAccessibilityTree(NULL, src, 0); |
| + root_ = CreateAccessibilityTree(NULL, src, 0, false); |
| if (!focus_) |
| SetFocus(root_, false); |
| } |
| @@ -107,8 +107,9 @@ |
| int32 renderer_id) { |
| base::hash_map<int32, int32>::iterator iter = |
| renderer_id_to_child_id_map_.find(renderer_id); |
| - if (iter == renderer_id_to_child_id_map_.end()) |
| + if (iter == renderer_id_to_child_id_map_.end()) { |
|
David Tseng
2011/08/26 16:14:37
nit: Do we need the braces?
dmazzoni
2011/08/29 18:08:51
Done.
|
| return NULL; |
| + } |
| int32 child_id = iter->second; |
| return GetFromChildID(child_id); |
| @@ -132,12 +133,12 @@ |
| switch (param.notification_type) { |
| case ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_CHECK_STATE_CHANGED: |
| - OnAccessibilityObjectStateChange(param.acc_obj); |
| - break; |
| + NOTIFICATION_TYPE_LIVE_REGION_CHANGED: |
|
David Tseng
2011/08/26 16:14:37
nit: sort alphabetically.
dmazzoni
2011/08/29 18:08:51
Done.
|
| case ViewHostMsg_AccessibilityNotification_Type:: |
| NOTIFICATION_TYPE_CHILDREN_CHANGED: |
| - OnAccessibilityObjectChildrenChange(param.acc_obj); |
| + // Notifications where children are included. |
| + OnSimpleAccessibilityNotification( |
| + param.acc_obj, param.notification_type, true); |
| break; |
| case ViewHostMsg_AccessibilityNotification_Type:: |
| NOTIFICATION_TYPE_FOCUS_CHANGED: |
| @@ -147,45 +148,27 @@ |
| NOTIFICATION_TYPE_LOAD_COMPLETE: |
| OnAccessibilityObjectLoadComplete(param.acc_obj); |
| break; |
| - case ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_VALUE_CHANGED: |
| - OnAccessibilityObjectValueChange(param.acc_obj); |
| - break; |
| - case ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED: |
| - OnAccessibilityObjectTextChange(param.acc_obj); |
| - break; |
| default: |
| - DCHECK(0); |
| + // For all other notifications, children are not included. |
|
David Tseng
2011/08/26 16:14:37
Either remove the DCHECK above or explicitly list
dmazzoni
2011/08/29 18:08:51
Done.
|
| + OnSimpleAccessibilityNotification( |
| + param.acc_obj, param.notification_type, false); |
| break; |
| } |
| } |
| } |
| -void BrowserAccessibilityManager::OnAccessibilityObjectStateChange( |
| - const WebAccessibility& acc_obj) { |
| - BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); |
| +void BrowserAccessibilityManager::OnSimpleAccessibilityNotification( |
| + const WebAccessibility& acc_obj, |
| + int notification_type, |
| + bool include_children) { |
| + BrowserAccessibility* new_browser_acc = |
| + UpdateNode(acc_obj, include_children); |
| if (!new_browser_acc) |
| return; |
| - NotifyAccessibilityEvent( |
| - ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_CHECK_STATE_CHANGED, |
| - new_browser_acc); |
| + NotifyAccessibilityEvent(notification_type, new_browser_acc); |
| } |
| -void BrowserAccessibilityManager::OnAccessibilityObjectChildrenChange( |
| - const WebAccessibility& acc_obj) { |
| - BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, true); |
| - if (!new_browser_acc) |
| - return; |
| - |
| - NotifyAccessibilityEvent( |
| - ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_CHILDREN_CHANGED, |
| - new_browser_acc); |
| -} |
| - |
| void BrowserAccessibilityManager::OnAccessibilityObjectFocusChange( |
| const WebAccessibility& acc_obj) { |
| BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); |
| @@ -220,30 +203,6 @@ |
| GotFocus(); |
| } |
| -void BrowserAccessibilityManager::OnAccessibilityObjectValueChange( |
| - const WebAccessibility& acc_obj) { |
| - BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); |
| - if (!new_browser_acc) |
| - return; |
| - |
| - NotifyAccessibilityEvent( |
| - ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_VALUE_CHANGED, |
| - new_browser_acc); |
| -} |
| - |
| -void BrowserAccessibilityManager::OnAccessibilityObjectTextChange( |
| - const WebAccessibility& acc_obj) { |
| - BrowserAccessibility* new_browser_acc = UpdateNode(acc_obj, false); |
| - if (!new_browser_acc) |
| - return; |
| - |
| - NotifyAccessibilityEvent( |
| - ViewHostMsg_AccessibilityNotification_Type:: |
| - NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED, |
| - new_browser_acc); |
| -} |
| - |
| void BrowserAccessibilityManager::GotFocus() { |
| // TODO(ctguil): Remove when tree update logic handles focus changes. |
| if (!focus_) |
| @@ -314,6 +273,7 @@ |
| current->child_id(), |
| current->index_in_parent(), |
| src); |
| + current->SendNodeUpdateEvents(); |
| return current; |
| } |
| @@ -327,13 +287,14 @@ |
| // Build a new tree, reusing old nodes if possible. Each node that's |
| // reused will have its reference count incremented by one. |
| - current = |
| - CreateAccessibilityTree(current_parent, src, current_index_in_parent); |
| + current = CreateAccessibilityTree( |
| + current_parent, src, current_index_in_parent, true); |
| // Decrement the reference count of all nodes in the old tree, which will |
| // delete any nodes no longer needed. |
| - for (int i = 0; i < static_cast<int>(old_tree_nodes.size()); i++) |
| + for (int i = 0; i < static_cast<int>(old_tree_nodes.size()); i++) { |
|
David Tseng
2011/08/26 16:14:37
nit: braces necessary?
dmazzoni
2011/08/29 18:08:51
Done.
|
| old_tree_nodes[i]->InternalReleaseReference(false); |
| + } |
| if (!focus_ || !focus_->instance_active()) |
| SetFocus(root_, false); |
| @@ -344,9 +305,11 @@ |
| BrowserAccessibility* BrowserAccessibilityManager::CreateAccessibilityTree( |
| BrowserAccessibility* parent, |
| const WebAccessibility& src, |
| - int index_in_parent) { |
| + int index_in_parent, |
| + bool send_show_events) { |
| BrowserAccessibility* instance = NULL; |
| int32 child_id = 0; |
| + bool children_can_send_show_events = send_show_events; |
| base::hash_map<int32, int32>::iterator iter = |
| renderer_id_to_child_id_map_.find(src.id); |
| @@ -375,10 +338,12 @@ |
| // reference count. |
| instance->UpdateParent(parent, index_in_parent); |
| instance->InternalAddReference(); |
| + send_show_events = false; |
| } else { |
| // Otherwise, create a new instance. |
| instance = factory_->Create(); |
| child_id = GetNextChildID(); |
| + children_can_send_show_events = false; |
| } |
| instance->Initialize(this, parent, child_id, index_in_parent, src); |
| @@ -388,9 +353,16 @@ |
| SetFocus(instance, false); |
| for (int i = 0; i < static_cast<int>(src.children.size()); ++i) { |
| BrowserAccessibility* child = CreateAccessibilityTree( |
| - instance, src.children[i], i); |
| + instance, src.children[i], i, children_can_send_show_events); |
| instance->AddChild(child); |
| } |
| + if (send_show_events) { |
|
David Tseng
2011/08/26 16:14:37
Any chance we could move this up to UpdateNode?
dmazzoni
2011/08/29 18:08:51
It'd be pretty hard, we need to update children_ca
|
| + NotifyAccessibilityEvent( |
| + ViewHostMsg_AccessibilityNotification_Type:: |
| + NOTIFICATION_TYPE_OBJECT_SHOW, |
| + instance); |
|
David Tseng
2011/08/26 16:14:37
nit: align with "ViewHostMsg_AccessibilityNotifica
dmazzoni
2011/08/29 18:08:51
Done.
|
| + } |
| + instance->SendNodeUpdateEvents(); |
| return instance; |
| } |