-
Notifications
You must be signed in to change notification settings - Fork 39
/
WebKitHandler.h
102 lines (85 loc) · 5.29 KB
/
WebKitHandler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#pragma once
#define CEF_VERSION_1
#include "include/cef_client.h"
#include "include/cef_nplugin.h"
class CWebKitXCtrl;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef CEF_VERSION_1
#define WINDOW_HANDLE(B) B->GetWindowHandle()
#endif
#ifdef CEF_VERSION_3
#define WINDOW_HANDLE(B) B->GetHost()->GetWindowHandle()
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma comment(lib, "libcef.lib")
#pragma comment(lib, "libcef_dll_wrapper.lib")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define REQUIRE_UI_THREAD() ASSERT(CefCurrentlyOn(TID_UI));
#define REQUIRE_IO_THREAD() ASSERT(CefCurrentlyOn(TID_IO));
#define REQUIRE_FILE_THREAD() ASSERT(CefCurrentlyOn(TID_FILE));
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template <class T, class A> T join(const A &begin, const A &end, const T &t)
{
T result;
for (A it=begin; it!=end; it++)
{
if (!result.empty()) result.append(t);
result.append(*it);
}
return result;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
// WebKitHandler Class (received notifications from CEF)
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
class WebKitHandler :
public CefClient,
public CefLifeSpanHandler,
public CefLoadHandler,
public CefKeyboardHandler,
public CefRenderHandler,
public CefV8ContextHandler,
public CefPermissionHandler
{
public:
CWebKitXCtrl* control;
WebKitHandler(CWebKitXCtrl* control);
~WebKitHandler(void);
/////////////////////////////////////////////////////////////////////////////////////////////////////
// CefClient methods
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE { return this; }
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE { return this; }
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE { return this; }
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() OVERRIDE { return this; }
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() OVERRIDE { return this; }
/////////////////////////////////////////////////////////////////////////////////////////////////////
// CefLifeSpanHandler callbacks
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
/////////////////////////////////////////////////////////////////////////////////////////////////////
// CefLoadHandler callbacks
virtual void OnLoadStart(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame) OVERRIDE;
virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, int httpStatusCode) OVERRIDE;
virtual bool OnLoadError(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, ErrorCode errorCode, const CefString& failedUrl, CefString& errorText) OVERRIDE;
/////////////////////////////////////////////////////////////////////////////////////////////////////
// CefKeyboardHandler methods.
virtual bool OnKeyEvent(CefRefPtr<CefBrowser> browser, KeyEventType type, int code, int modifiers, bool isSystemKey, bool isAfterJavaScript) OVERRIDE;
/////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: CefRenderHandler (Off Screen Rendering)
virtual bool GetViewRect(CefRefPtr<CefBrowser> browser, CefRect& rect) OVERRIDE { return false; }
virtual bool GetScreenRect(CefRefPtr<CefBrowser> browser, CefRect& rect) OVERRIDE { return false; }
virtual bool GetScreenPoint(CefRefPtr<CefBrowser> browser, int viewX, int viewY, int& screenX, int& screenY) OVERRIDE { return false; }
virtual void OnPopupShow(CefRefPtr<CefBrowser> browser, bool show) OVERRIDE {}
virtual void OnPopupSize(CefRefPtr<CefBrowser> browser, const CefRect& rect) OVERRIDE {}
virtual void OnPaint(CefRefPtr<CefBrowser> browser, PaintElementType type, const RectList& dirtyRects, const void* buffer) OVERRIDE {}
virtual void OnCursorChange(CefRefPtr<CefBrowser> browser, CefCursorHandle cursor) OVERRIDE {}
/////////////////////////////////////////////////////////////////////////////////////////////////////
// CefV8ContextHandler
virtual void OnContextCreated(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context) OVERRIDE;
virtual void OnContextReleased(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context) OVERRIDE;
virtual void OnUncaughtException(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context, CefRefPtr<CefV8Exception> exception, CefRefPtr<CefV8StackTrace> stackTrace) OVERRIDE;
/////////////////////////////////////////////////////////////////////////////////////////////////////
IMPLEMENT_REFCOUNTING(WebKitHandler);
IMPLEMENT_LOCKING(WebKitHandler);
};