UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WebJSScripting.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Misc/Guid.h"
7#include "WebJSFunction.h"
8#include "UObject/GCObject.h"
9
10class Error;
11
16 : public FGCObject
17{
18public:
23
24 virtual void BindUObject(const FString& Name, UObject* Object, bool bIsPermanent = true) =0;
25 virtual void UnbindUObject(const FString& Name, UObject* Object = nullptr, bool bIsPermanent = true) =0;
26
27
28 virtual void InvokeJSFunction(FGuid FunctionId, int32 ArgCount, FWebJSParam Arguments[], bool bIsError=false) =0;
29 virtual void InvokeJSErrorResult(FGuid FunctionId, const FString& Error) =0;
30
31 FString GetBindingName(const FString& Name, UObject* Object) const
32 {
33 return bJSBindingToLoweringEnabled ? Name.ToLower() : Name;
34 }
35
37 {
38 return bJSBindingToLoweringEnabled ? Property.GetName().ToLower() : Property.GetName();
39 }
40
41public:
42
43 // FGCObject API
44 virtual void AddReferencedObjects( FReferenceCollector& Collector ) override
45 {
46 // Ensure bound UObjects are not garbage collected as long as this object is valid.
47 for (auto& Binding : BoundObjects)
48 {
49 Collector.AddReferencedObject(Binding.Key);
50 }
51 }
52 virtual FString GetReferencerName() const override
53 {
54 return TEXT("FWebJSScripting");
55 }
56
57protected:
58 // Creates a reversible memory addres -> psuedo-guid mapping.
59 // This is done by xoring the address with the first 64 bits of a base guid owned by the instance.
60 // Used to identify UObjects from the render process withough exposing internal pointers.
62 {
64 if (Ptr == nullptr)
65 {
67 }
68 else
69 {
70 UPTRINT IntPtr = reinterpret_cast<UPTRINT>(Ptr);
71 if (sizeof(UPTRINT) > 4)
72 {
73 Guid[0] ^= (static_cast<uint64>(IntPtr) >> 32);
74 }
75 Guid[1] ^= IntPtr & 0xFFFFFFFF;
76 }
77 return Guid;
78 }
79
80 // In addition to reversing the mapping, it verifies that we are currently holding on to an instance of that UObject
82 {
83 UPTRINT IntPtr = 0;
84 if (sizeof(UPTRINT) > 4)
85 {
86 IntPtr = static_cast<UPTRINT>(static_cast<uint64>(Guid[0] ^ BaseGuid[0]) << 32);
87 }
88 IntPtr |= (Guid[1] ^ BaseGuid[1]) & 0xFFFFFFFF;
89
90 UObject* Result = reinterpret_cast<UObject*>(IntPtr);
91 if (BoundObjects.Contains(Result))
92 {
93 return Result;
94 }
95 else
96 {
97 return nullptr;
98 }
99 }
100
102 {
103 if (BoundObjects.Contains(Object))
104 {
105 if(!BoundObjects[Object].bIsPermanent)
106 {
107 BoundObjects[Object].Refcount++;
108 }
109 }
110 else
111 {
112 BoundObjects.Add(Object, {false, 1});
113 }
114 }
115
117 {
118 if (BoundObjects.Contains(Object))
119 {
121 if(!Binding.bIsPermanent)
122 {
124 if (Binding.Refcount <= 0)
125 {
126 BoundObjects.Remove(Object);
127 }
128 }
129 }
130 }
131
137
140
143
146
149};
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UPTRINT UPTRINT
An unsigned integer the same size as a pointer.
Definition Platform.h:1146
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Field.h:353
Definition GCObject.h:128
Definition UObjectGlobals.h:2492
Definition WebJSScripting.h:17
FString GetBindingName(const FFieldVariant &Property) const
Definition WebJSScripting.h:36
FGuid PtrToGuid(UObject *Ptr)
Definition WebJSScripting.h:61
const bool bJSBindingToLoweringEnabled
Definition WebJSScripting.h:148
FWebJSScripting(bool bInJSBindingToLoweringEnabled)
Definition WebJSScripting.h:19
FString GetBindingName(const FString &Name, UObject *Object) const
Definition WebJSScripting.h:31
TMap< FString, UObject * > PermanentUObjectsByName
Definition WebJSScripting.h:145
void RetainBinding(UObject *Object)
Definition WebJSScripting.h:101
virtual FString GetReferencerName() const override
Definition WebJSScripting.h:52
UObject * GuidToPtr(const FGuid &Guid)
Definition WebJSScripting.h:81
virtual void InvokeJSErrorResult(FGuid FunctionId, const FString &Error)=0
void ReleaseBinding(UObject *Object)
Definition WebJSScripting.h:116
virtual void InvokeJSFunction(FGuid FunctionId, int32 ArgCount, FWebJSParam Arguments[], bool bIsError=false)=0
TMap< TObjectPtr< UObject >, ObjectBinding > BoundObjects
Definition WebJSScripting.h:142
virtual void AddReferencedObjects(FReferenceCollector &Collector) override
Definition WebJSScripting.h:44
virtual void UnbindUObject(const FString &Name, UObject *Object=nullptr, bool bIsPermanent=true)=0
FGuid BaseGuid
Definition WebJSScripting.h:139
virtual void BindUObject(const FString &Name, UObject *Object, bool bIsPermanent=true)=0
Definition UnrealString.h.inl:34
Definition Object.h:95
Definition Guid.h:109
void Invalidate()
Definition Guid.h:305
Definition WebJSFunction.h:26
Definition WebJSScripting.h:133
bool bIsPermanent
Definition WebJSScripting.h:134
int32 Refcount
Definition WebJSScripting.h:135