| 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 "global.h" | 7 #include "global.h" |
| 8 | 8 |
| 9 #include "../../../core/include/fxcrt/fx_ext.h" | 9 #include "../../../core/include/fxcrt/fx_ext.h" |
| 10 #include "../../include/javascript/IJavaScript.h" | 10 #include "../../include/javascript/IJavaScript.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 case JS_GLOBALDATA_TYPE_NUMBER: | 186 case JS_GLOBALDATA_TYPE_NUMBER: |
| 187 vp << pData->dData; | 187 vp << pData->dData; |
| 188 return TRUE; | 188 return TRUE; |
| 189 case JS_GLOBALDATA_TYPE_BOOLEAN: | 189 case JS_GLOBALDATA_TYPE_BOOLEAN: |
| 190 vp << pData->bData; | 190 vp << pData->bData; |
| 191 return TRUE; | 191 return TRUE; |
| 192 case JS_GLOBALDATA_TYPE_STRING: | 192 case JS_GLOBALDATA_TYPE_STRING: |
| 193 vp << pData->sData; | 193 vp << pData->sData; |
| 194 return TRUE; | 194 return TRUE; |
| 195 case JS_GLOBALDATA_TYPE_OBJECT: { | 195 case JS_GLOBALDATA_TYPE_OBJECT: { |
| 196 v8::Local<v8::Object> obj = | 196 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( |
| 197 v8::Local<v8::Object>::New(vp.GetIsolate(), pData->pData); | 197 vp.GetJSRuntime()->GetIsolate(), pData->pData); |
| 198 vp << obj; | 198 vp << obj; |
| 199 return TRUE; | 199 return TRUE; |
| 200 } | 200 } |
| 201 case JS_GLOBALDATA_TYPE_NULL: | 201 case JS_GLOBALDATA_TYPE_NULL: |
| 202 vp.SetNull(); | 202 vp.SetNull(); |
| 203 return TRUE; | 203 return TRUE; |
| 204 default: | 204 default: |
| 205 break; | 205 break; |
| 206 } | 206 } |
| 207 } | 207 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, | 279 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, |
| 280 "", v8::Local<v8::Object>(), | 280 "", v8::Local<v8::Object>(), |
| 281 pData->bPersistent == 1); | 281 pData->bPersistent == 1); |
| 282 FXJS_PutObjectNull(NULL, m_pJSObject->ToV8Object(), | 282 FXJS_PutObjectNull(NULL, m_pJSObject->ToV8Object(), |
| 283 pData->data.sKey.UTF8Decode().c_str()); | 283 pData->data.sKey.UTF8Decode().c_str()); |
| 284 break; | 284 break; |
| 285 } | 285 } |
| 286 } | 286 } |
| 287 } | 287 } |
| 288 | 288 |
| 289 void JSGlobalAlternate::CommitGlobalPersisitentVariables() { | 289 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { |
| 290 ASSERT(m_pGlobalData); | |
| 291 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 290 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { |
| 292 CFX_ByteString name = it->first; | 291 CFX_ByteString name = it->first; |
| 293 JSGlobalData* pData = it->second; | 292 JSGlobalData* pData = it->second; |
| 294 if (pData->bDeleted) { | 293 if (pData->bDeleted) { |
| 295 m_pGlobalData->DeleteGlobalVariable(name); | 294 m_pGlobalData->DeleteGlobalVariable(name); |
| 296 } else { | 295 } else { |
| 297 switch (pData->nType) { | 296 switch (pData->nType) { |
| 298 case JS_GLOBALDATA_TYPE_NUMBER: | 297 case JS_GLOBALDATA_TYPE_NUMBER: |
| 299 m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); | 298 m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); |
| 300 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 299 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
| 301 break; | 300 break; |
| 302 case JS_GLOBALDATA_TYPE_BOOLEAN: | 301 case JS_GLOBALDATA_TYPE_BOOLEAN: |
| 303 m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); | 302 m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); |
| 304 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 303 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
| 305 break; | 304 break; |
| 306 case JS_GLOBALDATA_TYPE_STRING: | 305 case JS_GLOBALDATA_TYPE_STRING: |
| 307 m_pGlobalData->SetGlobalVariableString(name, pData->sData); | 306 m_pGlobalData->SetGlobalVariableString(name, pData->sData); |
| 308 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 307 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
| 309 break; | 308 break; |
| 310 case JS_GLOBALDATA_TYPE_OBJECT: | 309 case JS_GLOBALDATA_TYPE_OBJECT: |
| 311 // if (pData->pData) | |
| 312 { | 310 { |
| 313 CJS_GlobalVariableArray array; | 311 CJS_GlobalVariableArray array; |
| 314 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 312 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( |
| 315 GetJSObject()->GetIsolate(), pData->pData); | 313 GetJSObject()->GetIsolate(), pData->pData); |
| 316 ObjectToArray(obj, array); | 314 ObjectToArray(cc, obj, array); |
| 317 m_pGlobalData->SetGlobalVariableObject(name, array); | 315 m_pGlobalData->SetGlobalVariableObject(name, array); |
| 318 m_pGlobalData->SetGlobalVariablePersistent(name, | 316 m_pGlobalData->SetGlobalVariablePersistent(name, |
| 319 pData->bPersistent); | 317 pData->bPersistent); |
| 320 } | 318 } |
| 321 break; | 319 break; |
| 322 case JS_GLOBALDATA_TYPE_NULL: | 320 case JS_GLOBALDATA_TYPE_NULL: |
| 323 m_pGlobalData->SetGlobalVariableNull(name); | 321 m_pGlobalData->SetGlobalVariableNull(name); |
| 324 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 322 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
| 325 break; | 323 break; |
| 326 } | 324 } |
| 327 } | 325 } |
| 328 } | 326 } |
| 329 } | 327 } |
| 330 | 328 |
| 331 void JSGlobalAlternate::ObjectToArray(v8::Local<v8::Object> pObj, | 329 void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, |
| 330 v8::Local<v8::Object> pObj, |
| 332 CJS_GlobalVariableArray& array) { | 331 CJS_GlobalVariableArray& array) { |
| 333 v8::Local<v8::Context> context = pObj->CreationContext(); | 332 v8::Local<v8::Context> context = pObj->CreationContext(); |
| 334 v8::Isolate* isolate = context->GetIsolate(); | 333 v8::Isolate* isolate = context->GetIsolate(); |
| 334 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); |
| 335 |
| 335 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); | 336 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); |
| 336 int nObjElements = pKeyList->Length(); | 337 int nObjElements = pKeyList->Length(); |
| 337 | |
| 338 for (int i = 0; i < nObjElements; i++) { | 338 for (int i = 0; i < nObjElements; i++) { |
| 339 CFX_WideString ws = | 339 CFX_WideString ws = |
| 340 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); | 340 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); |
| 341 CFX_ByteString sKey = ws.UTF8Encode(); | 341 CFX_ByteString sKey = ws.UTF8Encode(); |
| 342 | 342 |
| 343 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws.c_str()); | 343 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws.c_str()); |
| 344 switch (GET_VALUE_TYPE(v)) { | 344 switch (GET_VALUE_TYPE(v)) { |
| 345 case CJS_Value::VT_number: { | 345 case CJS_Value::VT_number: { |
| 346 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 346 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 347 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; | 347 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; |
| 348 pObjElement->sKey = sKey; | 348 pObjElement->sKey = sKey; |
| 349 pObjElement->dData = FXJS_ToNumber(isolate, v); | 349 pObjElement->dData = FXJS_ToNumber(isolate, v); |
| 350 array.Add(pObjElement); | 350 array.Add(pObjElement); |
| 351 } break; | 351 } break; |
| 352 case CJS_Value::VT_boolean: { | 352 case CJS_Value::VT_boolean: { |
| 353 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 353 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 354 pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 354 pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; |
| 355 pObjElement->sKey = sKey; | 355 pObjElement->sKey = sKey; |
| 356 pObjElement->dData = FXJS_ToBoolean(isolate, v); | 356 pObjElement->dData = FXJS_ToBoolean(isolate, v); |
| 357 array.Add(pObjElement); | 357 array.Add(pObjElement); |
| 358 } break; | 358 } break; |
| 359 case CJS_Value::VT_string: { | 359 case CJS_Value::VT_string: { |
| 360 CFX_ByteString sValue = | 360 CFX_ByteString sValue = |
| 361 CJS_Value(isolate, v, CJS_Value::VT_string).ToCFXByteString(); | 361 CJS_Value(pRuntime, v, CJS_Value::VT_string).ToCFXByteString(); |
| 362 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 362 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 363 pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; | 363 pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; |
| 364 pObjElement->sKey = sKey; | 364 pObjElement->sKey = sKey; |
| 365 pObjElement->sData = sValue; | 365 pObjElement->sData = sValue; |
| 366 array.Add(pObjElement); | 366 array.Add(pObjElement); |
| 367 } break; | 367 } break; |
| 368 case CJS_Value::VT_object: { | 368 case CJS_Value::VT_object: { |
| 369 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 369 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 370 pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; | 370 pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; |
| 371 pObjElement->sKey = sKey; | 371 pObjElement->sKey = sKey; |
| 372 ObjectToArray(FXJS_ToObject(isolate, v), pObjElement->objData); | 372 ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); |
| 373 array.Add(pObjElement); | 373 array.Add(pObjElement); |
| 374 } break; | 374 } break; |
| 375 case CJS_Value::VT_null: { | 375 case CJS_Value::VT_null: { |
| 376 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 376 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 377 pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; | 377 pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; |
| 378 pObjElement->sKey = sKey; | 378 pObjElement->sKey = sKey; |
| 379 array.Add(pObjElement); | 379 array.Add(pObjElement); |
| 380 } break; | 380 } break; |
| 381 default: | 381 default: |
| 382 break; | 382 break; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 return CJS_Value::VT_boolean; | 524 return CJS_Value::VT_boolean; |
| 525 if (nHash == JSCONST_nDateHash) | 525 if (nHash == JSCONST_nDateHash) |
| 526 return CJS_Value::VT_date; | 526 return CJS_Value::VT_date; |
| 527 if (nHash == JSCONST_nObjectHash) | 527 if (nHash == JSCONST_nObjectHash) |
| 528 return CJS_Value::VT_object; | 528 return CJS_Value::VT_object; |
| 529 if (nHash == JSCONST_nFXobjHash) | 529 if (nHash == JSCONST_nFXobjHash) |
| 530 return CJS_Value::VT_fxobject; | 530 return CJS_Value::VT_fxobject; |
| 531 | 531 |
| 532 return CJS_Value::VT_unknown; | 532 return CJS_Value::VT_unknown; |
| 533 } | 533 } |
| OLD | NEW |