summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 01:58:41 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 01:58:41 +0000
commitafe8375a957d6d496fc41ddd35ef485fa7cf4a4b (patch)
tree80f73dfa78b7cf1abfcb4a7d29ec23142ea2a53c
parent3dbdc605f73b784f97fb38d2a9c931b90883db9f (diff)
downloadchromium_src-afe8375a957d6d496fc41ddd35ef485fa7cf4a4b.zip
chromium_src-afe8375a957d6d496fc41ddd35ef485fa7cf4a4b.tar.gz
chromium_src-afe8375a957d6d496fc41ddd35ef485fa7cf4a4b.tar.bz2
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
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_win.cc8
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_win.h10
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc36
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h6
-rw-r--r--content/browser/renderer_host/render_widget_host_view_guest.cc6
-rw-r--r--content/browser/renderer_host/render_widget_host_view_guest.h4
-rw-r--r--content/browser/renderer_host/test_render_view_host.cc7
-rw-r--r--content/browser/renderer_host/test_render_view_host.h4
-rw-r--r--content/public/browser/render_widget_host_view.h6
-rw-r--r--ui/views/controls/webview/webview.cc14
10 files changed, 76 insertions, 25 deletions
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index a52dd53..ba0dee5 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -53,14 +53,6 @@ AccessibilityNodeData BrowserAccessibilityManagerWin::GetEmptyDocument() {
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..2eefae9 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -29,11 +29,13 @@ class CONTENT_EXPORT BrowserAccessibilityManagerWin
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..f0bbd25 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 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
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 @@ BrowserAccessibilityManager*
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 @@ RenderWidgetHostViewAura::GetOrCreateBrowserAccessibilityManager() {
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 @@ gfx::Rect RenderWidgetHostViewAura::GetViewBounds() const {
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 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceFinished(
--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 @@ class RenderWidgetHostViewAura
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 @@ class RenderWidgetHostViewAura
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 a6ca59c..b2ea113 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 @@ void RenderWidgetHostViewGuest::SetClickthroughRegion(SkRegion* region) {
}
#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 @@ class CONTENT_EXPORT RenderWidgetHostViewGuest
#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 e0e5b5e..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 @@ void TestRenderWidgetHostView::SetClickthroughRegion(SkRegion* region) {
}
#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 @@ class TestRenderWidgetHostView : public RenderWidgetHostViewBase {
#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;
diff --git a/content/public/browser/render_widget_host_view.h b/content/public/browser/render_widget_host_view.h
index 6ec4e79..461ab6d 100644
--- a/content/public/browser/render_widget_host_view.h
+++ b/content/public/browser/render_widget_host_view.h
@@ -163,6 +163,12 @@ class CONTENT_EXPORT RenderWidgetHostView {
// The region specified will be transparent to mouse clicks.
virtual void SetClickthroughRegion(SkRegion* region) = 0;
#endif
+
+#if defined(OS_WIN) && defined(USE_AURA)
+ // Set the parent native accessible view for this View.
+ virtual void SetParentNativeViewAccessible(
+ gfx::NativeViewAccessible accessible_parent) = 0;
+#endif
};
} // namespace content
diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc
index ac2695e..1c1b889 100644
--- a/ui/views/controls/webview/webview.cc
+++ b/ui/views/controls/webview/webview.cc
@@ -213,6 +213,15 @@ void WebView::AttachWebContents() {
content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
content::Source<content::WebContents>(web_contents_));
}
+
+#if defined(OS_WIN) && defined(USE_AURA)
+ content::RenderWidgetHostView* host_view =
+ web_contents_->GetRenderWidgetHostView();
+ if (host_view) {
+ host_view->SetParentNativeViewAccessible(
+ parent()->GetNativeViewAccessible());
+ }
+#endif
}
void WebView::DetachWebContents() {
@@ -227,6 +236,11 @@ void WebView::DetachWebContents() {
// Moving this out of here would also mean we wouldn't be potentially
// calling member functions on a half-destroyed WebContents.
ShowWindow(web_contents_->GetView()->GetNativeView(), SW_HIDE);
+#elif defined(OS_WIN) && defined(USE_AURA)
+ content::RenderWidgetHostView* host_view =
+ web_contents_->GetRenderWidgetHostView();
+ if (host_view)
+ host_view->SetParentNativeViewAccessible(NULL);
#endif
}
registrar_.RemoveAll();