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 "fxjs/fxjs_v8.h" | 7 #include "fxjs/fxjs_v8.h" |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 if (pObj.IsEmpty()) | 589 if (pObj.IsEmpty()) |
590 return std::vector<CFX_WideString>(); | 590 return std::vector<CFX_WideString>(); |
591 | 591 |
592 v8::Local<v8::Array> val; | 592 v8::Local<v8::Array> val; |
593 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 593 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
594 if (!pObj->GetPropertyNames(context).ToLocal(&val)) | 594 if (!pObj->GetPropertyNames(context).ToLocal(&val)) |
595 return std::vector<CFX_WideString>(); | 595 return std::vector<CFX_WideString>(); |
596 | 596 |
597 std::vector<CFX_WideString> result; | 597 std::vector<CFX_WideString> result; |
598 for (uint32_t i = 0; i < val->Length(); ++i) { | 598 for (uint32_t i = 0; i < val->Length(); ++i) { |
599 result.push_back(ToString(val->Get(context, i).ToLocalChecked())); | 599 result.push_back(ToWideString(val->Get(context, i).ToLocalChecked())); |
600 } | 600 } |
601 | 601 |
602 return result; | 602 return result; |
603 } | 603 } |
604 | 604 |
605 void CFXJS_Engine::PutObjectString(v8::Local<v8::Object> pObj, | 605 void CFXJS_Engine::PutObjectProperty(v8::Local<v8::Object> pObj, |
606 const CFX_WideString& wsPropertyName, | 606 const CFX_WideString& wsPropertyName, |
607 const CFX_WideString& wsValue) { | 607 v8::Local<v8::Value> pPut) { |
608 if (pObj.IsEmpty()) | |
609 return; | |
610 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
611 WSToJSString(wsValue)) | |
612 .FromJust(); | |
613 } | |
614 | |
615 void CFXJS_Engine::PutObjectNumber(v8::Local<v8::Object> pObj, | |
616 const CFX_WideString& wsPropertyName, | |
617 int nValue) { | |
618 if (pObj.IsEmpty()) | |
619 return; | |
620 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
621 v8::Int32::New(m_isolate, nValue)) | |
622 .FromJust(); | |
623 } | |
624 | |
625 void CFXJS_Engine::PutObjectNumber(v8::Local<v8::Object> pObj, | |
626 const CFX_WideString& wsPropertyName, | |
627 float fValue) { | |
628 if (pObj.IsEmpty()) | |
629 return; | |
630 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
631 v8::Number::New(m_isolate, (double)fValue)) | |
632 .FromJust(); | |
633 } | |
634 | |
635 void CFXJS_Engine::PutObjectNumber(v8::Local<v8::Object> pObj, | |
636 const CFX_WideString& wsPropertyName, | |
637 double dValue) { | |
638 if (pObj.IsEmpty()) | |
639 return; | |
640 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
641 v8::Number::New(m_isolate, (double)dValue)) | |
642 .FromJust(); | |
643 } | |
644 | |
645 void CFXJS_Engine::PutObjectBoolean(v8::Local<v8::Object> pObj, | |
646 const CFX_WideString& wsPropertyName, | |
647 bool bValue) { | |
648 if (pObj.IsEmpty()) | |
649 return; | |
650 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
651 v8::Boolean::New(m_isolate, bValue)) | |
652 .FromJust(); | |
653 } | |
654 | |
655 void CFXJS_Engine::PutObjectObject(v8::Local<v8::Object> pObj, | |
656 const CFX_WideString& wsPropertyName, | |
657 v8::Local<v8::Object> pPut) { | |
658 if (pObj.IsEmpty()) | 608 if (pObj.IsEmpty()) |
659 return; | 609 return; |
660 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), pPut) | 610 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), pPut) |
661 .FromJust(); | 611 .FromJust(); |
662 } | 612 } |
663 | 613 |
664 void CFXJS_Engine::PutObjectNull(v8::Local<v8::Object> pObj, | |
665 const CFX_WideString& wsPropertyName) { | |
666 if (pObj.IsEmpty()) | |
667 return; | |
668 pObj->Set(m_isolate->GetCurrentContext(), WSToJSString(wsPropertyName), | |
669 v8::Local<v8::Object>()) | |
670 .FromJust(); | |
671 } | |
672 | 614 |
673 v8::Local<v8::Array> CFXJS_Engine::NewArray() { | 615 v8::Local<v8::Array> CFXJS_Engine::NewArray() { |
674 return v8::Array::New(m_isolate); | 616 return v8::Array::New(m_isolate); |
675 } | 617 } |
676 | 618 |
677 unsigned CFXJS_Engine::PutArrayElement(v8::Local<v8::Array> pArray, | 619 unsigned CFXJS_Engine::PutArrayElement(v8::Local<v8::Array> pArray, |
678 unsigned index, | 620 unsigned index, |
679 v8::Local<v8::Value> pValue) { | 621 v8::Local<v8::Value> pValue) { |
680 if (pArray.IsEmpty()) | 622 if (pArray.IsEmpty()) |
681 return 0; | 623 return 0; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 } | 659 } |
718 | 660 |
719 v8::Local<v8::Value> CFXJS_Engine::NewNumber(float number) { | 661 v8::Local<v8::Value> CFXJS_Engine::NewNumber(float number) { |
720 return v8::Number::New(m_isolate, (float)number); | 662 return v8::Number::New(m_isolate, (float)number); |
721 } | 663 } |
722 | 664 |
723 v8::Local<v8::Value> CFXJS_Engine::NewBoolean(bool b) { | 665 v8::Local<v8::Value> CFXJS_Engine::NewBoolean(bool b) { |
724 return v8::Boolean::New(m_isolate, b); | 666 return v8::Boolean::New(m_isolate, b); |
725 } | 667 } |
726 | 668 |
727 v8::Local<v8::Value> CFXJS_Engine::NewString(const wchar_t* str) { | 669 v8::Local<v8::Value> CFXJS_Engine::NewString(const CFX_WideString& str) { |
728 return WSToJSString(str); | 670 return WSToJSString(str.c_str()); |
729 } | 671 } |
730 | 672 |
731 v8::Local<v8::Value> CFXJS_Engine::NewNull() { | 673 v8::Local<v8::Value> CFXJS_Engine::NewNull() { |
732 return v8::Local<v8::Value>(); | 674 return v8::Local<v8::Value>(); |
733 } | 675 } |
734 | 676 |
735 v8::Local<v8::Date> CFXJS_Engine::NewDate(double d) { | 677 v8::Local<v8::Date> CFXJS_Engine::NewDate(double d) { |
736 return v8::Date::New(m_isolate->GetCurrentContext(), d) | 678 return v8::Date::New(m_isolate->GetCurrentContext(), d) |
737 .ToLocalChecked() | 679 .ToLocalChecked() |
738 .As<v8::Date>(); | 680 .As<v8::Date>(); |
739 } | 681 } |
740 | 682 |
741 int CFXJS_Engine::ToInt32(v8::Local<v8::Value> pValue) { | 683 int CFXJS_Engine::ToInt32(v8::Local<v8::Value> pValue) { |
742 if (pValue.IsEmpty()) | 684 if (pValue.IsEmpty()) |
743 return 0; | 685 return 0; |
744 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 686 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
745 return pValue->ToInt32(context).ToLocalChecked()->Value(); | 687 return pValue->ToInt32(context).ToLocalChecked()->Value(); |
746 } | 688 } |
747 | 689 |
748 bool CFXJS_Engine::ToBoolean(v8::Local<v8::Value> pValue) { | 690 bool CFXJS_Engine::ToBoolean(v8::Local<v8::Value> pValue) { |
749 if (pValue.IsEmpty()) | 691 if (pValue.IsEmpty()) |
750 return false; | 692 return false; |
751 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 693 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
752 return pValue->ToBoolean(context).ToLocalChecked()->Value(); | 694 return pValue->ToBoolean(context).ToLocalChecked()->Value(); |
753 } | 695 } |
754 | 696 |
755 double CFXJS_Engine::ToNumber(v8::Local<v8::Value> pValue) { | 697 double CFXJS_Engine::ToDouble(v8::Local<v8::Value> pValue) { |
756 if (pValue.IsEmpty()) | 698 if (pValue.IsEmpty()) |
757 return 0.0; | 699 return 0.0; |
758 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 700 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
759 return pValue->ToNumber(context).ToLocalChecked()->Value(); | 701 return pValue->ToNumber(context).ToLocalChecked()->Value(); |
760 } | 702 } |
761 | 703 |
| 704 CFX_WideString CFXJS_Engine::ToWideString(v8::Local<v8::Value> pValue) { |
| 705 if (pValue.IsEmpty()) |
| 706 return CFX_WideString(); |
| 707 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
| 708 v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); |
| 709 return CFX_WideString::FromUTF8(CFX_ByteStringC(*s, s.length())); |
| 710 } |
| 711 |
762 v8::Local<v8::Object> CFXJS_Engine::ToObject(v8::Local<v8::Value> pValue) { | 712 v8::Local<v8::Object> CFXJS_Engine::ToObject(v8::Local<v8::Value> pValue) { |
763 if (pValue.IsEmpty()) | 713 if (pValue.IsEmpty() || !pValue->IsObject()) |
764 return v8::Local<v8::Object>(); | 714 return v8::Local<v8::Object>(); |
765 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 715 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
766 return pValue->ToObject(context).ToLocalChecked(); | 716 return pValue->ToObject(context).ToLocalChecked(); |
767 } | 717 } |
768 | 718 |
769 CFX_WideString CFXJS_Engine::ToString(v8::Local<v8::Value> pValue) { | |
770 if (pValue.IsEmpty()) | |
771 return L""; | |
772 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | |
773 v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); | |
774 return CFX_WideString::FromUTF8(CFX_ByteStringC(*s, s.length())); | |
775 } | |
776 | |
777 v8::Local<v8::Array> CFXJS_Engine::ToArray(v8::Local<v8::Value> pValue) { | 719 v8::Local<v8::Array> CFXJS_Engine::ToArray(v8::Local<v8::Value> pValue) { |
778 if (pValue.IsEmpty()) | 720 if (pValue.IsEmpty() || !pValue->IsArray()) |
779 return v8::Local<v8::Array>(); | 721 return v8::Local<v8::Array>(); |
780 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); | 722 v8::Local<v8::Context> context = m_isolate->GetCurrentContext(); |
781 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); | 723 return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked()); |
782 } | 724 } |
783 | 725 |
784 void CFXJS_Engine::SetConstArray(const CFX_WideString& name, | 726 void CFXJS_Engine::SetConstArray(const CFX_WideString& name, |
785 v8::Local<v8::Array> array) { | 727 v8::Local<v8::Array> array) { |
786 m_ConstArrays[name] = v8::Global<v8::Array>(GetIsolate(), array); | 728 m_ConstArrays[name] = v8::Global<v8::Array>(GetIsolate(), array); |
787 } | 729 } |
788 | 730 |
789 v8::Local<v8::Array> CFXJS_Engine::GetConstArray(const CFX_WideString& name) { | 731 v8::Local<v8::Array> CFXJS_Engine::GetConstArray(const CFX_WideString& name) { |
790 return v8::Local<v8::Array>::New(GetIsolate(), m_ConstArrays[name]); | 732 return v8::Local<v8::Array>::New(GetIsolate(), m_ConstArrays[name]); |
791 } | 733 } |
OLD | NEW |