| 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..d3449df2d42dca40c526513600b21f375b75a5f5 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* root_delegate = GetDelegateFromRootManager();
|
| + if (!root_delegate || !root_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())) {
|
| + !root_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)
|
| + return result;
|
| + }
|
| + }
|
| +
|
| return NULL;
|
| }
|
|
|
|
|