Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1120)

Unified Diff: content/browser/accessibility/browser_accessibility_manager_win.cc

Issue 799633007: Make Windows accessibility event firing aware of guest / child frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@webview_fixes
Patch Set: Fix Mac compile Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698