wxwidgets/include/wx/webview_chromium_impl.h
Vadim Zeitlin 5ca49dc56c Allow specifying a custom CefClient to use with wxWebViewChromium
This opens many customization possibilities beyond those provided by
wxWebView API and also allows to process CEF IPC messages much more
efficiently than what is possible using wxEvents.

Closes #24336.
2024-02-29 03:05:44 +01:00

97 lines
4.1 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: wx/webview_chromium_impl.h
// Purpose: Helpers for implementing custom CefClient for wxWebViewChromium
// Author: Vadim Zeitlin
// Created: 2024-02-17
// Copyright: (c) 2024 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_WEBVIEW_CHROMIUM_IMPL_H_
#define _WX_WEBVIEW_CHROMIUM_IMPL_H_
// Note that this header includes CEF headers and so the appropriate include
// path should be set up when using it.
#ifdef __VISUALC__
#pragma warning(push)
#pragma warning(disable:4100)
#endif
wxGCC_WARNING_SUPPRESS(unused-parameter)
#include "include/cef_client.h"
wxGCC_WARNING_RESTORE(unused-parameter)
#ifdef __VISUALC__
#pragma warning(pop)
#endif
// ----------------------------------------------------------------------------
// Convenient base class for custom CefClient implementations.
// ----------------------------------------------------------------------------
class wxDelegatingCefClient : public CefClient
{
public:
// Forward all CefClient methods to the original client.
virtual CefRefPtr<CefAudioHandler> GetAudioHandler() override
{ return m_clientOrig->GetAudioHandler(); }
virtual CefRefPtr<CefCommandHandler> GetCommandHandler() override
{ return m_clientOrig->GetCommandHandler(); }
virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler() override
{ return m_clientOrig->GetContextMenuHandler(); }
virtual CefRefPtr<CefDialogHandler> GetDialogHandler() override
{ return m_clientOrig->GetDialogHandler(); }
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() override
{ return m_clientOrig->GetDisplayHandler(); }
virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler() override
{ return m_clientOrig->GetDownloadHandler(); }
virtual CefRefPtr<CefDragHandler> GetDragHandler() override
{ return m_clientOrig->GetDragHandler(); }
virtual CefRefPtr<CefFindHandler> GetFindHandler() override
{ return m_clientOrig->GetFindHandler(); }
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() override
{ return m_clientOrig->GetFocusHandler(); }
virtual CefRefPtr<CefFrameHandler> GetFrameHandler() override
{ return m_clientOrig->GetFrameHandler(); }
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() override
{ return m_clientOrig->GetPermissionHandler(); }
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() override
{ return m_clientOrig->GetJSDialogHandler(); }
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() override
{ return m_clientOrig->GetKeyboardHandler(); }
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override
{ return m_clientOrig->GetLifeSpanHandler(); }
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() override
{ return m_clientOrig->GetLoadHandler(); }
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() override
{ return m_clientOrig->GetPrintHandler(); }
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() override
{ return m_clientOrig->GetRenderHandler(); }
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() override
{ return m_clientOrig->GetRequestHandler(); }
virtual bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefProcessId source_process,
CefRefPtr<CefProcessMessage> message) override
{
return m_clientOrig->OnProcessMessageReceived(browser, frame,
source_process, message);
}
protected:
// Objects of this class shouldn't be created, only derived classes should
// be used, hence the constructor is protected.
explicit wxDelegatingCefClient(CefClient* clientOrig)
: m_clientOrig{clientOrig}
{
}
CefRefPtr<CefClient> const m_clientOrig;
IMPLEMENT_REFCOUNTING(wxDelegatingCefClient);
};
#endif // _WX_WEBVIEW_CHROMIUM_IMPL_H_