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