| 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 1e368c6f8d8e7cf6691f96c52c30713537b5d071..00295843e7cdb09c32b6f93042fb8e306bcd708c 100644
|
| --- a/content/browser/accessibility/browser_accessibility_manager.cc
|
| +++ b/content/browser/accessibility/browser_accessibility_manager.cc
|
| @@ -290,10 +290,24 @@ BrowserAccessibility* BrowserAccessibilityManager::GetActiveDescendantFocus(
|
|
|
| BrowserAccessibility* BrowserAccessibilityManager::GetFocus(
|
| BrowserAccessibility* root) {
|
| - if (focus_ && (!root || focus_->IsDescendantOf(root->node())))
|
| - return GetFromAXNode(focus_);
|
| + if (!focus_)
|
| + return NULL;
|
|
|
| - return NULL;
|
| + if (root && !focus_->IsDescendantOf(root->node()))
|
| + return NULL;
|
| +
|
| + if (!delegate())
|
| + return NULL;
|
| +
|
| + BrowserAccessibility* obj = GetFromAXNode(focus_);
|
| + if (obj->HasBoolAttribute(ui::AX_ATTR_IS_AX_TREE_HOST)) {
|
| + BrowserAccessibilityManager* child_manager =
|
| + delegate()->AccessibilityGetChildFrame(obj->GetId());
|
| + if (child_manager)
|
| + return child_manager->GetFocus(child_manager->GetRoot());
|
| + }
|
| +
|
| + return obj;
|
| }
|
|
|
| void BrowserAccessibilityManager::SetFocus(ui::AXNode* node, bool notify) {
|
| @@ -348,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();
|
| }
|
|
|
| @@ -419,6 +434,14 @@ void BrowserAccessibilityManager::OnNodeChangeFinished(ui::AXNode* node) {
|
| GetFromAXNode(node)->OnUpdateFinished();
|
| }
|
|
|
| +BrowserAccessibilityDelegate*
|
| + BrowserAccessibilityManager::GetDelegateFromRootManager() {
|
| + BrowserAccessibilityManager* manager = this;
|
| + while (manager->GetRoot()->GetParent())
|
| + manager = manager->GetRoot()->GetParent()->manager();
|
| + return manager->delegate();
|
| +}
|
| +
|
| ui::AXTreeUpdate BrowserAccessibilityManager::SnapshotAXTreeForTesting() {
|
| scoped_ptr<ui::AXTreeSource<const ui::AXNode*> > tree_source(
|
| tree_->CreateTreeSource());
|
|
|