110 lines
5.2 KiB
C++
110 lines
5.2 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: include/wx/msw/private/webview_edge.h
|
|
// Purpose: wxMSW Edge Chromium wxWebView backend private classes
|
|
// Author: Tobias Taschner
|
|
// Created: 2020-01-15
|
|
// Copyright: (c) 2020 wxWidgets development team
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef wxWebViewEdge_PRIVATE_H
|
|
#define wxWebViewEdge_PRIVATE_H
|
|
|
|
#include "wx/dynlib.h"
|
|
#include "wx/msw/private/comptr.h"
|
|
|
|
#include <WebView2.h>
|
|
|
|
#ifndef __ICoreWebView2Environment_INTERFACE_DEFINED__
|
|
#error "WebView2 SDK version 0.9.430 or newer is required"
|
|
#endif
|
|
|
|
#ifndef __VISUALC__
|
|
__CRT_UUID_DECL(ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler, 0xb99369f3, 0x9b11, 0x47b5, 0xbc,0x6f, 0x8e,0x78,0x95,0xfc,0xea,0x17);
|
|
__CRT_UUID_DECL(ICoreWebView2CreateCoreWebView2ControllerCompletedHandler, 0x6c4819f3, 0xc9b7, 0x4260, 0x81,0x27, 0xc9,0xf5,0xbd,0xe7,0xf6,0x8c);
|
|
__CRT_UUID_DECL(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, 0x4e8a3389, 0xc9d8, 0x4bd2, 0xb6,0xb5, 0x12,0x4f,0xee,0x6c,0xc1,0x4d);
|
|
__CRT_UUID_DECL(ICoreWebView2ContainsFullScreenElementChangedEventHandler, 0xe45d98b1, 0xafef, 0x45be, 0x8b,0xaf, 0x6c,0x77,0x28,0x86,0x7f,0x73);
|
|
__CRT_UUID_DECL(ICoreWebView2ContentLoadingEventHandler, 0x364471e7, 0xf2be, 0x4910, 0xbd,0xba, 0xd7,0x20,0x77,0xd5,0x1c,0x4b);
|
|
__CRT_UUID_DECL(ICoreWebView2DocumentTitleChangedEventHandler, 0xf5f2b923, 0x953e, 0x4042, 0x9f,0x95, 0xf3,0xa1,0x18,0xe1,0xaf,0xd4);
|
|
__CRT_UUID_DECL(ICoreWebView2Environment, 0xb96d755e, 0x0319, 0x4e92, 0xa2,0x96, 0x23,0x43,0x6f,0x46,0xa1,0xfc);
|
|
__CRT_UUID_DECL(ICoreWebView2EnvironmentOptions, 0x2fde08a8, 0x1e9a, 0x4766, 0x8c,0x05, 0x95,0xa9,0xce,0xb9,0xd1,0xc5);
|
|
__CRT_UUID_DECL(ICoreWebView2ExecuteScriptCompletedHandler, 0x49511172, 0xcc67, 0x4bca, 0x99,0x23, 0x13,0x71,0x12,0xf4,0xc4,0xcc);
|
|
__CRT_UUID_DECL(ICoreWebView2NavigationCompletedEventHandler, 0xd33a35bf, 0x1c49, 0x4f98, 0x93,0xab, 0x00,0x6e,0x05,0x33,0xfe,0x1c);
|
|
__CRT_UUID_DECL(ICoreWebView2NavigationStartingEventHandler, 0x9adbe429, 0xf36d, 0x432b, 0x9d,0xdc, 0xf8,0x88,0x1f,0xbd,0x76,0xe3);
|
|
__CRT_UUID_DECL(ICoreWebView2NewWindowRequestedEventHandler, 0xd4c185fe, 0xc81c, 0x4989, 0x97,0xaf, 0x2d,0x3f,0xa7,0xab,0x56,0x51);
|
|
__CRT_UUID_DECL(ICoreWebView2SourceChangedEventHandler, 0x3c067f9f, 0x5388, 0x4772, 0x8b,0x48, 0x79,0xf7,0xef,0x1a,0xb3,0x7c);
|
|
__CRT_UUID_DECL(ICoreWebView2WebMessageReceivedEventHandler, 0x57213f19, 0x00e6, 0x49fa, 0x8e,0x07, 0x89,0x8e,0xa0,0x1e,0xcb,0xd2);
|
|
#endif
|
|
|
|
class wxWebViewEdgeImpl
|
|
{
|
|
public:
|
|
explicit wxWebViewEdgeImpl(wxWebViewEdge* webview);
|
|
~wxWebViewEdgeImpl();
|
|
|
|
bool Create();
|
|
|
|
wxWebViewEdge* m_ctrl;
|
|
|
|
wxCOMPtr<ICoreWebView2Environment> m_webViewEnvironment;
|
|
wxCOMPtr<ICoreWebView2> m_webView;
|
|
wxCOMPtr<ICoreWebView2Controller> m_webViewController;
|
|
|
|
bool m_initialized;
|
|
bool m_isBusy;
|
|
wxString m_pendingURL;
|
|
int m_pendingContextMenuEnabled;
|
|
int m_pendingAccessToDevToolsEnabled;
|
|
wxVector<wxString> m_pendingUserScripts;
|
|
wxVector<wxString> m_userScriptIds;
|
|
wxString m_scriptMsgHandlerName;
|
|
wxString m_customUserAgent;
|
|
|
|
// WebView Events tokens
|
|
EventRegistrationToken m_navigationStartingToken = { };
|
|
EventRegistrationToken m_sourceChangedToken = { };
|
|
EventRegistrationToken m_navigationCompletedToken = { };
|
|
EventRegistrationToken m_newWindowRequestedToken = { };
|
|
EventRegistrationToken m_documentTitleChangedToken = { };
|
|
EventRegistrationToken m_contentLoadingToken = { };
|
|
EventRegistrationToken m_containsFullScreenElementChangedToken = { };
|
|
EventRegistrationToken m_webMessageReceivedToken = { };
|
|
|
|
// WebView Event handlers
|
|
HRESULT OnNavigationStarting(ICoreWebView2* sender, ICoreWebView2NavigationStartingEventArgs* args);
|
|
HRESULT OnSourceChanged(ICoreWebView2* sender, ICoreWebView2SourceChangedEventArgs* args);
|
|
HRESULT OnNavigationCompleted(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args);
|
|
HRESULT OnNewWindowRequested(ICoreWebView2* sender, ICoreWebView2NewWindowRequestedEventArgs* args);
|
|
HRESULT OnDocumentTitleChanged(ICoreWebView2* sender, IUnknown* args);
|
|
HRESULT OnContentLoading(ICoreWebView2* sender, ICoreWebView2ContentLoadingEventArgs* args);
|
|
HRESULT OnContainsFullScreenElementChanged(ICoreWebView2* sender, IUnknown* args);
|
|
HRESULT OnWebMessageReceived(ICoreWebView2* sender, ICoreWebView2WebMessageReceivedEventArgs* args);
|
|
HRESULT OnAddScriptToExecuteOnDocumentedCreatedCompleted(HRESULT errorCode, LPCWSTR id);
|
|
|
|
HRESULT OnEnvironmentCreated(HRESULT result, ICoreWebView2Environment* environment);
|
|
HRESULT OnWebViewCreated(HRESULT result, ICoreWebView2Controller* webViewController);
|
|
|
|
wxVector<wxSharedPtr<wxWebViewHistoryItem> > m_historyList;
|
|
int m_historyPosition;
|
|
bool m_historyLoadingFromList;
|
|
bool m_historyEnabled;
|
|
|
|
void UpdateBounds();
|
|
|
|
ICoreWebView2Settings* GetSettings();
|
|
|
|
void UpdateWebMessageHandler();
|
|
|
|
static wxDynamicLibrary ms_loaderDll;
|
|
static wxString ms_browserExecutableDir;
|
|
static wxString ms_version;
|
|
|
|
static bool Initialize();
|
|
|
|
static void Uninitialize();
|
|
|
|
friend class wxWebViewEdgeModule;
|
|
};
|
|
|
|
#endif // wxWebViewEdge_PRIVATE_H
|