summaryrefslogtreecommitdiffstats
path: root/chrome/browser/render_widget_host_hwnd.h
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/render_widget_host_hwnd.h
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/render_widget_host_hwnd.h')
-rw-r--r--chrome/browser/render_widget_host_hwnd.h287
1 files changed, 287 insertions, 0 deletions
diff --git a/chrome/browser/render_widget_host_hwnd.h b/chrome/browser/render_widget_host_hwnd.h
new file mode 100644
index 0000000..3121045
--- /dev/null
+++ b/chrome/browser/render_widget_host_hwnd.h
@@ -0,0 +1,287 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_RENDER_WIDGET_HOST_CONTAINER_H__
+#define CHROME_BROWSER_RENDER_WIDGET_HOST_CONTAINER_H__
+
+#include <atlbase.h>
+#include <atlapp.h>
+#include <atlcrack.h>
+#include <atlmisc.h>
+
+#include "base/basictypes.h"
+#include "base/gfx/size.h"
+#include "base/scoped_handle.h"
+#include "base/shared_memory.h"
+#include "base/task.h"
+#include "chrome/browser/ime_input.h"
+#include "chrome/browser/render_widget_host_view.h"
+#include "chrome/common/render_messages.h"
+#include "chrome/views/focus_manager.h"
+
+namespace gfx {
+class Rect;
+}
+namespace IPC {
+class Message;
+}
+class RenderWidgetHost;
+class WebMouseEvent;
+class WebCursor;
+
+typedef CWinTraits<WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0>
+ RenderWidgetHostHWNDTraits;
+
+static const wchar_t* const kRenderWidgetHostHWNDClass =
+ L"Chrome_RenderWidgetHostHWND";
+
+///////////////////////////////////////////////////////////////////////////////
+// RenderWidgetHostHWND
+//
+// An object representing the "View" of a rendered web page. This object is
+// responsible for displaying the content of the web page, receiving messages
+// and containing plugins HWNDs.
+//
+// Comment excerpted from render_widget_host.h:
+//
+// "The lifetime of the RenderWidgetHostHWND is tied to the render process.
+// If the render process dies, the RenderWidgetHostHWND goes away and all
+// references to it must become NULL."
+//
+class RenderWidgetHostHWND :
+ public CWindowImpl<RenderWidgetHostHWND,
+ CWindow,
+ RenderWidgetHostHWNDTraits>,
+ public RenderWidgetHostView {
+ public:
+ RenderWidgetHostHWND(RenderWidgetHost* render_widget_host);
+ virtual ~RenderWidgetHostHWND();
+
+ void set_close_on_deactivate(bool close_on_deactivate) {
+ close_on_deactivate_ = close_on_deactivate;
+ }
+
+ void set_parent_hwnd(HWND parent) { parent_hwnd_ = parent; }
+
+ DECLARE_WND_CLASS_EX(kRenderWidgetHostHWNDClass, CS_DBLCLKS, 0);
+
+ BEGIN_MSG_MAP(RenderWidgetHostHWND)
+ MSG_WM_CREATE(OnCreate)
+ MSG_WM_ACTIVATE(OnActivate)
+ MSG_WM_DESTROY(OnDestroy)
+ MSG_WM_PAINT(OnPaint)
+ MSG_WM_NCPAINT(OnNCPaint)
+ MSG_WM_ERASEBKGND(OnEraseBkgnd)
+ MSG_WM_SETCURSOR(OnSetCursor)
+ MSG_WM_SETFOCUS(OnSetFocus)
+ MSG_WM_KILLFOCUS(OnKillFocus)
+ MSG_WM_CAPTURECHANGED(OnCaptureChanged)
+ MSG_WM_CANCELMODE(OnCancelMode)
+ MSG_WM_INPUTLANGCHANGE(OnInputLangChange)
+ MSG_WM_NOTIFY(OnNotify)
+ MESSAGE_HANDLER(WM_IME_SETCONTEXT, OnImeSetContext)
+ MESSAGE_HANDLER(WM_IME_STARTCOMPOSITION, OnImeStartComposition)
+ MESSAGE_HANDLER(WM_IME_COMPOSITION, OnImeComposition)
+ MESSAGE_HANDLER(WM_IME_ENDCOMPOSITION, OnImeEndComposition)
+ MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseEvent)
+ MESSAGE_HANDLER(WM_MOUSELEAVE, OnMouseEvent)
+ MESSAGE_HANDLER(WM_LBUTTONDOWN, OnMouseEvent)
+ MESSAGE_HANDLER(WM_MBUTTONDOWN, OnMouseEvent)
+ MESSAGE_HANDLER(WM_RBUTTONDOWN, OnMouseEvent)
+ MESSAGE_HANDLER(WM_LBUTTONUP, OnMouseEvent)
+ MESSAGE_HANDLER(WM_MBUTTONUP, OnMouseEvent)
+ MESSAGE_HANDLER(WM_RBUTTONUP, OnMouseEvent)
+ MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnMouseEvent)
+ MESSAGE_HANDLER(WM_MBUTTONDBLCLK, OnMouseEvent)
+ MESSAGE_HANDLER(WM_RBUTTONDBLCLK, OnMouseEvent)
+ MESSAGE_HANDLER(WM_SYSKEYDOWN, OnKeyEvent)
+ MESSAGE_HANDLER(WM_SYSKEYUP, OnKeyEvent)
+ MESSAGE_HANDLER(WM_KEYDOWN, OnKeyEvent)
+ MESSAGE_HANDLER(WM_KEYUP, OnKeyEvent)
+ MESSAGE_HANDLER(WM_MOUSEWHEEL, OnWheelEvent)
+ MESSAGE_HANDLER(WM_HSCROLL, OnWheelEvent)
+ MESSAGE_HANDLER(WM_VSCROLL, OnWheelEvent)
+ MESSAGE_HANDLER(WM_CHAR, OnKeyEvent)
+ MESSAGE_HANDLER(WM_SYSCHAR, OnKeyEvent)
+ MESSAGE_HANDLER(WM_IME_CHAR, OnKeyEvent)
+ MESSAGE_HANDLER(WM_NCCALCSIZE, OnNcCalcSize)
+ MESSAGE_HANDLER(WM_SIZE, OnSize)
+ MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate)
+ END_MSG_MAP()
+
+ // Overridden from RenderWidgetHostView:
+ virtual void DidBecomeSelected();
+ virtual void WasHidden();
+ virtual void SetSize(const gfx::Size& size);
+ virtual HWND GetPluginHWND();
+ virtual void ForwardMouseEventToRenderer(UINT message,
+ WPARAM wparam,
+ LPARAM lparam);
+ virtual void Focus();
+ virtual void Blur();
+ virtual bool HasFocus();
+ virtual void Show();
+ virtual void Hide();
+ virtual gfx::Rect GetViewBounds() const;
+ virtual void UpdateCursor(const WebCursor& cursor);
+ virtual void UpdateCursorIfOverSelf();
+ virtual void SetIsLoading(bool is_loading);
+ virtual void IMEUpdateStatus(ViewHostMsg_ImeControl control, int x, int y);
+ virtual void DidPaintRect(const gfx::Rect& rect);
+ virtual void DidScrollRect(const gfx::Rect& rect, int dx, int dy);
+ virtual void RendererGone();
+ virtual void Destroy();
+ virtual void SetTooltipText(const std::wstring& tooltip_text);
+
+ protected:
+ // Windows Message Handlers
+ LRESULT OnCreate(CREATESTRUCT* create_struct);
+ void OnActivate(UINT, BOOL, HWND);
+ void OnDestroy();
+ void OnPaint(HDC dc);
+ void OnNCPaint(HRGN update_region);
+ LRESULT OnEraseBkgnd(HDC dc);
+ LRESULT OnSetCursor(HWND window, UINT hittest_code, UINT mouse_message_id);
+ void OnSetFocus(HWND window);
+ void OnKillFocus(HWND window);
+ void OnCaptureChanged(HWND window);
+ void OnCancelMode();
+ void OnInputLangChange(DWORD character_set, HKL input_language_id);
+ LRESULT OnNotify(int w_param, NMHDR* header);
+ LRESULT OnImeSetContext(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnImeStartComposition(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnImeComposition(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnImeEndComposition(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnMouseEvent(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnKeyEvent(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ LRESULT OnWheelEvent(
+ UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled);
+ // Handle WM_NCCALCSIZE and supress scrollbars
+ LRESULT OnNcCalcSize(UINT, WPARAM, LPARAM, BOOL& handled);
+ // Handle WM_SIZE and indicate that we have a valid scroll info
+ // so that windows will give us the WS_HSCROLL and WS_VSCROLL style.
+ LRESULT OnSize(UINT, WPARAM, LPARAM, BOOL& handled);
+ LRESULT OnMouseActivate(UINT, WPARAM, LPARAM, BOOL& handled);
+ // Handle vertical scrolling
+ LRESULT OnVScroll(int code, short position, HWND scrollbar_control);
+ // Handle horizontal scrolling
+ LRESULT OnHScroll(int code, short position, HWND scrollbar_control);
+
+ void OnFinalMessage(HWND window);
+
+ private:
+ // Tells Windows that we want to hear about mouse exit messages.
+ void TrackMouseLeave(bool start_tracking);
+
+ // Sends a message to the RenderView in the renderer process.
+ bool Send(IPC::Message* message);
+
+ // Set the tooltip region to the size of the window, creating the tooltip
+ // hwnd if it has not been created yet.
+ void EnsureTooltip();
+
+ // Tooltips become invalid when the root ancestor changes. When the View
+ // becomes hidden, this method is called to reset the tooltip.
+ void ResetTooltip();
+
+ // Synthesize mouse wheel event.
+ LRESULT SynthesizeMouseWheel(bool is_vertical, int scroll_code,
+ short scroll_position);
+
+ // A callback function for EnumThreadWindows to enumerate and dismiss
+ // any owned popop windows
+ static BOOL CALLBACK DismissOwnedPopups(HWND window, LPARAM arg);
+
+ // Shuts down the render_widget_host_. This is a separate function so we can
+ // invoke it from the message loop.
+ void ShutdownHost();
+
+ // The associated Model.
+ RenderWidgetHost* render_widget_host_;
+
+ // The real cursor type for the page.
+ WebCursor::Type real_cursor_type_;
+
+ // The real cursor for the page. This is passed down from the renderer
+ HCURSOR real_cursor_;
+
+ // Indicates if the page is loading.
+ bool is_loading_;
+
+ // true if we are currently tracking WM_MOUSEEXIT messages.
+ bool track_mouse_leave_;
+
+ // Wrapper class for IME input.
+ // (See "chrome/browser/ime_input.h" for its details.)
+ ImeInput ime_input_;
+
+ // Represents whether or not this browser process is receiving status
+ // messages about the focused edit control from a renderer process.
+ bool ime_notification_;
+
+ // true if the View is not visible.
+ bool is_hidden_;
+
+ // true if the View should be closed when its HWND is deactivated (used to
+ // support SELECT popups which are closed when they are deactivated).
+ bool close_on_deactivate_;
+
+ // Tooltips
+ // The text to be shown in the tooltip, supplied by the renderer.
+ std::wstring tooltip_text_;
+ // The tooltip control hwnd
+ HWND tooltip_hwnd_;
+ // Whether or not a tooltip is currently visible. We use this to track
+ // whether or not we want to force-close the tooltip when we receive mouse
+ // move notifications from the renderer. See comment in OnMsgSetTooltipText.
+ bool tooltip_showing_;
+
+ // Factory used to safely scope delayed calls to ShutdownHost().
+ ScopedRunnableMethodFactory<RenderWidgetHostHWND> shutdown_factory_;
+
+ // Our parent HWND. We keep a reference to it as we SetParent(NULL) when
+ // hidden to prevent getting messages (Paint, Resize...), and we reattach
+ // when shown again.
+ HWND parent_hwnd_;
+
+ // The time at which this view started displaying white pixels as a result of
+ // not having anything to paint (empty backing store from renderer). This
+ // value returns true for is_null() if we are not recording whiteout times.
+ TimeTicks whiteout_start_time_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(RenderWidgetHostHWND);
+};
+
+#endif // #ifndef CHROME_BROWSER_RENDER_WIDGET_HOST_CONTAINER_H__