CEFInterfaceJSStructSerializerBackend.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Engine/Source/Runtime/WebBrowser/Private/CEF/CEFJSStructSerializerBackend.h
  2. #pragma once
  3. #include "CoreMinimal.h"
  4. #if WITH_CEF3
  5. #include "Containers/UnrealString.h"
  6. #include "WebInterfaceBrowserSingleton.h"
  7. #include "UObject/UnrealType.h"
  8. #include "IStructSerializerBackend.h"
  9. #include "CEFInterfaceJSScripting.h"
  10. #if PLATFORM_WINDOWS
  11. #include "Windows/WindowsHWrapper.h"
  12. #include "Windows/AllowWindowsPlatformTypes.h"
  13. #endif
  14. #pragma push_macro("OVERRIDE")
  15. #undef OVERRIDE // cef headers provide their own OVERRIDE macro
  16. THIRD_PARTY_INCLUDES_START
  17. #if PLATFORM_APPLE
  18. PRAGMA_DISABLE_DEPRECATION_WARNINGS
  19. #endif
  20. #include "include/cef_values.h"
  21. #if PLATFORM_APPLE
  22. PRAGMA_ENABLE_DEPRECATION_WARNINGS
  23. #endif
  24. THIRD_PARTY_INCLUDES_END
  25. #pragma pop_macro("OVERRIDE")
  26. #if PLATFORM_WINDOWS
  27. #include "Windows/HideWindowsPlatformTypes.h"
  28. #endif
  29. #endif
  30. class FCEFInterfaceJSScripting;
  31. class IStructSerializerBackend;
  32. struct FStructSerializerState;
  33. class FWebJSScripting;
  34. class UObject;
  35. class FProperty;
  36. class UStruct;
  37. #if WITH_CEF3
  38. /**
  39. * Implements a writer for UStruct serialization using CefDictionary.
  40. */
  41. class FCEFInterfaceJSStructSerializerBackend
  42. : public IStructSerializerBackend
  43. {
  44. public:
  45. /**
  46. * Creates and initializes a new instance.
  47. * */
  48. FCEFInterfaceJSStructSerializerBackend(TSharedPtr<FCEFInterfaceJSScripting> InScripting)
  49. : Scripting(InScripting), Stack(), Result()
  50. { }
  51. CefRefPtr<CefDictionaryValue> GetResult()
  52. {
  53. return Result;
  54. }
  55. public:
  56. // IStructSerializerBackend interface
  57. virtual void BeginArray(const FStructSerializerState& State) override;
  58. virtual void BeginStructure(const FStructSerializerState& State) override;
  59. virtual void EndArray(const FStructSerializerState& State) override;
  60. virtual void EndStructure(const FStructSerializerState& State) override;
  61. virtual void WriteComment(const FString& Comment) override;
  62. virtual void WriteProperty(const FStructSerializerState& State, int32 ArrayIndex = 0) override;
  63. private:
  64. struct StackItem
  65. {
  66. enum {STYPE_DICTIONARY, STYPE_LIST} Kind;
  67. FString Name;
  68. CefRefPtr<CefDictionaryValue> DictionaryValue;
  69. CefRefPtr<CefListValue> ListValue;
  70. StackItem(const FString& InName, CefRefPtr<CefDictionaryValue> InDictionary)
  71. : Kind(STYPE_DICTIONARY)
  72. , Name(InName)
  73. , DictionaryValue(InDictionary)
  74. , ListValue()
  75. {}
  76. StackItem(const FString& InName, CefRefPtr<CefListValue> InList)
  77. : Kind(STYPE_LIST)
  78. , Name(InName)
  79. , DictionaryValue()
  80. , ListValue(InList)
  81. {}
  82. };
  83. TSharedPtr<FCEFInterfaceJSScripting> Scripting;
  84. TArray<StackItem> Stack;
  85. CefRefPtr<CefDictionaryValue> Result;
  86. void AddNull(const FStructSerializerState& State);
  87. void Add(const FStructSerializerState& State, bool Value);
  88. void Add(const FStructSerializerState& State, int32 Value);
  89. void Add(const FStructSerializerState& State, double Value);
  90. void Add(const FStructSerializerState& State, FString Value);
  91. void Add(const FStructSerializerState& State, UObject* Value);
  92. };
  93. #endif