diff options
author | tsepez <tsepez@chromium.org> | 2016-08-08 09:49:42 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-08 09:49:42 -0700 |
commit | e5aff74a43a2c3355a8b7699a47d0fb7f23b243e (patch) | |
tree | caa9e0f3dffc91bfdf7b753171353b4ae9c5370a /fpdfsdk | |
parent | 660de3c494b68a574cb4cdf20359f51ddc260d3c (diff) | |
download | pdfium-e5aff74a43a2c3355a8b7699a47d0fb7f23b243e.tar.xz |
Remove backpointer to runtime from CJS_Array.
This is always available elsewhere, so save the bytes and ease
removal of CJS_Array since it now only contains a single v8 local.
Review-Url: https://codereview.chromium.org/2217253002
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/javascript/Document.cpp | 15 | ||||
-rw-r--r-- | fpdfsdk/javascript/Field.cpp | 74 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_Value.cpp | 44 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_Value.h | 16 | ||||
-rw-r--r-- | fpdfsdk/javascript/PublicMethods.cpp | 47 | ||||
-rw-r--r-- | fpdfsdk/javascript/app.cpp | 11 | ||||
-rw-r--r-- | fpdfsdk/javascript/color.cpp | 87 | ||||
-rw-r--r-- | fpdfsdk/javascript/color.h | 9 |
8 files changed, 161 insertions, 142 deletions
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp index a4c639f4f1..9c680de906 100644 --- a/fpdfsdk/javascript/Document.cpp +++ b/fpdfsdk/javascript/Document.cpp @@ -519,7 +519,7 @@ FX_BOOL Document::resetForm(IJS_Context* cc, CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array aName(pRuntime); + CJS_Array aName; if (params.empty()) { pPDFForm->ResetForm(TRUE); @@ -532,14 +532,14 @@ FX_BOOL Document::resetForm(IJS_Context* cc, aName.Attach(params[0].ToV8Array()); break; case CJS_Value::VT_string: - aName.SetElement(0, params[0]); + aName.SetElement(pRuntime->GetIsolate(), 0, params[0]); break; } std::vector<CPDF_FormField*> aFields; for (int i = 0, isz = aName.GetLength(); i < isz; ++i) { CJS_Value valElement(pRuntime); - aName.GetElement(i, valElement); + aName.GetElement(pRuntime->GetIsolate(), i, valElement); CFX_WideString swVal = valElement.ToCFXWideString(); for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j) aFields.push_back(pPDFForm->GetField(j, swVal)); @@ -574,7 +574,7 @@ FX_BOOL Document::submitForm(IJS_Context* cc, CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); v8::Isolate* isolate = pRuntime->GetIsolate(); - CJS_Array aFields(pRuntime); + CJS_Array aFields; CFX_WideString strURL; FX_BOOL bFDF = TRUE; FX_BOOL bEmpty = FALSE; @@ -618,7 +618,7 @@ FX_BOOL Document::submitForm(IJS_Context* cc, std::vector<CPDF_FormField*> fieldObjects; for (int i = 0, sz = aFields.GetLength(); i < sz; ++i) { CJS_Value valName(pRuntime); - aFields.GetElement(i, valName); + aFields.GetElement(pRuntime->GetIsolate(), i, valName); CFX_WideString sName = valName.ToCFXWideString(); CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); @@ -1099,7 +1099,7 @@ FX_BOOL Document::icons(IJS_Context* cc, } CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array Icons(pRuntime); + CJS_Array Icons; int i = 0; for (const auto& pIconElement : m_IconList) { @@ -1118,7 +1118,8 @@ FX_BOOL Document::icons(IJS_Context* cc, pIcon->SetStream(pIconElement->IconStream->GetStream()); pIcon->SetIconName(pIconElement->IconName); - Icons.SetElement(i++, CJS_Value(pRuntime, pJS_Icon)); + Icons.SetElement(pRuntime->GetIsolate(), i++, + CJS_Value(pRuntime, pJS_Icon)); } vp << Icons; diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp index 937b3c6e61..34a24666d9 100644 --- a/fpdfsdk/javascript/Field.cpp +++ b/fpdfsdk/javascript/Field.cpp @@ -960,12 +960,12 @@ FX_BOOL Field::currentValueIndices(IJS_Context* cc, vp >> iSelecting; array.push_back(iSelecting); } else if (vp.IsArrayObject()) { - CJS_Array SelArray(pRuntime); + CJS_Array SelArray; CJS_Value SelValue(pRuntime); int iSelecting; vp >> SelArray; for (int i = 0, sz = SelArray.GetLength(); i < sz; i++) { - SelArray.GetElement(i, SelValue); + SelArray.GetElement(pRuntime->GetIsolate(), i, SelValue); iSelecting = SelValue.ToInt(); array.push_back(iSelecting); } @@ -991,10 +991,11 @@ FX_BOOL Field::currentValueIndices(IJS_Context* cc, if (pFormField->CountSelectedItems() == 1) { vp << pFormField->GetSelectedIndex(0); } else if (pFormField->CountSelectedItems() > 1) { - CJS_Array SelArray(pRuntime); + CJS_Array SelArray; for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) { SelArray.SetElement( - i, CJS_Value(pRuntime, pFormField->GetSelectedIndex(i))); + pRuntime->GetIsolate(), i, + CJS_Value(pRuntime, pFormField->GetSelectedIndex(i))); } vp << SelArray; } else { @@ -1378,12 +1379,13 @@ FX_BOOL Field::exportValues(IJS_Context* cc, return FALSE; } else { CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array ExportValusArray(pRuntime); + CJS_Array ExportValusArray; if (m_nFormControlIndex < 0) { for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { CPDF_FormControl* pFormControl = pFormField->GetControl(i); ExportValusArray.SetElement( - i, CJS_Value(pRuntime, pFormControl->GetExportValue().c_str())); + pRuntime->GetIsolate(), i, + CJS_Value(pRuntime, pFormControl->GetExportValue().c_str())); } } else { if (m_nFormControlIndex >= pFormField->CountControls()) @@ -1395,7 +1397,8 @@ FX_BOOL Field::exportValues(IJS_Context* cc, return FALSE; ExportValusArray.SetElement( - 0, CJS_Value(pRuntime, pFormControl->GetExportValue().c_str())); + pRuntime->GetIsolate(), 0, + CJS_Value(pRuntime, pFormControl->GetExportValue().c_str())); } vp << ExportValusArray; } @@ -1432,7 +1435,7 @@ FX_BOOL Field::fillColor(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array crArray(pRuntime); + CJS_Array crArray; std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName); if (FieldArray.empty()) return FALSE; @@ -1447,7 +1450,7 @@ FX_BOOL Field::fillColor(IJS_Context* cc, vp >> crArray; CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); + color::ConvertArrayToPWLColor(pRuntime, crArray, &color); if (m_bDelay) { AddDelay_Color(FP_FILLCOLOR, color); } else { @@ -1484,7 +1487,7 @@ FX_BOOL Field::fillColor(IJS_Context* cc, return FALSE; } - color::ConvertPWLColorToArray(color, crArray); + color::ConvertPWLColorToArray(pRuntime, color, &crArray); vp << crArray; } @@ -1885,14 +1888,15 @@ FX_BOOL Field::page(IJS_Context* cc, } CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array PageArray(pRuntime); + CJS_Array PageArray; for (size_t i = 0; i < widgets.size(); ++i) { CPDFSDK_PageView* pPageView = widgets[i]->GetPageView(); if (!pPageView) return FALSE; PageArray.SetElement( - i, CJS_Value(pRuntime, (int32_t)pPageView->GetPageIndex())); + pRuntime->GetIsolate(), i, + CJS_Value(pRuntime, (int32_t)pPageView->GetPageIndex())); } vp << PageArray; @@ -2083,12 +2087,12 @@ FX_BOOL Field::rect(IJS_Context* cc, if (!vp.IsArrayObject()) return FALSE; - CJS_Array rcArray(pRuntime); + CJS_Array rcArray; vp >> rcArray; - rcArray.GetElement(0, Upper_Leftx); - rcArray.GetElement(1, Upper_Lefty); - rcArray.GetElement(2, Lower_Rightx); - rcArray.GetElement(3, Lower_Righty); + rcArray.GetElement(pRuntime->GetIsolate(), 0, Upper_Leftx); + rcArray.GetElement(pRuntime->GetIsolate(), 1, Upper_Lefty); + rcArray.GetElement(pRuntime->GetIsolate(), 2, Lower_Rightx); + rcArray.GetElement(pRuntime->GetIsolate(), 3, Lower_Righty); FX_FLOAT pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f}; pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt(); @@ -2120,11 +2124,11 @@ FX_BOOL Field::rect(IJS_Context* cc, Lower_Rightx = (int32_t)crRect.right; Lower_Righty = (int32_t)crRect.bottom; - CJS_Array rcArray(pRuntime); - rcArray.SetElement(0, Upper_Leftx); - rcArray.SetElement(1, Upper_Lefty); - rcArray.SetElement(2, Lower_Rightx); - rcArray.SetElement(3, Lower_Righty); + CJS_Array rcArray; + rcArray.SetElement(pRuntime->GetIsolate(), 0, Upper_Leftx); + rcArray.SetElement(pRuntime->GetIsolate(), 1, Upper_Lefty); + rcArray.SetElement(pRuntime->GetIsolate(), 2, Lower_Rightx); + rcArray.SetElement(pRuntime->GetIsolate(), 3, Lower_Righty); vp << rcArray; } return TRUE; @@ -2299,7 +2303,7 @@ FX_BOOL Field::strokeColor(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array crArray(pRuntime); + CJS_Array crArray; if (vp.IsSetting()) { if (!m_bCanSet) @@ -2311,7 +2315,7 @@ FX_BOOL Field::strokeColor(IJS_Context* cc, vp >> crArray; CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); + color::ConvertArrayToPWLColor(pRuntime, crArray, &color); if (m_bDelay) { AddDelay_Color(FP_STROKECOLOR, color); @@ -2352,7 +2356,7 @@ FX_BOOL Field::strokeColor(IJS_Context* cc, return FALSE; } - color::ConvertPWLColorToArray(color, crArray); + color::ConvertPWLColorToArray(pRuntime, color, &crArray); vp << crArray; } return TRUE; @@ -2444,7 +2448,7 @@ FX_BOOL Field::textColor(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array crArray(pRuntime); + CJS_Array crArray; if (vp.IsSetting()) { if (!m_bCanSet) @@ -2456,7 +2460,7 @@ FX_BOOL Field::textColor(IJS_Context* cc, vp >> crArray; CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); + color::ConvertArrayToPWLColor(pRuntime, crArray, &color); if (m_bDelay) { AddDelay_Color(FP_TEXTCOLOR, color); @@ -2487,7 +2491,7 @@ FX_BOOL Field::textColor(IJS_Context* cc, if (iColorType == COLORTYPE_TRANSPARENT) crRet = CPWL_Color(COLORTYPE_TRANSPARENT); - color::ConvertPWLColorToArray(crRet, crArray); + color::ConvertPWLColorToArray(pRuntime, crRet, &crArray); vp << crArray; } return TRUE; @@ -2695,11 +2699,11 @@ FX_BOOL Field::value(IJS_Context* cc, std::vector<CFX_WideString> strArray; if (vp.IsArrayObject()) { - CJS_Array ValueArray(pRuntime); + CJS_Array ValueArray; vp.ConvertToArray(ValueArray); for (int i = 0, sz = ValueArray.GetLength(); i < sz; i++) { CJS_Value ElementValue(pRuntime); - ValueArray.GetElement(i, ElementValue); + ValueArray.GetElement(pRuntime->GetIsolate(), i, ElementValue); strArray.push_back(ElementValue.ToCFXWideString()); } } else { @@ -2728,7 +2732,7 @@ FX_BOOL Field::value(IJS_Context* cc, } break; case FIELDTYPE_LISTBOX: { if (pFormField->CountSelectedItems() > 1) { - CJS_Array ValueArray(pRuntime); + CJS_Array ValueArray; CJS_Value ElementValue(pRuntime); int iIndex; for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) { @@ -2736,7 +2740,7 @@ FX_BOOL Field::value(IJS_Context* cc, ElementValue = pFormField->GetOptionValue(iIndex).c_str(); if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0) ElementValue = pFormField->GetOptionLabel(iIndex).c_str(); - ValueArray.SetElement(i, ElementValue); + ValueArray.SetElement(pRuntime->GetIsolate(), i, ElementValue); } vp << ValueArray; } else { @@ -3086,7 +3090,7 @@ FX_BOOL Field::getArray(IJS_Context* cc, CJS_Context* pContext = (CJS_Context*)cc; CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CJS_Array FormFieldArray(pRuntime); + CJS_Array FormFieldArray; int j = 0; for (const auto& pStr : swSort) { @@ -3101,10 +3105,10 @@ FX_BOOL Field::getArray(IJS_Context* cc, CJS_Value FormFieldValue(pRuntime); FormFieldValue = pJSField; - FormFieldArray.SetElement(j++, FormFieldValue); + FormFieldArray.SetElement(pRuntime->GetIsolate(), j++, FormFieldValue); } - vRet = FormFieldArray; + vRet = CJS_Value(pRuntime, FormFieldArray); return TRUE; } diff --git a/fpdfsdk/javascript/JS_Value.cpp b/fpdfsdk/javascript/JS_Value.cpp index 9d65c79a1b..ab81aa0b46 100644 --- a/fpdfsdk/javascript/JS_Value.cpp +++ b/fpdfsdk/javascript/JS_Value.cpp @@ -73,10 +73,9 @@ CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr) operator=(pStr); } -CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Array& array) - : m_pJSRuntime(pRuntime) { - operator=(array); -} +CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array) + : m_pValue(array.ToV8Array(pRuntime->GetIsolate())), + m_pJSRuntime(pRuntime) {} CJS_Value::~CJS_Value() {} @@ -192,11 +191,6 @@ void CJS_Value::operator=(const FX_CHAR* pStr) { operator=(CFX_WideString::FromLocal(pStr).c_str()); } -void CJS_Value::operator=(const CJS_Array& array) { - ASSERT(m_pJSRuntime == array.GetJSRuntime()); - m_pValue = array.ToV8Array(); -} - void CJS_Value::operator=(const CJS_Date& date) { ASSERT(m_pJSRuntime == date.GetJSRuntime()); m_pValue = FXJS_NewDate(m_pJSRuntime->GetIsolate(), date.ToDouble()); @@ -360,7 +354,7 @@ void CJS_PropValue::operator>>(CJS_Array& array) const { void CJS_PropValue::operator<<(CJS_Array& array) { ASSERT(!m_bIsSetting); - CJS_Value::operator=(array); + m_pValue = array.ToV8Array(m_pJSRuntime->GetIsolate()); } void CJS_PropValue::operator>>(CJS_Date& date) const { @@ -373,30 +367,30 @@ void CJS_PropValue::operator<<(CJS_Date& date) { CJS_Value::operator=(date); } -CJS_Array::CJS_Array(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} - -CJS_Array::~CJS_Array() {} +CJS_Array::CJS_Array() {} CJS_Array::CJS_Array(const CJS_Array& other) = default; +CJS_Array::~CJS_Array() {} + void CJS_Array::Attach(v8::Local<v8::Array> pArray) { m_pArray = pArray; } -void CJS_Array::GetElement(unsigned index, CJS_Value& value) const { - if (m_pArray.IsEmpty()) - return; - v8::Local<v8::Value> p = - FXJS_GetArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index); - value.Attach(p); +void CJS_Array::GetElement(v8::Isolate* pIsolate, + unsigned index, + CJS_Value& value) const { + if (!m_pArray.IsEmpty()) + value.Attach(FXJS_GetArrayElement(pIsolate, m_pArray, index)); } -void CJS_Array::SetElement(unsigned index, CJS_Value value) { +void CJS_Array::SetElement(v8::Isolate* pIsolate, + unsigned index, + const CJS_Value& value) { if (m_pArray.IsEmpty()) - m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); + m_pArray = FXJS_NewArray(pIsolate); - FXJS_PutArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index, - value.ToV8Value()); + FXJS_PutArrayElement(pIsolate, m_pArray, index, value.ToV8Value()); } int CJS_Array::GetLength() const { @@ -405,9 +399,9 @@ int CJS_Array::GetLength() const { return FXJS_GetArrayLength(m_pArray); } -v8::Local<v8::Array> CJS_Array::ToV8Array() const { +v8::Local<v8::Array> CJS_Array::ToV8Array(v8::Isolate* pIsolate) const { if (m_pArray.IsEmpty()) - m_pArray = FXJS_NewArray(m_pJSRuntime->GetIsolate()); + m_pArray = FXJS_NewArray(pIsolate); return m_pArray; } diff --git a/fpdfsdk/javascript/JS_Value.h b/fpdfsdk/javascript/JS_Value.h index 01b4e5ba45..75c40a60a1 100644 --- a/fpdfsdk/javascript/JS_Value.h +++ b/fpdfsdk/javascript/JS_Value.h @@ -40,7 +40,7 @@ class CJS_Value { CJS_Value(CJS_Runtime* pRuntime, CJS_Object* pObj); CJS_Value(CJS_Runtime* pRuntime, const FX_CHAR* pStr); CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr); - CJS_Value(CJS_Runtime* pRuntime, CJS_Array& array); + CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array); CJS_Value(const CJS_Value& other); ~CJS_Value(); @@ -129,21 +129,23 @@ class CJS_PropValue : public CJS_Value { class CJS_Array { public: - explicit CJS_Array(CJS_Runtime* pRuntime); + CJS_Array(); CJS_Array(const CJS_Array& other); virtual ~CJS_Array(); void Attach(v8::Local<v8::Array> pArray); - void GetElement(unsigned index, CJS_Value& value) const; - void SetElement(unsigned index, CJS_Value value); + void GetElement(v8::Isolate* pIsolate, + unsigned index, + CJS_Value& value) const; + void SetElement(v8::Isolate* pIsolate, + unsigned index, + const CJS_Value& value); int GetLength() const; - v8::Local<v8::Array> ToV8Array() const; - CJS_Runtime* GetJSRuntime() const { return m_pJSRuntime; } + v8::Local<v8::Array> ToV8Array(v8::Isolate* pIsolate) const; private: mutable v8::Local<v8::Array> m_pArray; - CJS_Runtime* const m_pJSRuntime; }; class CJS_Date { diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp index 34819c75eb..6af59bd278 100644 --- a/fpdfsdk/javascript/PublicMethods.cpp +++ b/fpdfsdk/javascript/PublicMethods.cpp @@ -155,7 +155,7 @@ double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction, CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(CJS_Runtime* pRuntime, CJS_Value val) { - CJS_Array StrArray(pRuntime); + CJS_Array StrArray; if (val.IsArrayObject()) { val.ConvertToArray(StrArray); return StrArray; @@ -171,7 +171,8 @@ CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(CJS_Runtime* pRuntime, const char* pTemp = strchr(p, ch); if (!pTemp) { StrArray.SetElement( - nIndex, CJS_Value(pRuntime, StrTrim(CFX_ByteString(p)).c_str())); + pRuntime->GetIsolate(), nIndex, + CJS_Value(pRuntime, StrTrim(CFX_ByteString(p)).c_str())); break; } @@ -180,7 +181,8 @@ CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(CJS_Runtime* pRuntime, *(pSub + (pTemp - p)) = '\0'; StrArray.SetElement( - nIndex, CJS_Value(pRuntime, StrTrim(CFX_ByteString(pSub)).c_str())); + pRuntime->GetIsolate(), nIndex, + CJS_Value(pRuntime, StrTrim(CFX_ByteString(pSub)).c_str())); delete[] pSub; nIndex++; @@ -827,16 +829,15 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, } if (iNegStyle == 1 || iNegStyle == 3) { if (Field* fTarget = pEvent->Target_Field()) { - CJS_Array arColor(pRuntime); + CJS_Array arColor; CJS_Value vColElm(pRuntime); vColElm = L"RGB"; - arColor.SetElement(0, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 0, vColElm); vColElm = 1; - arColor.SetElement(1, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 1, vColElm); vColElm = 0; - arColor.SetElement(2, vColElm); - - arColor.SetElement(3, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 2, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 3, vColElm); CJS_PropValue vProp(pRuntime); vProp.StartGetting(); @@ -848,26 +849,26 @@ FX_BOOL CJS_PublicMethods::AFNumber_Format(IJS_Context* cc, } else { if (iNegStyle == 1 || iNegStyle == 3) { if (Field* fTarget = pEvent->Target_Field()) { - CJS_Array arColor(pRuntime); + CJS_Array arColor; CJS_Value vColElm(pRuntime); vColElm = L"RGB"; - arColor.SetElement(0, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 0, vColElm); vColElm = 0; - arColor.SetElement(1, vColElm); - arColor.SetElement(2, vColElm); - arColor.SetElement(3, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 1, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 2, vColElm); + arColor.SetElement(pRuntime->GetIsolate(), 3, vColElm); CJS_PropValue vProp(pRuntime); vProp.StartGetting(); fTarget->textColor(cc, vProp, sError); - CJS_Array aProp(pRuntime); + CJS_Array aProp; vProp.ConvertToArray(aProp); CPWL_Color crProp; CPWL_Color crColor; - color::ConvertArrayToPWLColor(aProp, crProp); - color::ConvertArrayToPWLColor(arColor, crColor); + color::ConvertArrayToPWLColor(pRuntime, aProp, &crProp); + color::ConvertArrayToPWLColor(pRuntime, arColor, &crColor); if (crColor != crProp) { CJS_PropValue vProp2(pRuntime); @@ -1656,7 +1657,7 @@ FX_BOOL CJS_PublicMethods::AFSimple_Calculate( for (int i = 0, isz = FieldNameArray.GetLength(); i < isz; i++) { CJS_Value jsValue(pRuntime); - FieldNameArray.GetElement(i, jsValue); + FieldNameArray.GetElement(pRuntime->GetIsolate(), i, jsValue); CFX_WideString wsFieldName = jsValue.ToCFXWideString(); for (int j = 0, jsz = pInterForm->CountFields(wsFieldName); j < jsz; j++) { @@ -1784,7 +1785,7 @@ FX_BOOL CJS_PublicMethods::AFExtractNums(IJS_Context* cc, } CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array nums(pRuntime); + CJS_Array nums; CFX_WideString str = params[0].ToCFXWideString(); CFX_WideString sPart; @@ -1799,7 +1800,8 @@ FX_BOOL CJS_PublicMethods::AFExtractNums(IJS_Context* cc, sPart += wc; } else { if (sPart.GetLength() > 0) { - nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str())); + nums.SetElement(pRuntime->GetIsolate(), nIndex, + CJS_Value(pRuntime, sPart.c_str())); sPart = L""; nIndex++; } @@ -1807,11 +1809,12 @@ FX_BOOL CJS_PublicMethods::AFExtractNums(IJS_Context* cc, } if (sPart.GetLength() > 0) { - nums.SetElement(nIndex, CJS_Value(pRuntime, sPart.c_str())); + nums.SetElement(pRuntime->GetIsolate(), nIndex, + CJS_Value(pRuntime, sPart.c_str())); } if (nums.GetLength() > 0) - vRet = nums; + vRet = CJS_Value(pRuntime, nums); else vRet.SetNull(); diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp index 329b625545..6738520390 100644 --- a/fpdfsdk/javascript/app.cpp +++ b/fpdfsdk/javascript/app.cpp @@ -109,7 +109,7 @@ FX_BOOL app::activeDocs(IJS_Context* cc, CPDFDoc_Environment* pApp = pContext->GetReaderApp(); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); - CJS_Array aDocs(pRuntime); + CJS_Array aDocs; if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) { CJS_Document* pJSDocument = nullptr; if (pDoc == pCurDoc) { @@ -124,7 +124,8 @@ FX_BOOL app::activeDocs(IJS_Context* cc, (CJS_Document*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj); ASSERT(pJSDocument); } - aDocs.SetElement(0, CJS_Value(pRuntime, pJSDocument)); + aDocs.SetElement(pRuntime->GetIsolate(), 0, + CJS_Value(pRuntime, pJSDocument)); } if (aDocs.GetLength() > 0) vp << aDocs; @@ -144,8 +145,6 @@ FX_BOOL app::calculate(IJS_Context* cc, CJS_Context* pContext = (CJS_Context*)cc; CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CJS_Array aDocs(pRuntime); if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate); } else { @@ -284,14 +283,14 @@ FX_BOOL app::alert(IJS_Context* cc, CFX_WideString swMsg; if (newParams[0].GetType() == CJS_Value::VT_object) { - CJS_Array carray(pRuntime); + CJS_Array carray; if (newParams[0].ConvertToArray(carray)) { swMsg = L"["; CJS_Value element(pRuntime); for (int i = 0; i < carray.GetLength(); ++i) { if (i) swMsg += L", "; - carray.GetElement(i, element); + carray.GetElement(pRuntime->GetIsolate(), i, element); swMsg += element.ToCFXWideString(); } swMsg += L"]"; diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp index 74c885b682..c0b63335a4 100644 --- a/fpdfsdk/javascript/color.cpp +++ b/fpdfsdk/javascript/color.cpp @@ -57,38 +57,50 @@ color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) { color::~color() {} -void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) { +void color::ConvertPWLColorToArray(CJS_Runtime* pRuntime, + const CPWL_Color& color, + CJS_Array* array) { switch (color.nColorType) { case COLORTYPE_TRANSPARENT: - array.SetElement(0, CJS_Value(array.GetJSRuntime(), "T")); + array->SetElement(pRuntime->GetIsolate(), 0, CJS_Value(pRuntime, "T")); break; case COLORTYPE_GRAY: - array.SetElement(0, CJS_Value(array.GetJSRuntime(), "G")); - array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1)); + array->SetElement(pRuntime->GetIsolate(), 0, CJS_Value(pRuntime, "G")); + array->SetElement(pRuntime->GetIsolate(), 1, + CJS_Value(pRuntime, color.fColor1)); break; case COLORTYPE_RGB: - array.SetElement(0, CJS_Value(array.GetJSRuntime(), "RGB")); - array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1)); - array.SetElement(2, CJS_Value(array.GetJSRuntime(), color.fColor2)); - array.SetElement(3, CJS_Value(array.GetJSRuntime(), color.fColor3)); + array->SetElement(pRuntime->GetIsolate(), 0, CJS_Value(pRuntime, "RGB")); + array->SetElement(pRuntime->GetIsolate(), 1, + CJS_Value(pRuntime, color.fColor1)); + array->SetElement(pRuntime->GetIsolate(), 2, + CJS_Value(pRuntime, color.fColor2)); + array->SetElement(pRuntime->GetIsolate(), 3, + CJS_Value(pRuntime, color.fColor3)); break; case COLORTYPE_CMYK: - array.SetElement(0, CJS_Value(array.GetJSRuntime(), "CMYK")); - array.SetElement(1, CJS_Value(array.GetJSRuntime(), color.fColor1)); - array.SetElement(2, CJS_Value(array.GetJSRuntime(), color.fColor2)); - array.SetElement(3, CJS_Value(array.GetJSRuntime(), color.fColor3)); - array.SetElement(4, CJS_Value(array.GetJSRuntime(), color.fColor4)); + array->SetElement(pRuntime->GetIsolate(), 0, CJS_Value(pRuntime, "CMYK")); + array->SetElement(pRuntime->GetIsolate(), 1, + CJS_Value(pRuntime, color.fColor1)); + array->SetElement(pRuntime->GetIsolate(), 2, + CJS_Value(pRuntime, color.fColor2)); + array->SetElement(pRuntime->GetIsolate(), 3, + CJS_Value(pRuntime, color.fColor3)); + array->SetElement(pRuntime->GetIsolate(), 4, + CJS_Value(pRuntime, color.fColor4)); break; } } -void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) { +void color::ConvertArrayToPWLColor(CJS_Runtime* pRuntime, + const CJS_Array& array, + CPWL_Color* color) { int nArrayLen = array.GetLength(); if (nArrayLen < 1) return; - CJS_Value value(array.GetJSRuntime()); - array.GetElement(0, value); + CJS_Value value(pRuntime); + array.GetElement(pRuntime->GetIsolate(), 0, value); CFX_ByteString sSpace = value.ToCFXByteString(); double d1 = 0; @@ -97,34 +109,35 @@ void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) { double d4 = 0; if (nArrayLen > 1) { - array.GetElement(1, value); + array.GetElement(pRuntime->GetIsolate(), 1, value); d1 = value.ToDouble(); } if (nArrayLen > 2) { - array.GetElement(2, value); + array.GetElement(pRuntime->GetIsolate(), 2, value); d2 = value.ToDouble(); } if (nArrayLen > 3) { - array.GetElement(3, value); + array.GetElement(pRuntime->GetIsolate(), 3, value); d3 = value.ToDouble(); } if (nArrayLen > 4) { - array.GetElement(4, value); + array.GetElement(pRuntime->GetIsolate(), 4, value); d4 = value.ToDouble(); } if (sSpace == "T") { - color = CPWL_Color(COLORTYPE_TRANSPARENT); + *color = CPWL_Color(COLORTYPE_TRANSPARENT); } else if (sSpace == "G") { - color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); + *color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); } else if (sSpace == "RGB") { - color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3); + *color = + CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3); } else if (sSpace == "CMYK") { - color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3, - (FX_FLOAT)d4); + *color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, + (FX_FLOAT)d3, (FX_FLOAT)d4); } } @@ -132,14 +145,14 @@ void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) { FX_BOOL color::prop(IJS_Context* cc, CJS_PropValue& vp, \ CFX_WideString& sError) { \ CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); \ - CJS_Array array(pRuntime); \ + CJS_Array array; \ if (vp.IsGetting()) { \ - ConvertPWLColorToArray(var, array); \ + ConvertPWLColorToArray(pRuntime, var, &array); \ vp << array; \ } else { \ if (!vp.ConvertToArray(array)) \ return FALSE; \ - ConvertArrayToPWLColor(array, var); \ + ConvertArrayToPWLColor(pRuntime, array, &var); \ } \ return TRUE; \ } @@ -166,12 +179,12 @@ FX_BOOL color::convert(IJS_Context* cc, return FALSE; CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array aSource(pRuntime); + CJS_Array aSource; if (!params[0].ConvertToArray(aSource)) return FALSE; CPWL_Color crSource; - ConvertArrayToPWLColor(aSource, crSource); + ConvertArrayToPWLColor(pRuntime, aSource, &crSource); CFX_ByteString sDestSpace = params[1].ToCFXByteString(); int nColorType = COLORTYPE_TRANSPARENT; @@ -186,11 +199,11 @@ FX_BOOL color::convert(IJS_Context* cc, nColorType = COLORTYPE_CMYK; } - CJS_Array aDest(pRuntime); + CJS_Array aDest; CPWL_Color crDest = crSource; crDest.ConvertColorType(nColorType); - ConvertPWLColorToArray(crDest, aDest); - vRet = aDest; + ConvertPWLColorToArray(pRuntime, crDest, &aDest); + vRet = CJS_Value(pRuntime, aDest); return TRUE; } @@ -203,8 +216,8 @@ FX_BOOL color::equal(IJS_Context* cc, return FALSE; CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); - CJS_Array array1(pRuntime); - CJS_Array array2(pRuntime); + CJS_Array array1; + CJS_Array array2; if (!params[0].ConvertToArray(array1)) return FALSE; if (!params[1].ConvertToArray(array2)) @@ -212,8 +225,8 @@ FX_BOOL color::equal(IJS_Context* cc, CPWL_Color color1; CPWL_Color color2; - ConvertArrayToPWLColor(array1, color1); - ConvertArrayToPWLColor(array2, color2); + ConvertArrayToPWLColor(pRuntime, array1, &color1); + ConvertArrayToPWLColor(pRuntime, array2, &color2); color1.ConvertColorType(color2.nColorType); vRet = color1 == color2; return TRUE; diff --git a/fpdfsdk/javascript/color.h b/fpdfsdk/javascript/color.h index 2beddb58fc..5c8c99feb6 100644 --- a/fpdfsdk/javascript/color.h +++ b/fpdfsdk/javascript/color.h @@ -41,9 +41,12 @@ class color : public CJS_EmbedObj { CJS_Value& vRet, CFX_WideString& sError); - public: - static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array); - static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color); + static void ConvertPWLColorToArray(CJS_Runtime* pRuntime, + const CPWL_Color& color, + CJS_Array* array); + static void ConvertArrayToPWLColor(CJS_Runtime* pRuntime, + const CJS_Array& array, + CPWL_Color* color); private: CPWL_Color m_crTransparent; |