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