Chromium Code Reviews| Index: content/browser/renderer_host/legacy_render_widget_host_win.h |
| =================================================================== |
| --- content/browser/renderer_host/legacy_render_widget_host_win.h (revision 0) |
| +++ content/browser/renderer_host/legacy_render_widget_host_win.h (revision 0) |
| @@ -0,0 +1,119 @@ |
| +// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CONTENT_BROWSER_RENDERER_HOST_LEGACY_RENDER_WIDGET_HOST_WIN_H_ |
| +#define CONTENT_BROWSER_RENDERER_HOST_LEGACY_RENDER_WIDGET_HOST_WIN_H_ |
| + |
| +#include <atlbase.h> |
| +#include <atlwin.h> |
| +#include <atlcrack.h> |
| +#include <oleacc.h> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/win/scoped_comptr.h" |
| +#include "content/common/content_export.h" |
| +#include "ui/gfx/rect.h" |
| + |
| +namespace content { |
| +class BrowserAccessibilityManagerWin; |
| + |
| +// Reasons for the existence of this class outlined below:- |
| +// 1. Some screen readers expect every tab / every unique web content container |
| +// to be in its own HWND with class name Chrome_RenderWidgetHostHWND. |
| +// With Aura there is one main HWND which comprises the whole browser window |
| +// or the whole desktop. So, we need a fake HWND with the window class as |
| +// Chrome_RenderWidgetHostHWND as the root of the accessibility tree for |
| +// each tab. |
| +// 2. There are legacy drivers for trackpads/trackpoints which have special |
| +// code for sending mouse wheel and scroll events to the |
| +// Chrome_RenderWidgetHostHWND window. |
| +// 3. Windowless NPAPI plugins like Flash and Silverlight which expect the |
| +// container window to have the same bounds as the web page. In Aura, the |
| +// default container window is the whole window which includes the web page |
| +// TabContents, etc. This causes the plugin mouse event calculations to |
|
sky
2014/02/05 15:22:44
nit: TabContents->WebContents.
ananta
2014/02/05 16:35:51
Done.
|
| +// fail. |
| +// We should look to get rid of this code when all of the above are fixed. |
| + |
| +// This class implements a child HWND with the same size as the content area, |
| +// that delegates its accessibility implementation to the root of the |
| +// BrowserAccessibilityManager tree. This HWND is hooked up as the parent of |
| +// the root object in the BrowserAccessibilityManager tree, so when any |
| +// accessibility client calls ::WindowFromAccessibleObject, they get this |
| +// HWND instead of the DesktopWindowTreeHostWin. |
| +class CONTENT_EXPORT LegacyRenderWidgetHostHWND |
| + : public ATL::CWindowImpl<LegacyRenderWidgetHostHWND, |
| + NON_EXPORTED_BASE(ATL::CWindow), |
| + ATL::CWinTraits<WS_CHILD> > { |
| + public: |
| + DECLARE_WND_CLASS_EX(L"Chrome_RenderWidgetHostHWND", CS_DBLCLKS, 0); |
| + |
| + explicit LegacyRenderWidgetHostHWND(HWND parent); |
| + ~LegacyRenderWidgetHostHWND(); |
| + |
| + BEGIN_MSG_MAP_EX(LegacyRenderWidgetHostHWND) |
| + MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject) |
| + MESSAGE_RANGE_HANDLER(WM_KEYFIRST, WM_KEYLAST, OnKeyboardRange) |
| + MESSAGE_HANDLER_EX(WM_PAINT, OnPaint) |
| + MESSAGE_HANDLER_EX(WM_NCPAINT, OnNCPaint) |
| + MESSAGE_HANDLER_EX(WM_ERASEBKGND, OnEraseBkGnd) |
| + MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange) |
| + MESSAGE_HANDLER_EX(WM_MOUSEACTIVATE, OnMouseActivate) |
| + MESSAGE_HANDLER_EX(WM_SETCURSOR, OnSetCursor) |
| + MESSAGE_HANDLER_EX(WM_TOUCH, OnTouch) |
| + END_MSG_MAP() |
| + |
| + HWND hwnd() { return m_hWnd; } |
| + |
| + // This function handles setting the parent window if it changed, etc. |
| + void SetParentWindow(HWND parent); |
| + |
| + HWND parent() { return parent_; } |
| + |
| + IAccessible* window_accessible() { return window_accessible_; } |
| + |
| + void set_browser_accessibility_manager( |
| + content::BrowserAccessibilityManagerWin* manager) { |
| + manager_ = manager; |
| + } |
| + |
| + void OnManagerDeleted(); |
| + |
| + // Functions to show and hide the window. |
| + void Show(); |
| + void Hide(); |
| + |
| + // Resizes the window to the bounds passed in. |
| + void SetBounds(const gfx::Rect& bounds); |
| + |
| + // Destroys the window, which in turn deletes the instance of this class. |
| + void Destroy(); |
| + |
| + protected: |
| + virtual void OnFinalMessage(HWND hwnd) OVERRIDE; |
| + |
| + private: |
| + LRESULT OnEraseBkGnd(UINT message, WPARAM w_param, LPARAM l_param); |
| + LRESULT OnGetObject(UINT message, WPARAM w_param, LPARAM l_param); |
| + LRESULT OnKeyboardRange(UINT message, WPARAM w_param, LPARAM l_param, |
| + BOOL& handled); |
| + LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param, |
| + BOOL& handled); |
| + LRESULT OnMouseActivate(UINT message, WPARAM w_param, LPARAM l_param); |
| + LRESULT OnTouch(UINT message, WPARAM w_param, LPARAM l_param); |
| + |
| + LRESULT OnNCPaint(UINT message, WPARAM w_param, LPARAM l_param); |
| + LRESULT OnPaint(UINT message, WPARAM w_param, LPARAM l_param); |
| + LRESULT OnSetCursor(UINT message, WPARAM w_param, LPARAM l_param); |
| + |
| + content::BrowserAccessibilityManagerWin* manager_; |
| + base::win::ScopedComPtr<IAccessible> window_accessible_; |
| + HWND parent_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(LegacyRenderWidgetHostHWND); |
| +}; |
| + |
| +} // namespace content |
| + |
| +#endif // CONTENT_BROWSER_RENDERER_HOST_LEGACY_RENDER_WIDGET_HOST_WIN_H_ |
| + |