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