// Engine/Source/Runtime/WebBrowser/Private/WebBrowserSingleton.h #pragma once #include "CoreMinimal.h" #include "Containers/Ticker.h" #include "IWebInterfaceBrowserSingleton.h" #if WITH_CEF3 #if PLATFORM_WINDOWS #include "Windows/WindowsHWrapper.h" #include "Windows/AllowWindowsPlatformTypes.h" #include "Windows/AllowWindowsPlatformAtomics.h" #endif #pragma push_macro("OVERRIDE") #undef OVERRIDE // cef headers provide their own OVERRIDE macro THIRD_PARTY_INCLUDES_START #if PLATFORM_APPLE PRAGMA_DISABLE_DEPRECATION_WARNINGS #endif #include "include/internal/cef_ptr.h" #include "include/cef_request_context.h" #if PLATFORM_APPLE PRAGMA_ENABLE_DEPRECATION_WARNINGS #endif THIRD_PARTY_INCLUDES_END #pragma pop_macro("OVERRIDE") #if PLATFORM_WINDOWS #include "Windows/HideWindowsPlatformAtomics.h" #include "Windows/HideWindowsPlatformTypes.h" #endif #include "CEF/CEFInterfaceSchemeHandler.h" #include "CEF/CEFInterfaceResourceContextHandler.h" class CefListValue; class FCEFInterfaceBrowserApp; class FCEFWebInterfaceBrowserWindow; #endif class IWebInterfaceBrowserCookieManager; class IWebInterfaceBrowserWindow; struct FWebInterfaceBrowserWindowInfo; struct FWebInterfaceBrowserInitSettings; class UMaterialInterface; PRAGMA_DISABLE_DEPRECATION_WARNINGS /** * Implementation of singleton class that takes care of general web browser tasks */ class FWebInterfaceBrowserSingleton : public IWebInterfaceBrowserSingleton , public FTSTickerObjectBase { public: /** Constructor. */ FWebInterfaceBrowserSingleton(const FWebInterfaceBrowserInitSettings& WebBrowserInitSettings); /** Virtual destructor. */ virtual ~FWebInterfaceBrowserSingleton(); /** * Gets the Current Locale Code in the format CEF expects * * @return Locale code as either "xx" or "xx-YY" */ static FString GetCurrentLocaleCode(); virtual FString ApplicationCacheDir() const override; public: // IWebBrowserSingleton Interface virtual TSharedRef GetWebBrowserWindowFactory() const override; TSharedPtr CreateBrowserWindow( TSharedPtr& BrowserWindowParent, TSharedPtr& BrowserWindowInfo) override; TSharedPtr CreateBrowserWindow(const FCreateInterfaceBrowserWindowSettings& Settings) override; #if BUILD_EMBEDDED_APP TSharedPtr CreateNativeBrowserProxy() override; #endif virtual TSharedPtr GetCookieManager() const override { return DefaultCookieManager; } virtual TSharedPtr GetCookieManager(TOptional ContextId) const override; virtual bool RegisterContext(const FInterfaceBrowserContextSettings& Settings) override; virtual bool UnregisterContext(const FString& ContextId) override; virtual bool RegisterSchemeHandlerFactory(FString Scheme, FString Domain, IWebInterfaceBrowserSchemeHandlerFactory* WebBrowserSchemeHandlerFactory) override; virtual bool UnregisterSchemeHandlerFactory(IWebInterfaceBrowserSchemeHandlerFactory* WebBrowserSchemeHandlerFactory) override; virtual bool IsDevToolsShortcutEnabled() override { return bDevToolsShortcutEnabled; } virtual void SetDevToolsShortcutEnabled(bool Value) override { bDevToolsShortcutEnabled = Value; } virtual void SetJSBindingToLoweringEnabled(bool bEnabled) override { bJSBindingsToLoweringEnabled = bEnabled; } virtual void ClearOldCacheFolders(const FString& CachePathRoot, const FString& CachePrefix) override; /** Set a reference to UWebBrowser's default material*/ virtual void SetDefaultMaterial(UMaterialInterface* InDefaultMaterial) override { DefaultMaterial = InDefaultMaterial; } /** Set a reference to UWebBrowser's translucent material*/ virtual void SetDefaultTranslucentMaterial(UMaterialInterface* InDefaultMaterial) override { DefaultTranslucentMaterial = InDefaultMaterial; } /** Get a reference to UWebBrowser's default material*/ virtual UMaterialInterface* GetDefaultMaterial() override { return DefaultMaterial; } /** Get a reference to UWebBrowser's translucent material*/ virtual UMaterialInterface* GetDefaultTranslucentMaterial() override { return DefaultTranslucentMaterial; } public: // FTSTickerObjectBase Interface virtual bool Tick(float DeltaTime) override; #if WITH_CEF3 /** Return true if this URL will support adding an Authorization header to it */ bool URLRequestAllowsCredentials(const FString& URL); #endif private: TSharedPtr DefaultCookieManager; #if WITH_CEF3 /** When new render processes are created, send all permanent variable bindings to them. */ void HandleRenderProcessCreated(CefRefPtr ExtraInfo); /** Helper function to generate the CEF build unique name for the cache_path */ FString GenerateWebCacheFolderName(const FString &InputPath); /** Helper function that blocks until the CEF task queue has processed a posted task, flushing the queue */ void WaitForTaskQueueFlush(); /** Pointer to the CEF App implementation */ CefRefPtr CEFBrowserApp; TMap> RequestContexts; TMap> RequestResourceHandlers; FCefInterfaceSchemeHandlerFactories SchemeHandlerFactories; bool bAllowCEF; bool bTaskFinished; #endif /** List of currently existing browser windows */ #if WITH_CEF3 TArray> WindowInterfaces; #endif /** Critical section for thread safe modification of WindowInterfaces array. */ FCriticalSection WindowInterfacesCS; TSharedRef WebBrowserWindowFactory; bool bDevToolsShortcutEnabled; bool bJSBindingsToLoweringEnabled; bool bAppIsFocused; #if WITH_CEF3 /** Did CEF successfully initialize itself */ bool bCEFInitialized; #endif /** Reference to UWebBrowser's default material*/ UMaterialInterface* DefaultMaterial; /** Reference to UWebBrowser's translucent material*/ UMaterialInterface* DefaultTranslucentMaterial; }; PRAGMA_ENABLE_DEPRECATION_WARNINGS #if WITH_CEF3 class CefCookieManager; class FCefWebInterfaceCookieManagerFactory { public: static TSharedRef Create( const CefRefPtr& CookieManager); }; #endif