| 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 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 | 226 |
| 227 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { | 227 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { |
| 228 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 228 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { |
| 229 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 229 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); |
| 230 switch (pData->data.nType) { | 230 switch (pData->data.nType) { |
| 231 case JS_GLOBALDATA_TYPE_NUMBER: | 231 case JS_GLOBALDATA_TYPE_NUMBER: |
| 232 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, | 232 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, |
| 233 pData->data.dData, false, "", | 233 pData->data.dData, false, "", |
| 234 v8::Local<v8::Object>(), pData->bPersistent == 1); | 234 v8::Local<v8::Object>(), pData->bPersistent == 1); |
| 235 FXJS_PutObjectNumber(NULL, m_pJSObject->ToV8Object(), | 235 FXJS_PutObjectNumber(NULL, m_pJSObject->ToV8Object(), |
| 236 pData->data.sKey.UTF8Decode().c_str(), | 236 pData->data.sKey.UTF8Decode(), pData->data.dData); |
| 237 pData->data.dData); | |
| 238 break; | 237 break; |
| 239 case JS_GLOBALDATA_TYPE_BOOLEAN: | 238 case JS_GLOBALDATA_TYPE_BOOLEAN: |
| 240 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 239 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, |
| 241 (bool)(pData->data.bData == 1), "", | 240 (bool)(pData->data.bData == 1), "", |
| 242 v8::Local<v8::Object>(), pData->bPersistent == 1); | 241 v8::Local<v8::Object>(), pData->bPersistent == 1); |
| 243 FXJS_PutObjectBoolean(NULL, m_pJSObject->ToV8Object(), | 242 FXJS_PutObjectBoolean(NULL, m_pJSObject->ToV8Object(), |
| 244 pData->data.sKey.UTF8Decode().c_str(), | 243 pData->data.sKey.UTF8Decode(), |
| 245 (bool)(pData->data.bData == 1)); | 244 (bool)(pData->data.bData == 1)); |
| 246 break; | 245 break; |
| 247 case JS_GLOBALDATA_TYPE_STRING: | 246 case JS_GLOBALDATA_TYPE_STRING: |
| 248 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, | 247 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, |
| 249 false, pData->data.sData, v8::Local<v8::Object>(), | 248 false, pData->data.sData, v8::Local<v8::Object>(), |
| 250 pData->bPersistent == 1); | 249 pData->bPersistent == 1); |
| 251 FXJS_PutObjectString(NULL, m_pJSObject->ToV8Object(), | 250 FXJS_PutObjectString(NULL, m_pJSObject->ToV8Object(), |
| 252 pData->data.sKey.UTF8Decode().c_str(), | 251 pData->data.sKey.UTF8Decode(), |
| 253 pData->data.sData.UTF8Decode().c_str()); | 252 pData->data.sData.UTF8Decode()); |
| 254 break; | 253 break; |
| 255 case JS_GLOBALDATA_TYPE_OBJECT: { | 254 case JS_GLOBALDATA_TYPE_OBJECT: { |
| 256 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 255 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); |
| 257 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(pRuntime, NULL, -1); | 256 v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(pRuntime, NULL, -1); |
| 258 | 257 |
| 259 PutObjectProperty(pObj, &pData->data); | 258 PutObjectProperty(pObj, &pData->data); |
| 260 | 259 |
| 261 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, | 260 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, |
| 262 false, "", pObj, pData->bPersistent == 1); | 261 false, "", pObj, pData->bPersistent == 1); |
| 263 FXJS_PutObjectObject(NULL, m_pJSObject->ToV8Object(), | 262 FXJS_PutObjectObject(NULL, m_pJSObject->ToV8Object(), |
| 264 pData->data.sKey.UTF8Decode().c_str(), pObj); | 263 pData->data.sKey.UTF8Decode(), pObj); |
| 265 } break; | 264 } break; |
| 266 case JS_GLOBALDATA_TYPE_NULL: | 265 case JS_GLOBALDATA_TYPE_NULL: |
| 267 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, | 266 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, |
| 268 "", v8::Local<v8::Object>(), | 267 "", v8::Local<v8::Object>(), |
| 269 pData->bPersistent == 1); | 268 pData->bPersistent == 1); |
| 270 FXJS_PutObjectNull(NULL, m_pJSObject->ToV8Object(), | 269 FXJS_PutObjectNull(NULL, m_pJSObject->ToV8Object(), |
| 271 pData->data.sKey.UTF8Decode().c_str()); | 270 pData->data.sKey.UTF8Decode()); |
| 272 break; | 271 break; |
| 273 } | 272 } |
| 274 } | 273 } |
| 275 } | 274 } |
| 276 | 275 |
| 277 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { | 276 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { |
| 278 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 277 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { |
| 279 CFX_ByteString name = it->first; | 278 CFX_ByteString name = it->first; |
| 280 JSGlobalData* pData = it->second; | 279 JSGlobalData* pData = it->second; |
| 281 if (pData->bDeleted) { | 280 if (pData->bDeleted) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 v8::Isolate* isolate = pObj->GetIsolate(); | 316 v8::Isolate* isolate = pObj->GetIsolate(); |
| 318 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 317 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); |
| 319 | 318 |
| 320 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); | 319 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); |
| 321 int nObjElements = pKeyList->Length(); | 320 int nObjElements = pKeyList->Length(); |
| 322 for (int i = 0; i < nObjElements; i++) { | 321 for (int i = 0; i < nObjElements; i++) { |
| 323 CFX_WideString ws = | 322 CFX_WideString ws = |
| 324 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); | 323 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); |
| 325 CFX_ByteString sKey = ws.UTF8Encode(); | 324 CFX_ByteString sKey = ws.UTF8Encode(); |
| 326 | 325 |
| 327 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws.c_str()); | 326 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws); |
| 328 switch (GET_VALUE_TYPE(v)) { | 327 switch (GET_VALUE_TYPE(v)) { |
| 329 case CJS_Value::VT_number: { | 328 case CJS_Value::VT_number: { |
| 330 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 329 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 331 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; | 330 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; |
| 332 pObjElement->sKey = sKey; | 331 pObjElement->sKey = sKey; |
| 333 pObjElement->dData = FXJS_ToNumber(isolate, v); | 332 pObjElement->dData = FXJS_ToNumber(isolate, v); |
| 334 array.Add(pObjElement); | 333 array.Add(pObjElement); |
| 335 } break; | 334 } break; |
| 336 case CJS_Value::VT_boolean: { | 335 case CJS_Value::VT_boolean: { |
| 337 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 336 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 367 } | 366 } |
| 368 } | 367 } |
| 369 } | 368 } |
| 370 | 369 |
| 371 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 370 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, |
| 372 CJS_KeyValue* pData) { | 371 CJS_KeyValue* pData) { |
| 373 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 372 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { |
| 374 CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 373 CJS_KeyValue* pObjData = pData->objData.GetAt(i); |
| 375 switch (pObjData->nType) { | 374 switch (pObjData->nType) { |
| 376 case JS_GLOBALDATA_TYPE_NUMBER: | 375 case JS_GLOBALDATA_TYPE_NUMBER: |
| 377 FXJS_PutObjectNumber(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(), | 376 FXJS_PutObjectNumber(NULL, pObj, pObjData->sKey.UTF8Decode(), |
| 378 pObjData->dData); | 377 pObjData->dData); |
| 379 break; | 378 break; |
| 380 case JS_GLOBALDATA_TYPE_BOOLEAN: | 379 case JS_GLOBALDATA_TYPE_BOOLEAN: |
| 381 FXJS_PutObjectBoolean(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(), | 380 FXJS_PutObjectBoolean(NULL, pObj, pObjData->sKey.UTF8Decode(), |
| 382 pObjData->bData == 1); | 381 pObjData->bData == 1); |
| 383 break; | 382 break; |
| 384 case JS_GLOBALDATA_TYPE_STRING: | 383 case JS_GLOBALDATA_TYPE_STRING: |
| 385 FXJS_PutObjectString(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(), | 384 FXJS_PutObjectString(NULL, pObj, pObjData->sKey.UTF8Decode(), |
| 386 pObjData->sData.UTF8Decode().c_str()); | 385 pObjData->sData.UTF8Decode()); |
| 387 break; | 386 break; |
| 388 case JS_GLOBALDATA_TYPE_OBJECT: { | 387 case JS_GLOBALDATA_TYPE_OBJECT: { |
| 389 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 388 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); |
| 390 v8::Local<v8::Object> pNewObj = | 389 v8::Local<v8::Object> pNewObj = |
| 391 FXJS_NewFxDynamicObj(pRuntime, NULL, -1); | 390 FXJS_NewFxDynamicObj(pRuntime, NULL, -1); |
| 392 PutObjectProperty(pNewObj, pObjData); | 391 PutObjectProperty(pNewObj, pObjData); |
| 393 FXJS_PutObjectObject(NULL, pObj, pObjData->sKey.UTF8Decode().c_str(), | 392 FXJS_PutObjectObject(NULL, pObj, pObjData->sKey.UTF8Decode(), pNewObj); |
| 394 pNewObj); | |
| 395 } break; | 393 } break; |
| 396 case JS_GLOBALDATA_TYPE_NULL: | 394 case JS_GLOBALDATA_TYPE_NULL: |
| 397 FXJS_PutObjectNull(NULL, pObj, pObjData->sKey.UTF8Decode().c_str()); | 395 FXJS_PutObjectNull(NULL, pObj, pObjData->sKey.UTF8Decode()); |
| 398 break; | 396 break; |
| 399 } | 397 } |
| 400 } | 398 } |
| 401 } | 399 } |
| 402 | 400 |
| 403 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 401 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { |
| 404 for (const auto& pair : m_mapGlobal) { | 402 for (const auto& pair : m_mapGlobal) { |
| 405 delete pair.second; | 403 delete pair.second; |
| 406 } | 404 } |
| 407 m_mapGlobal.clear(); | 405 m_mapGlobal.clear(); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 return CJS_Value::VT_boolean; | 502 return CJS_Value::VT_boolean; |
| 505 if (nHash == JSCONST_nDateHash) | 503 if (nHash == JSCONST_nDateHash) |
| 506 return CJS_Value::VT_date; | 504 return CJS_Value::VT_date; |
| 507 if (nHash == JSCONST_nObjectHash) | 505 if (nHash == JSCONST_nObjectHash) |
| 508 return CJS_Value::VT_object; | 506 return CJS_Value::VT_object; |
| 509 if (nHash == JSCONST_nFXobjHash) | 507 if (nHash == JSCONST_nFXobjHash) |
| 510 return CJS_Value::VT_fxobject; | 508 return CJS_Value::VT_fxobject; |
| 511 | 509 |
| 512 return CJS_Value::VT_unknown; | 510 return CJS_Value::VT_unknown; |
| 513 } | 511 } |
| OLD | NEW |