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 "../../include/javascript/IJavaScript.h" | 7 #include "../../include/javascript/IJavaScript.h" |
8 #include "../../include/javascript/JS_Context.h" | 8 #include "../../include/javascript/JS_Context.h" |
9 #include "../../include/javascript/JS_Define.h" | 9 #include "../../include/javascript/JS_Define.h" |
10 #include "../../include/javascript/JS_EventHandler.h" | 10 #include "../../include/javascript/JS_EventHandler.h" |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 151 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, |
152 bData, "", v8::Local<v8::Object>(), FALSE); | 152 bData, "", v8::Local<v8::Object>(), FALSE); |
153 } | 153 } |
154 case VT_string: { | 154 case VT_string: { |
155 CFX_ByteString sData; | 155 CFX_ByteString sData; |
156 vp >> sData; | 156 vp >> sData; |
157 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, | 157 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, |
158 false, sData, v8::Local<v8::Object>(), FALSE); | 158 false, sData, v8::Local<v8::Object>(), FALSE); |
159 } | 159 } |
160 case VT_object: { | 160 case VT_object: { |
161 JSObject pData; | 161 v8::Local<v8::Object> pData; |
162 vp >> pData; | 162 vp >> pData; |
163 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, | 163 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, |
164 false, "", pData, FALSE); | 164 false, "", pData, FALSE); |
165 } | 165 } |
166 case VT_null: { | 166 case VT_null: { |
167 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, | 167 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, |
168 "", v8::Local<v8::Object>(), FALSE); | 168 "", v8::Local<v8::Object>(), FALSE); |
169 } | 169 } |
170 case VT_undefined: { | 170 case VT_undefined: { |
171 DelProperty(cc, propname, sError); | 171 DelProperty(cc, propname, sError); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 | 239 |
240 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 240 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { |
241 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 241 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); |
242 ASSERT(pData != NULL); | 242 ASSERT(pData != NULL); |
243 | 243 |
244 switch (pData->data.nType) { | 244 switch (pData->data.nType) { |
245 case JS_GLOBALDATA_TYPE_NUMBER: | 245 case JS_GLOBALDATA_TYPE_NUMBER: |
246 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, | 246 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, |
247 pData->data.dData, false, "", | 247 pData->data.dData, false, "", |
248 v8::Local<v8::Object>(), pData->bPersistent == 1); | 248 v8::Local<v8::Object>(), pData->bPersistent == 1); |
249 JS_PutObjectNumber(NULL, (JSFXObject)(*m_pJSObject), | 249 JS_PutObjectNumber(NULL, (v8::Local<v8::Object>)(*m_pJSObject), |
250 pData->data.sKey.UTF8Decode().c_str(), | 250 pData->data.sKey.UTF8Decode().c_str(), |
251 pData->data.dData); | 251 pData->data.dData); |
252 break; | 252 break; |
253 case JS_GLOBALDATA_TYPE_BOOLEAN: | 253 case JS_GLOBALDATA_TYPE_BOOLEAN: |
254 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 254 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, |
255 (bool)(pData->data.bData == 1), "", | 255 (bool)(pData->data.bData == 1), "", |
256 v8::Local<v8::Object>(), pData->bPersistent == 1); | 256 v8::Local<v8::Object>(), pData->bPersistent == 1); |
257 JS_PutObjectBoolean(NULL, (JSFXObject)(*m_pJSObject), | 257 JS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)(*m_pJSObject), |
258 pData->data.sKey.UTF8Decode().c_str(), | 258 pData->data.sKey.UTF8Decode().c_str(), |
259 (bool)(pData->data.bData == 1)); | 259 (bool)(pData->data.bData == 1)); |
260 break; | 260 break; |
261 case JS_GLOBALDATA_TYPE_STRING: | 261 case JS_GLOBALDATA_TYPE_STRING: |
262 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, | 262 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, |
263 false, pData->data.sData, v8::Local<v8::Object>(), | 263 false, pData->data.sData, v8::Local<v8::Object>(), |
264 pData->bPersistent == 1); | 264 pData->bPersistent == 1); |
265 JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject), | 265 JS_PutObjectString(NULL, (v8::Local<v8::Object>)(*m_pJSObject), |
266 pData->data.sKey.UTF8Decode().c_str(), | 266 pData->data.sKey.UTF8Decode().c_str(), |
267 pData->data.sData.UTF8Decode().c_str()); | 267 pData->data.sData.UTF8Decode().c_str()); |
268 break; | 268 break; |
269 case JS_GLOBALDATA_TYPE_OBJECT: { | 269 case JS_GLOBALDATA_TYPE_OBJECT: { |
270 IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); | 270 v8::Isolate* pRuntime = |
| 271 JS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject)); |
271 v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); | 272 v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); |
272 | 273 |
273 PutObjectProperty(pObj, &pData->data); | 274 PutObjectProperty(pObj, &pData->data); |
274 | 275 |
275 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, | 276 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, |
276 false, "", (JSObject)pObj, pData->bPersistent == 1); | 277 false, "", (v8::Local<v8::Object>)pObj, |
277 JS_PutObjectObject(NULL, (JSFXObject)(*m_pJSObject), | 278 pData->bPersistent == 1); |
| 279 JS_PutObjectObject(NULL, (v8::Local<v8::Object>)(*m_pJSObject), |
278 pData->data.sKey.UTF8Decode().c_str(), | 280 pData->data.sKey.UTF8Decode().c_str(), |
279 (JSObject)pObj); | 281 (v8::Local<v8::Object>)pObj); |
280 } break; | 282 } break; |
281 case JS_GLOBALDATA_TYPE_NULL: | 283 case JS_GLOBALDATA_TYPE_NULL: |
282 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, | 284 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, |
283 "", v8::Local<v8::Object>(), | 285 "", v8::Local<v8::Object>(), |
284 pData->bPersistent == 1); | 286 pData->bPersistent == 1); |
285 JS_PutObjectNull(NULL, (JSFXObject)(*m_pJSObject), | 287 JS_PutObjectNull(NULL, (v8::Local<v8::Object>)(*m_pJSObject), |
286 pData->data.sKey.UTF8Decode().c_str()); | 288 pData->data.sKey.UTF8Decode().c_str()); |
287 break; | 289 break; |
288 } | 290 } |
289 } | 291 } |
290 } | 292 } |
291 | 293 |
292 void JSGlobalAlternate::CommitGlobalPersisitentVariables() { | 294 void JSGlobalAlternate::CommitGlobalPersisitentVariables() { |
293 ASSERT(m_pGlobalData); | 295 ASSERT(m_pGlobalData); |
294 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 296 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { |
295 CFX_ByteString name = it->first; | 297 CFX_ByteString name = it->first; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 393 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, |
392 CJS_KeyValue* pData) { | 394 CJS_KeyValue* pData) { |
393 ASSERT(pData != NULL); | 395 ASSERT(pData != NULL); |
394 | 396 |
395 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 397 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { |
396 CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 398 CJS_KeyValue* pObjData = pData->objData.GetAt(i); |
397 ASSERT(pObjData != NULL); | 399 ASSERT(pObjData != NULL); |
398 | 400 |
399 switch (pObjData->nType) { | 401 switch (pObjData->nType) { |
400 case JS_GLOBALDATA_TYPE_NUMBER: | 402 case JS_GLOBALDATA_TYPE_NUMBER: |
401 JS_PutObjectNumber(NULL, (JSObject)pObj, | 403 JS_PutObjectNumber(NULL, (v8::Local<v8::Object>)pObj, |
402 pObjData->sKey.UTF8Decode().c_str(), | 404 pObjData->sKey.UTF8Decode().c_str(), |
403 pObjData->dData); | 405 pObjData->dData); |
404 break; | 406 break; |
405 case JS_GLOBALDATA_TYPE_BOOLEAN: | 407 case JS_GLOBALDATA_TYPE_BOOLEAN: |
406 JS_PutObjectBoolean(NULL, (JSObject)pObj, | 408 JS_PutObjectBoolean(NULL, (v8::Local<v8::Object>)pObj, |
407 pObjData->sKey.UTF8Decode().c_str(), | 409 pObjData->sKey.UTF8Decode().c_str(), |
408 (bool)(pObjData->bData == 1)); | 410 (bool)(pObjData->bData == 1)); |
409 break; | 411 break; |
410 case JS_GLOBALDATA_TYPE_STRING: | 412 case JS_GLOBALDATA_TYPE_STRING: |
411 JS_PutObjectString(NULL, (JSObject)pObj, | 413 JS_PutObjectString(NULL, (v8::Local<v8::Object>)pObj, |
412 pObjData->sKey.UTF8Decode().c_str(), | 414 pObjData->sKey.UTF8Decode().c_str(), |
413 pObjData->sData.UTF8Decode().c_str()); | 415 pObjData->sData.UTF8Decode().c_str()); |
414 break; | 416 break; |
415 case JS_GLOBALDATA_TYPE_OBJECT: { | 417 case JS_GLOBALDATA_TYPE_OBJECT: { |
416 IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); | 418 v8::Isolate* pRuntime = |
| 419 JS_GetRuntime((v8::Local<v8::Object>)(*m_pJSObject)); |
417 v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); | 420 v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); |
418 PutObjectProperty(pNewObj, pObjData); | 421 PutObjectProperty(pNewObj, pObjData); |
419 JS_PutObjectObject(NULL, (JSObject)pObj, | 422 JS_PutObjectObject(NULL, (v8::Local<v8::Object>)pObj, |
420 pObjData->sKey.UTF8Decode().c_str(), | 423 pObjData->sKey.UTF8Decode().c_str(), |
421 (JSObject)pNewObj); | 424 (v8::Local<v8::Object>)pNewObj); |
422 } break; | 425 } break; |
423 case JS_GLOBALDATA_TYPE_NULL: | 426 case JS_GLOBALDATA_TYPE_NULL: |
424 JS_PutObjectNull(NULL, (JSObject)pObj, | 427 JS_PutObjectNull(NULL, (v8::Local<v8::Object>)pObj, |
425 pObjData->sKey.UTF8Decode().c_str()); | 428 pObjData->sKey.UTF8Decode().c_str()); |
426 break; | 429 break; |
427 } | 430 } |
428 } | 431 } |
429 } | 432 } |
430 | 433 |
431 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 434 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { |
432 for (const auto& pair : m_mapGlobal) { | 435 for (const auto& pair : m_mapGlobal) { |
433 delete pair.second; | 436 delete pair.second; |
434 } | 437 } |
435 m_mapGlobal.clear(); | 438 m_mapGlobal.clear(); |
436 } | 439 } |
437 | 440 |
438 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, | 441 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, |
439 int nType, | 442 int nType, |
440 double dData, | 443 double dData, |
441 bool bData, | 444 bool bData, |
442 const CFX_ByteString& sData, | 445 const CFX_ByteString& sData, |
443 JSObject pData, | 446 v8::Local<v8::Object> pData, |
444 bool bDefaultPersistent) { | 447 bool bDefaultPersistent) { |
445 if (!propname) | 448 if (!propname) |
446 return FALSE; | 449 return FALSE; |
447 | 450 |
448 auto it = m_mapGlobal.find(propname); | 451 auto it = m_mapGlobal.find(propname); |
449 if (it != m_mapGlobal.end()) { | 452 if (it != m_mapGlobal.end()) { |
450 JSGlobalData* pTemp = it->second; | 453 JSGlobalData* pTemp = it->second; |
451 if (pTemp->bDeleted || pTemp->nType != nType) { | 454 if (pTemp->bDeleted || pTemp->nType != nType) { |
452 pTemp->dData = 0; | 455 pTemp->dData = 0; |
453 pTemp->bData = 0; | 456 pTemp->bData = 0; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 return VT_boolean; | 535 return VT_boolean; |
533 if (nHash == JSCONST_nDateHash) | 536 if (nHash == JSCONST_nDateHash) |
534 return VT_date; | 537 return VT_date; |
535 if (nHash == JSCONST_nObjectHash) | 538 if (nHash == JSCONST_nObjectHash) |
536 return VT_object; | 539 return VT_object; |
537 if (nHash == JSCONST_nFXobjHash) | 540 if (nHash == JSCONST_nFXobjHash) |
538 return VT_fxobject; | 541 return VT_fxobject; |
539 | 542 |
540 return VT_unknown; | 543 return VT_unknown; |
541 } | 544 } |
OLD | NEW |