diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-09-17 15:25:23 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-09-17 15:25:23 -0700 |
commit | 39bfe122b4867601051c56562a5ab9cf6be644ad (patch) | |
tree | 73ea2387759b2ba2a80ab344da69dc063fc69172 /fpdfsdk/include | |
parent | 4babdcf9c7abc9edefb179e5ed23db8e7a5840f7 (diff) | |
download | pdfium-39bfe122b4867601051c56562a5ab9cf6be644ad.tar.xz |
Merge to XFA: Ensure functions in FXJS_V8 are prefixed by FXJS_.
Manual edits:
fpdfsdk/include/javascript/JS_Define.h
fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
fpdfsdk/src/javascript/Document.cpp
fpdfsdk/src/javascript/JS_Runtime.cpp
fpdfsdk/src/jsapi/fxjs_v8.cpp
(cherry picked from commit 506df426d5d64d68e9dc27ffebcf56f6c6a1bccf)
Original Review URL: https://codereview.chromium.org/1347833002 .
(cherry picked from commit 455019ca48f60bd285e043986471f51f17c69a0d)
Original Review URL: https://codereview.chromium.org/1349783003 .
(cherry picked from commit 1af240cc45480520b447be767686e73a29c48f9e)
Original Review URL: https://codereview.chromium.org/1348693003 .
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1356563003 .
Diffstat (limited to 'fpdfsdk/include')
-rw-r--r-- | fpdfsdk/include/javascript/JS_Define.h | 163 | ||||
-rw-r--r-- | fpdfsdk/include/javascript/JS_Runtime.h | 2 | ||||
-rw-r--r-- | fpdfsdk/include/javascript/JS_Value.h | 35 | ||||
-rw-r--r-- | fpdfsdk/include/jsapi/fxjs_v8.h | 318 |
4 files changed, 263 insertions, 255 deletions
diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h index 7cade587b5..1addca5cec 100644 --- a/fpdfsdk/include/javascript/JS_Define.h +++ b/fpdfsdk/include/javascript/JS_Define.h @@ -83,12 +83,12 @@ void JSPropGetter(const char* prop_name_string, IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_PropValue value(isolate); value.StartGetting(); - CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, value, sError)) { - JS_Error(isolate, - JSFormatErrorString(class_name_string, prop_name_string, sError)); + FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, + sError)); return; } info.GetReturnValue().Set((v8::Local<v8::Value>)value); @@ -104,14 +104,14 @@ void JSPropSetter(const char* prop_name_string, v8::Isolate* isolate = info.GetIsolate(); IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_PropValue propValue(CJS_Value(isolate, value, VT_unknown)); + CJS_PropValue propValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); propValue.StartSetting(); - CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, propValue, sError)) { - JS_Error(isolate, - JSFormatErrorString(class_name_string, prop_name_string, sError)); + FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, + sError)); } } @@ -145,15 +145,15 @@ void JSMethod(const char* method_name_string, IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Parameters parameters; for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { - parameters.push_back(CJS_Value(isolate, info[i], VT_unknown)); + parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); } CJS_Value valueRes(isolate); - CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, parameters, valueRes, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, - sError)); + FXJS_Error(isolate, JSFormatErrorString(class_name_string, + method_name_string, sError)); return; } info.GetReturnValue().Set(valueRes.ToV8Value()); @@ -186,36 +186,36 @@ void JSMethod(const char* method_name_string, static JSMethodSpec JS_Class_Methods[]; \ static const wchar_t* m_pClassName -#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ - const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ - void js_class_name::JSConstructor(IFXJS_Context* cc, \ - v8::Local<v8::Object> obj, \ - v8::Local<v8::Object> global) { \ - CJS_Object* pObj = new js_class_name(obj); \ - pObj->SetEmbedObject(new class_alternate(pObj)); \ - JS_SetPrivate(NULL, obj, (void*)pObj); \ - pObj->InitInstance(cc); \ - } \ - \ - void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ - js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ - pObj->ExitInstance(); \ - delete pObj; \ - } \ - \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ - FXJSOBJTYPE eObjType) { \ - int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, JSConstructor, JSDestructor); \ - for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ - JS_DefineObjProperty(pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ - JS_Class_Properties[i].pPropGet, \ - JS_Class_Properties[i].pPropPut); \ - } \ - for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ - JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ - JS_Class_Methods[i].pMethodCall); \ - } \ +#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ + const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ + void js_class_name::JSConstructor(IFXJS_Context* cc, \ + v8::Local<v8::Object> obj, \ + v8::Local<v8::Object> global) { \ + CJS_Object* pObj = new js_class_name(obj); \ + pObj->SetEmbedObject(new class_alternate(pObj)); \ + FXJS_SetPrivate(NULL, obj, (void*)pObj); \ + pObj->InitInstance(cc); \ + } \ + \ + void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ + js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ + pObj->ExitInstance(); \ + delete pObj; \ + } \ + \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ + FXJSOBJTYPE eObjType) { \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ + for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ + FXJS_DefineObjProperty( \ + pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ + JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ + } \ + for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ + FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ + JS_Class_Methods[i].pMethodCall); \ + } \ } #define IMPLEMENT_JS_CLASS(js_class_name, class_name) \ @@ -229,19 +229,19 @@ void JSMethod(const char* method_name_string, static JSConstSpec JS_Class_Consts[]; \ static const wchar_t* m_pClassName -#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ - const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ - FXJSOBJTYPE eObjType) { \ - int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, NULL, NULL); \ - for (int i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \ - JS_DefineObjConst( \ - pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ - JS_Class_Consts[i].t == 0 \ - ? JS_NewNumber(pIsolate, JS_Class_Consts[i].number) \ - : JS_NewString(pIsolate, JS_Class_Consts[i].string)); \ - } \ +#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ + const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ + FXJSOBJTYPE eObjType) { \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, NULL, NULL); \ + for (int i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \ + FXJS_DefineObjConst( \ + pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ + JS_Class_Consts[i].t == 0 \ + ? FXJS_NewNumber(pIsolate, JS_Class_Consts[i].number) \ + : FXJS_NewString(pIsolate, JS_Class_Consts[i].string)); \ + } \ } /* ===================================== SPECIAL JS CLASS @@ -256,7 +256,7 @@ void JSSpecialPropQuery(const char*, CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); CJS_Object* pJSObj = - reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder())); + reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); info.GetReturnValue().Set(bRet ? 4 : 0); @@ -271,7 +271,7 @@ void JSSpecialPropGet(const char* class_name, IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Object* pJSObj = - reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder())); + reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = @@ -280,7 +280,7 @@ void JSSpecialPropGet(const char* class_name, CJS_PropValue value(isolate); value.StartGetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); + FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); return; } info.GetReturnValue().Set((v8::Local<v8::Value>)value); @@ -296,16 +296,16 @@ void JSSpecialPropPut(const char* class_name, IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Object* pJSObj = - reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder())); + reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); CFX_WideString sError; - CJS_PropValue PropValue(CJS_Value(isolate, value, VT_unknown)); + CJS_PropValue PropValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); PropValue.StartSetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); + FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); } } @@ -318,7 +318,7 @@ void JSSpecialPropDel(const char* class_name, IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Object* pJSObj = - reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder())); + reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = @@ -327,7 +327,7 @@ void JSSpecialPropDel(const char* class_name, if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { CFX_ByteString cbName; cbName.Format("%s.%s", class_name, "DelProperty"); - // Probably a missing call to JS_Error(). + // Probably a missing call to JSFX_Error(). } } @@ -380,12 +380,12 @@ void JSSpecialPropDel(const char* class_name, v8::Local<v8::Object> global) { \ CJS_Object* pObj = new js_class_name(obj); \ pObj->SetEmbedObject(new class_alternate(pObj)); \ - JS_SetPrivate(NULL, obj, (void*)pObj); \ + FXJS_SetPrivate(NULL, obj, (void*)pObj); \ pObj->InitInstance(cc); \ } \ \ void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ - js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ + js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(NULL, obj); \ ASSERT(pObj != NULL); \ pObj->ExitInstance(); \ delete pObj; \ @@ -393,19 +393,19 @@ void JSSpecialPropDel(const char* class_name, \ void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ FXJSOBJTYPE eObjType) { \ - int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ - eObjType, JSConstructor, JSDestructor); \ + int nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ - JS_DefineObjProperty(pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ - JS_Class_Properties[i].pPropGet, \ - JS_Class_Properties[i].pPropPut); \ + FXJS_DefineObjProperty( \ + pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ + JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut); \ } \ \ for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ - JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ - JS_Class_Methods[i].pMethodCall); \ + FXJS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ + JS_Class_Methods[i].pMethodCall); \ } \ - JS_DefineObjAllProperties( \ + FXJS_DefineObjAllProperties( \ pIsolate, nObjDefnID, \ js_class_name::queryprop_##js_class_name##_static, \ js_class_name::getprop_##js_class_name##_static, \ @@ -425,12 +425,12 @@ void JSGlobalFunc(const char* func_name_string, IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Parameters parameters; for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { - parameters.push_back(CJS_Value(isolate, info[i], VT_unknown)); + parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); } CJS_Value valueRes(isolate); CFX_WideString sError; if (!(*F)(pRuntimeContext, parameters, valueRes, sError)) { - JS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); + FXJS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); return; } info.GetReturnValue().Set(valueRes.ToV8Value()); @@ -453,14 +453,15 @@ void JSGlobalFunc(const char* func_name_string, #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() -#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ - void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ - for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ - JS_DefineGlobalMethod(pIsolate, js_class_name::global_methods[i].pName, \ - js_class_name::global_methods[i].pMethodCall); \ - } \ +#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ + void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ + for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ + FXJS_DefineGlobalMethod(pIsolate, \ + js_class_name::global_methods[i].pName, \ + js_class_name::global_methods[i].pMethodCall); \ + } \ } -FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p); +CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p); #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ diff --git a/fpdfsdk/include/javascript/JS_Runtime.h b/fpdfsdk/include/javascript/JS_Runtime.h index f0285b271c..b53e50e6ce 100644 --- a/fpdfsdk/include/javascript/JS_Runtime.h +++ b/fpdfsdk/include/javascript/JS_Runtime.h @@ -64,7 +64,7 @@ class CJS_Runtime : public IFXJS_Runtime { CJS_FieldEvent* m_pFieldEventPath; v8::Isolate* m_isolate; bool m_isolateManaged; - nonstd::unique_ptr<JS_ArrayBufferAllocator> m_pArrayBufferAllocator; + nonstd::unique_ptr<FXJS_ArrayBufferAllocator> m_pArrayBufferAllocator; v8::Global<v8::Context> m_context; }; diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h index 771214d968..384e772572 100644 --- a/fpdfsdk/include/javascript/JS_Value.h +++ b/fpdfsdk/include/javascript/JS_Value.h @@ -17,8 +17,20 @@ class CJS_Object; class CJS_Value { public: + enum Type { + VT_unknown, + VT_string, + VT_number, + VT_boolean, + VT_date, + VT_object, + VT_fxobject, + VT_null, + VT_undefined + }; + CJS_Value(v8::Isolate* isolate); - CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue, FXJSVALUETYPE t); + CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue, Type t); CJS_Value(v8::Isolate* isolate, const int& iValue); CJS_Value(v8::Isolate* isolate, const double& dValue); CJS_Value(v8::Isolate* isolate, const float& fValue); @@ -33,10 +45,11 @@ class CJS_Value { ~CJS_Value(); void SetNull(); - void Attach(v8::Local<v8::Value> pValue, FXJSVALUETYPE t); + void Attach(v8::Local<v8::Value> pValue, Type t); void Attach(CJS_Value* pValue); void Detach(); + Type GetType() const; int ToInt() const; bool ToBool() const; double ToDouble() const; @@ -63,16 +76,14 @@ class CJS_Value { FX_BOOL IsArrayObject() const; FX_BOOL IsDateObject() const; - FXJSVALUETYPE GetType() const; - FX_BOOL ConvertToArray(CJS_Array&) const; FX_BOOL ConvertToDate(CJS_Date&) const; v8::Isolate* GetIsolate() { return m_isolate; } protected: + Type m_eType; v8::Local<v8::Value> m_pValue; - FXJSVALUETYPE m_eType; v8::Isolate* m_isolate; }; @@ -190,4 +201,18 @@ class CJS_Date { v8::Isolate* m_isolate; }; +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_JAVASCRIPT_JS_VALUE_H_ diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h index 6e4fc6f7a7..3499bfbfea 100644 --- a/fpdfsdk/include/jsapi/fxjs_v8.h +++ b/fpdfsdk/include/jsapi/fxjs_v8.h @@ -14,20 +14,8 @@ #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 + FXJS_DYNAMIC = 0, + FXJS_STATIC = 1, }; struct FXJSErr { @@ -46,20 +34,28 @@ extern const wchar_t kFXJSValueNameNull[]; extern const wchar_t kFXJSValueNameUndefined[]; // FXJS_V8 places no interpretation on these two classes; it merely -// passes them on to the caller-provided LP_CONSTRUCTORs. +// passes them on to the caller-provided FXJS_CONSTRUCTORs. class IFXJS_Context; class IFXJS_Runtime; -class JS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { +class FXJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { void* Allocate(size_t length) override; void* AllocateUninitialized(size_t length) override; void Free(void* data, size_t length) override; }; -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); +using FXJS_CONSTRUCTOR = void (*)(IFXJS_Context* cc, + v8::Local<v8::Object> obj, + v8::Local<v8::Object> global); +using FXJS_DESTRUCTOR = void (*)(v8::Local<v8::Object> obj); + +// Call before making FXJS_PrepareIsolate call. +void FXJS_Initialize(unsigned int embedderDataSlot); +void FXJS_Release(); + +// Call before making FXJS_Define* calls. Resources allocated here are cleared +// as part of FXJS_ReleaseRuntime(). +void FXJS_PrepareIsolate(v8::Isolate* pIsolate); // Call before making JS_PrepareIsolate call. void JS_Initialize(unsigned int embedderDataSlot); @@ -70,156 +66,142 @@ void JS_Release(); void JS_PrepareIsolate(v8::Isolate* pIsolate); // 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 FXJS_DefineObj(v8::Isolate* pIsolate, + const wchar_t* sObjName, + FXJSOBJTYPE eObjType, + FXJS_CONSTRUCTOR pConstructor, + FXJS_DESTRUCTOR pDestructor); + +void FXJS_DefineObjMethod(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); - -// Called after JS_Define* calls made. -void JS_InitializeRuntime(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); - -// Called after JS_InitializeRuntime call made. -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, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall); +void FXJS_DefineObjProperty(v8::Isolate* pIsolate, + int nObjDefnID, + const wchar_t* sPropName, + v8::AccessorGetterCallback pPropGet, + v8::AccessorSetterCallback pPropPut); +void FXJS_DefineObjAllProperties(v8::Isolate* pIsolate, + int nObjDefnID, + v8::NamedPropertyQueryCallback pPropQurey, + v8::NamedPropertyGetterCallback pPropGet, + v8::NamedPropertySetterCallback pPropPut, + v8::NamedPropertyDeleterCallback pPropDel); +void FXJS_DefineObjConst(v8::Isolate* pIsolate, + int nObjDefnID, + const wchar_t* sConstName, + v8::Local<v8::Value> pDefault); +void FXJS_DefineGlobalMethod(v8::Isolate* pIsolate, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall); +void FXJS_DefineGlobalConst(v8::Isolate* pIsolate, + const wchar_t* sConstName, + v8::Local<v8::Value> pDefault); + +// Called after FXJS_Define* calls made. +void FXJS_InitializeRuntime(v8::Isolate* pIsolate, + IFXJS_Runtime* pFXRuntime, + IFXJS_Context* context, + v8::Global<v8::Context>& v8PersistentContext); +void FXJS_ReleaseRuntime(v8::Isolate* pIsolate, + v8::Global<v8::Context>& v8PersistentContext); + +// Called after FXJS_InitializeRuntime call made. +int FXJS_Execute(v8::Isolate* pIsolate, + IFXJS_Context* pJSContext, + const wchar_t* script, + long length, + FXJSErr* perror); + +v8::Local<v8::Object> FXJS_NewFxDynamicObj(v8::Isolate* pIsolate, + IFXJS_Context* pJSContext, + int nObjDefnID); +v8::Local<v8::Object> FXJS_GetThisObj(v8::Isolate* pIsolate); +int FXJS_GetObjDefnID(v8::Local<v8::Object> pObj); +int FXJS_GetObjDefnID(v8::Isolate* pIsolate, const wchar_t* pObjName); +v8::Isolate* FXJS_GetRuntime(v8::Local<v8::Object> pObj); +const wchar_t* FXJS_GetTypeof(v8::Local<v8::Value> pObj); + +void FXJS_SetPrivate(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + void* p); +void FXJS_SetPrivate(v8::Local<v8::Object> pObj, void* p); +void* FXJS_GetPrivate(v8::Isolate* pIsolate, v8::Local<v8::Object> pObj); +void* FXJS_GetPrivate(v8::Local<v8::Object> pObj); +void FXJS_FreePrivate(void* p); +void FXJS_FreePrivate(v8::Local<v8::Object> pObj); + +void FXJS_Error(v8::Isolate* isolate, const CFX_WideString& message); +v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate, + const wchar_t* PropertyName, + int Len = -1); + +v8::Local<v8::Value> FXJS_GetObjectElement(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName); +v8::Local<v8::Array> FXJS_GetObjectElementNames(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj); + +v8::Local<v8::Value> FXJS_GetArrayElement(v8::Isolate* pIsolate, + v8::Local<v8::Array> pArray, + unsigned index); +unsigned FXJS_GetArrayLength(v8::Local<v8::Array> pArray); + +void FXJS_PutObjectString(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + const wchar_t* sValue); +void FXJS_PutObjectNumber(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + int nValue); +void FXJS_PutObjectNumber(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + float fValue); +void FXJS_PutObjectNumber(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + double dValue); +void FXJS_PutObjectBoolean(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + bool bValue); +void FXJS_PutObjectObject(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj, + const wchar_t* PropertyName, + v8::Local<v8::Object> pPut); +void FXJS_PutObjectNull(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, + const wchar_t* PropertyName); +unsigned FXJS_PutArrayElement(v8::Isolate* pIsolate, + v8::Local<v8::Array> pArray, + unsigned index, + v8::Local<v8::Value> pValue); + +v8::Local<v8::Array> FXJS_NewArray(v8::Isolate* pIsolate); +v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, int number); +v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, double number); +v8::Local<v8::Value> FXJS_NewNumber(v8::Isolate* pIsolate, float number); +v8::Local<v8::Value> FXJS_NewBoolean(v8::Isolate* pIsolate, bool b); +v8::Local<v8::Value> FXJS_NewObject(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj); +v8::Local<v8::Value> FXJS_NewObject2(v8::Isolate* pIsolate, + v8::Local<v8::Array> pObj); +v8::Local<v8::Value> FXJS_NewString(v8::Isolate* pIsolate, + const wchar_t* string); +v8::Local<v8::Value> FXJS_NewNull(); +v8::Local<v8::Value> FXJS_NewDate(v8::Isolate* pIsolate, double d); + +int FXJS_ToInt32(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue); +bool FXJS_ToBoolean(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue); +double FXJS_ToNumber(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue); +v8::Local<v8::Object> FXJS_ToObject(v8::Isolate* pIsolate, + v8::Local<v8::Value> pValue); +CFX_WideString FXJS_ToString(v8::Isolate* pIsolate, + v8::Local<v8::Value> pValue); +v8::Local<v8::Array> FXJS_ToArray(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); +void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom); #endif // FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_ |