| 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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 static_cast<CJS_Runtime*>(CFXJS_Engine::CurrentEngineFromIsolate( | 185 static_cast<CJS_Runtime*>(CFXJS_Engine::CurrentEngineFromIsolate( |
| 186 m_pJSObject->ToV8Object()->GetIsolate())); | 186 m_pJSObject->ToV8Object()->GetIsolate())); |
| 187 | 187 |
| 188 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 188 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { |
| 189 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 189 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); |
| 190 switch (pData->data.nType) { | 190 switch (pData->data.nType) { |
| 191 case JS_GlobalDataType::NUMBER: | 191 case JS_GlobalDataType::NUMBER: |
| 192 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NUMBER, | 192 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NUMBER, |
| 193 pData->data.dData, false, "", | 193 pData->data.dData, false, "", |
| 194 v8::Local<v8::Object>(), pData->bPersistent == 1); | 194 v8::Local<v8::Object>(), pData->bPersistent == 1); |
| 195 pRuntime->PutObjectNumber(m_pJSObject->ToV8Object(), | 195 pRuntime->PutObjectProperty(m_pJSObject->ToV8Object(), |
| 196 pData->data.sKey.UTF8Decode(), | 196 pData->data.sKey.UTF8Decode(), |
| 197 pData->data.dData); | 197 pRuntime->NewNumber(pData->data.dData)); |
| 198 break; | 198 break; |
| 199 case JS_GlobalDataType::BOOLEAN: | 199 case JS_GlobalDataType::BOOLEAN: |
| 200 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::BOOLEAN, 0, | 200 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::BOOLEAN, 0, |
| 201 (bool)(pData->data.bData == 1), "", | 201 pData->data.bData == 1, "", v8::Local<v8::Object>(), |
| 202 v8::Local<v8::Object>(), pData->bPersistent == 1); | 202 pData->bPersistent == 1); |
| 203 pRuntime->PutObjectBoolean(m_pJSObject->ToV8Object(), | 203 pRuntime->PutObjectProperty( |
| 204 pData->data.sKey.UTF8Decode(), | 204 m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), |
| 205 (bool)(pData->data.bData == 1)); | 205 pRuntime->NewBoolean(pData->data.bData == 1)); |
| 206 break; | 206 break; |
| 207 case JS_GlobalDataType::STRING: | 207 case JS_GlobalDataType::STRING: |
| 208 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::STRING, 0, | 208 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::STRING, 0, |
| 209 false, pData->data.sData, v8::Local<v8::Object>(), | 209 false, pData->data.sData, v8::Local<v8::Object>(), |
| 210 pData->bPersistent == 1); | 210 pData->bPersistent == 1); |
| 211 pRuntime->PutObjectString(m_pJSObject->ToV8Object(), | 211 pRuntime->PutObjectProperty( |
| 212 pData->data.sKey.UTF8Decode(), | 212 m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), |
| 213 pData->data.sData.UTF8Decode()); | 213 pRuntime->NewString(pData->data.sData.UTF8Decode())); |
| 214 break; | 214 break; |
| 215 case JS_GlobalDataType::OBJECT: { | 215 case JS_GlobalDataType::OBJECT: { |
| 216 v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1); | 216 v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1); |
| 217 | |
| 218 PutObjectProperty(pObj, &pData->data); | 217 PutObjectProperty(pObj, &pData->data); |
| 219 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::OBJECT, 0, | 218 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::OBJECT, 0, |
| 220 false, "", pObj, pData->bPersistent == 1); | 219 false, "", pObj, pData->bPersistent == 1); |
| 221 pRuntime->PutObjectObject(m_pJSObject->ToV8Object(), | 220 pRuntime->PutObjectProperty(m_pJSObject->ToV8Object(), |
| 222 pData->data.sKey.UTF8Decode(), pObj); | 221 pData->data.sKey.UTF8Decode(), pObj); |
| 223 } break; | 222 } break; |
| 224 case JS_GlobalDataType::NULLOBJ: | 223 case JS_GlobalDataType::NULLOBJ: |
| 225 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NULLOBJ, 0, | 224 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NULLOBJ, 0, |
| 226 false, "", v8::Local<v8::Object>(), | 225 false, "", v8::Local<v8::Object>(), |
| 227 pData->bPersistent == 1); | 226 pData->bPersistent == 1); |
| 228 pRuntime->PutObjectNull(m_pJSObject->ToV8Object(), | 227 pRuntime->PutObjectProperty(m_pJSObject->ToV8Object(), |
| 229 pData->data.sKey.UTF8Decode()); | 228 pData->data.sKey.UTF8Decode(), |
| 229 pRuntime->NewNull()); |
| 230 break; | 230 break; |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 | 234 |
| 235 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { | 235 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { |
| 236 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 236 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { |
| 237 CFX_ByteString name = it->first; | 237 CFX_ByteString name = it->first; |
| 238 JSGlobalData* pData = it->second; | 238 JSGlobalData* pData = it->second; |
| 239 if (pData->bDeleted) { | 239 if (pData->bDeleted) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 275 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); |
| 276 std::vector<CFX_WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj); | 276 std::vector<CFX_WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj); |
| 277 for (const auto& ws : pKeyList) { | 277 for (const auto& ws : pKeyList) { |
| 278 CFX_ByteString sKey = ws.UTF8Encode(); | 278 CFX_ByteString sKey = ws.UTF8Encode(); |
| 279 v8::Local<v8::Value> v = pRuntime->GetObjectProperty(pObj, ws); | 279 v8::Local<v8::Value> v = pRuntime->GetObjectProperty(pObj, ws); |
| 280 switch (CJS_Value::GetValueType(v)) { | 280 switch (CJS_Value::GetValueType(v)) { |
| 281 case CJS_Value::VT_number: { | 281 case CJS_Value::VT_number: { |
| 282 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 282 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 283 pObjElement->nType = JS_GlobalDataType::NUMBER; | 283 pObjElement->nType = JS_GlobalDataType::NUMBER; |
| 284 pObjElement->sKey = sKey; | 284 pObjElement->sKey = sKey; |
| 285 pObjElement->dData = pRuntime->ToNumber(v); | 285 pObjElement->dData = pRuntime->ToDouble(v); |
| 286 array.Add(pObjElement); | 286 array.Add(pObjElement); |
| 287 } break; | 287 } break; |
| 288 case CJS_Value::VT_boolean: { | 288 case CJS_Value::VT_boolean: { |
| 289 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 289 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
| 290 pObjElement->nType = JS_GlobalDataType::BOOLEAN; | 290 pObjElement->nType = JS_GlobalDataType::BOOLEAN; |
| 291 pObjElement->sKey = sKey; | 291 pObjElement->sKey = sKey; |
| 292 pObjElement->dData = pRuntime->ToBoolean(v); | 292 pObjElement->dData = pRuntime->ToBoolean(v); |
| 293 array.Add(pObjElement); | 293 array.Add(pObjElement); |
| 294 } break; | 294 } break; |
| 295 case CJS_Value::VT_string: { | 295 case CJS_Value::VT_string: { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 322 | 322 |
| 323 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 323 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, |
| 324 CJS_KeyValue* pData) { | 324 CJS_KeyValue* pData) { |
| 325 CJS_Runtime* pRuntime = CJS_Runtime::CurrentRuntimeFromIsolate( | 325 CJS_Runtime* pRuntime = CJS_Runtime::CurrentRuntimeFromIsolate( |
| 326 m_pJSObject->ToV8Object()->GetIsolate()); | 326 m_pJSObject->ToV8Object()->GetIsolate()); |
| 327 | 327 |
| 328 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 328 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { |
| 329 CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 329 CJS_KeyValue* pObjData = pData->objData.GetAt(i); |
| 330 switch (pObjData->nType) { | 330 switch (pObjData->nType) { |
| 331 case JS_GlobalDataType::NUMBER: | 331 case JS_GlobalDataType::NUMBER: |
| 332 pRuntime->PutObjectNumber(pObj, pObjData->sKey.UTF8Decode(), | 332 pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), |
| 333 pObjData->dData); | 333 pRuntime->NewNumber(pObjData->dData)); |
| 334 break; | 334 break; |
| 335 case JS_GlobalDataType::BOOLEAN: | 335 case JS_GlobalDataType::BOOLEAN: |
| 336 pRuntime->PutObjectBoolean(pObj, pObjData->sKey.UTF8Decode(), | 336 pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), |
| 337 pObjData->bData == 1); | 337 pRuntime->NewBoolean(pObjData->bData == 1)); |
| 338 break; | 338 break; |
| 339 case JS_GlobalDataType::STRING: | 339 case JS_GlobalDataType::STRING: |
| 340 pRuntime->PutObjectString(pObj, pObjData->sKey.UTF8Decode(), | 340 pRuntime->PutObjectProperty( |
| 341 pObjData->sData.UTF8Decode()); | 341 pObj, pObjData->sKey.UTF8Decode(), |
| 342 pRuntime->NewString(pObjData->sData.UTF8Decode())); |
| 342 break; | 343 break; |
| 343 case JS_GlobalDataType::OBJECT: { | 344 case JS_GlobalDataType::OBJECT: { |
| 344 v8::Local<v8::Object> pNewObj = pRuntime->NewFxDynamicObj(-1); | 345 v8::Local<v8::Object> pNewObj = pRuntime->NewFxDynamicObj(-1); |
| 345 PutObjectProperty(pNewObj, pObjData); | 346 PutObjectProperty(pNewObj, pObjData); |
| 346 pRuntime->PutObjectObject(pObj, pObjData->sKey.UTF8Decode(), pNewObj); | 347 pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), pNewObj); |
| 347 } break; | 348 } break; |
| 348 case JS_GlobalDataType::NULLOBJ: | 349 case JS_GlobalDataType::NULLOBJ: |
| 349 pRuntime->PutObjectNull(pObj, pObjData->sKey.UTF8Decode()); | 350 pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), |
| 351 pRuntime->NewNull()); |
| 350 break; | 352 break; |
| 351 } | 353 } |
| 352 } | 354 } |
| 353 } | 355 } |
| 354 | 356 |
| 355 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 357 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { |
| 356 for (const auto& pair : m_mapGlobal) { | 358 for (const auto& pair : m_mapGlobal) { |
| 357 delete pair.second; | 359 delete pair.second; |
| 358 } | 360 } |
| 359 m_mapGlobal.clear(); | 361 m_mapGlobal.clear(); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 pNewData->nType = JS_GlobalDataType::NULLOBJ; | 435 pNewData->nType = JS_GlobalDataType::NULLOBJ; |
| 434 pNewData->bPersistent = bDefaultPersistent; | 436 pNewData->bPersistent = bDefaultPersistent; |
| 435 } break; | 437 } break; |
| 436 default: | 438 default: |
| 437 return false; | 439 return false; |
| 438 } | 440 } |
| 439 | 441 |
| 440 m_mapGlobal[propname] = pNewData; | 442 m_mapGlobal[propname] = pNewData; |
| 441 return true; | 443 return true; |
| 442 } | 444 } |
| OLD | NEW |