// Engine/Source/Runtime/WebBrowser/Private/Native/NativeWebBrowserProxy.h #pragma once #include "CoreMinimal.h" #include "IWebInterfaceBrowserWindow.h" #include "NativeInterfaceJSScripting.h" class FNativeWebInterfaceBrowserProxy : public IWebInterfaceBrowserWindow , public TSharedFromThis { // For creating instances of this class friend class FWebInterfaceBrowserSingleton; private: FNativeWebInterfaceBrowserProxy(bool bJSBindingToLoweringEnabled); void Initialize(); void HandleEmbeddedCommunication(const struct FEmbeddedCallParamsHelper& Params); bool OnJsMessageReceived(const FString& Message); public: virtual ~FNativeWebInterfaceBrowserProxy(); 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 EWebInterfaceBrowserDocumentState GetDocumentLoadingState() const override; virtual FString GetTitle() const override; virtual FString GetUrl() const override; virtual void GetSource(TFunction 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 GetParentWindow() const override; virtual void SetParentWindow(TSharedPtr Window) override; // @todo: None of these are actually called at the moment. DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::FOnDocumentStateChanged, FOnDocumentStateChanged); virtual FOnDocumentStateChanged& OnDocumentStateChanged() override { return DocumentStateChangedEvent; } DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::FOnTitleChanged, FOnTitleChanged); virtual FOnTitleChanged& OnTitleChanged() override { return TitleChangedEvent; } DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::FOnUrlChanged, FOnUrlChanged); virtual FOnUrlChanged& OnUrlChanged() override { return UrlChangedEvent; } DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::FOnToolTip, FOnToolTip); virtual FOnToolTip& OnToolTip() override { return ToolTipEvent; } DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::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(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::FOnShowPopup, FOnShowPopup); virtual FOnShowPopup& OnShowPopup() override { return ShowPopupEvent; } DECLARE_DERIVED_EVENT(FNativeWebInterfaceBrowserProxy, IWebInterfaceBrowserWindow::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 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; FNativeInterfaceJSScriptingPtr Scripting; };