diff options
author | weili <weili@chromium.org> | 2016-07-20 10:35:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-07-20 10:35:31 -0700 |
commit | 47228aceb86744f858ab8bfa98f3f8b62054dfae (patch) | |
tree | d5d8abbc5eaeb23b291cf604bf33c77cf648b0bb /fpdfsdk | |
parent | 31f8740fe51ceca8e973a2efe40d4d440d7a5cb7 (diff) | |
download | pdfium-47228aceb86744f858ab8bfa98f3f8b62054dfae.tar.xz |
Clean up singleton implementation
Move the singleton instances into their namespaces, and use
get()/getInstance() for uniform accesses.
Review-Url: https://codereview.chromium.org/2154843002
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/fpdfdoc_unittest.cpp | 1 | ||||
-rw-r--r-- | fpdfsdk/fpdfview.cpp | 4 | ||||
-rw-r--r-- | fpdfsdk/fpdfxfa/fpdfxfa_app.cpp | 6 | ||||
-rw-r--r-- | fpdfsdk/fpdfxfa/include/fpdfxfa_app.h | 2 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_GlobalData.cpp | 145 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_GlobalData.h | 41 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_KeyValue.cpp | 70 | ||||
-rw-r--r-- | fpdfsdk/javascript/JS_KeyValue.h | 46 | ||||
-rw-r--r-- | fpdfsdk/javascript/global.cpp | 108 | ||||
-rw-r--r-- | fpdfsdk/javascript/global.h | 5 |
10 files changed, 222 insertions, 206 deletions
diff --git a/fpdfsdk/fpdfdoc_unittest.cpp b/fpdfsdk/fpdfdoc_unittest.cpp index e315fd853e..2bd2e586aa 100644 --- a/fpdfsdk/fpdfdoc_unittest.cpp +++ b/fpdfsdk/fpdfdoc_unittest.cpp @@ -57,7 +57,6 @@ class PDFDocTest : public testing::Test { void SetUp() override { // We don't need page module or render module, but // initialize them to keep the code sane. - CPDF_ModuleMgr::Create(); CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get(); module_mgr->InitPageModule(); diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp index 34e7d23619..f47de1518d 100644 --- a/fpdfsdk/fpdfview.cpp +++ b/fpdfsdk/fpdfview.cpp @@ -262,8 +262,8 @@ DLLEXPORT void STDCALL FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* cfg) { g_pCodecModule = new CCodec_ModuleMgr(); - CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr, g_pCodecModule); - CPDF_ModuleMgr::Create(); + CFX_GEModule* pModule = CFX_GEModule::Get(); + pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr, g_pCodecModule); CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get(); pModuleMgr->SetCodecModule(g_pCodecModule); pModuleMgr->InitPageModule(); diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp index 5774a54785..22d84f1f9f 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp @@ -13,7 +13,11 @@ #include "xfa/fxfa/include/xfa_ffapp.h" #include "xfa/fxfa/include/xfa_fontmgr.h" -CPDFXFA_App* CPDFXFA_App::g_pApp = nullptr; +namespace { + +CPDFXFA_App* g_pApp = nullptr; + +} // namespace CPDFXFA_App* CPDFXFA_App::GetInstance() { if (!g_pApp) { diff --git a/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h b/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h index 7b96e4378f..5ebb2c2623 100644 --- a/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h +++ b/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h @@ -73,8 +73,6 @@ class CPDFXFA_App : public IXFA_AppProvider { CFX_ArrayTemplate<CPDFDoc_Environment*> m_pEnvList; protected: - static CPDFXFA_App* g_pApp; - FX_BOOL m_bJavaScriptInitialized; CXFA_FFApp* m_pXFAApp; v8::Isolate* m_pIsolate; diff --git a/fpdfsdk/javascript/JS_GlobalData.cpp b/fpdfsdk/javascript/JS_GlobalData.cpp index 14c36530d5..d1268b042f 100644 --- a/fpdfsdk/javascript/JS_GlobalData.cpp +++ b/fpdfsdk/javascript/JS_GlobalData.cpp @@ -11,78 +11,13 @@ #define JS_MAXGLOBALDATA (1024 * 4 - 8) -CJS_GlobalVariableArray::CJS_GlobalVariableArray() {} - -CJS_GlobalVariableArray::~CJS_GlobalVariableArray() { - Empty(); -} - -void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) { - Empty(); - for (int i = 0, sz = array.Count(); i < sz; i++) { - CJS_KeyValue* pOldObjData = array.GetAt(i); - switch (pOldObjData->nType) { - case JS_GLOBALDATA_TYPE_NUMBER: { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->dData = pOldObjData->dData; - Add(pNewObjData); - } break; - case JS_GLOBALDATA_TYPE_BOOLEAN: { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->bData = pOldObjData->bData; - Add(pNewObjData); - } break; - case JS_GLOBALDATA_TYPE_STRING: { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->sData = pOldObjData->sData; - Add(pNewObjData); - } break; - case JS_GLOBALDATA_TYPE_OBJECT: { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->objData.Copy(pOldObjData->objData); - Add(pNewObjData); - } break; - case JS_GLOBALDATA_TYPE_NULL: { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - Add(pNewObjData); - } break; - } - } -} - -void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) { - m_Array.Add(p); -} - -int CJS_GlobalVariableArray::Count() const { - return m_Array.GetSize(); -} - -CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const { - return m_Array.GetAt(index); -} - -void CJS_GlobalVariableArray::Empty() { - for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) - delete m_Array.GetAt(i); - m_Array.RemoveAll(); -} - #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data" #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data" #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data" -static const uint8_t JS_RC4KEY[] = { +namespace { + +const uint8_t JS_RC4KEY[] = { 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d, 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51, 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16, @@ -94,27 +29,29 @@ static const uint8_t JS_RC4KEY[] = { 0xf8, 0x77, 0xd5, 0xa3}; // Returns true if non-empty, setting sPropName -static bool TrimPropName(CFX_ByteString* sPropName) { +bool TrimPropName(CFX_ByteString* sPropName) { sPropName->TrimLeft(); sPropName->TrimRight(); return sPropName->GetLength() != 0; } -CJS_GlobalData* CJS_GlobalData::g_Instance = nullptr; +CJS_GlobalData* g_pInstance = nullptr; + +} // namespace // static CJS_GlobalData* CJS_GlobalData::GetRetainedInstance(CPDFDoc_Environment* pApp) { - if (!g_Instance) { - g_Instance = new CJS_GlobalData(); + if (!g_pInstance) { + g_pInstance = new CJS_GlobalData(); } - ++g_Instance->m_RefCount; - return g_Instance; + ++g_pInstance->m_RefCount; + return g_pInstance; } void CJS_GlobalData::Release() { if (!--m_RefCount) { - delete g_Instance; - g_Instance = nullptr; + delete g_pInstance; + g_pInstance = nullptr; } } @@ -160,13 +97,13 @@ void CJS_GlobalData::SetGlobalVariableNumber(const CFX_ByteString& propname, return; if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { - pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; + pData->data.nType = JS_GlobalDataType::NUMBER; pData->data.dData = dData; return; } std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; + pNewData->data.nType = JS_GlobalDataType::NUMBER; pNewData->data.dData = dData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -178,13 +115,13 @@ void CJS_GlobalData::SetGlobalVariableBoolean(const CFX_ByteString& propname, return; if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { - pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pData->data.nType = JS_GlobalDataType::BOOLEAN; pData->data.bData = bData; return; } std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pNewData->data.nType = JS_GlobalDataType::BOOLEAN; pNewData->data.bData = bData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -196,13 +133,13 @@ void CJS_GlobalData::SetGlobalVariableString(const CFX_ByteString& propname, return; if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { - pData->data.nType = JS_GLOBALDATA_TYPE_STRING; + pData->data.nType = JS_GlobalDataType::STRING; pData->data.sData = sData; return; } std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING; + pNewData->data.nType = JS_GlobalDataType::STRING; pNewData->data.sData = sData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -215,13 +152,13 @@ void CJS_GlobalData::SetGlobalVariableObject( return; if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { - pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; + pData->data.nType = JS_GlobalDataType::OBJECT; pData->data.objData.Copy(array); return; } std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; + pNewData->data.nType = JS_GlobalDataType::OBJECT; pNewData->data.objData.Copy(array); m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -232,12 +169,12 @@ void CJS_GlobalData::SetGlobalVariableNull(const CFX_ByteString& propname) { return; if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { - pData->data.nType = JS_GLOBALDATA_TYPE_NULL; + pData->data.nType = JS_GlobalDataType::NULLOBJ; return; } std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL; + pNewData->data.nType = JS_GlobalDataType::NULLOBJ; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -317,11 +254,12 @@ void CJS_GlobalData::LoadGlobalPersistentVariables() { CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen); p += sizeof(char) * dwNameLen; - uint16_t wDataType = *((uint16_t*)p); + JS_GlobalDataType wDataType = + static_cast<JS_GlobalDataType>(*((uint16_t*)p)); p += sizeof(uint16_t); switch (wDataType) { - case JS_GLOBALDATA_TYPE_NUMBER: { + case JS_GlobalDataType::NUMBER: { double dData = 0; switch (wVersion) { case 1: { @@ -337,13 +275,13 @@ void CJS_GlobalData::LoadGlobalPersistentVariables() { SetGlobalVariableNumber(sEntry, dData); SetGlobalVariablePersistent(sEntry, TRUE); } break; - case JS_GLOBALDATA_TYPE_BOOLEAN: { + case JS_GlobalDataType::BOOLEAN: { uint16_t wData = *((uint16_t*)p); p += sizeof(uint16_t); SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); SetGlobalVariablePersistent(sEntry, TRUE); } break; - case JS_GLOBALDATA_TYPE_STRING: { + case JS_GlobalDataType::STRING: { uint32_t dwLength = *((uint32_t*)p); p += sizeof(uint32_t); @@ -354,10 +292,12 @@ void CJS_GlobalData::LoadGlobalPersistentVariables() { SetGlobalVariablePersistent(sEntry, TRUE); p += sizeof(char) * dwLength; } break; - case JS_GLOBALDATA_TYPE_NULL: { + case JS_GlobalDataType::NULLOBJ: { SetGlobalVariableNull(sEntry); SetGlobalVariablePersistent(sEntry, TRUE); } + case JS_GlobalDataType::OBJECT: + break; } } } @@ -413,47 +353,42 @@ void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData) { - uint16_t wType = (uint16_t)pData->nType; - switch (wType) { - case JS_GLOBALDATA_TYPE_NUMBER: { + switch (pData->nType) { + case JS_GlobalDataType::NUMBER: { uint32_t dwNameLen = (uint32_t)name.GetLength(); sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(uint16_t)); + sData.AppendBlock(&pData->nType, sizeof(uint16_t)); double dData = pData->dData; sData.AppendBlock(&dData, sizeof(double)); } break; - case JS_GLOBALDATA_TYPE_BOOLEAN: { + case JS_GlobalDataType::BOOLEAN: { uint32_t dwNameLen = (uint32_t)name.GetLength(); sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(uint16_t)); + sData.AppendBlock(&pData->nType, sizeof(uint16_t)); uint16_t wData = (uint16_t)pData->bData; sData.AppendBlock(&wData, sizeof(uint16_t)); } break; - case JS_GLOBALDATA_TYPE_STRING: { + case JS_GlobalDataType::STRING: { uint32_t dwNameLen = (uint32_t)name.GetLength(); sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(uint16_t)); + sData.AppendBlock(&pData->nType, sizeof(uint16_t)); uint32_t dwDataLen = (uint32_t)pData->sData.GetLength(); sData.AppendBlock(&dwDataLen, sizeof(uint32_t)); sData.AppendString(pData->sData); } break; - case JS_GLOBALDATA_TYPE_NULL: { + case JS_GlobalDataType::NULLOBJ: { uint32_t dwNameLen = (uint32_t)name.GetLength(); sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(uint32_t)); + sData.AppendBlock(&pData->nType, sizeof(uint32_t)); } break; default: break; } } - -CJS_KeyValue::CJS_KeyValue() {} - -CJS_KeyValue::~CJS_KeyValue() {} diff --git a/fpdfsdk/javascript/JS_GlobalData.h b/fpdfsdk/javascript/JS_GlobalData.h index 8273c0838c..d901ec58b3 100644 --- a/fpdfsdk/javascript/JS_GlobalData.h +++ b/fpdfsdk/javascript/JS_GlobalData.h @@ -11,49 +11,14 @@ #include <vector> #include "core/fxcrt/include/fx_basic.h" +#include "fpdfsdk/javascript/JS_KeyValue.h" -#define JS_GLOBALDATA_TYPE_NUMBER 0 -#define JS_GLOBALDATA_TYPE_BOOLEAN 1 -#define JS_GLOBALDATA_TYPE_STRING 2 -#define JS_GLOBALDATA_TYPE_OBJECT 3 -#define JS_GLOBALDATA_TYPE_NULL 4 - -class CJS_KeyValue; class CPDFDoc_Environment; -class CJS_GlobalVariableArray { - public: - CJS_GlobalVariableArray(); - virtual ~CJS_GlobalVariableArray(); - - void Add(CJS_KeyValue* p); - int Count() const; - CJS_KeyValue* GetAt(int index) const; - void Copy(const CJS_GlobalVariableArray& array); - - void Empty(); - - private: - CFX_ArrayTemplate<CJS_KeyValue*> m_Array; -}; - -class CJS_KeyValue { - public: - CJS_KeyValue(); - virtual ~CJS_KeyValue(); - - CFX_ByteString sKey; - int nType; // 0:int 1:bool 2:string 3:obj - double dData; - bool bData; - CFX_ByteString sData; - CJS_GlobalVariableArray objData; -}; - class CJS_GlobalData_Element { public: CJS_GlobalData_Element() {} - virtual ~CJS_GlobalData_Element() {} + ~CJS_GlobalData_Element() {} CJS_KeyValue data; FX_BOOL bPersistent; @@ -84,8 +49,6 @@ class CJS_GlobalData { using const_iterator = std::vector<std::unique_ptr<CJS_GlobalData_Element>>::const_iterator; - static CJS_GlobalData* g_Instance; - CJS_GlobalData(); ~CJS_GlobalData(); diff --git a/fpdfsdk/javascript/JS_KeyValue.cpp b/fpdfsdk/javascript/JS_KeyValue.cpp new file mode 100644 index 0000000000..7d1e575377 --- /dev/null +++ b/fpdfsdk/javascript/JS_KeyValue.cpp @@ -0,0 +1,70 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "fpdfsdk/javascript/JS_KeyValue.h" + +CJS_GlobalVariableArray::CJS_GlobalVariableArray() {} + +CJS_GlobalVariableArray::~CJS_GlobalVariableArray() {} + +void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) { + m_Array.clear(); + for (int i = 0, sz = array.Count(); i < sz; i++) { + CJS_KeyValue* pOldObjData = array.GetAt(i); + switch (pOldObjData->nType) { + case JS_GlobalDataType::NUMBER: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->dData = pOldObjData->dData; + Add(pNewObjData); + } break; + case JS_GlobalDataType::BOOLEAN: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->bData = pOldObjData->bData; + Add(pNewObjData); + } break; + case JS_GlobalDataType::STRING: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->sData = pOldObjData->sData; + Add(pNewObjData); + } break; + case JS_GlobalDataType::OBJECT: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->objData.Copy(pOldObjData->objData); + Add(pNewObjData); + } break; + case JS_GlobalDataType::NULLOBJ: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + Add(pNewObjData); + } break; + } + } +} + +void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) { + m_Array.push_back(std::unique_ptr<CJS_KeyValue>(p)); +} + +int CJS_GlobalVariableArray::Count() const { + return m_Array.size(); +} + +CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const { + return m_Array.at(index).get(); +} + +CJS_KeyValue::CJS_KeyValue() {} + +CJS_KeyValue::~CJS_KeyValue() {} diff --git a/fpdfsdk/javascript/JS_KeyValue.h b/fpdfsdk/javascript/JS_KeyValue.h new file mode 100644 index 0000000000..43f6687b8d --- /dev/null +++ b/fpdfsdk/javascript/JS_KeyValue.h @@ -0,0 +1,46 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_ +#define FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_ + +#include <memory> +#include <vector> + +#include "core/fxcrt/include/fx_basic.h" + +enum class JS_GlobalDataType { NUMBER = 0, BOOLEAN, STRING, OBJECT, NULLOBJ }; + +class CJS_KeyValue; + +class CJS_GlobalVariableArray { + public: + CJS_GlobalVariableArray(); + ~CJS_GlobalVariableArray(); + + void Add(CJS_KeyValue* p); + int Count() const; + CJS_KeyValue* GetAt(int index) const; + void Copy(const CJS_GlobalVariableArray& array); + + private: + std::vector<std::unique_ptr<CJS_KeyValue>> m_Array; +}; + +class CJS_KeyValue { + public: + CJS_KeyValue(); + ~CJS_KeyValue(); + + CFX_ByteString sKey; + JS_GlobalDataType nType; + double dData; + bool bData; + CFX_ByteString sData; + CJS_GlobalVariableArray objData; +}; + +#endif // FPDFSDK_JAVASCRIPT_JS_KEYVALUE_H_ diff --git a/fpdfsdk/javascript/global.cpp b/fpdfsdk/javascript/global.cpp index 45e2bd0a90..b305c4104b 100644 --- a/fpdfsdk/javascript/global.cpp +++ b/fpdfsdk/javascript/global.cpp @@ -37,7 +37,7 @@ void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { } JSGlobalData::JSGlobalData() - : nType(0), + : nType(JS_GlobalDataType::NUMBER), dData(0), bData(FALSE), sData(""), @@ -87,30 +87,30 @@ FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, case CJS_Value::VT_number: { double dData; vp >> dData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, + return SetGlobalVariables(sPropName, JS_GlobalDataType::NUMBER, dData, false, "", v8::Local<v8::Object>(), FALSE); } case CJS_Value::VT_boolean: { bool bData; vp >> bData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, + return SetGlobalVariables(sPropName, JS_GlobalDataType::BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), FALSE); } case CJS_Value::VT_string: { CFX_ByteString sData; vp >> sData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, + return SetGlobalVariables(sPropName, JS_GlobalDataType::STRING, 0, false, sData, v8::Local<v8::Object>(), FALSE); } case CJS_Value::VT_object: { v8::Local<v8::Object> pData; vp >> pData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, + return SetGlobalVariables(sPropName, JS_GlobalDataType::OBJECT, 0, false, "", pData, FALSE); } case CJS_Value::VT_null: { - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, - "", v8::Local<v8::Object>(), FALSE); + return SetGlobalVariables(sPropName, JS_GlobalDataType::NULLOBJ, 0, + false, "", v8::Local<v8::Object>(), FALSE); } case CJS_Value::VT_undefined: { DelProperty(cc, propname, sError); @@ -131,22 +131,22 @@ FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, return TRUE; } switch (pData->nType) { - case JS_GLOBALDATA_TYPE_NUMBER: + case JS_GlobalDataType::NUMBER: vp << pData->dData; return TRUE; - case JS_GLOBALDATA_TYPE_BOOLEAN: + case JS_GlobalDataType::BOOLEAN: vp << pData->bData; return TRUE; - case JS_GLOBALDATA_TYPE_STRING: + case JS_GlobalDataType::STRING: vp << pData->sData; return TRUE; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( vp.GetJSRuntime()->GetIsolate(), pData->pData); vp << obj; return TRUE; } - case JS_GLOBALDATA_TYPE_NULL: + case JS_GlobalDataType::NULLOBJ: vp.SetNull(); return TRUE; default: @@ -183,44 +183,44 @@ void JSGlobalAlternate::UpdateGlobalPersistentVariables() { for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); switch (pData->data.nType) { - case JS_GLOBALDATA_TYPE_NUMBER: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, + case JS_GlobalDataType::NUMBER: + SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NUMBER, pData->data.dData, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1); FXJS_PutObjectNumber(nullptr, m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), pData->data.dData); break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, + case JS_GlobalDataType::BOOLEAN: + SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::BOOLEAN, 0, (bool)(pData->data.bData == 1), "", v8::Local<v8::Object>(), pData->bPersistent == 1); FXJS_PutObjectBoolean(nullptr, m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), (bool)(pData->data.bData == 1)); break; - case JS_GLOBALDATA_TYPE_STRING: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, + case JS_GlobalDataType::STRING: + SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::STRING, 0, false, pData->data.sData, v8::Local<v8::Object>(), pData->bPersistent == 1); FXJS_PutObjectString(nullptr, m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), pData->data.sData.UTF8Decode()); break; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); PutObjectProperty(pObj, &pData->data); - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, + SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::OBJECT, 0, false, "", pObj, pData->bPersistent == 1); FXJS_PutObjectObject(nullptr, m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(), pObj); } break; - case JS_GLOBALDATA_TYPE_NULL: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, - "", v8::Local<v8::Object>(), + case JS_GlobalDataType::NULLOBJ: + SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NULLOBJ, 0, + false, "", v8::Local<v8::Object>(), pData->bPersistent == 1); FXJS_PutObjectNull(nullptr, m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode()); @@ -237,19 +237,19 @@ void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { m_pGlobalData->DeleteGlobalVariable(name); } else { switch (pData->nType) { - case JS_GLOBALDATA_TYPE_NUMBER: + case JS_GlobalDataType::NUMBER: m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_BOOLEAN: + case JS_GlobalDataType::BOOLEAN: m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_STRING: + case JS_GlobalDataType::STRING: m_pGlobalData->SetGlobalVariableString(name, pData->sData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { CJS_GlobalVariableArray array; v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( GetJSObject()->GetIsolate(), pData->pData); @@ -257,7 +257,7 @@ void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { m_pGlobalData->SetGlobalVariableObject(name, array); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); } break; - case JS_GLOBALDATA_TYPE_NULL: + case JS_GlobalDataType::NULLOBJ: m_pGlobalData->SetGlobalVariableNull(name); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; @@ -282,14 +282,14 @@ void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, switch (CJS_Value::GetValueType(v)) { case CJS_Value::VT_number: { CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; + pObjElement->nType = JS_GlobalDataType::NUMBER; pObjElement->sKey = sKey; pObjElement->dData = FXJS_ToNumber(isolate, v); array.Add(pObjElement); } break; case CJS_Value::VT_boolean: { CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pObjElement->nType = JS_GlobalDataType::BOOLEAN; pObjElement->sKey = sKey; pObjElement->dData = FXJS_ToBoolean(isolate, v); array.Add(pObjElement); @@ -297,21 +297,21 @@ void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, case CJS_Value::VT_string: { CFX_ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(); CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; + pObjElement->nType = JS_GlobalDataType::STRING; pObjElement->sKey = sKey; pObjElement->sData = sValue; array.Add(pObjElement); } break; case CJS_Value::VT_object: { CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; + pObjElement->nType = JS_GlobalDataType::OBJECT; pObjElement->sKey = sKey; ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); array.Add(pObjElement); } break; case CJS_Value::VT_null: { CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; + pObjElement->nType = JS_GlobalDataType::NULLOBJ; pObjElement->sKey = sKey; array.Add(pObjElement); } break; @@ -326,19 +326,19 @@ void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { CJS_KeyValue* pObjData = pData->objData.GetAt(i); switch (pObjData->nType) { - case JS_GLOBALDATA_TYPE_NUMBER: + case JS_GlobalDataType::NUMBER: FXJS_PutObjectNumber(nullptr, pObj, pObjData->sKey.UTF8Decode(), pObjData->dData); break; - case JS_GLOBALDATA_TYPE_BOOLEAN: + case JS_GlobalDataType::BOOLEAN: FXJS_PutObjectBoolean(nullptr, pObj, pObjData->sKey.UTF8Decode(), pObjData->bData == 1); break; - case JS_GLOBALDATA_TYPE_STRING: + case JS_GlobalDataType::STRING: FXJS_PutObjectString(nullptr, pObj, pObjData->sKey.UTF8Decode(), pObjData->sData.UTF8Decode()); break; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); v8::Local<v8::Object> pNewObj = FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); @@ -346,7 +346,7 @@ void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, FXJS_PutObjectObject(nullptr, pObj, pObjData->sKey.UTF8Decode(), pNewObj); } break; - case JS_GLOBALDATA_TYPE_NULL: + case JS_GlobalDataType::NULLOBJ: FXJS_PutObjectNull(nullptr, pObj, pObjData->sKey.UTF8Decode()); break; } @@ -361,7 +361,7 @@ void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { } FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, - int nType, + JS_GlobalDataType nType, double dData, bool bData, const CFX_ByteString& sData, @@ -382,19 +382,19 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, pTemp->bDeleted = FALSE; switch (nType) { - case JS_GLOBALDATA_TYPE_NUMBER: { + case JS_GlobalDataType::NUMBER: { pTemp->dData = dData; } break; - case JS_GLOBALDATA_TYPE_BOOLEAN: { + case JS_GlobalDataType::BOOLEAN: { pTemp->bData = bData; } break; - case JS_GLOBALDATA_TYPE_STRING: { + case JS_GlobalDataType::STRING: { pTemp->sData = sData; } break; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { pTemp->pData.Reset(pData->GetIsolate(), pData); } break; - case JS_GLOBALDATA_TYPE_NULL: + case JS_GlobalDataType::NULLOBJ: break; default: return FALSE; @@ -405,33 +405,33 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, JSGlobalData* pNewData = nullptr; switch (nType) { - case JS_GLOBALDATA_TYPE_NUMBER: { + case JS_GlobalDataType::NUMBER: { pNewData = new JSGlobalData; - pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; + pNewData->nType = JS_GlobalDataType::NUMBER; pNewData->dData = dData; pNewData->bPersistent = bDefaultPersistent; } break; - case JS_GLOBALDATA_TYPE_BOOLEAN: { + case JS_GlobalDataType::BOOLEAN: { pNewData = new JSGlobalData; - pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pNewData->nType = JS_GlobalDataType::BOOLEAN; pNewData->bData = bData; pNewData->bPersistent = bDefaultPersistent; } break; - case JS_GLOBALDATA_TYPE_STRING: { + case JS_GlobalDataType::STRING: { pNewData = new JSGlobalData; - pNewData->nType = JS_GLOBALDATA_TYPE_STRING; + pNewData->nType = JS_GlobalDataType::STRING; pNewData->sData = sData; pNewData->bPersistent = bDefaultPersistent; } break; - case JS_GLOBALDATA_TYPE_OBJECT: { + case JS_GlobalDataType::OBJECT: { pNewData = new JSGlobalData; - pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; + pNewData->nType = JS_GlobalDataType::OBJECT; pNewData->pData.Reset(pData->GetIsolate(), pData); pNewData->bPersistent = bDefaultPersistent; } break; - case JS_GLOBALDATA_TYPE_NULL: { + case JS_GlobalDataType::NULLOBJ: { pNewData = new JSGlobalData; - pNewData->nType = JS_GLOBALDATA_TYPE_NULL; + pNewData->nType = JS_GlobalDataType::NULLOBJ; pNewData->bPersistent = bDefaultPersistent; } break; default: diff --git a/fpdfsdk/javascript/global.h b/fpdfsdk/javascript/global.h index eca9aa12d1..6604d9bad8 100644 --- a/fpdfsdk/javascript/global.h +++ b/fpdfsdk/javascript/global.h @@ -11,6 +11,7 @@ #include <vector> #include "fpdfsdk/javascript/JS_Define.h" +#include "fpdfsdk/javascript/JS_KeyValue.h" class CJS_GlobalData; class CJS_GlobalVariableArray; @@ -20,7 +21,7 @@ struct JSGlobalData { JSGlobalData(); ~JSGlobalData(); - int nType; // 0:int 1:bool 2:string 3:obj + JS_GlobalDataType nType; double dData; bool bData; CFX_ByteString sData; @@ -53,7 +54,7 @@ class JSGlobalAlternate : public CJS_EmbedObj { void CommitGlobalPersisitentVariables(IJS_Context* cc); void DestroyGlobalPersisitentVariables(); FX_BOOL SetGlobalVariables(const CFX_ByteString& propname, - int nType, + JS_GlobalDataType nType, double dData, bool bData, const CFX_ByteString& sData, |