xref: /aosp_15_r20/external/pdfium/fxjs/xfa/fxjse.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_XFA_FXJSE_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_XFA_FXJSE_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include <stdint.h>
11*3ac0a46fSAndroid Build Coastguard Worker 
12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_string.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr_exclusion.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-forward.h"
15*3ac0a46fSAndroid Build Coastguard Worker 
16*3ac0a46fSAndroid Build Coastguard Worker namespace pdfium {
17*3ac0a46fSAndroid Build Coastguard Worker namespace fxjse {
18*3ac0a46fSAndroid Build Coastguard Worker 
19*3ac0a46fSAndroid Build Coastguard Worker // These are strings by design. With ASLR, their addresses should be random, so
20*3ac0a46fSAndroid Build Coastguard Worker // it should be very unlikely for an object to accidentally have the same tag.
21*3ac0a46fSAndroid Build Coastguard Worker extern const char kFuncTag[];
22*3ac0a46fSAndroid Build Coastguard Worker extern const char kClassTag[];
23*3ac0a46fSAndroid Build Coastguard Worker 
24*3ac0a46fSAndroid Build Coastguard Worker }  // namespace fxjse
25*3ac0a46fSAndroid Build Coastguard Worker }  // namespace pdfium
26*3ac0a46fSAndroid Build Coastguard Worker 
27*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_FormCalcContext;
28*3ac0a46fSAndroid Build Coastguard Worker class CJS_Result;
29*3ac0a46fSAndroid Build Coastguard Worker class CJX_Object;
30*3ac0a46fSAndroid Build Coastguard Worker 
31*3ac0a46fSAndroid Build Coastguard Worker enum class FXJSE_ClassPropType {
32*3ac0a46fSAndroid Build Coastguard Worker   kNone,
33*3ac0a46fSAndroid Build Coastguard Worker   kProperty,
34*3ac0a46fSAndroid Build Coastguard Worker   kMethod,
35*3ac0a46fSAndroid Build Coastguard Worker };
36*3ac0a46fSAndroid Build Coastguard Worker 
37*3ac0a46fSAndroid Build Coastguard Worker // C++ object which is retrieved from v8 object's slot.
38*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_HostObject {
39*3ac0a46fSAndroid Build Coastguard Worker  public:
40*3ac0a46fSAndroid Build Coastguard Worker   static CFXJSE_HostObject* FromV8(v8::Local<v8::Value> arg);
41*3ac0a46fSAndroid Build Coastguard Worker   virtual ~CFXJSE_HostObject();
42*3ac0a46fSAndroid Build Coastguard Worker 
43*3ac0a46fSAndroid Build Coastguard Worker   // Two subclasses.
44*3ac0a46fSAndroid Build Coastguard Worker   virtual CFXJSE_FormCalcContext* AsFormCalcContext();
45*3ac0a46fSAndroid Build Coastguard Worker   virtual CJX_Object* AsCJXObject();
46*3ac0a46fSAndroid Build Coastguard Worker 
47*3ac0a46fSAndroid Build Coastguard Worker   v8::Local<v8::Object> NewBoundV8Object(v8::Isolate* pIsolate,
48*3ac0a46fSAndroid Build Coastguard Worker                                          v8::Local<v8::FunctionTemplate> tmpl);
49*3ac0a46fSAndroid Build Coastguard Worker 
50*3ac0a46fSAndroid Build Coastguard Worker  protected:
51*3ac0a46fSAndroid Build Coastguard Worker   CFXJSE_HostObject();
52*3ac0a46fSAndroid Build Coastguard Worker };
53*3ac0a46fSAndroid Build Coastguard Worker 
54*3ac0a46fSAndroid Build Coastguard Worker using FXJSE_MethodCallback =
55*3ac0a46fSAndroid Build Coastguard Worker     CJS_Result (*)(const v8::FunctionCallbackInfo<v8::Value>& info,
56*3ac0a46fSAndroid Build Coastguard Worker                    const WideString& functionName);
57*3ac0a46fSAndroid Build Coastguard Worker using FXJSE_FuncCallback =
58*3ac0a46fSAndroid Build Coastguard Worker     void (*)(CFXJSE_HostObject* pThis,
59*3ac0a46fSAndroid Build Coastguard Worker              const v8::FunctionCallbackInfo<v8::Value>& info);
60*3ac0a46fSAndroid Build Coastguard Worker using FXJSE_PropGetter = v8::Local<v8::Value> (*)(v8::Isolate* pIsolate,
61*3ac0a46fSAndroid Build Coastguard Worker                                                   v8::Local<v8::Object> pObject,
62*3ac0a46fSAndroid Build Coastguard Worker                                                   ByteStringView szPropName);
63*3ac0a46fSAndroid Build Coastguard Worker using FXJSE_PropSetter = void (*)(v8::Isolate* pIsolate,
64*3ac0a46fSAndroid Build Coastguard Worker                                   v8::Local<v8::Object> pObject,
65*3ac0a46fSAndroid Build Coastguard Worker                                   ByteStringView szPropName,
66*3ac0a46fSAndroid Build Coastguard Worker                                   v8::Local<v8::Value> pValue);
67*3ac0a46fSAndroid Build Coastguard Worker using FXJSE_PropTypeGetter =
68*3ac0a46fSAndroid Build Coastguard Worker     FXJSE_ClassPropType (*)(v8::Isolate* pIsolate,
69*3ac0a46fSAndroid Build Coastguard Worker                             v8::Local<v8::Object> pObject,
70*3ac0a46fSAndroid Build Coastguard Worker                             ByteStringView szPropName,
71*3ac0a46fSAndroid Build Coastguard Worker                             bool bQueryIn);
72*3ac0a46fSAndroid Build Coastguard Worker 
73*3ac0a46fSAndroid Build Coastguard Worker struct FXJSE_FUNCTION_DESCRIPTOR {
74*3ac0a46fSAndroid Build Coastguard Worker   const char* tag;  // `pdfium::fxjse::kFuncTag` always.
75*3ac0a46fSAndroid Build Coastguard Worker   const char* name;
76*3ac0a46fSAndroid Build Coastguard Worker   FXJSE_FuncCallback callbackProc;
77*3ac0a46fSAndroid Build Coastguard Worker };
78*3ac0a46fSAndroid Build Coastguard Worker 
79*3ac0a46fSAndroid Build Coastguard Worker struct FXJSE_CLASS_DESCRIPTOR {
80*3ac0a46fSAndroid Build Coastguard Worker   const char* tag;  // `pdfium::fxjse::kClassTag` always.
81*3ac0a46fSAndroid Build Coastguard Worker   const char* name;
82*3ac0a46fSAndroid Build Coastguard Worker   UNOWNED_PTR_EXCLUSION const FXJSE_FUNCTION_DESCRIPTOR* methods;
83*3ac0a46fSAndroid Build Coastguard Worker   int32_t methNum;
84*3ac0a46fSAndroid Build Coastguard Worker   FXJSE_PropTypeGetter dynPropTypeGetter;
85*3ac0a46fSAndroid Build Coastguard Worker   FXJSE_PropGetter dynPropGetter;
86*3ac0a46fSAndroid Build Coastguard Worker   FXJSE_PropSetter dynPropSetter;
87*3ac0a46fSAndroid Build Coastguard Worker   FXJSE_MethodCallback dynMethodCall;
88*3ac0a46fSAndroid Build Coastguard Worker };
89*3ac0a46fSAndroid Build Coastguard Worker 
90*3ac0a46fSAndroid Build Coastguard Worker extern const FXJSE_CLASS_DESCRIPTOR kGlobalClassDescriptor;
91*3ac0a46fSAndroid Build Coastguard Worker extern const FXJSE_CLASS_DESCRIPTOR kNormalClassDescriptor;
92*3ac0a46fSAndroid Build Coastguard Worker extern const FXJSE_CLASS_DESCRIPTOR kVariablesClassDescriptor;
93*3ac0a46fSAndroid Build Coastguard Worker extern const FXJSE_CLASS_DESCRIPTOR kFormCalcDescriptor;
94*3ac0a46fSAndroid Build Coastguard Worker 
95*3ac0a46fSAndroid Build Coastguard Worker void FXJSE_ThrowMessage(v8::Isolate* pIsolate, ByteStringView utf8Message);
96*3ac0a46fSAndroid Build Coastguard Worker 
97*3ac0a46fSAndroid Build Coastguard Worker #endif  // FXJS_XFA_FXJSE_H_
98