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 |