diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 01:58:41 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 01:58:41 +0000 |
commit | afe8375a957d6d496fc41ddd35ef485fa7cf4a4b (patch) | |
tree | 80f73dfa78b7cf1abfcb4a7d29ec23142ea2a53c | |
parent | 3dbdc605f73b784f97fb38d2a9c931b90883db9f (diff) | |
download | chromium_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
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(); |