2 * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include "wx/wxprec.h"
39 class WebViewFrameData;
42 typedef struct OpaqueJSContext* JSGlobalContextRef;
43 typedef struct OpaqueJSValue* JSObjectRef;
47 class FrameLoaderClientWx;
52 #if !wxCHECK_VERSION(2,9,0) && wxCHECK_GCC_VERSION(4,0)
53 #define WXDLLIMPEXP_WEBKIT __attribute__ ((visibility("default")))
54 #elif WXMAKINGDLL_WEBKIT
55 #define WXDLLIMPEXP_WEBKIT WXEXPORT
56 #elif defined(WXUSINGDLL_WEBKIT)
57 #define WXDLLIMPEXP_WEBKIT WXIMPORT
61 #define WXDLLIMPEXP_WEBKIT
65 extern WXDLLIMPEXP_WEBKIT const wxChar* wxWebViewNameStr;
68 class WXDLLIMPEXP_WEBKIT wxWebViewCachePolicy
71 wxWebViewCachePolicy(unsigned minDead = 0, unsigned maxDead = defaultCacheCapacity, unsigned totalCapacity = defaultCacheCapacity)
72 : m_minDeadCapacity(minDead)
73 , m_maxDeadCapacity(maxDead)
74 , m_capacity(totalCapacity)
77 ~wxWebViewCachePolicy() {}
79 unsigned GetCapacity() const { return m_capacity; }
80 void SetCapacity(int capacity) { m_capacity = capacity; }
82 unsigned GetMinDeadCapacity() const { return m_minDeadCapacity; }
83 void SetMinDeadCapacity(unsigned minDeadCapacity) { m_minDeadCapacity = minDeadCapacity; }
85 unsigned GetMaxDeadCapacity() const { return m_maxDeadCapacity; }
86 void SetMaxDeadCapacity(unsigned maxDeadCapacity) { m_maxDeadCapacity = maxDeadCapacity; }
89 static const int defaultCacheCapacity = 8192 * 1024; // mirrors Cache.cpp
91 unsigned m_minDeadCapacity;
92 unsigned m_maxDeadCapacity;
96 // copied from WebKit/mac/Misc/WebKitErrors[Private].h
98 WebKitErrorCannotShowMIMEType = 100,
99 WebKitErrorCannotShowURL = 101,
100 WebKitErrorFrameLoadInterruptedByPolicyChange = 102,
101 WebKitErrorCannotUseRestrictedPort = 103,
102 WebKitErrorCannotFindPlugIn = 200,
103 WebKitErrorCannotLoadPlugIn = 201,
104 WebKitErrorJavaUnavailable = 202,
107 class WXDLLIMPEXP_WEBKIT wxWebView : public wxWindow
109 // ChromeClientWx needs to get the Page* stored by the wxWebView
110 // for the createWindow function.
111 friend class WebCore::ChromeClientWx;
112 friend class WebCore::FrameLoaderClientWx;
117 %pythonAppend wxWebView "self._setOORInfo(self)"
118 %pythonAppend wxWebView() ""
121 wxWebView(wxWindow* parent, int id = wxID_ANY,
122 const wxPoint& point = wxDefaultPosition,
123 const wxSize& size = wxDefaultSize,
125 const wxString& name = wxWebViewNameStr); // For wxWebView internal data passing
127 %rename(PreWebView) wxWebView();
132 bool Create(wxWindow* parent, int id = wxID_ANY,
133 const wxPoint& point = wxDefaultPosition,
134 const wxSize& size = wxDefaultSize,
136 const wxString& name = wxWebViewNameStr); // For wxWebView internal data passing
139 virtual ~wxWebView();
142 void LoadURL(const wxString& url);
159 //bool CanGetPageSource();
160 wxString GetPageSource();
161 void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
163 wxString GetInnerText();
164 wxString GetAsMarkup();
165 wxString GetExternalRepresentation();
167 void SetTransparent(bool transparent);
168 bool IsTransparent() const;
170 wxString RunScript(const wxString& javascript);
172 bool FindString(const wxString& string, bool forward = true,
173 bool caseSensitive = false, bool wrapSelection = true,
174 bool startInSelection = true);
176 bool CanIncreaseTextSize() const;
177 void IncreaseTextSize();
178 bool CanDecreaseTextSize() const;
179 void DecreaseTextSize();
180 void ResetTextSize();
181 void MakeEditable(bool enable);
182 bool IsEditable() const { return m_isEditable; }
184 wxString GetPageTitle() const { return m_title; }
185 void SetPageTitle(const wxString& title) { m_title = title; }
187 wxWebFrame* GetMainFrame() { return m_mainFrame; }
189 wxWebViewDOMElementInfo HitTest(const wxPoint& pos) const;
191 bool ShouldClose() const;
193 static void SetCachePolicy(const wxWebViewCachePolicy& cachePolicy);
194 static wxWebViewCachePolicy GetCachePolicy();
198 // event handlers (these functions should _not_ be virtual)
199 void OnPaint(wxPaintEvent& event);
200 void OnSize(wxSizeEvent& event);
201 void OnMouseEvents(wxMouseEvent& event);
202 void OnContextMenuEvents(wxContextMenuEvent& event);
203 void OnMenuSelectEvents(wxCommandEvent& event);
204 void OnKeyEvents(wxKeyEvent& event);
205 void OnSetFocus(wxFocusEvent& event);
206 void OnKillFocus(wxFocusEvent& event);
209 // any class wishing to process wxWindows events must use this macro
211 DECLARE_EVENT_TABLE()
212 DECLARE_DYNAMIC_CLASS(wxWebView)
214 float m_textMagnifier;
216 bool m_isInitialized;
217 bool m_beingDestroyed;
218 WebViewPrivate* m_impl;
219 wxWebFrame* m_mainFrame;
224 // ----------------------------------------------------------------------------
226 // ----------------------------------------------------------------------------
229 wxWEBVIEW_LOAD_STARTED = 1,
230 wxWEBVIEW_LOAD_NEGOTIATING = 2,
231 wxWEBVIEW_LOAD_REDIRECTING = 4,
232 wxWEBVIEW_LOAD_TRANSFERRING = 8,
233 wxWEBVIEW_LOAD_STOPPED = 16,
234 wxWEBVIEW_LOAD_FAILED = 32,
235 wxWEBVIEW_LOAD_DL_COMPLETED = 64,
236 wxWEBVIEW_LOAD_DOC_COMPLETED = 128,
237 wxWEBVIEW_LOAD_ONLOAD_HANDLED = 256,
238 wxWEBVIEW_LOAD_WINDOW_OBJECT_CLEARED = 512
242 wxWEBVIEW_NAV_LINK_CLICKED = 1,
243 wxWEBVIEW_NAV_BACK_NEXT = 2,
244 wxWEBVIEW_NAV_FORM_SUBMITTED = 4,
245 wxWEBVIEW_NAV_RELOAD = 8,
246 wxWEBVIEW_NAV_FORM_RESUBMITTED = 16,
247 wxWEBVIEW_NAV_OTHER = 32
250 class WXDLLIMPEXP_WEBKIT wxWebViewBeforeLoadEvent : public wxCommandEvent
253 DECLARE_DYNAMIC_CLASS( wxWebViewBeforeLoadEvent )
257 bool IsCancelled() const { return m_cancelled; }
258 void Cancel(bool cancel = true) { m_cancelled = cancel; }
259 wxString GetURL() const { return m_url; }
260 void SetURL(const wxString& url) { m_url = url; }
261 void SetNavigationType(int navType) { m_navType = navType; }
262 int GetNavigationType() const { return m_navType; }
264 wxWebViewBeforeLoadEvent( wxWindow* win = (wxWindow*) NULL );
265 wxEvent *Clone(void) const { return new wxWebViewBeforeLoadEvent(*this); }
273 class WXDLLIMPEXP_WEBKIT wxWebViewLoadEvent : public wxCommandEvent
276 DECLARE_DYNAMIC_CLASS( wxWebViewLoadEvent )
280 int GetState() const { return m_state; }
281 void SetState(const int state) { m_state = state; }
282 wxString GetURL() const { return m_url; }
283 void SetURL(const wxString& url) { m_url = url; }
285 wxWebViewLoadEvent( wxWindow* win = (wxWindow*) NULL );
286 wxEvent *Clone(void) const { return new wxWebViewLoadEvent(*this); }
293 class WXDLLIMPEXP_WEBKIT wxWebViewNewWindowEvent : public wxCommandEvent
296 DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent )
300 wxString GetURL() const { return m_url; }
301 void SetURL(const wxString& url) { m_url = url; }
302 wxString GetTargetName() const { return m_targetName; }
303 void SetTargetName(const wxString& name) { m_targetName = name; }
305 wxWebViewNewWindowEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
306 wxEvent *Clone(void) const { return new wxWebViewNewWindowEvent(*this); }
310 wxString m_targetName;
313 class WXDLLIMPEXP_WEBKIT wxWebViewRightClickEvent : public wxCommandEvent
316 DECLARE_DYNAMIC_CLASS( wxWebViewRightClickEvent )
320 wxWebViewRightClickEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
321 wxEvent *Clone(void) const { return new wxWebViewRightClickEvent(*this); }
323 wxWebViewDOMElementInfo GetInfo() const { return m_info; }
324 void SetInfo(wxWebViewDOMElementInfo info) { m_info = info; }
326 wxPoint GetPosition() const { return m_position; }
327 void SetPosition(wxPoint pos) { m_position = pos; }
330 wxWebViewDOMElementInfo m_info;
334 // copied from page/Console.h
335 enum wxWebViewConsoleMessageLevel {
342 class WXDLLIMPEXP_WEBKIT wxWebViewConsoleMessageEvent : public wxCommandEvent
345 DECLARE_DYNAMIC_CLASS( wxWebViewConsoleMessageEvent )
349 wxString GetMessage() const { return m_message; }
350 void SetMessage(const wxString& message) { m_message = message; }
352 unsigned int GetLineNumber() const { return m_lineNumber; }
353 void SetLineNumber(unsigned int lineNumber) { m_lineNumber = lineNumber; }
355 wxString GetSourceID() const { return m_sourceID; }
356 void SetSourceID(const wxString& sourceID) { m_sourceID = sourceID; }
358 wxWebViewConsoleMessageEvent( wxWindow* win = (wxWindow*) NULL );
359 wxEvent *Clone(void) const { return new wxWebViewConsoleMessageEvent(*this); }
361 wxWebViewConsoleMessageLevel GetLevel() const { return m_level; }
362 void SetLevel(wxWebViewConsoleMessageLevel level) { m_level = level; }
365 unsigned int m_lineNumber;
368 wxWebViewConsoleMessageLevel m_level;
371 class WXDLLIMPEXP_WEBKIT wxWebViewAlertEvent : public wxCommandEvent
374 DECLARE_DYNAMIC_CLASS( wxWebViewAlertEvent )
378 wxString GetMessage() const { return m_message; }
379 void SetMessage(const wxString& message) { m_message = message; }
381 wxWebViewAlertEvent( wxWindow* win = (wxWindow*) NULL );
382 wxEvent *Clone(void) const { return new wxWebViewAlertEvent(*this); }
388 class WXDLLIMPEXP_WEBKIT wxWebViewConfirmEvent : public wxWebViewAlertEvent
391 DECLARE_DYNAMIC_CLASS( wxWebViewConfirmEvent )
395 int GetReturnCode() const { return m_returnCode; }
396 void SetReturnCode(int code) { m_returnCode = code; }
398 wxWebViewConfirmEvent( wxWindow* win = (wxWindow*) NULL );
399 wxEvent *Clone(void) const { return new wxWebViewConfirmEvent(*this); }
405 class WXDLLIMPEXP_WEBKIT wxWebViewPromptEvent : public wxWebViewConfirmEvent
408 DECLARE_DYNAMIC_CLASS( wxWebViewPromptEvent )
412 wxString GetResponse() const { return m_response; }
413 void SetResponse(const wxString& response) { m_response = response; }
415 wxWebViewPromptEvent( wxWindow* win = (wxWindow*) NULL );
416 wxEvent *Clone(void) const { return new wxWebViewPromptEvent(*this); }
422 class WXDLLIMPEXP_WEBKIT wxWebViewReceivedTitleEvent : public wxCommandEvent
425 DECLARE_DYNAMIC_CLASS( wxWebViewReceivedTitleEvent )
429 wxString GetTitle() const { return m_title; }
430 void SetTitle(const wxString& title) { m_title = title; }
432 wxWebViewReceivedTitleEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
433 wxEvent *Clone(void) const { return new wxWebViewReceivedTitleEvent(*this); }
439 class WXDLLIMPEXP_WEBKIT wxWebViewWindowObjectClearedEvent : public wxCommandEvent
442 DECLARE_DYNAMIC_CLASS( wxWebViewWindowObjectClearedEvent )
446 JSGlobalContextRef GetJSContext() const { return m_jsContext; }
447 void SetJSContext(JSGlobalContextRef context) { m_jsContext = context; }
449 JSObjectRef GetWindowObject() const { return m_windowObject; }
450 void SetWindowObject(JSObjectRef object) { m_windowObject = object; }
452 wxWebViewWindowObjectClearedEvent( wxWindow* win = static_cast<wxWindow*>(NULL));
453 wxEvent *Clone(void) const { return new wxWebViewWindowObjectClearedEvent(*this); }
456 JSGlobalContextRef m_jsContext;
457 JSObjectRef m_windowObject;
460 typedef void (wxEvtHandler::*wxWebViewLoadEventFunction)(wxWebViewLoadEvent&);
461 typedef void (wxEvtHandler::*wxWebViewBeforeLoadEventFunction)(wxWebViewBeforeLoadEvent&);
462 typedef void (wxEvtHandler::*wxWebViewNewWindowEventFunction)(wxWebViewNewWindowEvent&);
463 typedef void (wxEvtHandler::*wxWebViewRightClickEventFunction)(wxWebViewRightClickEvent&);
464 typedef void (wxEvtHandler::*wxWebViewConsoleMessageEventFunction)(wxWebViewConsoleMessageEvent&);
465 typedef void (wxEvtHandler::*wxWebViewAlertEventFunction)(wxWebViewAlertEvent&);
466 typedef void (wxEvtHandler::*wxWebViewConfirmEventFunction)(wxWebViewConfirmEvent&);
467 typedef void (wxEvtHandler::*wxWebViewPromptEventFunction)(wxWebViewPromptEvent&);
468 typedef void (wxEvtHandler::*wxWebViewReceivedTitleEventFunction)(wxWebViewReceivedTitleEvent&);
469 typedef void (wxEvtHandler::*wxWebViewWindowObjectClearedFunction)(wxWebViewWindowObjectClearedEvent&);
471 #define wxWebViewLoadEventHandler(func) \
472 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewLoadEventFunction, &func)
473 #define wxWebViewBeforeLoadEventHandler(func) \
474 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewBeforeLoadEventFunction, &func)
475 #define wxWebViewNewWindowEventHandler(func) \
476 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewNewWindowEventFunction, &func)
477 #define wxWebViewRightClickEventHandler(func) \
478 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewRightClickEventFunction, &func)
479 #define wxWebViewConsoleMessageEventHandler(func) \
480 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewConsoleMessageEventFunction, &func)
481 #define wxWebViewAlertEventHandler(func) \
482 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewAlertEventFunction, &func)
483 #define wxWebViewConfirmEventHandler(func) \
484 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewConfirmEventFunction, &func)
485 #define wxWebViewPromptEventHandler(func) \
486 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewPromptEventFunction, &func)
487 #define wxWebViewReceivedTitleEventHandler(func) \
488 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewReceivedTitleEventFunction, &func)
489 #define wxWebViewWindowObjectClearedEventHandler(func) \
490 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewWindowObjectClearedFunction, &func)
493 BEGIN_DECLARE_EVENT_TYPES()
494 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_BEFORE_LOAD, wxID_ANY)
495 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_LOAD, wxID_ANY)
496 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_NEW_WINDOW, wxID_ANY)
497 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_RIGHT_CLICK, wxID_ANY)
498 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_CONSOLE_MESSAGE, wxID_ANY)
499 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_JS_ALERT, wxID_ANY)
500 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_JS_CONFIRM, wxID_ANY)
501 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_JS_PROMPT, wxID_ANY)
502 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_RECEIVED_TITLE, wxID_ANY)
503 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_WINDOW_OBJECT_CLEARED, wxID_ANY)
504 END_DECLARE_EVENT_TYPES()
507 #define EVT_WEBVIEW_LOAD(winid, func) \
508 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_LOAD, \
511 (wxObjectEventFunction) \
512 (wxWebViewLoadEventFunction) & func, \
513 static_cast<wxObject*>(NULL)),
515 #define EVT_WEBVIEW_BEFORE_LOAD(winid, func) \
516 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_BEFORE_LOAD, \
519 (wxObjectEventFunction) \
520 (wxWebViewBeforeLoadEventFunction) & func, \
521 static_cast<wxObject*>(NULL)),
523 #define EVT_WEBVIEW_NEW_WINDOW(winid, func) \
524 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_NEW_WINDOW, \
527 (wxObjectEventFunction) \
528 (wxWebViewNewWindowEventFunction) & func, \
529 static_cast<wxObject*>(NULL)),
531 #define EVT_WEBVIEW_RIGHT_CLICK(winid, func) \
532 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_RIGHT_CLICK, \
535 (wxObjectEventFunction) \
536 (wxWebViewRightClickEventFunction) & func, \
537 static_cast<wxObject*>(NULL)),
539 #define EVT_WEBVIEW_CONSOLE_MESSAGE(winid, func) \
540 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_CONSOLE_MESSAGE, \
543 (wxObjectEventFunction) \
544 (wxWebViewConsoleMessageEventFunction) & func, \
545 static_cast<wxObject*>(NULL)),
547 #define EVT_WEBVIEW_JS_ALERT(winid, func) \
548 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_JS_ALERT, \
551 (wxObjectEventFunction) \
552 (wxWebViewAlertEventFunction) & func, \
553 static_cast<wxObject*>(NULL)),
555 #define EVT_WEBVIEW_JS_CONFIRM(winid, func) \
556 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_JS_CONFIRM, \
559 (wxObjectEventFunction) \
560 (wxWebViewConfirmEventFunction) & func, \
561 static_cast<wxObject*>(NULL)),
563 #define EVT_WEBVIEW_JS_PROMPT(winid, func) \
564 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_JS_PROMPT, \
567 (wxObjectEventFunction) \
568 (wxWebViewPromptEventFunction) & func, \
569 static_cast<wxObject*>(NULL)),
571 #define EVT_WEBVIEW_RECEIVED_TITLE(winid, func) \
572 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_RECEIVED_TITLE, \
575 (wxObjectEventFunction) \
576 (wxWebViewReceivedTitleEventFunction) & func, \
577 static_cast<wxObject*>(NULL)),
579 #define EVT_WEBVIEW_WINDOW_OBJECT_CLEARED(winid, func) \
580 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBVIEW_WINDOW_OBJECT_CLEARED, \
583 (wxObjectEventFunction) \
584 (wxWebViewWindowObjectClearedFunction) & func, \
585 static_cast<wxObject*>(NULL)),
587 #endif // ifndef WXWEBVIEW_H