WebInterfaceBrowserAdapter.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Engine/Source/Runtime/WebBrowser/Private/WebBrowserAdapter.cpp
  2. #include "CoreMinimal.h"
  3. #include "UObject/GCObject.h"
  4. #include "IWebInterfaceBrowserWindow.h"
  5. #include "IWebInterfaceBrowserAdapter.h"
  6. class FDefaultWebInterfaceBrowserAdapter
  7. : public IWebInterfaceBrowserAdapter
  8. , public FGCObject
  9. {
  10. public:
  11. virtual FString GetName() const override
  12. {
  13. return Name;
  14. }
  15. virtual bool IsPermanent() const override
  16. {
  17. return bIsPermanent;
  18. }
  19. virtual void ConnectTo(const TSharedRef<IWebInterfaceBrowserWindow>& BrowserWindow) override
  20. {
  21. if (JSBridge != nullptr)
  22. {
  23. BrowserWindow->BindUObject(Name, JSBridge, bIsPermanent);
  24. }
  25. if (!ConnectScriptText.IsEmpty())
  26. {
  27. BrowserWindow->ExecuteJavascript(ConnectScriptText);
  28. }
  29. }
  30. virtual void DisconnectFrom(const TSharedRef<IWebInterfaceBrowserWindow>& BrowserWindow) override
  31. {
  32. if (!DisconnectScriptText.IsEmpty())
  33. {
  34. BrowserWindow->ExecuteJavascript(DisconnectScriptText);
  35. }
  36. if (JSBridge != nullptr)
  37. {
  38. BrowserWindow->UnbindUObject(Name, JSBridge, bIsPermanent);
  39. }
  40. }
  41. // FGCObject API
  42. virtual void AddReferencedObjects(FReferenceCollector& Collector) override
  43. {
  44. if (JSBridge != nullptr)
  45. {
  46. Collector.AddReferencedObject(JSBridge);
  47. }
  48. }
  49. virtual FString GetReferencerName() const override
  50. {
  51. return TEXT("FDefaultWebInterfaceBrowserAdapter");
  52. }
  53. private:
  54. FDefaultWebInterfaceBrowserAdapter(
  55. const FString InName,
  56. const FString InConnectScriptText,
  57. const FString InDisconnectScriptText,
  58. UObject* InJSBridge,
  59. const bool InIsPermanent)
  60. : Name(InName)
  61. , ConnectScriptText(InConnectScriptText)
  62. , DisconnectScriptText(InDisconnectScriptText)
  63. , JSBridge(InJSBridge)
  64. , bIsPermanent(InIsPermanent)
  65. { }
  66. private:
  67. const FString Name;
  68. const FString ConnectScriptText;
  69. const FString DisconnectScriptText;
  70. UObject* JSBridge;
  71. const bool bIsPermanent;
  72. friend FWebInterfaceBrowserAdapterFactory;
  73. };
  74. TSharedRef<IWebInterfaceBrowserAdapter> FWebInterfaceBrowserAdapterFactory::Create(const FString& Name, UObject* JSBridge, bool IsPermanent)
  75. {
  76. return MakeShareable(new FDefaultWebInterfaceBrowserAdapter(Name, FString(), FString(), JSBridge, IsPermanent));
  77. }
  78. TSharedRef<IWebInterfaceBrowserAdapter> FWebInterfaceBrowserAdapterFactory::Create(const FString& Name, UObject* JSBridge, bool IsPermanent, const FString& ConnectScriptText, const FString& DisconnectScriptText)
  79. {
  80. return MakeShareable(new FDefaultWebInterfaceBrowserAdapter(Name, ConnectScriptText, DisconnectScriptText, JSBridge, IsPermanent));
  81. }