You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
2.0 KiB
42 lines
2.0 KiB
There are two separate wrappers for V8 here. One is called FXJS, and
|
|
it is used by the non-XFA code. The other is called FXJSE, and it is
|
|
used only by the XFA code. Additionally FXJSE may request services
|
|
from FXJS to bridge the two.
|
|
|
|
Both the FXJS and FXJSE binding code needs to be replaced by something
|
|
saner, perhaps Gin or perhaps some IDL. See
|
|
https://bugs.chromium.org/p/pdfium/issues/detail?id=716
|
|
for progress on the issue.
|
|
|
|
FXJS binds objects by sticking a pointer to a CFXJS_PerObjectData in
|
|
the V8 object's internal slot. FXJSE binds objects by sticking a
|
|
pointer to either an actual v8 function object or a CFXJSE_HostObject
|
|
in the V8 object's internal slot, depending upon whether the object
|
|
represents (in some notion) a "class" or an "instance". Also, V8 objects
|
|
bound in one library may unexpectedly arrive at the other given a script
|
|
that's trying to mess with us.
|
|
|
|
To distinguish these cases, we use two internal slots for all bound
|
|
objects, regardless of the FXJS/FXJSE distinction. Slot 0 is the
|
|
tag and contains either:
|
|
kPerObjectDataTag for FXJS objects, or
|
|
g_FXJSEHostObjectTag for FXJSE Host objects, or
|
|
g_FXJSEProxyObjectTag for a global proxy object under FXJSE, or
|
|
One of 4 specific FXJSE_CLASS_DESCRIPTOR globals for FXJSE classes:
|
|
GlobalClassDescriptor
|
|
NormalClassDescriptor
|
|
VariablesClassDescriptor
|
|
formcalc_fm2js_descriptor
|
|
|
|
Slot 1's contents are determined by these tags:
|
|
kPerObjectDataTag means an aligned pointer to CFXJS_PerObjectData.
|
|
g_FXJSEHostObjectTag means an aligned pointer to CFXJSE_HostObject.
|
|
g_FXJSEProxyObjectTag means nullptr, and to check the prototype instead.
|
|
A FXJSE_CLASS_DESCRIPTOR pointer means to expect an actual v8 function
|
|
object (or a string naming that function), and not an aligned pointer.
|
|
|
|
Because PDFium uses V8 for various unrelated purposes, there may be up to
|
|
four v8::Contexts (JS Global Objects) associated with each document. One is
|
|
used by FXJS and holds objects as described by the js_api_reference.pdf
|
|
specification. The others are used by FXJSE.
|