Chromium Code Reviews| Index: content/browser/accessibility/browser_accessibility_manager_win.cc |
| diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc |
| index b7424870cea93a3dae7302f5b9dc0662539c9b8e..075bea42c89e356c5519dc47ca3dc4ee37fd7f1c 100644 |
| --- a/content/browser/accessibility/browser_accessibility_manager_win.cc |
| +++ b/content/browser/accessibility/browser_accessibility_manager_win.cc |
| @@ -75,17 +75,17 @@ IAccessible* BrowserAccessibilityManagerWin::GetParentIAccessible() { |
| void BrowserAccessibilityManagerWin::MaybeCallNotifyWinEvent(DWORD event, |
| LONG child_id) { |
| - if (!delegate_) |
| + BrowserAccessibilityDelegate* delegate = GetDelegateFromRootManager(); |
| + if (!delegate) |
| return; |
| - HWND hwnd = delegate_->AccessibilityGetAcceleratedWidget(); |
| + HWND hwnd = delegate->AccessibilityGetAcceleratedWidget(); |
| if (!hwnd) |
| return; |
| ::NotifyWinEvent(event, hwnd, OBJID_CLIENT, child_id); |
| } |
| - |
| void BrowserAccessibilityManagerWin::OnNodeCreated(ui::AXNode* node) { |
| BrowserAccessibilityManager::OnNodeCreated(node); |
| BrowserAccessibility* obj = GetFromAXNode(node); |
| @@ -129,7 +129,8 @@ void BrowserAccessibilityManagerWin::OnWindowFocused() { |
| void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent( |
| ui::AXEvent event_type, |
| BrowserAccessibility* node) { |
| - if (!delegate_ || !delegate_->AccessibilityGetAcceleratedWidget()) |
| + BrowserAccessibilityDelegate* delegate = GetDelegateFromRootManager(); |
|
David Tseng
2015/01/15 22:33:27
nit: might be good to name these root_delegate.
dmazzoni
2015/01/15 23:09:22
Done.
|
| + if (!delegate || !delegate->AccessibilityGetAcceleratedWidget()) |
| return; |
| // Inline text boxes are an internal implementation detail, we don't |
| @@ -143,7 +144,7 @@ void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent( |
| if ((event_type == ui::AX_EVENT_FOCUS || |
| event_type == ui::AX_EVENT_BLUR || |
| event_type == ui::AX_EVENT_LOAD_COMPLETE) && |
| - (!delegate_ || !delegate_->AccessibilityViewHasFocus())) { |
| + !delegate->AccessibilityViewHasFocus()) { |
| return; |
| } |
| @@ -285,6 +286,22 @@ BrowserAccessibilityWin* BrowserAccessibilityManagerWin::GetFromUniqueIdWin( |
| if (result) |
| return result->ToBrowserAccessibilityWin(); |
| } |
| + |
| + // Also search all child frames, such as out-of-process iframes or |
| + // guest browser plugins. |
| + if (delegate()) { |
| + std::vector<BrowserAccessibilityManager*> child_frames; |
| + delegate()->AccessibilityGetAllChildFrames(&child_frames); |
| + for (size_t i = 0; i < child_frames.size(); ++i) { |
| + BrowserAccessibilityManagerWin* child_manager = |
| + child_frames[i]->ToBrowserAccessibilityManagerWin(); |
| + BrowserAccessibilityWin* result = |
| + child_manager->GetFromUniqueIdWin(unique_id_win); |
| + if (result) |
|
David Tseng
2015/01/15 22:33:27
nit: not needed.
dmazzoni
2015/01/15 23:09:22
It's needed because it's in a loop
|
| + return result; |
| + } |
| + } |
| + |
| return NULL; |
| } |