1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_WIN_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_WIN_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <atlbase.h>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <atlapp.h>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <atlcrack.h>
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <atlmisc.h>
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/task.h"
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/win/scoped_comptr.h"
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/accessibility/browser_accessibility_manager.h"
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_widget_host_view.h"
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/win/ime_input.h"
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/webcursor.h"
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass BackingStore;
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass RenderWidgetHost;
30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace gfx {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Size;
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Rect;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace IPC {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Message;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace ui {
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ViewProp;
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef CWinTraits<WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0>
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    RenderWidgetHostHWNDTraits;
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47634420e363ef646c3b50a37b10d86a424b06ee49Ben Murdochextern const wchar_t kRenderWidgetHostHWNDClass[];
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch///////////////////////////////////////////////////////////////////////////////
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RenderWidgetHostViewWin
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  An object representing the "View" of a rendered web page. This object is
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  responsible for displaying the content of the web page, receiving windows
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  messages, and containing plugins HWNDs. It is the implementation of the
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  RenderWidgetHostView that the cross-platform RenderWidgetHost object uses
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  to display the data.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  Comment excerpted from render_widget_host.h:
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//    "The lifetime of the RenderWidgetHostHWND is tied to the render process.
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     If the render process dies, the RenderWidgetHostHWND goes away and all
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     references to it must become NULL."
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderWidgetHostViewWin
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : public CWindowImpl<RenderWidgetHostViewWin,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         CWindow,
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         RenderWidgetHostHWNDTraits>,
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      public RenderWidgetHostView,
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      public NotificationObserver,
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      public BrowserAccessibilityDelegate {
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The view will associate itself with the given widget.
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit RenderWidgetHostViewWin(RenderWidgetHost* widget);
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~RenderWidgetHostViewWin();
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateWnd(HWND parent);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_WND_CLASS_EX(kRenderWidgetHostHWNDClass, CS_DBLCLKS, 0);
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BEGIN_MSG_MAP(RenderWidgetHostHWND)
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_CREATE(OnCreate)
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_ACTIVATE(OnActivate)
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_DESTROY(OnDestroy)
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_PAINT(OnPaint)
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_NCPAINT(OnNCPaint)
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_ERASEBKGND(OnEraseBkgnd)
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_SETCURSOR(OnSetCursor)
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_SETFOCUS(OnSetFocus)
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_KILLFOCUS(OnKillFocus)
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_CAPTURECHANGED(OnCaptureChanged)
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_CANCELMODE(OnCancelMode)
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_INPUTLANGCHANGE(OnInputLangChange)
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_THEMECHANGED(OnThemeChanged)
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MSG_WM_NOTIFY(OnNotify)
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_IME_SETCONTEXT, OnImeSetContext)
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_IME_STARTCOMPOSITION, OnImeStartComposition)
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_IME_COMPOSITION, OnImeComposition)
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_IME_ENDCOMPOSITION, OnImeEndComposition)
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseEvent)
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MOUSELEAVE, OnMouseEvent)
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_LBUTTONDOWN, OnMouseEvent)
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MBUTTONDOWN, OnMouseEvent)
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_RBUTTONDOWN, OnMouseEvent)
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_LBUTTONUP, OnMouseEvent)
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MBUTTONUP, OnMouseEvent)
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_RBUTTONUP, OnMouseEvent)
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnMouseEvent)
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MBUTTONDBLCLK, OnMouseEvent)
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_RBUTTONDBLCLK, OnMouseEvent)
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_SYSKEYDOWN, OnKeyEvent)
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_SYSKEYUP, OnKeyEvent)
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_KEYDOWN, OnKeyEvent)
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_KEYUP, OnKeyEvent)
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MOUSEWHEEL, OnWheelEvent)
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MOUSEHWHEEL, OnWheelEvent)
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_HSCROLL, OnWheelEvent)
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_VSCROLL, OnWheelEvent)
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_CHAR, OnKeyEvent)
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_SYSCHAR, OnKeyEvent)
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_IME_CHAR, OnKeyEvent)
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate)
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MESSAGE_HANDLER(WM_GETOBJECT, OnGetObject)
123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    MESSAGE_HANDLER(WM_PARENTNOTIFY, OnParentNotify)
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  END_MSG_MAP()
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implementation of RenderWidgetHostView:
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void InitAsPopup(RenderWidgetHostView* parent_host_view,
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           const gfx::Rect& pos);
12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void InitAsFullscreen();
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderWidgetHost* GetRenderWidgetHost() const;
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidBecomeSelected();
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void WasHidden();
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetSize(const gfx::Size& size);
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetBounds(const gfx::Rect& rect);
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual gfx::NativeView GetNativeView();
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void MovePluginWindows(
13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      const std::vector<webkit::npapi::WebPluginGeometry>& moves);
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Focus();
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Blur();
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool HasFocus();
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Show();
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Hide();
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsShowing();
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual gfx::Rect GetViewBounds() const;
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateCursor(const WebCursor& cursor);
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetIsLoading(bool is_loading);
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type,
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       const gfx::Rect& caret_rect);
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ImeCancelComposition();
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidUpdateBackingStore(
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy,
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::vector<gfx::Rect>& copy_rects);
15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void RenderViewGone(base::TerminationStatus status,
15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                              int error_code);
155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void WillWmDestroy();  // called by TabContents before DestroyWindow
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void WillDestroyRenderWidget(RenderWidgetHost* rwh);
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Destroy();
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetTooltipText(const std::wstring& tooltip_text);
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual BackingStore* AllocBackingStore(const gfx::Size& size);
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetBackground(const SkBitmap& background);
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool ContainsNativeView(gfx::NativeView native_view) const;
162201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void SetVisuallyDeemphasized(const SkColor* color, bool animate);
163201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual gfx::PluginWindowHandle GetCompositingSurface();
165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void ShowCompositorHostWindow(bool show);
166201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnAccessibilityNotifications(
1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params);
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implementation of NotificationObserver:
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implementation of BrowserAccessibilityDelegate:
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetAccessibilityFocus(int acc_obj_id);
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AccessibilityDoDefaultAction(int acc_obj_id);
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Windows Message Handlers
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnCreate(CREATESTRUCT* create_struct);
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnActivate(UINT, BOOL, HWND);
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnDestroy();
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnPaint(HDC unused_dc);
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnNCPaint(HRGN update_region);
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnEraseBkgnd(HDC dc);
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnSetCursor(HWND window, UINT hittest_code, UINT mouse_message_id);
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnSetFocus(HWND window);
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnKillFocus(HWND window);
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnCaptureChanged(HWND window);
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnCancelMode();
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnInputLangChange(DWORD character_set, HKL input_language_id);
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnThemeChanged();
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnNotify(int w_param, NMHDR* header);
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnImeSetContext(
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnImeStartComposition(
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnImeComposition(
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnImeEndComposition(
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnMouseEvent(
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnKeyEvent(
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnWheelEvent(
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LRESULT OnMouseActivate(UINT message,
2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                          WPARAM wparam,
2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                          LPARAM lparam,
2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                          BOOL& handled);
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handle MSAA requests for accessibility information.
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnGetObject(UINT message, WPARAM wparam, LPARAM lparam,
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      BOOL& handled);
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handle vertical scrolling
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnVScroll(int code, short position, HWND scrollbar_control);
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handle horizontal scrolling
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT OnHScroll(int code, short position, HWND scrollbar_control);
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  LRESULT OnParentNotify(UINT message, WPARAM wparam, LPARAM lparam,
222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                         BOOL& handled);
223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnFinalMessage(HWND window);
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the display cursor to the current cursor if the cursor is over this
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // render view.
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateCursorIfOverSelf();
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tells Windows that we want to hear about mouse exit messages.
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void TrackMouseLeave(bool start_tracking);
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sends a message to the RenderView in the renderer process.
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool Send(IPC::Message* message);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the tooltip region to the size of the window, creating the tooltip
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // hwnd if it has not been created yet.
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void EnsureTooltip();
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tooltips become invalid when the root ancestor changes. When the View
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // becomes hidden, this method is called to reset the tooltip.
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ResetTooltip();
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sends the specified mouse event to the renderer.
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ForwardMouseEventToRenderer(UINT message, WPARAM wparam, LPARAM lparam);
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Synthesize mouse wheel event.
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LRESULT SynthesizeMouseWheel(bool is_vertical, int scroll_code,
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               short scroll_position);
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Shuts down the render_widget_host_.  This is a separate function so we can
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // invoke it from the message loop.
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ShutdownHost();
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Redraws the window synchronously, and any child windows (i.e. plugins)
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // asynchronously.
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Redraw();
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw our background over the given HDC in the given |rect|. The background
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // will be tiled such that it lines up with existing tiles starting from the
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // origin of |dc|.
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DrawBackground(const RECT& rect, CPaintDC* dc);
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Create an intermediate window between the given HWND and its parent.
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HWND ReparentWindow(HWND window);
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
268201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Clean up the compositor window, if needed.
269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void CleanupCompositorWindow();
270201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether the window should be activated.
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool IsActivatable() const;
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The associated Model.
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderWidgetHost* render_widget_host_;
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // When we are doing accelerated compositing
278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  HWND compositor_host_window_;
279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // true if the compositor host window must be hidden after the
281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // software renderered view is updated.
282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool hide_compositor_window_at_next_paint_;
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The cursor for the page. This is passed up from the renderer.
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WebCursor current_cursor_;
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates if the page is loading.
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_loading_;
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // true if we are currently tracking WM_MOUSEEXIT messages.
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool track_mouse_leave_;
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Wrapper class for IME input.
294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // (See "ui/base/win/ime_input.h" for its details.)
295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ui::ImeInput ime_input_;
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Represents whether or not this browser process is receiving status
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // messages about the focused edit control from a renderer process.
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ime_notification_;
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // true if Enter was hit when render widget host was in focus.
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool capture_enter_key_;
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // true if the View is not visible.
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_hidden_;
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // True if we're in the midst of a paint operation and should respond to
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // DidPaintRect() notifications by merely invalidating.  See comments on
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // render_widget_host_view.h:DidPaintRect().
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool about_to_validate_and_paint_;
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // true if the View should be closed when its HWND is deactivated (used to
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // support SELECT popups which are closed when they are deactivated).
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool close_on_deactivate_;
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether Destroy() has been called.  Used to detect a crasher
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // (http://crbug.com/24248) where render_view_host_ has been deleted when
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // OnFinalMessage is called.
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool being_destroyed_;
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tooltips
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The text to be shown in the tooltip, supplied by the renderer.
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::wstring tooltip_text_;
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The tooltip control hwnd
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HWND tooltip_hwnd_;
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether or not a tooltip is currently visible. We use this to track
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // whether or not we want to force-close the tooltip when we receive mouse
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // move notifications from the renderer. See comment in OnMsgSetTooltipText.
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool tooltip_showing_;
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Factory used to safely scope delayed calls to ShutdownHost().
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedRunnableMethodFactory<RenderWidgetHostViewWin> shutdown_factory_;
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Our parent HWND.  We keep a reference to it as we SetParent(NULL) when
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // hidden to prevent getting messages (Paint, Resize...), and we reattach
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // when shown again.
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HWND parent_hwnd_;
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Instance of accessibility information for the root of the MSAA
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tree representation of the WebKit render tree.
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<BrowserAccessibilityManager> browser_accessibility_manager_;
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The time at which this view started displaying white pixels as a result of
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // not having anything to paint (empty backing store from renderer). This
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // value returns true for is_null() if we are not recording whiteout times.
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks whiteout_start_time_;
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The time it took after this view was selected for it to be fully painted.
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks tab_switch_paint_time_;
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
351201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // A color we use to shade the entire render view. If 100% transparent, we do
352201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // not shade the render view.
353201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  SkColor overlay_color_;
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Registrar so we can listen to RENDERER_PROCESS_TERMINATED events.
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar registrar_;
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stores the current text input type received by ImeUpdateTextInputState()
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // method.
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WebKit::WebTextInputType text_input_type_;
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ScopedVector<ui::ViewProp> props_;
36372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
36472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<ui::ViewProp> accessibility_prop_;
365513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewWin);
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_WIN_H_
370