Fix RenderWidgetHostViewAura's accessible parent.
views::WebView returns the accessible object from
RenderWidgetHostViewAura as its own accessibility
object. Hook up the reverse direction so that the
accessible parent of RenderWidgetHostViewAura is
the accessible object from the parent of the WebView.
BUG=175156
Review URL: https://chromiumcodereview.appspot.com/12917018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189195 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index a52dd53e..ba0dee5 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -53,14 +53,6 @@
return empty_document;
}
-IAccessible* BrowserAccessibilityManagerWin::parent_iaccessible() {
- return parent_iaccessible_;
-}
-
-HWND BrowserAccessibilityManagerWin::parent_hwnd() {
- return parent_hwnd_;
-}
-
void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent(
int type,
BrowserAccessibility* node) {
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h
index d2860ad..2eefae97 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -29,11 +29,13 @@
static AccessibilityNodeData GetEmptyDocument();
// Get the closest containing HWND.
- HWND parent_hwnd();
+ HWND parent_hwnd() { return parent_hwnd_; }
- // Get a the default IAccessible for the parent window, does not make a
- // new reference.
- IAccessible* parent_iaccessible();
+ // The IAccessible for the parent window.
+ IAccessible* parent_iaccessible() { return parent_iaccessible_; }
+ void set_parent_iaccessible(IAccessible* parent_iaccessible) {
+ parent_iaccessible_ = parent_iaccessible;
+ }
// BrowserAccessibilityManager methods
virtual void NotifyAccessibilityEvent(int type, BrowserAccessibility* node);
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 e8214ca..f0bbd25b 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -624,7 +624,8 @@
synthetic_move_sent_(false),
accelerated_compositing_state_changed_(false),
can_lock_compositor_(YES),
- paint_observer_(NULL) {
+ paint_observer_(NULL),
+ accessible_parent_(NULL) {
host_->SetView(this);
window_observer_.reset(new WindowObserver(this));
aura::client::SetTooltipText(window_, &tooltip_);
@@ -815,7 +816,7 @@
RenderWidgetHostViewAura::GetOrCreateBrowserAccessibilityManager() {
BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
if (manager)
- return NULL;
+ return manager;
#if defined(OS_WIN)
aura::RootWindow* root_window = window_->GetRootWindow();
@@ -823,12 +824,8 @@
return NULL;
HWND hwnd = root_window->GetAcceleratedWidget();
- // TODO: this should be the accessible of the parent View, for example
- // GetNativeViewAccessible() called on this tab's ContentsContainer.
- IAccessible* parent_iaccessible = NULL;
-
manager = new BrowserAccessibilityManagerWin(
- hwnd, parent_iaccessible,
+ hwnd, accessible_parent_,
BrowserAccessibilityManagerWin::GetEmptyDocument(), this);
#else
manager = BrowserAccessibilityManager::Create(AccessibilityNodeData(), this);
@@ -934,6 +931,25 @@
return window_->GetBoundsInScreen();
}
+void RenderWidgetHostViewAura::SetBackground(const SkBitmap& background) {
+ RenderWidgetHostViewBase::SetBackground(background);
+ host_->SetBackground(background);
+ window_->layer()->SetFillsBoundsOpaquely(background.isOpaque());
+}
+
+#if defined(OS_WIN)
+void RenderWidgetHostViewAura::SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) {
+ accessible_parent_ = accessible_parent;
+
+ BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
+ if (manager) {
+ static_cast<BrowserAccessibilityManagerWin*>(manager)->
+ set_parent_iaccessible(accessible_parent);
+ }
+}
+#endif
+
void RenderWidgetHostViewAura::UpdateCursor(const WebCursor& cursor) {
current_cursor_ = cursor;
const gfx::Display display = gfx::Screen::GetScreenFor(window_)->
@@ -1569,12 +1585,6 @@
--render_widget_host_view->pending_thumbnail_tasks_;
}
-void RenderWidgetHostViewAura::SetBackground(const SkBitmap& background) {
- RenderWidgetHostViewBase::SetBackground(background);
- host_->SetBackground(background);
- window_->layer()->SetFillsBoundsOpaquely(background.isOpaque());
-}
-
void RenderWidgetHostViewAura::GetScreenInfo(WebScreenInfo* results) {
GetScreenInfoForWindow(results, window_->GetRootWindow() ? window_ : NULL);
}
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 0f61a15..52c6376 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -112,6 +112,10 @@
virtual bool IsShowing() OVERRIDE;
virtual gfx::Rect GetViewBounds() const OVERRIDE;
virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+#if defined(OS_WIN)
+ virtual void SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) OVERRIDE;
+#endif
// Overridden from RenderWidgetHostViewPort:
virtual void InitAsPopup(RenderWidgetHostView* parent_host_view,
@@ -556,6 +560,8 @@
base::TimeTicks last_draw_ended_;
+ gfx::NativeViewAccessible accessible_parent_;
+
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAura);
};
diff --git a/content/browser/renderer_host/render_widget_host_view_guest.cc b/content/browser/renderer_host/render_widget_host_view_guest.cc
index a6ca59c6..b2ea113e 100644
--- a/content/browser/renderer_host/render_widget_host_view_guest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_guest.cc
@@ -259,6 +259,12 @@
}
#endif
+#if defined(OS_WIN) && defined(USE_AURA)
+void RenderWidgetHostViewGuest::SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) {
+}
+#endif
+
void RenderWidgetHostViewGuest::SetHasHorizontalScrollbar(
bool has_horizontal_scrollbar) {
platform_view_->SetHasHorizontalScrollbar(has_horizontal_scrollbar);
diff --git a/content/browser/renderer_host/render_widget_host_view_guest.h b/content/browser/renderer_host/render_widget_host_view_guest.h
index eaf418d..f26ed5f 100644
--- a/content/browser/renderer_host/render_widget_host_view_guest.h
+++ b/content/browser/renderer_host/render_widget_host_view_guest.h
@@ -60,6 +60,10 @@
#if defined(OS_WIN) && !defined(USE_AURA)
virtual void SetClickthroughRegion(SkRegion* region) OVERRIDE;
#endif
+#if defined(OS_WIN) && defined(USE_AURA)
+ virtual void SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) OVERRIDE;
+#endif
// RenderWidgetHostViewPort implementation.
virtual void InitAsPopup(RenderWidgetHostView* parent_host_view,
diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc
index e0e5b5e3..5bf77f1 100644
--- a/content/browser/renderer_host/test_render_view_host.cc
+++ b/content/browser/renderer_host/test_render_view_host.cc
@@ -211,6 +211,13 @@
}
#endif
+#if defined(OS_WIN) && defined(USE_AURA)
+void TestRenderWidgetHostView::SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) {
+ NOTIMPLEMENTED();
+}
+#endif
+
bool TestRenderWidgetHostView::LockMouse() {
return false;
}
diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h
index 7860495..14ea4d8 100644
--- a/content/browser/renderer_host/test_render_view_host.h
+++ b/content/browser/renderer_host/test_render_view_host.h
@@ -165,6 +165,10 @@
#if defined(OS_WIN) && !defined(USE_AURA)
virtual void SetClickthroughRegion(SkRegion* region) OVERRIDE;
#endif
+#if defined(OS_WIN) && defined(USE_AURA)
+ virtual void SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) OVERRIDE;
+#endif
virtual bool LockMouse() OVERRIDE;
virtual void UnlockMouse() OVERRIDE;