diff options
-rw-r--r-- | fpdfsdk/javascript/Document.cpp | 44 | ||||
-rw-r--r-- | fpdfsdk/javascript/Document.h | 18 |
2 files changed, 22 insertions, 40 deletions
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp index 6928a061a2..a45b8b9ea7 100644 --- a/fpdfsdk/javascript/Document.cpp +++ b/fpdfsdk/javascript/Document.cpp @@ -6,6 +6,7 @@ #include "fpdfsdk/javascript/Document.h" +#include <algorithm> #include <utility> #include <vector> @@ -1215,14 +1216,12 @@ bool Document::addIcon(CJS_Runtime* pRuntime, return false; } - CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject(pRuntime)->GetEmbedObject(); - if (!pEmbedObj) { + if (!params[1].ToCJSObject(pRuntime)->GetEmbedObject()) { sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR); return false; } - m_Icons.push_back(pdfium::MakeUnique<IconElement>( - swIconName, static_cast<Icon*>(pEmbedObj))); + m_IconNames.push_back(swIconName); return true; } @@ -1233,14 +1232,14 @@ bool Document::icons(CJS_Runtime* pRuntime, sError = JSGetStringFromID(IDS_STRING_JSREADONLY); return false; } - if (m_Icons.empty()) { + if (m_IconNames.empty()) { vp.GetJSValue()->SetNull(pRuntime); return true; } CJS_Array Icons; int i = 0; - for (const auto& pIconElement : m_Icons) { + for (const auto& name : m_IconNames) { v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID); if (pObj.IsEmpty()) @@ -1249,7 +1248,7 @@ bool Document::icons(CJS_Runtime* pRuntime, CJS_Icon* pJS_Icon = static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj)); Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject()); - pIcon->SetIconName(pIconElement->IconName); + pIcon->SetIconName(name); Icons.SetElement(pRuntime, i++, CJS_Value(pRuntime, pJS_Icon)); } @@ -1266,28 +1265,21 @@ bool Document::getIcon(CJS_Runtime* pRuntime, return false; } - if (m_Icons.empty()) - return false; - CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime); - for (const auto& pIconElement : m_Icons) { - if (pIconElement->IconName != swIconName) - continue; - - v8::Local<v8::Object> pObj = - pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID); - if (pObj.IsEmpty()) - return false; + auto it = std::find(m_IconNames.begin(), m_IconNames.end(), swIconName); + if (it == m_IconNames.end()) + return false; - CJS_Icon* pJS_Icon = - static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj)); - Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject()); - pIcon->SetIconName(swIconName); - vRet = CJS_Value(pRuntime, pJS_Icon); - return true; - } + v8::Local<v8::Object> pObj = + pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID); + if (pObj.IsEmpty()) + return false; - return false; + CJS_Icon* pJS_Icon = static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj)); + Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject()); + pIcon->SetIconName(*it); + vRet = CJS_Value(pRuntime, pJS_Icon); + return true; } bool Document::removeIcon(CJS_Runtime* pRuntime, diff --git a/fpdfsdk/javascript/Document.h b/fpdfsdk/javascript/Document.h index 661307e62a..91ca778c79 100644 --- a/fpdfsdk/javascript/Document.h +++ b/fpdfsdk/javascript/Document.h @@ -41,20 +41,9 @@ class CJS_PrintParamsObj : public CJS_Object { DECLARE_JS_CLASS(); }; -class Icon; -class Field; - -struct IconElement { - IconElement(const CFX_WideString& name, Icon* stream) - : IconName(name), IconStream(stream) {} - - const CFX_WideString IconName; - Icon* const IconStream; -}; - -struct CJS_DelayData; -struct CJS_DelayAnnot; struct CJS_AnnotObj; +struct CJS_DelayAnnot; +struct CJS_DelayData; class Document : public CJS_EmbedObj { public: @@ -318,7 +307,8 @@ class Document : public CJS_EmbedObj { CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv; CFX_WideString m_cwBaseURL; std::list<std::unique_ptr<CJS_DelayData>> m_DelayData; - std::list<std::unique_ptr<IconElement>> m_Icons; // For iterator stability. + // Needs to be a std::list for iterator stability. + std::list<CFX_WideString> m_IconNames; bool m_bDelay; }; |