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 |