Files
UnrealEngine/Engine/Source/Runtime/WebBrowser/Private/Native/NativeWebBrowserProxy.h
2025-05-18 13:04:45 +08:00

268 lines
8.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "IWebBrowserWindow.h"
#include "NativeJSScripting.h"
class FNativeWebBrowserProxy
: public IWebBrowserWindow
, public TSharedFromThis<FNativeWebBrowserProxy>
{
// For creating instances of this class
friend class FWebBrowserSingleton;
private:
FNativeWebBrowserProxy(bool bJSBindingToLoweringEnabled);
void Initialize();
void HandleEmbeddedCommunication(const struct FEmbeddedCallParamsHelper& Params);
bool OnJsMessageReceived(const FString& Message);
public:
virtual ~FNativeWebBrowserProxy();
public:
// IWebBrowserWindow Interface
virtual void LoadURL(FString NewURL) override;
virtual void LoadString(FString Contents, FString DummyURL) override;
virtual void SetViewportSize(FIntPoint WindowSize, FIntPoint WindowPos) override;
virtual FIntPoint GetViewportSize() const override;
virtual class FSlateShaderResource* GetTexture(bool bIsPopup = false) override;
virtual bool IsValid() const override;
virtual bool IsInitialized() const override;
virtual bool IsClosing() const override;
virtual EWebBrowserDocumentState GetDocumentLoadingState() const override;
virtual FString GetTitle() const override;
virtual FString GetUrl() const override;
virtual void GetSource(TFunction<void(const FString&)> Callback) const override;
virtual bool OnKeyDown(const FKeyEvent& InKeyEvent) override;
virtual bool OnKeyUp(const FKeyEvent& InKeyEvent) override;
virtual bool OnKeyChar(const FCharacterEvent& InCharacterEvent) override;
virtual void SetSupportsMouseWheel(bool bValue) override;
virtual bool GetSupportsMouseWheel() const override;
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
virtual FReply OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
virtual FReply OnMouseButtonDoubleClick(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
virtual FReply OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
virtual void OnMouseLeave(const FPointerEvent& MouseEvent) override;
virtual FReply OnMouseWheel(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool bIsPopup) override;
virtual FOnDragWindow& OnDragWindow() override
{
return DragWindowDelegate;
}
virtual void OnFocus(bool SetFocus, bool bIsPopup) override;
virtual void OnCaptureLost() override;
virtual bool CanGoBack() const override;
virtual void GoBack() override;
virtual bool CanGoForward() const override;
virtual void GoForward() override;
virtual bool IsLoading() const override;
virtual void Reload() override;
virtual void StopLoad() override;
virtual void ExecuteJavascript(const FString& Script) override;
virtual void CloseBrowser(bool bForce, bool bBlockTillClosed) override;
virtual void BindUObject(const FString& Name, UObject* Object, bool bIsPermanent = true) override;
virtual void UnbindUObject(const FString& Name, UObject* Object = nullptr, bool bIsPermanent = true) override;
virtual int GetLoadError() override;
virtual void SetIsDisabled(bool bValue) override;
virtual TSharedPtr<SWindow> GetParentWindow() const override;
virtual void SetParentWindow(TSharedPtr<SWindow> Window) override;
virtual void ShowFloatingCloseButton(bool bShow, bool bDraggable) override
{
}
// @todo: None of these are actually called at the moment.
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnDocumentStateChanged, FOnDocumentStateChanged);
virtual FOnDocumentStateChanged& OnDocumentStateChanged() override
{
return DocumentStateChangedEvent;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnTitleChanged, FOnTitleChanged);
virtual FOnTitleChanged& OnTitleChanged() override
{
return TitleChangedEvent;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnUrlChanged, FOnUrlChanged);
virtual FOnUrlChanged& OnUrlChanged() override
{
return UrlChangedEvent;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnToolTip, FOnToolTip);
virtual FOnToolTip& OnToolTip() override
{
return ToolTipEvent;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnNeedsRedraw, FOnNeedsRedraw);
virtual FOnNeedsRedraw& OnNeedsRedraw() override
{
return NeedsRedrawEvent;
}
virtual FOnBeforeBrowse& OnBeforeBrowse() override
{
return BeforeBrowseDelegate;
}
virtual FOnLoadUrl& OnLoadUrl() override
{
return LoadUrlDelegate;
}
virtual FOnCreateWindow& OnCreateWindow() override
{
return CreateWindowDelegate;
}
virtual FOnCloseWindow& OnCloseWindow() override
{
return CloseWindowDelegate;
}
virtual FCursorReply OnCursorQuery(const FGeometry& MyGeometry, const FPointerEvent& CursorEvent) override
{
return FCursorReply::Unhandled();
}
virtual FOnBeforePopupDelegate& OnBeforePopup() override
{
return BeforePopupDelegate;
}
virtual FOnBeforeResourceLoadDelegate& OnBeforeResourceLoad() override
{
return BeforeResourceLoadDelegate;
}
virtual FOnResourceLoadCompleteDelegate& OnResourceLoadComplete() override
{
return ResourceLoadCompleteDelegate;
}
virtual FOnConsoleMessageDelegate& OnConsoleMessage() override
{
return ConsoleMessageDelegate;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnShowPopup, FOnShowPopup);
virtual FOnShowPopup& OnShowPopup() override
{
return ShowPopupEvent;
}
DECLARE_DERIVED_EVENT(FNativeWebBrowserProxy, IWebBrowserWindow::FOnDismissPopup, FOnDismissPopup);
virtual FOnDismissPopup& OnDismissPopup() override
{
return DismissPopupEvent;
}
virtual FOnShowDialog& OnShowDialog() override
{
return ShowDialogDelegate;
}
virtual FOnDismissAllDialogs& OnDismissAllDialogs() override
{
return DismissAllDialogsDelegate;
}
virtual FOnSuppressContextMenu& OnSuppressContextMenu() override
{
return SuppressContextMenuDelgate;
}
virtual FOnUnhandledKeyDown& OnUnhandledKeyDown() override
{
return UnhandledKeyDownDelegate;
}
virtual FOnUnhandledKeyUp& OnUnhandledKeyUp() override
{
return UnhandledKeyUpDelegate;
}
virtual FOnUnhandledKeyChar& OnUnhandledKeyChar() override
{
return UnhandledKeyCharDelegate;
}
private:
/** Delegate for broadcasting load state changes. */
FOnDocumentStateChanged DocumentStateChangedEvent;
/** Delegate for broadcasting title changes. */
FOnTitleChanged TitleChangedEvent;
/** Delegate for broadcasting address changes. */
FOnUrlChanged UrlChangedEvent;
/** Delegate for broadcasting when the browser wants to show a tool tip. */
FOnToolTip ToolTipEvent;
/** Delegate for notifying that the window needs refreshing. */
FOnNeedsRedraw NeedsRedrawEvent;
/** Delegate that is executed prior to browser navigation. */
FOnBeforeBrowse BeforeBrowseDelegate;
/** Delegate for overriding Url contents. */
FOnLoadUrl LoadUrlDelegate;
/** Delegate for notifying that a popup window is attempting to open. */
FOnBeforePopupDelegate BeforePopupDelegate;
/** Delegate that is invoked before the browser loads a resource. Its primary purpose is to inject headers into the request. */
FOnBeforeResourceLoadDelegate BeforeResourceLoadDelegate;
/** Delegate that is invoked on completion of browser resource loads. Its primary purpose is to allow response to failures. */
FOnResourceLoadCompleteDelegate ResourceLoadCompleteDelegate;
/** Delegate that is invoked for each console message */
FOnConsoleMessageDelegate ConsoleMessageDelegate;
/** Delegate for handling requests to create new windows. */
FOnCreateWindow CreateWindowDelegate;
/** Delegate for handling requests to close new windows that were created. */
FOnCloseWindow CloseWindowDelegate;
/** Delegate for handling requests to close from the webview floating close button. */
FOnFloatingCloseButtonPressed FloatingCloseButtonPressedDelegate;
/** Delegate for handling requests to show the popup menu. */
FOnShowPopup ShowPopupEvent;
/** Delegate for handling requests to dismiss the current popup menu. */
FOnDismissPopup DismissPopupEvent;
/** Delegate for showing dialogs. */
FOnShowDialog ShowDialogDelegate;
/** Delegate for dismissing all dialogs. */
FOnDismissAllDialogs DismissAllDialogsDelegate;
/** Delegate for suppressing context menu */
FOnSuppressContextMenu SuppressContextMenuDelgate;
/** Delegate for handling key down events not handled by the browser. */
FOnUnhandledKeyDown UnhandledKeyDownDelegate;
/** Delegate for handling key up events not handled by the browser. */
FOnUnhandledKeyUp UnhandledKeyUpDelegate;
/** Delegate for handling key char events not handled by the browser. */
FOnUnhandledKeyChar UnhandledKeyCharDelegate;
FOnDragWindow DragWindowDelegate;
bool bJSBindingToLoweringEnabled;
FNativeJSScriptingPtr Scripting;
};