summaryrefslogtreecommitdiff
path: root/fpdfsdk/src/javascript/global.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/src/javascript/global.cpp')
-rw-r--r--fpdfsdk/src/javascript/global.cpp159
1 files changed, 78 insertions, 81 deletions
diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp
index e75dbd5585..af517c0065 100644
--- a/fpdfsdk/src/javascript/global.cpp
+++ b/fpdfsdk/src/javascript/global.cpp
@@ -4,6 +4,7 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+#include "../../../core/include/fxcrt/fx_ext.h"
#include "../../include/javascript/IJavaScript.h"
#include "../../include/javascript/JS_Context.h"
#include "../../include/javascript/JS_Define.h"
@@ -52,6 +53,10 @@ const unsigned int JSCONST_nNullHash = CHash<'n', 'u', 'l', 'l'>::value;
const unsigned int JSCONST_nUndefHash =
CHash<'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e', 'd'>::value;
+static unsigned JS_CalcHash(const wchar_t* main) {
+ return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main));
+}
+
#ifdef _DEBUG
class HashVerify {
public:
@@ -59,22 +64,14 @@ class HashVerify {
} g_hashVerify;
HashVerify::HashVerify() {
- ASSERT(JSCONST_nStringHash ==
- JS_CalcHash(kFXJSValueNameString, wcslen(kFXJSValueNameString)));
- ASSERT(JSCONST_nNumberHash ==
- JS_CalcHash(kFXJSValueNameNumber, wcslen(kFXJSValueNameNumber)));
- ASSERT(JSCONST_nBoolHash ==
- JS_CalcHash(kFXJSValueNameBoolean, wcslen(kFXJSValueNameBoolean)));
- ASSERT(JSCONST_nDateHash ==
- JS_CalcHash(kFXJSValueNameDate, wcslen(kFXJSValueNameDate)));
- ASSERT(JSCONST_nObjectHash ==
- JS_CalcHash(kFXJSValueNameObject, wcslen(kFXJSValueNameObject)));
- ASSERT(JSCONST_nFXobjHash ==
- JS_CalcHash(kFXJSValueNameFxobj, wcslen(kFXJSValueNameFxobj)));
- ASSERT(JSCONST_nNullHash ==
- JS_CalcHash(kFXJSValueNameNull, wcslen(kFXJSValueNameNull)));
- ASSERT(JSCONST_nUndefHash ==
- JS_CalcHash(kFXJSValueNameUndefined, wcslen(kFXJSValueNameUndefined)));
+ ASSERT(JSCONST_nStringHash == JS_CalcHash(kFXJSValueNameString));
+ ASSERT(JSCONST_nNumberHash == JS_CalcHash(kFXJSValueNameNumber));
+ ASSERT(JSCONST_nBoolHash == JS_CalcHash(kFXJSValueNameBoolean));
+ ASSERT(JSCONST_nDateHash == JS_CalcHash(kFXJSValueNameDate));
+ ASSERT(JSCONST_nObjectHash == JS_CalcHash(kFXJSValueNameObject));
+ ASSERT(JSCONST_nFXobjHash == JS_CalcHash(kFXJSValueNameFxobj));
+ ASSERT(JSCONST_nNullHash == JS_CalcHash(kFXJSValueNameNull));
+ ASSERT(JSCONST_nUndefHash == JS_CalcHash(kFXJSValueNameUndefined);
}
#endif
@@ -139,35 +136,35 @@ FX_BOOL JSGlobalAlternate::DoProperty(IFXJS_Context* cc,
if (vp.IsSetting()) {
CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
switch (vp.GetType()) {
- case VT_number: {
+ case CJS_Value::VT_number: {
double dData;
vp >> dData;
return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData,
false, "", v8::Local<v8::Object>(), FALSE);
}
- case VT_boolean: {
+ case CJS_Value::VT_boolean: {
bool bData;
vp >> bData;
return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
bData, "", v8::Local<v8::Object>(), FALSE);
}
- case VT_string: {
+ case CJS_Value::VT_string: {
CFX_ByteString sData;
vp >> sData;
return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0,
false, sData, v8::Local<v8::Object>(), FALSE);
}
- case VT_object: {
+ case CJS_Value::VT_object: {
v8::Local<v8::Object> pData;
vp >> pData;
return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0,
false, "", pData, FALSE);
}
- case VT_null: {
+ case CJS_Value::VT_null: {
return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false,
"", v8::Local<v8::Object>(), FALSE);
}
- case VT_undefined: {
+ case CJS_Value::VT_undefined: {
DelProperty(cc, propname, sError);
return TRUE;
}
@@ -246,46 +243,46 @@ void JSGlobalAlternate::UpdateGlobalPersistentVariables() {
SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER,
pData->data.dData, false, "",
v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectNumber(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(),
- pData->data.dData);
+ FXJS_PutObjectNumber(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ pData->data.dData);
break;
case JS_GLOBALDATA_TYPE_BOOLEAN:
SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
(bool)(pData->data.bData == 1), "",
v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(),
- (bool)(pData->data.bData == 1));
+ FXJS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ (bool)(pData->data.bData == 1));
break;
case JS_GLOBALDATA_TYPE_STRING:
SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0,
false, pData->data.sData, v8::Local<v8::Object>(),
pData->bPersistent == 1);
- JS_PutObjectString(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(),
- pData->data.sData.UTF8Decode().c_str());
+ FXJS_PutObjectString(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ pData->data.sData.UTF8Decode().c_str());
break;
case JS_GLOBALDATA_TYPE_OBJECT: {
v8::Isolate* pRuntime =
- JS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject));
- v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
+ FXJS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject));
+ v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(pRuntime, NULL, -1);
PutObjectProperty(pObj, &pData->data);
SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0,
false, "", (v8::Local<v8::Object>)pObj,
pData->bPersistent == 1);
- JS_PutObjectObject(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(),
- (v8::Local<v8::Object>)pObj);
+ FXJS_PutObjectObject(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ (v8::Local<v8::Object>)pObj);
} break;
case JS_GLOBALDATA_TYPE_NULL:
SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false,
"", v8::Local<v8::Object>(),
pData->bPersistent == 1);
- JS_PutObjectNull(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str());
+ FXJS_PutObjectNull(NULL, (v8::Local<v8::Object>)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str());
break;
}
}
@@ -337,48 +334,47 @@ void JSGlobalAlternate::ObjectToArray(v8::Local<v8::Object> pObj,
CJS_GlobalVariableArray& array) {
v8::Local<v8::Context> context = pObj->CreationContext();
v8::Isolate* isolate = context->GetIsolate();
- v8::Local<v8::Array> pKeyList = JS_GetObjectElementNames(isolate, pObj);
+ v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj);
int nObjElements = pKeyList->Length();
for (int i = 0; i < nObjElements; i++) {
CFX_WideString ws =
- JS_ToString(isolate, JS_GetArrayElement(isolate, pKeyList, i));
+ FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i));
CFX_ByteString sKey = ws.UTF8Encode();
- v8::Local<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c_str());
- FXJSVALUETYPE vt = GET_VALUE_TYPE(v);
- switch (vt) {
- case VT_number: {
+ v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws.c_str());
+ switch (GET_VALUE_TYPE(v)) {
+ case CJS_Value::VT_number: {
CJS_KeyValue* pObjElement = new CJS_KeyValue;
pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER;
pObjElement->sKey = sKey;
- pObjElement->dData = JS_ToNumber(isolate, v);
+ pObjElement->dData = FXJS_ToNumber(isolate, v);
array.Add(pObjElement);
} break;
- case VT_boolean: {
+ case CJS_Value::VT_boolean: {
CJS_KeyValue* pObjElement = new CJS_KeyValue;
pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
pObjElement->sKey = sKey;
- pObjElement->dData = JS_ToBoolean(isolate, v);
+ pObjElement->dData = FXJS_ToBoolean(isolate, v);
array.Add(pObjElement);
} break;
- case VT_string: {
+ case CJS_Value::VT_string: {
CFX_ByteString sValue =
- CJS_Value(isolate, v, VT_string).ToCFXByteString();
+ CJS_Value(isolate, v, CJS_Value::VT_string).ToCFXByteString();
CJS_KeyValue* pObjElement = new CJS_KeyValue;
pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
pObjElement->sKey = sKey;
pObjElement->sData = sValue;
array.Add(pObjElement);
} break;
- case VT_object: {
+ case CJS_Value::VT_object: {
CJS_KeyValue* pObjElement = new CJS_KeyValue;
pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT;
pObjElement->sKey = sKey;
- ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData);
+ ObjectToArray(FXJS_ToObject(isolate, v), pObjElement->objData);
array.Add(pObjElement);
} break;
- case VT_null: {
+ case CJS_Value::VT_null: {
CJS_KeyValue* pObjElement = new CJS_KeyValue;
pObjElement->nType = JS_GLOBALDATA_TYPE_NULL;
pObjElement->sKey = sKey;
@@ -400,32 +396,33 @@ void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj,
switch (pObjData->nType) {
case JS_GLOBALDATA_TYPE_NUMBER:
- JS_PutObjectNumber(NULL, (v8::Local<v8::Object>)pObj,
- pObjData->sKey.UTF8Decode().c_str(),
- pObjData->dData);
+ FXJS_PutObjectNumber(NULL, (v8::Local<v8::Object>)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ pObjData->dData);
break;
case JS_GLOBALDATA_TYPE_BOOLEAN:
- JS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)pObj,
- pObjData->sKey.UTF8Decode().c_str(),
- (bool)(pObjData->bData == 1));
+ FXJS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ (bool)(pObjData->bData == 1));
break;
case JS_GLOBALDATA_TYPE_STRING:
- JS_PutObjectString(NULL, (v8::Local<v8::Object>)pObj,
- pObjData->sKey.UTF8Decode().c_str(),
- pObjData->sData.UTF8Decode().c_str());
+ FXJS_PutObjectString(NULL, (v8::Local<v8::Object>)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ pObjData->sData.UTF8Decode().c_str());
break;
case JS_GLOBALDATA_TYPE_OBJECT: {
v8::Isolate* pRuntime =
- JS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject));
- v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
+ FXJS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject));
+ v8::Local<v8::Object> pNewObj =
+ FXJS_NewFxDynamicObj(pRuntime, NULL, -1);
PutObjectProperty(pNewObj, pObjData);
- JS_PutObjectObject(NULL, (v8::Local<v8::Object>)pObj,
- pObjData->sKey.UTF8Decode().c_str(),
- (v8::Local<v8::Object>)pNewObj);
+ FXJS_PutObjectObject(NULL, (v8::Local<v8::Object>)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ (v8::Local<v8::Object>)pNewObj);
} break;
case JS_GLOBALDATA_TYPE_NULL:
- JS_PutObjectNull(NULL, (v8::Local<v8::Object>)pObj,
- pObjData->sKey.UTF8Decode().c_str());
+ FXJS_PutObjectNull(NULL, (v8::Local<v8::Object>)pObj,
+ pObjData->sKey.UTF8Decode().c_str());
break;
}
}
@@ -470,7 +467,7 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname,
pTemp->sData = sData;
} break;
case JS_GLOBALDATA_TYPE_OBJECT: {
- pTemp->pData.Reset(JS_GetRuntime(pData), pData);
+ pTemp->pData.Reset(FXJS_GetRuntime(pData), pData);
} break;
case JS_GLOBALDATA_TYPE_NULL:
break;
@@ -504,7 +501,7 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname,
case JS_GLOBALDATA_TYPE_OBJECT: {
pNewData = new JSGlobalData;
pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT;
- pNewData->pData.Reset(JS_GetRuntime(pData), pData);
+ pNewData->pData.Reset(FXJS_GetRuntime(pData), pData);
pNewData->bPersistent = bDefaultPersistent;
} break;
case JS_GLOBALDATA_TYPE_NULL: {
@@ -520,25 +517,25 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname,
return TRUE;
}
-FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p) {
- const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p));
+CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p) {
+ const unsigned int nHash = JS_CalcHash(FXJS_GetTypeof(p));
if (nHash == JSCONST_nUndefHash)
- return VT_undefined;
+ return CJS_Value::VT_undefined;
if (nHash == JSCONST_nNullHash)
- return VT_null;
+ return CJS_Value::VT_null;
if (nHash == JSCONST_nStringHash)
- return VT_string;
+ return CJS_Value::VT_string;
if (nHash == JSCONST_nNumberHash)
- return VT_number;
+ return CJS_Value::VT_number;
if (nHash == JSCONST_nBoolHash)
- return VT_boolean;
+ return CJS_Value::VT_boolean;
if (nHash == JSCONST_nDateHash)
- return VT_date;
+ return CJS_Value::VT_date;
if (nHash == JSCONST_nObjectHash)
- return VT_object;
+ return CJS_Value::VT_object;
if (nHash == JSCONST_nFXobjHash)
- return VT_fxobject;
+ return CJS_Value::VT_fxobject;
- return VT_unknown;
+ return CJS_Value::VT_unknown;
}