| 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/include/jsapi/fxjs_v8.h" | 7 #include "fpdfsdk/include/jsapi/fxjs_v8.h" |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 int nObjDefnID, | 220 int nObjDefnID, |
| 221 const wchar_t* sMethodName, | 221 const wchar_t* sMethodName, |
| 222 v8::FunctionCallback pMethodCall) { | 222 v8::FunctionCallback pMethodCall) { |
| 223 v8::Isolate::Scope isolate_scope(pIsolate); | 223 v8::Isolate::Scope isolate_scope(pIsolate); |
| 224 v8::HandleScope handle_scope(pIsolate); | 224 v8::HandleScope handle_scope(pIsolate); |
| 225 CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode(); | 225 CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode(); |
| 226 CFXJS_ObjDefinition* pObjDef = | 226 CFXJS_ObjDefinition* pObjDef = |
| 227 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); | 227 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); |
| 228 pObjDef->GetInstanceTemplate()->Set( | 228 pObjDef->GetInstanceTemplate()->Set( |
| 229 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), | 229 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
| 230 v8::NewStringType::kNormal).ToLocalChecked(), | 230 v8::NewStringType::kNormal) |
| 231 .ToLocalChecked(), |
| 231 v8::FunctionTemplate::New(pIsolate, pMethodCall, v8::Local<v8::Value>(), | 232 v8::FunctionTemplate::New(pIsolate, pMethodCall, v8::Local<v8::Value>(), |
| 232 pObjDef->GetSignature()), | 233 pObjDef->GetSignature()), |
| 233 v8::ReadOnly); | 234 v8::ReadOnly); |
| 234 } | 235 } |
| 235 | 236 |
| 236 void FXJS_DefineObjProperty(v8::Isolate* pIsolate, | 237 void FXJS_DefineObjProperty(v8::Isolate* pIsolate, |
| 237 int nObjDefnID, | 238 int nObjDefnID, |
| 238 const wchar_t* sPropName, | 239 const wchar_t* sPropName, |
| 239 v8::AccessorGetterCallback pPropGet, | 240 v8::AccessorGetterCallback pPropGet, |
| 240 v8::AccessorSetterCallback pPropPut) { | 241 v8::AccessorSetterCallback pPropPut) { |
| 241 v8::Isolate::Scope isolate_scope(pIsolate); | 242 v8::Isolate::Scope isolate_scope(pIsolate); |
| 242 v8::HandleScope handle_scope(pIsolate); | 243 v8::HandleScope handle_scope(pIsolate); |
| 243 CFX_ByteString bsPropertyName = CFX_WideString(sPropName).UTF8Encode(); | 244 CFX_ByteString bsPropertyName = CFX_WideString(sPropName).UTF8Encode(); |
| 244 CFXJS_ObjDefinition* pObjDef = | 245 CFXJS_ObjDefinition* pObjDef = |
| 245 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); | 246 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); |
| 246 pObjDef->GetInstanceTemplate()->SetAccessor( | 247 pObjDef->GetInstanceTemplate()->SetAccessor( |
| 247 v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(), | 248 v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(), |
| 248 v8::NewStringType::kNormal).ToLocalChecked(), | 249 v8::NewStringType::kNormal) |
| 250 .ToLocalChecked(), |
| 249 pPropGet, pPropPut); | 251 pPropGet, pPropPut); |
| 250 } | 252 } |
| 251 | 253 |
| 252 void FXJS_DefineObjAllProperties(v8::Isolate* pIsolate, | 254 void FXJS_DefineObjAllProperties(v8::Isolate* pIsolate, |
| 253 int nObjDefnID, | 255 int nObjDefnID, |
| 254 v8::NamedPropertyQueryCallback pPropQurey, | 256 v8::NamedPropertyQueryCallback pPropQurey, |
| 255 v8::NamedPropertyGetterCallback pPropGet, | 257 v8::NamedPropertyGetterCallback pPropGet, |
| 256 v8::NamedPropertySetterCallback pPropPut, | 258 v8::NamedPropertySetterCallback pPropPut, |
| 257 v8::NamedPropertyDeleterCallback pPropDel) { | 259 v8::NamedPropertyDeleterCallback pPropDel) { |
| 258 v8::Isolate::Scope isolate_scope(pIsolate); | 260 v8::Isolate::Scope isolate_scope(pIsolate); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 274 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); | 276 CFXJS_ObjDefinition::ForID(pIsolate, nObjDefnID); |
| 275 pObjDef->GetInstanceTemplate()->Set(pIsolate, bsConstName.c_str(), pDefault); | 277 pObjDef->GetInstanceTemplate()->Set(pIsolate, bsConstName.c_str(), pDefault); |
| 276 } | 278 } |
| 277 | 279 |
| 278 void FXJS_DefineGlobalMethod(v8::Isolate* pIsolate, | 280 void FXJS_DefineGlobalMethod(v8::Isolate* pIsolate, |
| 279 const wchar_t* sMethodName, | 281 const wchar_t* sMethodName, |
| 280 v8::FunctionCallback pMethodCall) { | 282 v8::FunctionCallback pMethodCall) { |
| 281 v8::Isolate::Scope isolate_scope(pIsolate); | 283 v8::Isolate::Scope isolate_scope(pIsolate); |
| 282 v8::HandleScope handle_scope(pIsolate); | 284 v8::HandleScope handle_scope(pIsolate); |
| 283 CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode(); | 285 CFX_ByteString bsMethodName = CFX_WideString(sMethodName).UTF8Encode(); |
| 284 GetGlobalObjectTemplate(pIsolate)->Set( | 286 GetGlobalObjectTemplate(pIsolate) |
| 285 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), | 287 ->Set(v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
| 286 v8::NewStringType::kNormal).ToLocalChecked(), | 288 v8::NewStringType::kNormal) |
| 287 v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly); | 289 .ToLocalChecked(), |
| 290 v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly); |
| 288 } | 291 } |
| 289 | 292 |
| 290 void FXJS_DefineGlobalConst(v8::Isolate* pIsolate, | 293 void FXJS_DefineGlobalConst(v8::Isolate* pIsolate, |
| 291 const wchar_t* sConstName, | 294 const wchar_t* sConstName, |
| 292 v8::FunctionCallback pConstGetter) { | 295 v8::FunctionCallback pConstGetter) { |
| 293 v8::Isolate::Scope isolate_scope(pIsolate); | 296 v8::Isolate::Scope isolate_scope(pIsolate); |
| 294 v8::HandleScope handle_scope(pIsolate); | 297 v8::HandleScope handle_scope(pIsolate); |
| 295 CFX_ByteString bsConst = CFX_WideString(sConstName).UTF8Encode(); | 298 CFX_ByteString bsConst = CFX_WideString(sConstName).UTF8Encode(); |
| 296 GetGlobalObjectTemplate(pIsolate) | 299 GetGlobalObjectTemplate(pIsolate) |
| 297 ->SetAccessorProperty(v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), | 300 ->SetAccessorProperty(v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 | 340 |
| 338 if (pObjDef->m_pConstructor) | 341 if (pObjDef->m_pConstructor) |
| 339 pObjDef->m_pConstructor(pIRuntime, v8Context->Global() | 342 pObjDef->m_pConstructor(pIRuntime, v8Context->Global() |
| 340 ->GetPrototype() | 343 ->GetPrototype() |
| 341 ->ToObject(v8Context) | 344 ->ToObject(v8Context) |
| 342 .ToLocalChecked()); | 345 .ToLocalChecked()); |
| 343 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) { | 346 } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) { |
| 344 CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode(); | 347 CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode(); |
| 345 v8::Local<v8::String> m_ObjName = | 348 v8::Local<v8::String> m_ObjName = |
| 346 v8::String::NewFromUtf8(pIsolate, bs.c_str(), | 349 v8::String::NewFromUtf8(pIsolate, bs.c_str(), |
| 347 v8::NewStringType::kNormal, | 350 v8::NewStringType::kNormal, bs.GetLength()) |
| 348 bs.GetLength()).ToLocalChecked(); | 351 .ToLocalChecked(); |
| 349 | 352 |
| 350 v8::Local<v8::Object> obj = | 353 v8::Local<v8::Object> obj = |
| 351 FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i, true); | 354 FXJS_NewFxDynamicObj(pIsolate, pIRuntime, i, true); |
| 352 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust(); | 355 v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust(); |
| 353 pStaticObjects->at(i) = new v8::Global<v8::Object>(pIsolate, obj); | 356 pStaticObjects->at(i) = new v8::Global<v8::Object>(pIsolate, obj); |
| 354 } | 357 } |
| 355 } | 358 } |
| 356 pV8PersistentContext->Reset(pIsolate, v8Context); | 359 pV8PersistentContext->Reset(pIsolate, v8Context); |
| 357 } | 360 } |
| 358 | 361 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 | 421 |
| 419 int FXJS_Execute(v8::Isolate* pIsolate, | 422 int FXJS_Execute(v8::Isolate* pIsolate, |
| 420 IJS_Context* pJSContext, | 423 IJS_Context* pJSContext, |
| 421 const wchar_t* script, | 424 const wchar_t* script, |
| 422 FXJSErr* pError) { | 425 FXJSErr* pError) { |
| 423 v8::Isolate::Scope isolate_scope(pIsolate); | 426 v8::Isolate::Scope isolate_scope(pIsolate); |
| 424 v8::TryCatch try_catch(pIsolate); | 427 v8::TryCatch try_catch(pIsolate); |
| 425 CFX_ByteString bsScript = CFX_WideString(script).UTF8Encode(); | 428 CFX_ByteString bsScript = CFX_WideString(script).UTF8Encode(); |
| 426 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 429 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
| 427 v8::Local<v8::Script> compiled_script; | 430 v8::Local<v8::Script> compiled_script; |
| 428 if (!v8::Script::Compile( | 431 if (!v8::Script::Compile(context, |
| 429 context, v8::String::NewFromUtf8( | 432 v8::String::NewFromUtf8(pIsolate, bsScript.c_str(), |
| 430 pIsolate, bsScript.c_str(), v8::NewStringType::kNormal, | 433 v8::NewStringType::kNormal, |
| 431 bsScript.GetLength()).ToLocalChecked()) | 434 bsScript.GetLength()) |
| 435 .ToLocalChecked()) |
| 432 .ToLocal(&compiled_script)) { | 436 .ToLocal(&compiled_script)) { |
| 433 v8::String::Utf8Value error(try_catch.Exception()); | 437 v8::String::Utf8Value error(try_catch.Exception()); |
| 434 // TODO(tsepez): return error via pError->message. | 438 // TODO(tsepez): return error via pError->message. |
| 435 return -1; | 439 return -1; |
| 436 } | 440 } |
| 437 | 441 |
| 438 v8::Local<v8::Value> result; | 442 v8::Local<v8::Value> result; |
| 439 if (!compiled_script->Run(context).ToLocal(&result)) { | 443 if (!compiled_script->Run(context).ToLocal(&result)) { |
| 440 v8::String::Utf8Value error(try_catch.Exception()); | 444 v8::String::Utf8Value error(try_catch.Exception()); |
| 441 // TODO(tsepez): return error via pError->message. | 445 // TODO(tsepez): return error via pError->message. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 if (pPerObjectData) | 505 if (pPerObjectData) |
| 502 return pPerObjectData->m_ObjDefID; | 506 return pPerObjectData->m_ObjDefID; |
| 503 return -1; | 507 return -1; |
| 504 } | 508 } |
| 505 | 509 |
| 506 void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) { | 510 void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) { |
| 507 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t | 511 // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t |
| 508 // wide-strings isn't handled by v8, so use UTF8 as a common | 512 // wide-strings isn't handled by v8, so use UTF8 as a common |
| 509 // intermediate format. | 513 // intermediate format. |
| 510 CFX_ByteString utf8_message = message.UTF8Encode(); | 514 CFX_ByteString utf8_message = message.UTF8Encode(); |
| 511 pIsolate->ThrowException( | 515 pIsolate->ThrowException(v8::String::NewFromUtf8(pIsolate, |
| 512 v8::String::NewFromUtf8(pIsolate, utf8_message.c_str(), | 516 utf8_message.c_str(), |
| 513 v8::NewStringType::kNormal).ToLocalChecked()); | 517 v8::NewStringType::kNormal) |
| 518 .ToLocalChecked()); |
| 514 } | 519 } |
| 515 | 520 |
| 516 const wchar_t* FXJS_GetTypeof(v8::Local<v8::Value> pObj) { | 521 const wchar_t* FXJS_GetTypeof(v8::Local<v8::Value> pObj) { |
| 517 if (pObj.IsEmpty()) | 522 if (pObj.IsEmpty()) |
| 518 return NULL; | 523 return NULL; |
| 519 if (pObj->IsString()) | 524 if (pObj->IsString()) |
| 520 return kFXJSValueNameString; | 525 return kFXJSValueNameString; |
| 521 if (pObj->IsNumber()) | 526 if (pObj->IsNumber()) |
| 522 return kFXJSValueNameNumber; | 527 return kFXJSValueNameNumber; |
| 523 if (pObj->IsBoolean()) | 528 if (pObj->IsBoolean()) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 } | 583 } |
| 579 | 584 |
| 580 v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate, | 585 v8::Local<v8::String> FXJS_WSToJSString(v8::Isolate* pIsolate, |
| 581 const wchar_t* PropertyName, | 586 const wchar_t* PropertyName, |
| 582 int Len) { | 587 int Len) { |
| 583 CFX_WideString ws = CFX_WideString(PropertyName, Len); | 588 CFX_WideString ws = CFX_WideString(PropertyName, Len); |
| 584 CFX_ByteString bs = ws.UTF8Encode(); | 589 CFX_ByteString bs = ws.UTF8Encode(); |
| 585 if (!pIsolate) | 590 if (!pIsolate) |
| 586 pIsolate = v8::Isolate::GetCurrent(); | 591 pIsolate = v8::Isolate::GetCurrent(); |
| 587 return v8::String::NewFromUtf8(pIsolate, bs.c_str(), | 592 return v8::String::NewFromUtf8(pIsolate, bs.c_str(), |
| 588 v8::NewStringType::kNormal).ToLocalChecked(); | 593 v8::NewStringType::kNormal) |
| 594 .ToLocalChecked(); |
| 589 } | 595 } |
| 590 | 596 |
| 591 v8::Local<v8::Value> FXJS_GetObjectElement(v8::Isolate* pIsolate, | 597 v8::Local<v8::Value> FXJS_GetObjectElement(v8::Isolate* pIsolate, |
| 592 v8::Local<v8::Object> pObj, | 598 v8::Local<v8::Object> pObj, |
| 593 const wchar_t* PropertyName) { | 599 const wchar_t* PropertyName) { |
| 594 if (pObj.IsEmpty()) | 600 if (pObj.IsEmpty()) |
| 595 return v8::Local<v8::Value>(); | 601 return v8::Local<v8::Value>(); |
| 596 v8::Local<v8::Value> val; | 602 v8::Local<v8::Value> val; |
| 597 if (!pObj->Get(pIsolate->GetCurrentContext(), | 603 if (!pObj->Get(pIsolate->GetCurrentContext(), |
| 598 FXJS_WSToJSString(pIsolate, PropertyName)).ToLocal(&val)) | 604 FXJS_WSToJSString(pIsolate, PropertyName)) |
| 605 .ToLocal(&val)) |
| 599 return v8::Local<v8::Value>(); | 606 return v8::Local<v8::Value>(); |
| 600 return val; | 607 return val; |
| 601 } | 608 } |
| 602 | 609 |
| 603 v8::Local<v8::Array> FXJS_GetObjectElementNames(v8::Isolate* pIsolate, | 610 v8::Local<v8::Array> FXJS_GetObjectElementNames(v8::Isolate* pIsolate, |
| 604 v8::Local<v8::Object> pObj) { | 611 v8::Local<v8::Object> pObj) { |
| 605 if (pObj.IsEmpty()) | 612 if (pObj.IsEmpty()) |
| 606 return v8::Local<v8::Array>(); | 613 return v8::Local<v8::Array>(); |
| 607 v8::Local<v8::Array> val; | 614 v8::Local<v8::Array> val; |
| 608 if (!pObj->GetPropertyNames(pIsolate->GetCurrentContext()).ToLocal(&val)) | 615 if (!pObj->GetPropertyNames(pIsolate->GetCurrentContext()).ToLocal(&val)) |
| 609 return v8::Local<v8::Array>(); | 616 return v8::Local<v8::Array>(); |
| 610 return val; | 617 return val; |
| 611 } | 618 } |
| 612 | 619 |
| 613 void FXJS_PutObjectString(v8::Isolate* pIsolate, | 620 void FXJS_PutObjectString(v8::Isolate* pIsolate, |
| 614 v8::Local<v8::Object> pObj, | 621 v8::Local<v8::Object> pObj, |
| 615 const wchar_t* PropertyName, | 622 const wchar_t* PropertyName, |
| 616 const wchar_t* sValue) { | 623 const wchar_t* sValue) { |
| 617 if (pObj.IsEmpty()) | 624 if (pObj.IsEmpty()) |
| 618 return; | 625 return; |
| 619 pObj->Set(pIsolate->GetCurrentContext(), | 626 pObj->Set(pIsolate->GetCurrentContext(), |
| 620 FXJS_WSToJSString(pIsolate, PropertyName), | 627 FXJS_WSToJSString(pIsolate, PropertyName), |
| 621 FXJS_WSToJSString(pIsolate, sValue)).FromJust(); | 628 FXJS_WSToJSString(pIsolate, sValue)) |
| 629 .FromJust(); |
| 622 } | 630 } |
| 623 | 631 |
| 624 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, | 632 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, |
| 625 v8::Local<v8::Object> pObj, | 633 v8::Local<v8::Object> pObj, |
| 626 const wchar_t* PropertyName, | 634 const wchar_t* PropertyName, |
| 627 int nValue) { | 635 int nValue) { |
| 628 if (pObj.IsEmpty()) | 636 if (pObj.IsEmpty()) |
| 629 return; | 637 return; |
| 630 pObj->Set(pIsolate->GetCurrentContext(), | 638 pObj->Set(pIsolate->GetCurrentContext(), |
| 631 FXJS_WSToJSString(pIsolate, PropertyName), | 639 FXJS_WSToJSString(pIsolate, PropertyName), |
| 632 v8::Int32::New(pIsolate, nValue)).FromJust(); | 640 v8::Int32::New(pIsolate, nValue)) |
| 641 .FromJust(); |
| 633 } | 642 } |
| 634 | 643 |
| 635 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, | 644 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, |
| 636 v8::Local<v8::Object> pObj, | 645 v8::Local<v8::Object> pObj, |
| 637 const wchar_t* PropertyName, | 646 const wchar_t* PropertyName, |
| 638 float fValue) { | 647 float fValue) { |
| 639 if (pObj.IsEmpty()) | 648 if (pObj.IsEmpty()) |
| 640 return; | 649 return; |
| 641 pObj->Set(pIsolate->GetCurrentContext(), | 650 pObj->Set(pIsolate->GetCurrentContext(), |
| 642 FXJS_WSToJSString(pIsolate, PropertyName), | 651 FXJS_WSToJSString(pIsolate, PropertyName), |
| 643 v8::Number::New(pIsolate, (double)fValue)).FromJust(); | 652 v8::Number::New(pIsolate, (double)fValue)) |
| 653 .FromJust(); |
| 644 } | 654 } |
| 645 | 655 |
| 646 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, | 656 void FXJS_PutObjectNumber(v8::Isolate* pIsolate, |
| 647 v8::Local<v8::Object> pObj, | 657 v8::Local<v8::Object> pObj, |
| 648 const wchar_t* PropertyName, | 658 const wchar_t* PropertyName, |
| 649 double dValue) { | 659 double dValue) { |
| 650 if (pObj.IsEmpty()) | 660 if (pObj.IsEmpty()) |
| 651 return; | 661 return; |
| 652 pObj->Set(pIsolate->GetCurrentContext(), | 662 pObj->Set(pIsolate->GetCurrentContext(), |
| 653 FXJS_WSToJSString(pIsolate, PropertyName), | 663 FXJS_WSToJSString(pIsolate, PropertyName), |
| 654 v8::Number::New(pIsolate, (double)dValue)).FromJust(); | 664 v8::Number::New(pIsolate, (double)dValue)) |
| 665 .FromJust(); |
| 655 } | 666 } |
| 656 | 667 |
| 657 void FXJS_PutObjectBoolean(v8::Isolate* pIsolate, | 668 void FXJS_PutObjectBoolean(v8::Isolate* pIsolate, |
| 658 v8::Local<v8::Object> pObj, | 669 v8::Local<v8::Object> pObj, |
| 659 const wchar_t* PropertyName, | 670 const wchar_t* PropertyName, |
| 660 bool bValue) { | 671 bool bValue) { |
| 661 if (pObj.IsEmpty()) | 672 if (pObj.IsEmpty()) |
| 662 return; | 673 return; |
| 663 pObj->Set(pIsolate->GetCurrentContext(), | 674 pObj->Set(pIsolate->GetCurrentContext(), |
| 664 FXJS_WSToJSString(pIsolate, PropertyName), | 675 FXJS_WSToJSString(pIsolate, PropertyName), |
| 665 v8::Boolean::New(pIsolate, bValue)).FromJust(); | 676 v8::Boolean::New(pIsolate, bValue)) |
| 677 .FromJust(); |
| 666 } | 678 } |
| 667 | 679 |
| 668 void FXJS_PutObjectObject(v8::Isolate* pIsolate, | 680 void FXJS_PutObjectObject(v8::Isolate* pIsolate, |
| 669 v8::Local<v8::Object> pObj, | 681 v8::Local<v8::Object> pObj, |
| 670 const wchar_t* PropertyName, | 682 const wchar_t* PropertyName, |
| 671 v8::Local<v8::Object> pPut) { | 683 v8::Local<v8::Object> pPut) { |
| 672 if (pObj.IsEmpty()) | 684 if (pObj.IsEmpty()) |
| 673 return; | 685 return; |
| 674 pObj->Set(pIsolate->GetCurrentContext(), | 686 pObj->Set(pIsolate->GetCurrentContext(), |
| 675 FXJS_WSToJSString(pIsolate, PropertyName), pPut).FromJust(); | 687 FXJS_WSToJSString(pIsolate, PropertyName), pPut) |
| 688 .FromJust(); |
| 676 } | 689 } |
| 677 | 690 |
| 678 void FXJS_PutObjectNull(v8::Isolate* pIsolate, | 691 void FXJS_PutObjectNull(v8::Isolate* pIsolate, |
| 679 v8::Local<v8::Object> pObj, | 692 v8::Local<v8::Object> pObj, |
| 680 const wchar_t* PropertyName) { | 693 const wchar_t* PropertyName) { |
| 681 if (pObj.IsEmpty()) | 694 if (pObj.IsEmpty()) |
| 682 return; | 695 return; |
| 683 pObj->Set(pIsolate->GetCurrentContext(), | 696 pObj->Set(pIsolate->GetCurrentContext(), |
| 684 FXJS_WSToJSString(pIsolate, PropertyName), | 697 FXJS_WSToJSString(pIsolate, PropertyName), v8::Local<v8::Object>()) |
| 685 v8::Local<v8::Object>()).FromJust(); | 698 .FromJust(); |
| 686 } | 699 } |
| 687 | 700 |
| 688 v8::Local<v8::Array> FXJS_NewArray(v8::Isolate* pIsolate) { | 701 v8::Local<v8::Array> FXJS_NewArray(v8::Isolate* pIsolate) { |
| 689 return v8::Array::New(pIsolate); | 702 return v8::Array::New(pIsolate); |
| 690 } | 703 } |
| 691 | 704 |
| 692 unsigned FXJS_PutArrayElement(v8::Isolate* pIsolate, | 705 unsigned FXJS_PutArrayElement(v8::Isolate* pIsolate, |
| 693 v8::Local<v8::Array> pArray, | 706 v8::Local<v8::Array> pArray, |
| 694 unsigned index, | 707 unsigned index, |
| 695 v8::Local<v8::Value> pValue) { | 708 v8::Local<v8::Value> pValue) { |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 v8::Local<v8::Value> pValue) { | 814 v8::Local<v8::Value> pValue) { |
| 802 if (pValue.IsEmpty()) | 815 if (pValue.IsEmpty()) |
| 803 return v8::Local<v8::Array>(); | 816 return v8::Local<v8::Array>(); |
| 804 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); | 817 v8::Local<v8::Context> context = pIsolate->GetCurrentContext(); |
| 805 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 818 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); |
| 806 } | 819 } |
| 807 | 820 |
| 808 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { | 821 void FXJS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) { |
| 809 pTo = pFrom; | 822 pTo = pFrom; |
| 810 } | 823 } |
| 811 | |
| 812 | |
| OLD | NEW |