| OLD | NEW | 
|---|
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 
| 6 | 6 | 
| 7 #include "fpdfsdk/javascript/global.h" | 7 #include "fpdfsdk/javascript/global.h" | 
| 8 | 8 | 
| 9 #include <vector> | 9 #include <vector> | 
| 10 | 10 | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 30 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, JSGlobalAlternate, global); | 30 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, JSGlobalAlternate, global); | 
| 31 | 31 | 
| 32 void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { | 32 void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { | 
| 33   CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); | 33   CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); | 
| 34   JSGlobalAlternate* pGlobal = | 34   JSGlobalAlternate* pGlobal = | 
| 35       static_cast<JSGlobalAlternate*>(GetEmbedObject()); | 35       static_cast<JSGlobalAlternate*>(GetEmbedObject()); | 
| 36   pGlobal->Initial(pRuntime->GetReaderApp()); | 36   pGlobal->Initial(pRuntime->GetReaderApp()); | 
| 37 } | 37 } | 
| 38 | 38 | 
| 39 JSGlobalData::JSGlobalData() | 39 JSGlobalData::JSGlobalData() | 
| 40     : nType(0), | 40     : nType(JS_GlobalDataType::NUMBER), | 
| 41       dData(0), | 41       dData(0), | 
| 42       bData(FALSE), | 42       bData(FALSE), | 
| 43       sData(""), | 43       sData(""), | 
| 44       bPersistent(FALSE), | 44       bPersistent(FALSE), | 
| 45       bDeleted(FALSE) {} | 45       bDeleted(FALSE) {} | 
| 46 | 46 | 
| 47 JSGlobalData::~JSGlobalData() { | 47 JSGlobalData::~JSGlobalData() { | 
| 48   pData.Reset(); | 48   pData.Reset(); | 
| 49 } | 49 } | 
| 50 | 50 | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 80 FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, | 80 FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, | 
| 81                                       const FX_WCHAR* propname, | 81                                       const FX_WCHAR* propname, | 
| 82                                       CJS_PropValue& vp, | 82                                       CJS_PropValue& vp, | 
| 83                                       CFX_WideString& sError) { | 83                                       CFX_WideString& sError) { | 
| 84   if (vp.IsSetting()) { | 84   if (vp.IsSetting()) { | 
| 85     CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); | 85     CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); | 
| 86     switch (vp.GetType()) { | 86     switch (vp.GetType()) { | 
| 87       case CJS_Value::VT_number: { | 87       case CJS_Value::VT_number: { | 
| 88         double dData; | 88         double dData; | 
| 89         vp >> dData; | 89         vp >> dData; | 
| 90         return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, | 90         return SetGlobalVariables(sPropName, JS_GlobalDataType::NUMBER, dData, | 
| 91                                   false, "", v8::Local<v8::Object>(), FALSE); | 91                                   false, "", v8::Local<v8::Object>(), FALSE); | 
| 92       } | 92       } | 
| 93       case CJS_Value::VT_boolean: { | 93       case CJS_Value::VT_boolean: { | 
| 94         bool bData; | 94         bool bData; | 
| 95         vp >> bData; | 95         vp >> bData; | 
| 96         return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 96         return SetGlobalVariables(sPropName, JS_GlobalDataType::BOOLEAN, 0, | 
| 97                                   bData, "", v8::Local<v8::Object>(), FALSE); | 97                                   bData, "", v8::Local<v8::Object>(), FALSE); | 
| 98       } | 98       } | 
| 99       case CJS_Value::VT_string: { | 99       case CJS_Value::VT_string: { | 
| 100         CFX_ByteString sData; | 100         CFX_ByteString sData; | 
| 101         vp >> sData; | 101         vp >> sData; | 
| 102         return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, | 102         return SetGlobalVariables(sPropName, JS_GlobalDataType::STRING, 0, | 
| 103                                   false, sData, v8::Local<v8::Object>(), FALSE); | 103                                   false, sData, v8::Local<v8::Object>(), FALSE); | 
| 104       } | 104       } | 
| 105       case CJS_Value::VT_object: { | 105       case CJS_Value::VT_object: { | 
| 106         v8::Local<v8::Object> pData; | 106         v8::Local<v8::Object> pData; | 
| 107         vp >> pData; | 107         vp >> pData; | 
| 108         return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, | 108         return SetGlobalVariables(sPropName, JS_GlobalDataType::OBJECT, 0, | 
| 109                                   false, "", pData, FALSE); | 109                                   false, "", pData, FALSE); | 
| 110       } | 110       } | 
| 111       case CJS_Value::VT_null: { | 111       case CJS_Value::VT_null: { | 
| 112         return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, | 112         return SetGlobalVariables(sPropName, JS_GlobalDataType::NULLOBJ, 0, | 
| 113                                   "", v8::Local<v8::Object>(), FALSE); | 113                                   false, "", v8::Local<v8::Object>(), FALSE); | 
| 114       } | 114       } | 
| 115       case CJS_Value::VT_undefined: { | 115       case CJS_Value::VT_undefined: { | 
| 116         DelProperty(cc, propname, sError); | 116         DelProperty(cc, propname, sError); | 
| 117         return TRUE; | 117         return TRUE; | 
| 118       } | 118       } | 
| 119       default: | 119       default: | 
| 120         break; | 120         break; | 
| 121     } | 121     } | 
| 122   } else { | 122   } else { | 
| 123     auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); | 123     auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); | 
| 124     if (it == m_mapGlobal.end()) { | 124     if (it == m_mapGlobal.end()) { | 
| 125       vp.SetNull(); | 125       vp.SetNull(); | 
| 126       return TRUE; | 126       return TRUE; | 
| 127     } | 127     } | 
| 128     JSGlobalData* pData = it->second; | 128     JSGlobalData* pData = it->second; | 
| 129     if (pData->bDeleted) { | 129     if (pData->bDeleted) { | 
| 130       vp.SetNull(); | 130       vp.SetNull(); | 
| 131       return TRUE; | 131       return TRUE; | 
| 132     } | 132     } | 
| 133     switch (pData->nType) { | 133     switch (pData->nType) { | 
| 134       case JS_GLOBALDATA_TYPE_NUMBER: | 134       case JS_GlobalDataType::NUMBER: | 
| 135         vp << pData->dData; | 135         vp << pData->dData; | 
| 136         return TRUE; | 136         return TRUE; | 
| 137       case JS_GLOBALDATA_TYPE_BOOLEAN: | 137       case JS_GlobalDataType::BOOLEAN: | 
| 138         vp << pData->bData; | 138         vp << pData->bData; | 
| 139         return TRUE; | 139         return TRUE; | 
| 140       case JS_GLOBALDATA_TYPE_STRING: | 140       case JS_GlobalDataType::STRING: | 
| 141         vp << pData->sData; | 141         vp << pData->sData; | 
| 142         return TRUE; | 142         return TRUE; | 
| 143       case JS_GLOBALDATA_TYPE_OBJECT: { | 143       case JS_GlobalDataType::OBJECT: { | 
| 144         v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 144         v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 
| 145             vp.GetJSRuntime()->GetIsolate(), pData->pData); | 145             vp.GetJSRuntime()->GetIsolate(), pData->pData); | 
| 146         vp << obj; | 146         vp << obj; | 
| 147         return TRUE; | 147         return TRUE; | 
| 148       } | 148       } | 
| 149       case JS_GLOBALDATA_TYPE_NULL: | 149       case JS_GlobalDataType::NULLOBJ: | 
| 150         vp.SetNull(); | 150         vp.SetNull(); | 
| 151         return TRUE; | 151         return TRUE; | 
| 152       default: | 152       default: | 
| 153         break; | 153         break; | 
| 154     } | 154     } | 
| 155   } | 155   } | 
| 156   return FALSE; | 156   return FALSE; | 
| 157 } | 157 } | 
| 158 | 158 | 
| 159 FX_BOOL JSGlobalAlternate::setPersistent(IJS_Context* cc, | 159 FX_BOOL JSGlobalAlternate::setPersistent(IJS_Context* cc, | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 176   } | 176   } | 
| 177 | 177 | 
| 178   sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); | 178   sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); | 
| 179   return FALSE; | 179   return FALSE; | 
| 180 } | 180 } | 
| 181 | 181 | 
| 182 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { | 182 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { | 
| 183   for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 183   for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 
| 184     CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 184     CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 
| 185     switch (pData->data.nType) { | 185     switch (pData->data.nType) { | 
| 186       case JS_GLOBALDATA_TYPE_NUMBER: | 186       case JS_GlobalDataType::NUMBER: | 
| 187         SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, | 187         SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NUMBER, | 
| 188                            pData->data.dData, false, "", | 188                            pData->data.dData, false, "", | 
| 189                            v8::Local<v8::Object>(), pData->bPersistent == 1); | 189                            v8::Local<v8::Object>(), pData->bPersistent == 1); | 
| 190         FXJS_PutObjectNumber(nullptr, m_pJSObject->ToV8Object(), | 190         FXJS_PutObjectNumber(nullptr, m_pJSObject->ToV8Object(), | 
| 191                              pData->data.sKey.UTF8Decode(), pData->data.dData); | 191                              pData->data.sKey.UTF8Decode(), pData->data.dData); | 
| 192         break; | 192         break; | 
| 193       case JS_GLOBALDATA_TYPE_BOOLEAN: | 193       case JS_GlobalDataType::BOOLEAN: | 
| 194         SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 194         SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::BOOLEAN, 0, | 
| 195                            (bool)(pData->data.bData == 1), "", | 195                            (bool)(pData->data.bData == 1), "", | 
| 196                            v8::Local<v8::Object>(), pData->bPersistent == 1); | 196                            v8::Local<v8::Object>(), pData->bPersistent == 1); | 
| 197         FXJS_PutObjectBoolean(nullptr, m_pJSObject->ToV8Object(), | 197         FXJS_PutObjectBoolean(nullptr, m_pJSObject->ToV8Object(), | 
| 198                               pData->data.sKey.UTF8Decode(), | 198                               pData->data.sKey.UTF8Decode(), | 
| 199                               (bool)(pData->data.bData == 1)); | 199                               (bool)(pData->data.bData == 1)); | 
| 200         break; | 200         break; | 
| 201       case JS_GLOBALDATA_TYPE_STRING: | 201       case JS_GlobalDataType::STRING: | 
| 202         SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, | 202         SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::STRING, 0, | 
| 203                            false, pData->data.sData, v8::Local<v8::Object>(), | 203                            false, pData->data.sData, v8::Local<v8::Object>(), | 
| 204                            pData->bPersistent == 1); | 204                            pData->bPersistent == 1); | 
| 205         FXJS_PutObjectString(nullptr, m_pJSObject->ToV8Object(), | 205         FXJS_PutObjectString(nullptr, m_pJSObject->ToV8Object(), | 
| 206                              pData->data.sKey.UTF8Decode(), | 206                              pData->data.sKey.UTF8Decode(), | 
| 207                              pData->data.sData.UTF8Decode()); | 207                              pData->data.sData.UTF8Decode()); | 
| 208         break; | 208         break; | 
| 209       case JS_GLOBALDATA_TYPE_OBJECT: { | 209       case JS_GlobalDataType::OBJECT: { | 
| 210         v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 210         v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 
| 211         v8::Local<v8::Object> pObj = | 211         v8::Local<v8::Object> pObj = | 
| 212             FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 212             FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 
| 213 | 213 | 
| 214         PutObjectProperty(pObj, &pData->data); | 214         PutObjectProperty(pObj, &pData->data); | 
| 215 | 215 | 
| 216         SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, | 216         SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::OBJECT, 0, | 
| 217                            false, "", pObj, pData->bPersistent == 1); | 217                            false, "", pObj, pData->bPersistent == 1); | 
| 218         FXJS_PutObjectObject(nullptr, m_pJSObject->ToV8Object(), | 218         FXJS_PutObjectObject(nullptr, m_pJSObject->ToV8Object(), | 
| 219                              pData->data.sKey.UTF8Decode(), pObj); | 219                              pData->data.sKey.UTF8Decode(), pObj); | 
| 220       } break; | 220       } break; | 
| 221       case JS_GLOBALDATA_TYPE_NULL: | 221       case JS_GlobalDataType::NULLOBJ: | 
| 222         SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, | 222         SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NULLOBJ, 0, | 
| 223                            "", v8::Local<v8::Object>(), | 223                            false, "", v8::Local<v8::Object>(), | 
| 224                            pData->bPersistent == 1); | 224                            pData->bPersistent == 1); | 
| 225         FXJS_PutObjectNull(nullptr, m_pJSObject->ToV8Object(), | 225         FXJS_PutObjectNull(nullptr, m_pJSObject->ToV8Object(), | 
| 226                            pData->data.sKey.UTF8Decode()); | 226                            pData->data.sKey.UTF8Decode()); | 
| 227         break; | 227         break; | 
| 228     } | 228     } | 
| 229   } | 229   } | 
| 230 } | 230 } | 
| 231 | 231 | 
| 232 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { | 232 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { | 
| 233   for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 233   for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 
| 234     CFX_ByteString name = it->first; | 234     CFX_ByteString name = it->first; | 
| 235     JSGlobalData* pData = it->second; | 235     JSGlobalData* pData = it->second; | 
| 236     if (pData->bDeleted) { | 236     if (pData->bDeleted) { | 
| 237       m_pGlobalData->DeleteGlobalVariable(name); | 237       m_pGlobalData->DeleteGlobalVariable(name); | 
| 238     } else { | 238     } else { | 
| 239       switch (pData->nType) { | 239       switch (pData->nType) { | 
| 240         case JS_GLOBALDATA_TYPE_NUMBER: | 240         case JS_GlobalDataType::NUMBER: | 
| 241           m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); | 241           m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); | 
| 242           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 242           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 
| 243           break; | 243           break; | 
| 244         case JS_GLOBALDATA_TYPE_BOOLEAN: | 244         case JS_GlobalDataType::BOOLEAN: | 
| 245           m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); | 245           m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); | 
| 246           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 246           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 
| 247           break; | 247           break; | 
| 248         case JS_GLOBALDATA_TYPE_STRING: | 248         case JS_GlobalDataType::STRING: | 
| 249           m_pGlobalData->SetGlobalVariableString(name, pData->sData); | 249           m_pGlobalData->SetGlobalVariableString(name, pData->sData); | 
| 250           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 250           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 
| 251           break; | 251           break; | 
| 252         case JS_GLOBALDATA_TYPE_OBJECT: { | 252         case JS_GlobalDataType::OBJECT: { | 
| 253           CJS_GlobalVariableArray array; | 253           CJS_GlobalVariableArray array; | 
| 254           v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 254           v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 
| 255               GetJSObject()->GetIsolate(), pData->pData); | 255               GetJSObject()->GetIsolate(), pData->pData); | 
| 256           ObjectToArray(cc, obj, array); | 256           ObjectToArray(cc, obj, array); | 
| 257           m_pGlobalData->SetGlobalVariableObject(name, array); | 257           m_pGlobalData->SetGlobalVariableObject(name, array); | 
| 258           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 258           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 
| 259         } break; | 259         } break; | 
| 260         case JS_GLOBALDATA_TYPE_NULL: | 260         case JS_GlobalDataType::NULLOBJ: | 
| 261           m_pGlobalData->SetGlobalVariableNull(name); | 261           m_pGlobalData->SetGlobalVariableNull(name); | 
| 262           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 262           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 
| 263           break; | 263           break; | 
| 264       } | 264       } | 
| 265     } | 265     } | 
| 266   } | 266   } | 
| 267 } | 267 } | 
| 268 | 268 | 
| 269 void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, | 269 void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, | 
| 270                                       v8::Local<v8::Object> pObj, | 270                                       v8::Local<v8::Object> pObj, | 
| 271                                       CJS_GlobalVariableArray& array) { | 271                                       CJS_GlobalVariableArray& array) { | 
| 272   v8::Isolate* isolate = pObj->GetIsolate(); | 272   v8::Isolate* isolate = pObj->GetIsolate(); | 
| 273   CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 273   CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 
| 274 | 274 | 
| 275   v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); | 275   v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); | 
| 276   int nObjElements = pKeyList->Length(); | 276   int nObjElements = pKeyList->Length(); | 
| 277   for (int i = 0; i < nObjElements; i++) { | 277   for (int i = 0; i < nObjElements; i++) { | 
| 278     CFX_WideString ws = | 278     CFX_WideString ws = | 
| 279         FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); | 279         FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); | 
| 280     CFX_ByteString sKey = ws.UTF8Encode(); | 280     CFX_ByteString sKey = ws.UTF8Encode(); | 
| 281     v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws); | 281     v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws); | 
| 282     switch (CJS_Value::GetValueType(v)) { | 282     switch (CJS_Value::GetValueType(v)) { | 
| 283       case CJS_Value::VT_number: { | 283       case CJS_Value::VT_number: { | 
| 284         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 284         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 
| 285         pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; | 285         pObjElement->nType = JS_GlobalDataType::NUMBER; | 
| 286         pObjElement->sKey = sKey; | 286         pObjElement->sKey = sKey; | 
| 287         pObjElement->dData = FXJS_ToNumber(isolate, v); | 287         pObjElement->dData = FXJS_ToNumber(isolate, v); | 
| 288         array.Add(pObjElement); | 288         array.Add(pObjElement); | 
| 289       } break; | 289       } break; | 
| 290       case CJS_Value::VT_boolean: { | 290       case CJS_Value::VT_boolean: { | 
| 291         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 291         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 
| 292         pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 292         pObjElement->nType = JS_GlobalDataType::BOOLEAN; | 
| 293         pObjElement->sKey = sKey; | 293         pObjElement->sKey = sKey; | 
| 294         pObjElement->dData = FXJS_ToBoolean(isolate, v); | 294         pObjElement->dData = FXJS_ToBoolean(isolate, v); | 
| 295         array.Add(pObjElement); | 295         array.Add(pObjElement); | 
| 296       } break; | 296       } break; | 
| 297       case CJS_Value::VT_string: { | 297       case CJS_Value::VT_string: { | 
| 298         CFX_ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(); | 298         CFX_ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(); | 
| 299         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 299         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 
| 300         pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; | 300         pObjElement->nType = JS_GlobalDataType::STRING; | 
| 301         pObjElement->sKey = sKey; | 301         pObjElement->sKey = sKey; | 
| 302         pObjElement->sData = sValue; | 302         pObjElement->sData = sValue; | 
| 303         array.Add(pObjElement); | 303         array.Add(pObjElement); | 
| 304       } break; | 304       } break; | 
| 305       case CJS_Value::VT_object: { | 305       case CJS_Value::VT_object: { | 
| 306         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 306         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 
| 307         pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; | 307         pObjElement->nType = JS_GlobalDataType::OBJECT; | 
| 308         pObjElement->sKey = sKey; | 308         pObjElement->sKey = sKey; | 
| 309         ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); | 309         ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); | 
| 310         array.Add(pObjElement); | 310         array.Add(pObjElement); | 
| 311       } break; | 311       } break; | 
| 312       case CJS_Value::VT_null: { | 312       case CJS_Value::VT_null: { | 
| 313         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 313         CJS_KeyValue* pObjElement = new CJS_KeyValue; | 
| 314         pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; | 314         pObjElement->nType = JS_GlobalDataType::NULLOBJ; | 
| 315         pObjElement->sKey = sKey; | 315         pObjElement->sKey = sKey; | 
| 316         array.Add(pObjElement); | 316         array.Add(pObjElement); | 
| 317       } break; | 317       } break; | 
| 318       default: | 318       default: | 
| 319         break; | 319         break; | 
| 320     } | 320     } | 
| 321   } | 321   } | 
| 322 } | 322 } | 
| 323 | 323 | 
| 324 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 324 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 
| 325                                           CJS_KeyValue* pData) { | 325                                           CJS_KeyValue* pData) { | 
| 326   for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 326   for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 
| 327     CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 327     CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 
| 328     switch (pObjData->nType) { | 328     switch (pObjData->nType) { | 
| 329       case JS_GLOBALDATA_TYPE_NUMBER: | 329       case JS_GlobalDataType::NUMBER: | 
| 330         FXJS_PutObjectNumber(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 330         FXJS_PutObjectNumber(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 
| 331                              pObjData->dData); | 331                              pObjData->dData); | 
| 332         break; | 332         break; | 
| 333       case JS_GLOBALDATA_TYPE_BOOLEAN: | 333       case JS_GlobalDataType::BOOLEAN: | 
| 334         FXJS_PutObjectBoolean(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 334         FXJS_PutObjectBoolean(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 
| 335                               pObjData->bData == 1); | 335                               pObjData->bData == 1); | 
| 336         break; | 336         break; | 
| 337       case JS_GLOBALDATA_TYPE_STRING: | 337       case JS_GlobalDataType::STRING: | 
| 338         FXJS_PutObjectString(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 338         FXJS_PutObjectString(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 
| 339                              pObjData->sData.UTF8Decode()); | 339                              pObjData->sData.UTF8Decode()); | 
| 340         break; | 340         break; | 
| 341       case JS_GLOBALDATA_TYPE_OBJECT: { | 341       case JS_GlobalDataType::OBJECT: { | 
| 342         v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 342         v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 
| 343         v8::Local<v8::Object> pNewObj = | 343         v8::Local<v8::Object> pNewObj = | 
| 344             FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 344             FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 
| 345         PutObjectProperty(pNewObj, pObjData); | 345         PutObjectProperty(pNewObj, pObjData); | 
| 346         FXJS_PutObjectObject(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 346         FXJS_PutObjectObject(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 
| 347                              pNewObj); | 347                              pNewObj); | 
| 348       } break; | 348       } break; | 
| 349       case JS_GLOBALDATA_TYPE_NULL: | 349       case JS_GlobalDataType::NULLOBJ: | 
| 350         FXJS_PutObjectNull(nullptr, pObj, pObjData->sKey.UTF8Decode()); | 350         FXJS_PutObjectNull(nullptr, pObj, pObjData->sKey.UTF8Decode()); | 
| 351         break; | 351         break; | 
| 352     } | 352     } | 
| 353   } | 353   } | 
| 354 } | 354 } | 
| 355 | 355 | 
| 356 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 356 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 
| 357   for (const auto& pair : m_mapGlobal) { | 357   for (const auto& pair : m_mapGlobal) { | 
| 358     delete pair.second; | 358     delete pair.second; | 
| 359   } | 359   } | 
| 360   m_mapGlobal.clear(); | 360   m_mapGlobal.clear(); | 
| 361 } | 361 } | 
| 362 | 362 | 
| 363 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, | 363 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, | 
| 364                                               int nType, | 364                                               JS_GlobalDataType nType, | 
| 365                                               double dData, | 365                                               double dData, | 
| 366                                               bool bData, | 366                                               bool bData, | 
| 367                                               const CFX_ByteString& sData, | 367                                               const CFX_ByteString& sData, | 
| 368                                               v8::Local<v8::Object> pData, | 368                                               v8::Local<v8::Object> pData, | 
| 369                                               bool bDefaultPersistent) { | 369                                               bool bDefaultPersistent) { | 
| 370   if (propname.IsEmpty()) | 370   if (propname.IsEmpty()) | 
| 371     return FALSE; | 371     return FALSE; | 
| 372 | 372 | 
| 373   auto it = m_mapGlobal.find(propname); | 373   auto it = m_mapGlobal.find(propname); | 
| 374   if (it != m_mapGlobal.end()) { | 374   if (it != m_mapGlobal.end()) { | 
| 375     JSGlobalData* pTemp = it->second; | 375     JSGlobalData* pTemp = it->second; | 
| 376     if (pTemp->bDeleted || pTemp->nType != nType) { | 376     if (pTemp->bDeleted || pTemp->nType != nType) { | 
| 377       pTemp->dData = 0; | 377       pTemp->dData = 0; | 
| 378       pTemp->bData = 0; | 378       pTemp->bData = 0; | 
| 379       pTemp->sData = ""; | 379       pTemp->sData = ""; | 
| 380       pTemp->nType = nType; | 380       pTemp->nType = nType; | 
| 381     } | 381     } | 
| 382 | 382 | 
| 383     pTemp->bDeleted = FALSE; | 383     pTemp->bDeleted = FALSE; | 
| 384     switch (nType) { | 384     switch (nType) { | 
| 385       case JS_GLOBALDATA_TYPE_NUMBER: { | 385       case JS_GlobalDataType::NUMBER: { | 
| 386         pTemp->dData = dData; | 386         pTemp->dData = dData; | 
| 387       } break; | 387       } break; | 
| 388       case JS_GLOBALDATA_TYPE_BOOLEAN: { | 388       case JS_GlobalDataType::BOOLEAN: { | 
| 389         pTemp->bData = bData; | 389         pTemp->bData = bData; | 
| 390       } break; | 390       } break; | 
| 391       case JS_GLOBALDATA_TYPE_STRING: { | 391       case JS_GlobalDataType::STRING: { | 
| 392         pTemp->sData = sData; | 392         pTemp->sData = sData; | 
| 393       } break; | 393       } break; | 
| 394       case JS_GLOBALDATA_TYPE_OBJECT: { | 394       case JS_GlobalDataType::OBJECT: { | 
| 395         pTemp->pData.Reset(pData->GetIsolate(), pData); | 395         pTemp->pData.Reset(pData->GetIsolate(), pData); | 
| 396       } break; | 396       } break; | 
| 397       case JS_GLOBALDATA_TYPE_NULL: | 397       case JS_GlobalDataType::NULLOBJ: | 
| 398         break; | 398         break; | 
| 399       default: | 399       default: | 
| 400         return FALSE; | 400         return FALSE; | 
| 401     } | 401     } | 
| 402     return TRUE; | 402     return TRUE; | 
| 403   } | 403   } | 
| 404 | 404 | 
| 405   JSGlobalData* pNewData = nullptr; | 405   JSGlobalData* pNewData = nullptr; | 
| 406 | 406 | 
| 407   switch (nType) { | 407   switch (nType) { | 
| 408     case JS_GLOBALDATA_TYPE_NUMBER: { | 408     case JS_GlobalDataType::NUMBER: { | 
| 409       pNewData = new JSGlobalData; | 409       pNewData = new JSGlobalData; | 
| 410       pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; | 410       pNewData->nType = JS_GlobalDataType::NUMBER; | 
| 411       pNewData->dData = dData; | 411       pNewData->dData = dData; | 
| 412       pNewData->bPersistent = bDefaultPersistent; | 412       pNewData->bPersistent = bDefaultPersistent; | 
| 413     } break; | 413     } break; | 
| 414     case JS_GLOBALDATA_TYPE_BOOLEAN: { | 414     case JS_GlobalDataType::BOOLEAN: { | 
| 415       pNewData = new JSGlobalData; | 415       pNewData = new JSGlobalData; | 
| 416       pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 416       pNewData->nType = JS_GlobalDataType::BOOLEAN; | 
| 417       pNewData->bData = bData; | 417       pNewData->bData = bData; | 
| 418       pNewData->bPersistent = bDefaultPersistent; | 418       pNewData->bPersistent = bDefaultPersistent; | 
| 419     } break; | 419     } break; | 
| 420     case JS_GLOBALDATA_TYPE_STRING: { | 420     case JS_GlobalDataType::STRING: { | 
| 421       pNewData = new JSGlobalData; | 421       pNewData = new JSGlobalData; | 
| 422       pNewData->nType = JS_GLOBALDATA_TYPE_STRING; | 422       pNewData->nType = JS_GlobalDataType::STRING; | 
| 423       pNewData->sData = sData; | 423       pNewData->sData = sData; | 
| 424       pNewData->bPersistent = bDefaultPersistent; | 424       pNewData->bPersistent = bDefaultPersistent; | 
| 425     } break; | 425     } break; | 
| 426     case JS_GLOBALDATA_TYPE_OBJECT: { | 426     case JS_GlobalDataType::OBJECT: { | 
| 427       pNewData = new JSGlobalData; | 427       pNewData = new JSGlobalData; | 
| 428       pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; | 428       pNewData->nType = JS_GlobalDataType::OBJECT; | 
| 429       pNewData->pData.Reset(pData->GetIsolate(), pData); | 429       pNewData->pData.Reset(pData->GetIsolate(), pData); | 
| 430       pNewData->bPersistent = bDefaultPersistent; | 430       pNewData->bPersistent = bDefaultPersistent; | 
| 431     } break; | 431     } break; | 
| 432     case JS_GLOBALDATA_TYPE_NULL: { | 432     case JS_GlobalDataType::NULLOBJ: { | 
| 433       pNewData = new JSGlobalData; | 433       pNewData = new JSGlobalData; | 
| 434       pNewData->nType = JS_GLOBALDATA_TYPE_NULL; | 434       pNewData->nType = JS_GlobalDataType::NULLOBJ; | 
| 435       pNewData->bPersistent = bDefaultPersistent; | 435       pNewData->bPersistent = bDefaultPersistent; | 
| 436     } break; | 436     } break; | 
| 437     default: | 437     default: | 
| 438       return FALSE; | 438       return FALSE; | 
| 439   } | 439   } | 
| 440 | 440 | 
| 441   m_mapGlobal[propname] = pNewData; | 441   m_mapGlobal[propname] = pNewData; | 
| 442   return TRUE; | 442   return TRUE; | 
| 443 } | 443 } | 
| OLD | NEW | 
|---|