When SetPage() was called during the webview was still initializing it would silently fail. This will now load the contents when the webview is ready. Additionally error handling for the underlying NavigateToString() has been added so it wont fail silently. Closes #22052.
113 lines
5.5 KiB
C++
113 lines
5.5 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 __ICoreWebView2_2_INTERFACE_DEFINED__
|
|
#error "WebView2 SDK version 1.0.705.50 or newer is required"
|
|
#endif
|
|
|
|
#ifndef __VISUALC__
|
|
__CRT_UUID_DECL(ICoreWebView2_2, 0x9E8F0CF8, 0xE670, 0x4B5E, 0xB2, 0xBC, 0x73, 0xE0, 0x61, 0xE3, 0x18, 0x4C);
|
|
__CRT_UUID_DECL(ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler, 0xb99369f3, 0x9b11, 0x47b5, 0xbc,0x6f, 0x8e,0x78,0x95,0xfc,0xea,0x17);
|
|
__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(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(ICoreWebView2DocumentTitleChangedEventHandler, 0xf5f2b923, 0x953e, 0x4042, 0x9f,0x95, 0xf3,0xa1,0x18,0xe1,0xaf,0xd4);
|
|
__CRT_UUID_DECL(ICoreWebView2DOMContentLoadedEventHandler, 0x4BAC7E9C, 0x199E, 0x49ED, 0x87, 0xED, 0x24, 0x93, 0x03, 0xAC, 0xF0, 0x19);
|
|
__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_2> m_webView;
|
|
wxCOMPtr<ICoreWebView2Controller> m_webViewController;
|
|
|
|
bool m_initialized;
|
|
bool m_isBusy;
|
|
wxString m_pendingURL;
|
|
wxString m_pendingPage;
|
|
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_DOMContentLoadedToken = { };
|
|
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 OnDOMContentLoaded(ICoreWebView2* sender, ICoreWebView2DOMContentLoadedEventArgs* 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
|