summaryrefslogtreecommitdiff
path: root/fpdfsdk/include/jsapi/fxjs_v8.h
blob: 419568673147920c6c9c1ba21df4a248a7aa293e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

// PDFium wrapper around V8 APIs. PDFium code should include this file rather
// than including V8 headers directly.

#ifndef FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_
#define FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_

#include <v8.h>
#include "../../../core/include/fxcrt/fx_string.h"  // For CFX_WideString

enum FXJSOBJTYPE {
  JS_DYNAMIC = 0,
  JS_STATIC = 1,
};

enum FXJSVALUETYPE {
  VT_unknown,
  VT_string,
  VT_number,
  VT_boolean,
  VT_date,
  VT_object,
  VT_fxobject,
  VT_null,
  VT_undefined
};

struct FXJSErr {
  const wchar_t* message;
  const wchar_t* srcline;
  unsigned linnum;
};

extern const wchar_t kFXJSValueNameString[];
extern const wchar_t kFXJSValueNameNumber[];
extern const wchar_t kFXJSValueNameBoolean[];
extern const wchar_t kFXJSValueNameDate[];
extern const wchar_t kFXJSValueNameObject[];
extern const wchar_t kFXJSValueNameFxobj[];
extern const wchar_t kFXJSValueNameNull[];
extern const wchar_t kFXJSValueNameUndefined[];

class IFXJS_Context;
class IFXJS_Runtime;

typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc,
                               v8::Local<v8::Object> obj,
                               v8::Local<v8::Object> global);
typedef void (*LP_DESTRUCTOR)(v8::Local<v8::Object> obj);

// Always returns a valid, newly-created objDefnID.
int JS_DefineObj(v8::Isolate* pIsolate,
                 const wchar_t* sObjName,
                 FXJSOBJTYPE eObjType,
                 LP_CONSTRUCTOR pConstructor,
                 LP_DESTRUCTOR pDestructor);

void JS_DefineObjMethod(v8::Isolate* pIsolate,
                        int nObjDefnID,
                        const wchar_t* sMethodName,
                        v8::FunctionCallback pMethodCall);
void JS_DefineObjProperty(v8::Isolate* pIsolate,
                          int nObjDefnID,
                          const wchar_t* sPropName,
                          v8::AccessorGetterCallback pPropGet,
                          v8::AccessorSetterCallback pPropPut);
void JS_DefineObjAllProperties(v8::Isolate* pIsolate,
                               int nObjDefnID,
                               v8::NamedPropertyQueryCallback pPropQurey,
                               v8::NamedPropertyGetterCallback pPropGet,
                               v8::NamedPropertySetterCallback pPropPut,
                               v8::NamedPropertyDeleterCallback pPropDel);
void JS_DefineObjConst(v8::Isolate* pIsolate,
                       int nObjDefnID,
                       const wchar_t* sConstName,
                       v8::Local<v8::Value> pDefault);
void JS_DefineGlobalMethod(v8::Isolate* pIsolate,
                           const wchar_t* sMethodName,
                           v8::FunctionCallback pMethodCall);
void JS_DefineGlobalConst(v8::Isolate* pIsolate,
                          const wchar_t* sConstName,
                          v8::Local<v8::Value> pDefault);

void JS_InitialRuntime(v8::Isolate* pIsolate,
                       IFXJS_Runtime* pFXRuntime,
                       IFXJS_Context* context,
                       v8::Global<v8::Context>& v8PersistentContext);
void JS_ReleaseRuntime(v8::Isolate* pIsolate,
                       v8::Global<v8::Context>& v8PersistentContext);
void JS_Initial(unsigned int embedderDataSlot);
void JS_Release();
int JS_Execute(v8::Isolate* pIsolate,
               IFXJS_Context* pJSContext,
               const wchar_t* script,
               long length,
               FXJSErr* perror);
v8::Local<v8::Object> JS_NewFxDynamicObj(v8::Isolate* pIsolate,
                                         IFXJS_Context* pJSContext,
                                         int nObjDefnID);
v8::Local<v8::Object> JS_GetStaticObj(v8::Isolate* pIsolate, int nObjDefnID);
v8::Local<v8::Object> JS_GetThisObj(v8::Isolate* pIsolate);
int JS_GetObjDefnID(v8::Local<v8::Object> pObj);
v8::Isolate* JS_GetRuntime(v8::Local<v8::Object> pObj);
int JS_GetObjDefnID(v8::Isolate* pIsolate, const wchar_t* pObjName);
void JS_Error(v8::Isolate* isolate, const CFX_WideString& message);
unsigned JS_CalcHash(const wchar_t* main, unsigned nLen);
unsigned JS_CalcHash(const wchar_t* main);
const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj);
void JS_SetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj, void* p);
void* JS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj);
void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p);
void* JS_GetPrivate(v8::Local<v8::Object> pObj);
void JS_FreePrivate(void* p);
void JS_FreePrivate(v8::Local<v8::Object> pObj);
v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj);
v8::Local<v8::Value> JS_GetObjectElement(v8::Isolate* pIsolate,
                                         v8::Local<v8::Object> pObj,
                                         const wchar_t* PropertyName);
v8::Local<v8::Array> JS_GetObjectElementNames(v8::Isolate* pIsolate,
                                              v8::Local<v8::Object> pObj);
void JS_PutObjectString(v8::Isolate* pIsolate,
                        v8::Local<v8::Object> pObj,
                        const wchar_t* PropertyName,
                        const wchar_t* sValue);
void JS_PutObjectNumber(v8::Isolate* pIsolate,
                        v8::Local<v8::Object> pObj,
                        const wchar_t* PropertyName,
                        int nValue);
void JS_PutObjectNumber(v8::Isolate* pIsolate,
                        v8::Local<v8::Object> pObj,
                        const wchar_t* PropertyName,
                        float fValue);
void JS_PutObjectNumber(v8::Isolate* pIsolate,
                        v8::Local<v8::Object> pObj,
                        const wchar_t* PropertyName,
                        double dValue);
void JS_PutObjectBoolean(v8::Isolate* pIsolate,
                         v8::Local<v8::Object> pObj,
                         const wchar_t* PropertyName,
                         bool bValue);
void JS_PutObjectObject(v8::Isolate* pIsolate,
                        v8::Local<v8::Object> pObj,
                        const wchar_t* PropertyName,
                        v8::Local<v8::Object> pPut);
void JS_PutObjectNull(v8::Isolate* pIsolate,
                      v8::Local<v8::Object> pObj,
                      const wchar_t* PropertyName);
unsigned JS_PutArrayElement(v8::Isolate* pIsolate,
                            v8::Local<v8::Array> pArray,
                            unsigned index,
                            v8::Local<v8::Value> pValue,
                            FXJSVALUETYPE eType);
v8::Local<v8::Value> JS_GetArrayElement(v8::Isolate* pIsolate,
                                        v8::Local<v8::Array> pArray,
                                        unsigned index);
unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray);
v8::Local<v8::Value> JS_GetListValue(v8::Isolate* pIsolate,
                                     v8::Local<v8::Value> pList,
                                     int index);

v8::Local<v8::Array> JS_NewArray(v8::Isolate* pIsolate);
v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, int number);
v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, double number);
v8::Local<v8::Value> JS_NewNumber(v8::Isolate* pIsolate, float number);
v8::Local<v8::Value> JS_NewBoolean(v8::Isolate* pIsolate, bool b);
v8::Local<v8::Value> JS_NewObject(v8::Isolate* pIsolate,
                                  v8::Local<v8::Object> pObj);
v8::Local<v8::Value> JS_NewObject2(v8::Isolate* pIsolate,
                                   v8::Local<v8::Array> pObj);
v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate, const wchar_t* string);
v8::Local<v8::Value> JS_NewString(v8::Isolate* pIsolate,
                                  const wchar_t* string,
                                  unsigned nLen);
v8::Local<v8::Value> JS_NewNull();
v8::Local<v8::Value> JS_NewDate(v8::Isolate* pIsolate, double d);
v8::Local<v8::Value> JS_NewValue(v8::Isolate* pIsolate);

int JS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
bool JS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
double JS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
v8::Local<v8::Object> JS_ToObject(v8::Isolate* pIsolate,
                                  v8::Local<v8::Value> pValue);
CFX_WideString JS_ToString(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
v8::Local<v8::Array> JS_ToArray(v8::Isolate* pIsolate,
                                v8::Local<v8::Value> pValue);
void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom);

double JS_GetDateTime();
int JS_GetYearFromTime(double dt);
int JS_GetMonthFromTime(double dt);
int JS_GetDayFromTime(double dt);
int JS_GetHourFromTime(double dt);
int JS_GetMinFromTime(double dt);
int JS_GetSecFromTime(double dt);
double JS_DateParse(const wchar_t* string);
double JS_MakeDay(int nYear, int nMonth, int nDay);
double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
double JS_MakeDate(double day, double time);
bool JS_PortIsNan(double d);
double JS_LocalTime(double d);

#endif  // FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_