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