summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_win.cc15
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_win.h2
-rw-r--r--content/browser/accessibility/browser_accessibility_win.cc5
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc39
4 files changed, 36 insertions, 25 deletions
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index 9aa5d4a..974b033 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -37,12 +37,14 @@ BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin(
BrowserAccessibilityDelegate* delegate,
BrowserAccessibilityFactory* factory)
: BrowserAccessibilityManager(initial_tree, delegate, factory),
- parent_hwnd_(accessible_hwnd->GetParent()),
parent_iaccessible_(parent_iaccessible),
tracked_scroll_object_(NULL),
accessible_hwnd_(accessible_hwnd) {
ui::win::CreateATLModuleIfNeeded();
- accessible_hwnd_->set_browser_accessibility_manager(this);
+ if (accessible_hwnd_) {
+ accessible_hwnd_->set_browser_accessibility_manager(this);
+ parent_hwnd_ = accessible_hwnd->GetParent();
+ }
}
BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
@@ -69,10 +71,17 @@ ui::AXTreeUpdate BrowserAccessibilityManagerWin::GetEmptyDocument() {
return update;
}
+void BrowserAccessibilityManagerWin::SetAccessibleHWND(
+ LegacyRenderWidgetHostHWND* accessible_hwnd) {
+ accessible_hwnd_ = accessible_hwnd;
+ accessible_hwnd_->set_browser_accessibility_manager(this);
+ parent_hwnd_ = accessible_hwnd->GetParent();
+}
+
void BrowserAccessibilityManagerWin::MaybeCallNotifyWinEvent(DWORD event,
LONG child_id) {
// Don't fire events if this view isn't hooked up to its parent.
- if (!parent_iaccessible())
+ if (!parent_iaccessible() || !parent_hwnd())
return;
// If on Win 7 and complete accessibility is enabled, use the fake child HWND
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h
index 18260e4..90914db 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -40,6 +40,8 @@ class CONTENT_EXPORT BrowserAccessibilityManagerWin
parent_iaccessible_ = parent_iaccessible;
}
+ void SetAccessibleHWND(LegacyRenderWidgetHostHWND* accessible_hwnd);
+
// Calls NotifyWinEvent if the parent window's IAccessible pointer is known.
void MaybeCallNotifyWinEvent(DWORD event, LONG child_id);
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index e98ae71..60728e0 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -739,6 +739,9 @@ STDMETHODIMP BrowserAccessibilityWin::get_windowHandle(HWND* window_handle) {
return E_INVALIDARG;
*window_handle = manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd();
+ if (!*window_handle)
+ return E_FAIL;
+
return S_OK;
}
@@ -992,6 +995,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_imagePosition(
if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
HWND parent_hwnd =
manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd();
+ if (!parent_hwnd)
+ return E_FAIL;
POINT top_left = {0, 0};
::ClientToScreen(parent_hwnd, &top_left);
*x = GetLocation().x() + top_left.x;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 44d57f5..ad3e95f 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -999,6 +999,11 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
if (!legacy_render_widget_host_HWND_) {
legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
reinterpret_cast<HWND>(GetNativeViewId()));
+ BrowserAccessibilityManagerWin* manager =
+ static_cast<BrowserAccessibilityManagerWin*>(
+ GetBrowserAccessibilityManager());
+ if (manager)
+ manager->SetAccessibleHWND(legacy_render_widget_host_HWND_.get());
}
if (legacy_render_widget_host_HWND_) {
legacy_render_widget_host_HWND_->SetBounds(
@@ -1226,33 +1231,23 @@ InputEventAckState RenderWidgetHostViewAura::FilterInputEvent(
}
void RenderWidgetHostViewAura::CreateBrowserAccessibilityManagerIfNeeded() {
- if (GetBrowserAccessibilityManager())
- return;
-
- BrowserAccessibilityManager* manager = NULL;
#if defined(OS_WIN)
- aura::WindowTreeHost* host = window_->GetHost();
- if (!host)
- return;
- HWND hwnd = host->GetAcceleratedWidget();
-
- // The accessible_parent may be NULL at this point. The WebContents will pass
- // it down to this instance (by way of the RenderViewHost and
- // RenderWidgetHost) when it is known. This instance will then set it on its
- // BrowserAccessibilityManager.
- gfx::NativeViewAccessible accessible_parent =
- host_->GetParentNativeViewAccessible();
-
- if (legacy_render_widget_host_HWND_) {
- manager = new BrowserAccessibilityManagerWin(
+ if (!GetBrowserAccessibilityManager()) {
+ gfx::NativeViewAccessible accessible_parent =
+ host_->GetParentNativeViewAccessible();
+ LegacyRenderWidgetHostHWND* parent_hwnd =
+ legacy_render_widget_host_HWND_.get();
+ SetBrowserAccessibilityManager(new BrowserAccessibilityManagerWin(
legacy_render_widget_host_HWND_.get(), accessible_parent,
- BrowserAccessibilityManagerWin::GetEmptyDocument(), host_);
+ BrowserAccessibilityManagerWin::GetEmptyDocument(), host_));
}
#else
- manager = BrowserAccessibilityManager::Create(
- BrowserAccessibilityManager::GetEmptyDocument(), host_);
+ if (!GetBrowserAccessibilityManager()) {
+ SetBrowserAccessibilityManager(
+ BrowserAccessibilityManager::Create(
+ BrowserAccessibilityManager::GetEmptyDocument(), host_));
+ }
#endif
- SetBrowserAccessibilityManager(manager);
}
gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() {