| 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/javascript/JS_GlobalData.h" | 7 #include "fpdfsdk/javascript/JS_GlobalData.h" |
| 8 | 8 |
| 9 #include "core/fdrm/crypto/include/fx_crypt.h" | 9 #include "core/fdrm/crypto/include/fx_crypt.h" |
| 10 #include "third_party/base/stl_util.h" | 10 #include "third_party/base/stl_util.h" |
| 11 | 11 |
| 12 #define JS_MAXGLOBALDATA (1024 * 4 - 8) | 12 #define JS_MAXGLOBALDATA (1024 * 4 - 8) |
| 13 | 13 |
| 14 CJS_GlobalVariableArray::CJS_GlobalVariableArray() {} | |
| 15 | |
| 16 CJS_GlobalVariableArray::~CJS_GlobalVariableArray() { | |
| 17 Empty(); | |
| 18 } | |
| 19 | |
| 20 void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) { | |
| 21 Empty(); | |
| 22 for (int i = 0, sz = array.Count(); i < sz; i++) { | |
| 23 CJS_KeyValue* pOldObjData = array.GetAt(i); | |
| 24 switch (pOldObjData->nType) { | |
| 25 case JS_GLOBALDATA_TYPE_NUMBER: { | |
| 26 CJS_KeyValue* pNewObjData = new CJS_KeyValue; | |
| 27 pNewObjData->sKey = pOldObjData->sKey; | |
| 28 pNewObjData->nType = pOldObjData->nType; | |
| 29 pNewObjData->dData = pOldObjData->dData; | |
| 30 Add(pNewObjData); | |
| 31 } break; | |
| 32 case JS_GLOBALDATA_TYPE_BOOLEAN: { | |
| 33 CJS_KeyValue* pNewObjData = new CJS_KeyValue; | |
| 34 pNewObjData->sKey = pOldObjData->sKey; | |
| 35 pNewObjData->nType = pOldObjData->nType; | |
| 36 pNewObjData->bData = pOldObjData->bData; | |
| 37 Add(pNewObjData); | |
| 38 } break; | |
| 39 case JS_GLOBALDATA_TYPE_STRING: { | |
| 40 CJS_KeyValue* pNewObjData = new CJS_KeyValue; | |
| 41 pNewObjData->sKey = pOldObjData->sKey; | |
| 42 pNewObjData->nType = pOldObjData->nType; | |
| 43 pNewObjData->sData = pOldObjData->sData; | |
| 44 Add(pNewObjData); | |
| 45 } break; | |
| 46 case JS_GLOBALDATA_TYPE_OBJECT: { | |
| 47 CJS_KeyValue* pNewObjData = new CJS_KeyValue; | |
| 48 pNewObjData->sKey = pOldObjData->sKey; | |
| 49 pNewObjData->nType = pOldObjData->nType; | |
| 50 pNewObjData->objData.Copy(pOldObjData->objData); | |
| 51 Add(pNewObjData); | |
| 52 } break; | |
| 53 case JS_GLOBALDATA_TYPE_NULL: { | |
| 54 CJS_KeyValue* pNewObjData = new CJS_KeyValue; | |
| 55 pNewObjData->sKey = pOldObjData->sKey; | |
| 56 pNewObjData->nType = pOldObjData->nType; | |
| 57 Add(pNewObjData); | |
| 58 } break; | |
| 59 } | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) { | |
| 64 m_Array.Add(p); | |
| 65 } | |
| 66 | |
| 67 int CJS_GlobalVariableArray::Count() const { | |
| 68 return m_Array.GetSize(); | |
| 69 } | |
| 70 | |
| 71 CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const { | |
| 72 return m_Array.GetAt(index); | |
| 73 } | |
| 74 | |
| 75 void CJS_GlobalVariableArray::Empty() { | |
| 76 for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) | |
| 77 delete m_Array.GetAt(i); | |
| 78 m_Array.RemoveAll(); | |
| 79 } | |
| 80 | |
| 81 #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data" | 14 #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data" |
| 82 #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data" | 15 #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data" |
| 83 #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data" | 16 #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data" |
| 84 | 17 |
| 85 static const uint8_t JS_RC4KEY[] = { | 18 namespace { |
| 19 |
| 20 const uint8_t JS_RC4KEY[] = { |
| 86 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d, | 21 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d, |
| 87 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51, | 22 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51, |
| 88 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16, | 23 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16, |
| 89 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22, | 24 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22, |
| 90 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b, | 25 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b, |
| 91 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a, | 26 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a, |
| 92 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00, | 27 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00, |
| 93 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0, | 28 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0, |
| 94 0xf8, 0x77, 0xd5, 0xa3}; | 29 0xf8, 0x77, 0xd5, 0xa3}; |
| 95 | 30 |
| 96 // Returns true if non-empty, setting sPropName | 31 // Returns true if non-empty, setting sPropName |
| 97 static bool TrimPropName(CFX_ByteString* sPropName) { | 32 bool TrimPropName(CFX_ByteString* sPropName) { |
| 98 sPropName->TrimLeft(); | 33 sPropName->TrimLeft(); |
| 99 sPropName->TrimRight(); | 34 sPropName->TrimRight(); |
| 100 return sPropName->GetLength() != 0; | 35 return sPropName->GetLength() != 0; |
| 101 } | 36 } |
| 102 | 37 |
| 103 CJS_GlobalData* CJS_GlobalData::g_Instance = nullptr; | 38 CJS_GlobalData* g_pInstance = nullptr; |
| 39 |
| 40 } // namespace |
| 104 | 41 |
| 105 // static | 42 // static |
| 106 CJS_GlobalData* CJS_GlobalData::GetRetainedInstance(CPDFDoc_Environment* pApp) { | 43 CJS_GlobalData* CJS_GlobalData::GetRetainedInstance(CPDFDoc_Environment* pApp) { |
| 107 if (!g_Instance) { | 44 if (!g_pInstance) { |
| 108 g_Instance = new CJS_GlobalData(); | 45 g_pInstance = new CJS_GlobalData(); |
| 109 } | 46 } |
| 110 ++g_Instance->m_RefCount; | 47 ++g_pInstance->m_RefCount; |
| 111 return g_Instance; | 48 return g_pInstance; |
| 112 } | 49 } |
| 113 | 50 |
| 114 void CJS_GlobalData::Release() { | 51 void CJS_GlobalData::Release() { |
| 115 if (!--m_RefCount) { | 52 if (!--m_RefCount) { |
| 116 delete g_Instance; | 53 delete g_pInstance; |
| 117 g_Instance = nullptr; | 54 g_pInstance = nullptr; |
| 118 } | 55 } |
| 119 } | 56 } |
| 120 | 57 |
| 121 CJS_GlobalData::CJS_GlobalData() | 58 CJS_GlobalData::CJS_GlobalData() |
| 122 : m_RefCount(0), m_sFilePath(SDK_JS_GLOBALDATA_FILENAME) { | 59 : m_RefCount(0), m_sFilePath(SDK_JS_GLOBALDATA_FILENAME) { |
| 123 LoadGlobalPersistentVariables(); | 60 LoadGlobalPersistentVariables(); |
| 124 } | 61 } |
| 125 | 62 |
| 126 CJS_GlobalData::~CJS_GlobalData() { | 63 CJS_GlobalData::~CJS_GlobalData() { |
| 127 SaveGlobalPersisitentVariables(); | 64 SaveGlobalPersisitentVariables(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 153 return iter != m_arrayGlobalData.end() ? iter->get() : nullptr; | 90 return iter != m_arrayGlobalData.end() ? iter->get() : nullptr; |
| 154 } | 91 } |
| 155 | 92 |
| 156 void CJS_GlobalData::SetGlobalVariableNumber(const CFX_ByteString& propname, | 93 void CJS_GlobalData::SetGlobalVariableNumber(const CFX_ByteString& propname, |
| 157 double dData) { | 94 double dData) { |
| 158 CFX_ByteString sPropName(propname); | 95 CFX_ByteString sPropName(propname); |
| 159 if (!TrimPropName(&sPropName)) | 96 if (!TrimPropName(&sPropName)) |
| 160 return; | 97 return; |
| 161 | 98 |
| 162 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { | 99 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { |
| 163 pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; | 100 pData->data.nType = JS_GlobalDataType::NUMBER; |
| 164 pData->data.dData = dData; | 101 pData->data.dData = dData; |
| 165 return; | 102 return; |
| 166 } | 103 } |
| 167 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); | 104 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); |
| 168 pNewData->data.sKey = sPropName; | 105 pNewData->data.sKey = sPropName; |
| 169 pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; | 106 pNewData->data.nType = JS_GlobalDataType::NUMBER; |
| 170 pNewData->data.dData = dData; | 107 pNewData->data.dData = dData; |
| 171 m_arrayGlobalData.push_back(std::move(pNewData)); | 108 m_arrayGlobalData.push_back(std::move(pNewData)); |
| 172 } | 109 } |
| 173 | 110 |
| 174 void CJS_GlobalData::SetGlobalVariableBoolean(const CFX_ByteString& propname, | 111 void CJS_GlobalData::SetGlobalVariableBoolean(const CFX_ByteString& propname, |
| 175 bool bData) { | 112 bool bData) { |
| 176 CFX_ByteString sPropName(propname); | 113 CFX_ByteString sPropName(propname); |
| 177 if (!TrimPropName(&sPropName)) | 114 if (!TrimPropName(&sPropName)) |
| 178 return; | 115 return; |
| 179 | 116 |
| 180 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { | 117 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { |
| 181 pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 118 pData->data.nType = JS_GlobalDataType::BOOLEAN; |
| 182 pData->data.bData = bData; | 119 pData->data.bData = bData; |
| 183 return; | 120 return; |
| 184 } | 121 } |
| 185 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); | 122 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); |
| 186 pNewData->data.sKey = sPropName; | 123 pNewData->data.sKey = sPropName; |
| 187 pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 124 pNewData->data.nType = JS_GlobalDataType::BOOLEAN; |
| 188 pNewData->data.bData = bData; | 125 pNewData->data.bData = bData; |
| 189 m_arrayGlobalData.push_back(std::move(pNewData)); | 126 m_arrayGlobalData.push_back(std::move(pNewData)); |
| 190 } | 127 } |
| 191 | 128 |
| 192 void CJS_GlobalData::SetGlobalVariableString(const CFX_ByteString& propname, | 129 void CJS_GlobalData::SetGlobalVariableString(const CFX_ByteString& propname, |
| 193 const CFX_ByteString& sData) { | 130 const CFX_ByteString& sData) { |
| 194 CFX_ByteString sPropName(propname); | 131 CFX_ByteString sPropName(propname); |
| 195 if (!TrimPropName(&sPropName)) | 132 if (!TrimPropName(&sPropName)) |
| 196 return; | 133 return; |
| 197 | 134 |
| 198 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { | 135 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { |
| 199 pData->data.nType = JS_GLOBALDATA_TYPE_STRING; | 136 pData->data.nType = JS_GlobalDataType::STRING; |
| 200 pData->data.sData = sData; | 137 pData->data.sData = sData; |
| 201 return; | 138 return; |
| 202 } | 139 } |
| 203 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); | 140 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); |
| 204 pNewData->data.sKey = sPropName; | 141 pNewData->data.sKey = sPropName; |
| 205 pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING; | 142 pNewData->data.nType = JS_GlobalDataType::STRING; |
| 206 pNewData->data.sData = sData; | 143 pNewData->data.sData = sData; |
| 207 m_arrayGlobalData.push_back(std::move(pNewData)); | 144 m_arrayGlobalData.push_back(std::move(pNewData)); |
| 208 } | 145 } |
| 209 | 146 |
| 210 void CJS_GlobalData::SetGlobalVariableObject( | 147 void CJS_GlobalData::SetGlobalVariableObject( |
| 211 const CFX_ByteString& propname, | 148 const CFX_ByteString& propname, |
| 212 const CJS_GlobalVariableArray& array) { | 149 const CJS_GlobalVariableArray& array) { |
| 213 CFX_ByteString sPropName(propname); | 150 CFX_ByteString sPropName(propname); |
| 214 if (!TrimPropName(&sPropName)) | 151 if (!TrimPropName(&sPropName)) |
| 215 return; | 152 return; |
| 216 | 153 |
| 217 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { | 154 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { |
| 218 pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; | 155 pData->data.nType = JS_GlobalDataType::OBJECT; |
| 219 pData->data.objData.Copy(array); | 156 pData->data.objData.Copy(array); |
| 220 return; | 157 return; |
| 221 } | 158 } |
| 222 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); | 159 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); |
| 223 pNewData->data.sKey = sPropName; | 160 pNewData->data.sKey = sPropName; |
| 224 pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; | 161 pNewData->data.nType = JS_GlobalDataType::OBJECT; |
| 225 pNewData->data.objData.Copy(array); | 162 pNewData->data.objData.Copy(array); |
| 226 m_arrayGlobalData.push_back(std::move(pNewData)); | 163 m_arrayGlobalData.push_back(std::move(pNewData)); |
| 227 } | 164 } |
| 228 | 165 |
| 229 void CJS_GlobalData::SetGlobalVariableNull(const CFX_ByteString& propname) { | 166 void CJS_GlobalData::SetGlobalVariableNull(const CFX_ByteString& propname) { |
| 230 CFX_ByteString sPropName(propname); | 167 CFX_ByteString sPropName(propname); |
| 231 if (!TrimPropName(&sPropName)) | 168 if (!TrimPropName(&sPropName)) |
| 232 return; | 169 return; |
| 233 | 170 |
| 234 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { | 171 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { |
| 235 pData->data.nType = JS_GLOBALDATA_TYPE_NULL; | 172 pData->data.nType = JS_GlobalDataType::NULLOBJ; |
| 236 return; | 173 return; |
| 237 } | 174 } |
| 238 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); | 175 std::unique_ptr<CJS_GlobalData_Element> pNewData(new CJS_GlobalData_Element); |
| 239 pNewData->data.sKey = sPropName; | 176 pNewData->data.sKey = sPropName; |
| 240 pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL; | 177 pNewData->data.nType = JS_GlobalDataType::NULLOBJ; |
| 241 m_arrayGlobalData.push_back(std::move(pNewData)); | 178 m_arrayGlobalData.push_back(std::move(pNewData)); |
| 242 } | 179 } |
| 243 | 180 |
| 244 FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent( | 181 FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent( |
| 245 const CFX_ByteString& propname, | 182 const CFX_ByteString& propname, |
| 246 FX_BOOL bPersistent) { | 183 FX_BOOL bPersistent) { |
| 247 CFX_ByteString sPropName(propname); | 184 CFX_ByteString sPropName(propname); |
| 248 if (!TrimPropName(&sPropName)) | 185 if (!TrimPropName(&sPropName)) |
| 249 return FALSE; | 186 return FALSE; |
| 250 | 187 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 | 247 |
| 311 uint32_t dwNameLen = *((uint32_t*)p); | 248 uint32_t dwNameLen = *((uint32_t*)p); |
| 312 p += sizeof(uint32_t); | 249 p += sizeof(uint32_t); |
| 313 | 250 |
| 314 if (p + dwNameLen > pBuffer + nLength) | 251 if (p + dwNameLen > pBuffer + nLength) |
| 315 break; | 252 break; |
| 316 | 253 |
| 317 CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen); | 254 CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen); |
| 318 p += sizeof(char) * dwNameLen; | 255 p += sizeof(char) * dwNameLen; |
| 319 | 256 |
| 320 uint16_t wDataType = *((uint16_t*)p); | 257 JS_GlobalDataType wDataType = |
| 258 static_cast<JS_GlobalDataType>(*((uint16_t*)p)); |
| 321 p += sizeof(uint16_t); | 259 p += sizeof(uint16_t); |
| 322 | 260 |
| 323 switch (wDataType) { | 261 switch (wDataType) { |
| 324 case JS_GLOBALDATA_TYPE_NUMBER: { | 262 case JS_GlobalDataType::NUMBER: { |
| 325 double dData = 0; | 263 double dData = 0; |
| 326 switch (wVersion) { | 264 switch (wVersion) { |
| 327 case 1: { | 265 case 1: { |
| 328 uint32_t dwData = *((uint32_t*)p); | 266 uint32_t dwData = *((uint32_t*)p); |
| 329 p += sizeof(uint32_t); | 267 p += sizeof(uint32_t); |
| 330 dData = dwData; | 268 dData = dwData; |
| 331 } break; | 269 } break; |
| 332 case 2: { | 270 case 2: { |
| 333 dData = *((double*)p); | 271 dData = *((double*)p); |
| 334 p += sizeof(double); | 272 p += sizeof(double); |
| 335 } break; | 273 } break; |
| 336 } | 274 } |
| 337 SetGlobalVariableNumber(sEntry, dData); | 275 SetGlobalVariableNumber(sEntry, dData); |
| 338 SetGlobalVariablePersistent(sEntry, TRUE); | 276 SetGlobalVariablePersistent(sEntry, TRUE); |
| 339 } break; | 277 } break; |
| 340 case JS_GLOBALDATA_TYPE_BOOLEAN: { | 278 case JS_GlobalDataType::BOOLEAN: { |
| 341 uint16_t wData = *((uint16_t*)p); | 279 uint16_t wData = *((uint16_t*)p); |
| 342 p += sizeof(uint16_t); | 280 p += sizeof(uint16_t); |
| 343 SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); | 281 SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); |
| 344 SetGlobalVariablePersistent(sEntry, TRUE); | 282 SetGlobalVariablePersistent(sEntry, TRUE); |
| 345 } break; | 283 } break; |
| 346 case JS_GLOBALDATA_TYPE_STRING: { | 284 case JS_GlobalDataType::STRING: { |
| 347 uint32_t dwLength = *((uint32_t*)p); | 285 uint32_t dwLength = *((uint32_t*)p); |
| 348 p += sizeof(uint32_t); | 286 p += sizeof(uint32_t); |
| 349 | 287 |
| 350 if (p + dwLength > pBuffer + nLength) | 288 if (p + dwLength > pBuffer + nLength) |
| 351 break; | 289 break; |
| 352 | 290 |
| 353 SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength)); | 291 SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength)); |
| 354 SetGlobalVariablePersistent(sEntry, TRUE); | 292 SetGlobalVariablePersistent(sEntry, TRUE); |
| 355 p += sizeof(char) * dwLength; | 293 p += sizeof(char) * dwLength; |
| 356 } break; | 294 } break; |
| 357 case JS_GLOBALDATA_TYPE_NULL: { | 295 case JS_GlobalDataType::NULLOBJ: { |
| 358 SetGlobalVariableNull(sEntry); | 296 SetGlobalVariableNull(sEntry); |
| 359 SetGlobalVariablePersistent(sEntry, TRUE); | 297 SetGlobalVariablePersistent(sEntry, TRUE); |
| 360 } | 298 } |
| 299 case JS_GlobalDataType::OBJECT: |
| 300 break; |
| 361 } | 301 } |
| 362 } | 302 } |
| 363 } | 303 } |
| 364 } | 304 } |
| 365 FX_Free(pBuffer); | 305 FX_Free(pBuffer); |
| 366 } | 306 } |
| 367 } | 307 } |
| 368 | 308 |
| 369 void CJS_GlobalData::SaveGlobalPersisitentVariables() { | 309 void CJS_GlobalData::SaveGlobalPersisitentVariables() { |
| 370 uint32_t nCount = 0; | 310 uint32_t nCount = 0; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 | 346 |
| 407 void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, | 347 void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, |
| 408 const FX_CHAR* pBuffer, | 348 const FX_CHAR* pBuffer, |
| 409 int32_t nLength) { | 349 int32_t nLength) { |
| 410 // UnSupport. | 350 // UnSupport. |
| 411 } | 351 } |
| 412 | 352 |
| 413 void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, | 353 void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, |
| 414 CJS_KeyValue* pData, | 354 CJS_KeyValue* pData, |
| 415 CFX_BinaryBuf& sData) { | 355 CFX_BinaryBuf& sData) { |
| 416 uint16_t wType = (uint16_t)pData->nType; | 356 switch (pData->nType) { |
| 417 switch (wType) { | 357 case JS_GlobalDataType::NUMBER: { |
| 418 case JS_GLOBALDATA_TYPE_NUMBER: { | |
| 419 uint32_t dwNameLen = (uint32_t)name.GetLength(); | 358 uint32_t dwNameLen = (uint32_t)name.GetLength(); |
| 420 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); | 359 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); |
| 421 sData.AppendString(name); | 360 sData.AppendString(name); |
| 422 sData.AppendBlock(&wType, sizeof(uint16_t)); | 361 sData.AppendBlock(&pData->nType, sizeof(uint16_t)); |
| 423 | 362 |
| 424 double dData = pData->dData; | 363 double dData = pData->dData; |
| 425 sData.AppendBlock(&dData, sizeof(double)); | 364 sData.AppendBlock(&dData, sizeof(double)); |
| 426 } break; | 365 } break; |
| 427 case JS_GLOBALDATA_TYPE_BOOLEAN: { | 366 case JS_GlobalDataType::BOOLEAN: { |
| 428 uint32_t dwNameLen = (uint32_t)name.GetLength(); | 367 uint32_t dwNameLen = (uint32_t)name.GetLength(); |
| 429 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); | 368 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); |
| 430 sData.AppendString(name); | 369 sData.AppendString(name); |
| 431 sData.AppendBlock(&wType, sizeof(uint16_t)); | 370 sData.AppendBlock(&pData->nType, sizeof(uint16_t)); |
| 432 | 371 |
| 433 uint16_t wData = (uint16_t)pData->bData; | 372 uint16_t wData = (uint16_t)pData->bData; |
| 434 sData.AppendBlock(&wData, sizeof(uint16_t)); | 373 sData.AppendBlock(&wData, sizeof(uint16_t)); |
| 435 } break; | 374 } break; |
| 436 case JS_GLOBALDATA_TYPE_STRING: { | 375 case JS_GlobalDataType::STRING: { |
| 437 uint32_t dwNameLen = (uint32_t)name.GetLength(); | 376 uint32_t dwNameLen = (uint32_t)name.GetLength(); |
| 438 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); | 377 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); |
| 439 sData.AppendString(name); | 378 sData.AppendString(name); |
| 440 sData.AppendBlock(&wType, sizeof(uint16_t)); | 379 sData.AppendBlock(&pData->nType, sizeof(uint16_t)); |
| 441 | 380 |
| 442 uint32_t dwDataLen = (uint32_t)pData->sData.GetLength(); | 381 uint32_t dwDataLen = (uint32_t)pData->sData.GetLength(); |
| 443 sData.AppendBlock(&dwDataLen, sizeof(uint32_t)); | 382 sData.AppendBlock(&dwDataLen, sizeof(uint32_t)); |
| 444 sData.AppendString(pData->sData); | 383 sData.AppendString(pData->sData); |
| 445 } break; | 384 } break; |
| 446 case JS_GLOBALDATA_TYPE_NULL: { | 385 case JS_GlobalDataType::NULLOBJ: { |
| 447 uint32_t dwNameLen = (uint32_t)name.GetLength(); | 386 uint32_t dwNameLen = (uint32_t)name.GetLength(); |
| 448 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); | 387 sData.AppendBlock(&dwNameLen, sizeof(uint32_t)); |
| 449 sData.AppendString(name); | 388 sData.AppendString(name); |
| 450 sData.AppendBlock(&wType, sizeof(uint32_t)); | 389 sData.AppendBlock(&pData->nType, sizeof(uint32_t)); |
| 451 } break; | 390 } break; |
| 452 default: | 391 default: |
| 453 break; | 392 break; |
| 454 } | 393 } |
| 455 } | 394 } |
| 456 | |
| 457 CJS_KeyValue::CJS_KeyValue() {} | |
| 458 | |
| 459 CJS_KeyValue::~CJS_KeyValue() {} | |
| OLD | NEW |