1There are two separate wrappers for V8 here. One is called FXJS, and 2it is used by the non-XFA code. The other is called FXJSE, and it is 3used only by the XFA code. Additionally FXJSE may request services 4from FXJS to bridge the two. 5 6Both the FXJS and FXJSE binding code needs to be replaced by something 7saner, perhaps Gin or perhaps some IDL. See 8 https://bugs.chromium.org/p/pdfium/issues/detail?id=716 9for progress on the issue. 10 11FXJS binds objects by sticking a pointer to a CFXJS_PerObjectData in 12the V8 object's internal slot. FXJSE binds objects by sticking a 13pointer to either an actual v8 function object or a CFXJSE_HostObject 14in the V8 object's internal slot, depending upon whether the object 15represents (in some notion) a "class" or an "instance". Also, V8 objects 16bound in one library may unexpectedly arrive at the other given a script 17that's trying to mess with us. 18 19To distinguish these cases, we use two internal slots for all bound 20objects, regardless of the FXJS/FXJSE distinction. Slot 0 is the 21tag and contains either: 22 kPerObjectDataTag for FXJS objects, or 23 g_FXJSEHostObjectTag for FXJSE Host objects, or 24 g_FXJSEProxyObjectTag for a global proxy object under FXJSE, or 25 One of 4 specific FXJSE_CLASS_DESCRIPTOR globals for FXJSE classes: 26 GlobalClassDescriptor 27 NormalClassDescriptor 28 VariablesClassDescriptor 29 formcalc_fm2js_descriptor 30 31Slot 1's contents are determined by these tags: 32 kPerObjectDataTag means an aligned pointer to CFXJS_PerObjectData. 33 g_FXJSEHostObjectTag means an aligned pointer to CFXJSE_HostObject. 34 g_FXJSEProxyObjectTag means nullptr, and to check the prototype instead. 35 A FXJSE_CLASS_DESCRIPTOR pointer means to expect an actual v8 function 36 object (or a string naming that function), and not an aligned pointer. 37 38Because PDFium uses V8 for various unrelated purposes, there may be up to 39four v8::Contexts (JS Global Objects) associated with each document. One is 40used by FXJS and holds objects as described by the js_api_reference.pdf 41specification. The others are used by FXJSE. 42