1/* 2 * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25#ifndef WebView_h 26#define WebView_h 27 28#include "IntRect.h" 29#include <windows.h> 30#include <wtf/PassRefPtr.h> 31#include <wtf/win/GDIObject.h> 32 33namespace WTF { 34class String; 35} 36 37namespace WebCore { 38class Frame; 39class Page; 40class FrameView; 41class HTMLFrameOwnerElement; 42class URL; 43class ResourceRequest; 44} 45 46class WebView { 47public: 48 enum Features { 49 NoFeature = 0, 50 EnableDoubleBuffering = 1 << 0 51 }; 52 53 WebView(HWND hwnd, unsigned features = EnableDoubleBuffering); 54 ~WebView(); 55 56 static void initialize(HINSTANCE instanceHandle); 57 static void cleanup(); 58 59 HWND windowHandle() const { return m_windowHandle; } 60 WebCore::Frame* frame() const { return m_frame; } 61 WebCore::Page* page() const { return m_page; } 62 WebCore::FrameView* view() const; 63 64 void load(LPCWSTR url); 65 void load(const WTF::String &url); 66 void load(const WebCore::ResourceRequest &request); 67 void reload(); 68 void stop(); 69 70 void frameRect(RECT* rect) const; 71 72 PassRefPtr<WebCore::Frame> createFrame(const WebCore::URL&, const WTF::String& name, WebCore::HTMLFrameOwnerElement*, 73 const WTF::String& referrer, bool allowScrolling, int marginWidth, int marginHeight, WebCore::Frame* parentFrame); 74 75 // JavaScript Dialog 76 void runJavaScriptAlert(const WTF::String& message); 77 bool runJavaScriptConfirm(const WTF::String& message); 78 bool runJavaScriptPrompt(const WTF::String& message, const WTF::String& defaultValue, WTF::String& result); 79 80private: 81 static LRESULT CALLBACK webViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 82 LRESULT wndProc(HWND, UINT, WPARAM, LPARAM); 83 84 bool handlePaint(HWND hWnd); 85 bool handleMouseEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 86 bool handleMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam, bool isHorizontal); 87 bool handleKeyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown); 88 bool handleKeyPress(WPARAM charCode, LPARAM keyData, bool systemKeyDown); 89 bool handleKeyUp(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown); 90 91 void paint(HDC hDC, const WebCore::IntRect& clipRect); 92 93 WebCore::Frame* m_frame; 94 WebCore::Page* m_page; 95 HWND m_parentWindowHandle; 96 HWND m_windowHandle; 97 bool m_enableDoubleBuffer; 98 GDIObject<HDC> m_doubleBufferDC; 99 GDIObject<HBITMAP> m_doubleBufferBitmap; 100}; 101 102#endif // WebView_h 103