| Index: fpdfsdk/src/javascript/global.cpp | 
| diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp | 
| index e75dbd558564e621f00b225dc00c690718d68d36..af517c00650566db1f6c9ab2d7fd468541d4a909 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; | 
| } | 
|  |