Index: content/browser/accessibility/browser_accessibility_manager.cc |
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc |
index 0bc4260ac629c53f97b73de99dfd7371a88ace76..7e726bdb09009180812c9c8b26e021ece170381d 100644 |
--- a/content/browser/accessibility/browser_accessibility_manager.cc |
+++ b/content/browser/accessibility/browser_accessibility_manager.cc |
@@ -362,8 +362,9 @@ void BrowserAccessibilityManager::SetTextSelection( |
} |
gfx::Rect BrowserAccessibilityManager::GetViewBounds() { |
- if (delegate_) |
- return delegate_->AccessibilityGetViewBounds(); |
+ BrowserAccessibilityDelegate* delegate = GetDelegateFromRootManager(); |
+ if (delegate) |
+ return delegate->AccessibilityGetViewBounds(); |
return gfx::Rect(); |
} |
@@ -433,6 +434,19 @@ void BrowserAccessibilityManager::OnNodeChangeFinished(ui::AXNode* node) { |
GetFromAXNode(node)->OnUpdateFinished(); |
} |
+BrowserAccessibilityDelegate* |
+ BrowserAccessibilityManager::GetDelegateFromRootManager() { |
+ BrowserAccessibilityManager* manager = this; |
+ while (manager->delegate()) { |
+ BrowserAccessibility* host_node_in_parent_frame = |
+ manager->delegate()->AccessibilityGetParentFrame(); |
+ if (!host_node_in_parent_frame) |
+ break; |
+ manager = host_node_in_parent_frame->manager(); |
+ } |
+ return manager->delegate(); |
+} |
+ |
ui::AXTreeUpdate BrowserAccessibilityManager::SnapshotAXTreeForTesting() { |
scoped_ptr<ui::AXTreeSource<const ui::AXNode*> > tree_source( |
tree_->CreateTreeSource()); |