| 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 |