14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef FXJS_FXJSE_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FXJS_FXJSE_H_ 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_string.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "v8/include/v8.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFXJSE_Arguments; 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFXJSE_Value; 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannclass CJS_Return; 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// C++ object which is retrieved from v8 object's slot. 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFXJSE_HostObject { 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public: 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann virtual ~CFXJSE_HostObject() {} 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // Small layering violation here, but we need to distinguish between the 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // two kinds of subclasses. 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann enum Type { kXFA, kFM2JS }; 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Type type() const { return type_; } 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann protected: 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann explicit CFXJSE_HostObject(Type type) { type_ = type; } 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann Type type_; 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmanntypedef CJS_Return (*FXJSE_MethodCallback)( 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const v8::FunctionCallbackInfo<v8::Value>& info, 36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& functionName); 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanntypedef void (*FXJSE_FuncCallback)(CFXJSE_Value* pThis, 38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const ByteStringView& szFuncName, 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFXJSE_Arguments& args); 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanntypedef void (*FXJSE_PropAccessor)(CFXJSE_Value* pObject, 41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const ByteStringView& szPropName, 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFXJSE_Value* pValue); 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanntypedef int32_t (*FXJSE_PropTypeGetter)(CFXJSE_Value* pObject, 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const ByteStringView& szPropName, 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bQueryIn); 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannenum FXJSE_ClassPropTypes { 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_ClassPropType_None, 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_ClassPropType_Property, 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_ClassPropType_Method 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct FXJSE_FUNCTION_DESCRIPTOR { 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* name; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_FuncCallback callbackProc; 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct FXJSE_CLASS_DESCRIPTOR { 59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const char* name; 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FXJSE_FUNCTION_DESCRIPTOR* methods; 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t methNum; 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_PropTypeGetter dynPropTypeGetter; 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_PropAccessor dynPropGetter; 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXJSE_PropAccessor dynPropSetter; 65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FXJSE_MethodCallback dynMethodCall; 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 68d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid FXJSE_ThrowMessage(const ByteStringView& utf8Message); 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // FXJS_FXJSE_H_ 71