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/global.h" | 7 #include "fpdfsdk/javascript/global.h" |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, JSGlobalAlternate, global); | 30 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, JSGlobalAlternate, global); |
31 | 31 |
32 void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { | 32 void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) { |
33 CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); | 33 CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); |
34 JSGlobalAlternate* pGlobal = | 34 JSGlobalAlternate* pGlobal = |
35 static_cast<JSGlobalAlternate*>(GetEmbedObject()); | 35 static_cast<JSGlobalAlternate*>(GetEmbedObject()); |
36 pGlobal->Initial(pRuntime->GetReaderApp()); | 36 pGlobal->Initial(pRuntime->GetReaderApp()); |
37 } | 37 } |
38 | 38 |
39 JSGlobalData::JSGlobalData() | 39 JSGlobalData::JSGlobalData() |
40 : nType(0), | 40 : nType(JS_GlobalDataType::NUMBER), |
41 dData(0), | 41 dData(0), |
42 bData(FALSE), | 42 bData(FALSE), |
43 sData(""), | 43 sData(""), |
44 bPersistent(FALSE), | 44 bPersistent(FALSE), |
45 bDeleted(FALSE) {} | 45 bDeleted(FALSE) {} |
46 | 46 |
47 JSGlobalData::~JSGlobalData() { | 47 JSGlobalData::~JSGlobalData() { |
48 pData.Reset(); | 48 pData.Reset(); |
49 } | 49 } |
50 | 50 |
(...skipping 29 matching lines...) Expand all Loading... |
80 FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, | 80 FX_BOOL JSGlobalAlternate::DoProperty(IJS_Context* cc, |
81 const FX_WCHAR* propname, | 81 const FX_WCHAR* propname, |
82 CJS_PropValue& vp, | 82 CJS_PropValue& vp, |
83 CFX_WideString& sError) { | 83 CFX_WideString& sError) { |
84 if (vp.IsSetting()) { | 84 if (vp.IsSetting()) { |
85 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); | 85 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); |
86 switch (vp.GetType()) { | 86 switch (vp.GetType()) { |
87 case CJS_Value::VT_number: { | 87 case CJS_Value::VT_number: { |
88 double dData; | 88 double dData; |
89 vp >> dData; | 89 vp >> dData; |
90 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, | 90 return SetGlobalVariables(sPropName, JS_GlobalDataType::NUMBER, dData, |
91 false, "", v8::Local<v8::Object>(), FALSE); | 91 false, "", v8::Local<v8::Object>(), FALSE); |
92 } | 92 } |
93 case CJS_Value::VT_boolean: { | 93 case CJS_Value::VT_boolean: { |
94 bool bData; | 94 bool bData; |
95 vp >> bData; | 95 vp >> bData; |
96 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 96 return SetGlobalVariables(sPropName, JS_GlobalDataType::BOOLEAN, 0, |
97 bData, "", v8::Local<v8::Object>(), FALSE); | 97 bData, "", v8::Local<v8::Object>(), FALSE); |
98 } | 98 } |
99 case CJS_Value::VT_string: { | 99 case CJS_Value::VT_string: { |
100 CFX_ByteString sData; | 100 CFX_ByteString sData; |
101 vp >> sData; | 101 vp >> sData; |
102 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, | 102 return SetGlobalVariables(sPropName, JS_GlobalDataType::STRING, 0, |
103 false, sData, v8::Local<v8::Object>(), FALSE); | 103 false, sData, v8::Local<v8::Object>(), FALSE); |
104 } | 104 } |
105 case CJS_Value::VT_object: { | 105 case CJS_Value::VT_object: { |
106 v8::Local<v8::Object> pData; | 106 v8::Local<v8::Object> pData; |
107 vp >> pData; | 107 vp >> pData; |
108 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, | 108 return SetGlobalVariables(sPropName, JS_GlobalDataType::OBJECT, 0, |
109 false, "", pData, FALSE); | 109 false, "", pData, FALSE); |
110 } | 110 } |
111 case CJS_Value::VT_null: { | 111 case CJS_Value::VT_null: { |
112 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, | 112 return SetGlobalVariables(sPropName, JS_GlobalDataType::NULLOBJ, 0, |
113 "", v8::Local<v8::Object>(), FALSE); | 113 false, "", v8::Local<v8::Object>(), FALSE); |
114 } | 114 } |
115 case CJS_Value::VT_undefined: { | 115 case CJS_Value::VT_undefined: { |
116 DelProperty(cc, propname, sError); | 116 DelProperty(cc, propname, sError); |
117 return TRUE; | 117 return TRUE; |
118 } | 118 } |
119 default: | 119 default: |
120 break; | 120 break; |
121 } | 121 } |
122 } else { | 122 } else { |
123 auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); | 123 auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); |
124 if (it == m_mapGlobal.end()) { | 124 if (it == m_mapGlobal.end()) { |
125 vp.SetNull(); | 125 vp.SetNull(); |
126 return TRUE; | 126 return TRUE; |
127 } | 127 } |
128 JSGlobalData* pData = it->second; | 128 JSGlobalData* pData = it->second; |
129 if (pData->bDeleted) { | 129 if (pData->bDeleted) { |
130 vp.SetNull(); | 130 vp.SetNull(); |
131 return TRUE; | 131 return TRUE; |
132 } | 132 } |
133 switch (pData->nType) { | 133 switch (pData->nType) { |
134 case JS_GLOBALDATA_TYPE_NUMBER: | 134 case JS_GlobalDataType::NUMBER: |
135 vp << pData->dData; | 135 vp << pData->dData; |
136 return TRUE; | 136 return TRUE; |
137 case JS_GLOBALDATA_TYPE_BOOLEAN: | 137 case JS_GlobalDataType::BOOLEAN: |
138 vp << pData->bData; | 138 vp << pData->bData; |
139 return TRUE; | 139 return TRUE; |
140 case JS_GLOBALDATA_TYPE_STRING: | 140 case JS_GlobalDataType::STRING: |
141 vp << pData->sData; | 141 vp << pData->sData; |
142 return TRUE; | 142 return TRUE; |
143 case JS_GLOBALDATA_TYPE_OBJECT: { | 143 case JS_GlobalDataType::OBJECT: { |
144 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 144 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( |
145 vp.GetJSRuntime()->GetIsolate(), pData->pData); | 145 vp.GetJSRuntime()->GetIsolate(), pData->pData); |
146 vp << obj; | 146 vp << obj; |
147 return TRUE; | 147 return TRUE; |
148 } | 148 } |
149 case JS_GLOBALDATA_TYPE_NULL: | 149 case JS_GlobalDataType::NULLOBJ: |
150 vp.SetNull(); | 150 vp.SetNull(); |
151 return TRUE; | 151 return TRUE; |
152 default: | 152 default: |
153 break; | 153 break; |
154 } | 154 } |
155 } | 155 } |
156 return FALSE; | 156 return FALSE; |
157 } | 157 } |
158 | 158 |
159 FX_BOOL JSGlobalAlternate::setPersistent(IJS_Context* cc, | 159 FX_BOOL JSGlobalAlternate::setPersistent(IJS_Context* cc, |
(...skipping 16 matching lines...) Expand all Loading... |
176 } | 176 } |
177 | 177 |
178 sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); | 178 sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); |
179 return FALSE; | 179 return FALSE; |
180 } | 180 } |
181 | 181 |
182 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { | 182 void JSGlobalAlternate::UpdateGlobalPersistentVariables() { |
183 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { | 183 for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { |
184 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 184 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); |
185 switch (pData->data.nType) { | 185 switch (pData->data.nType) { |
186 case JS_GLOBALDATA_TYPE_NUMBER: | 186 case JS_GlobalDataType::NUMBER: |
187 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, | 187 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NUMBER, |
188 pData->data.dData, false, "", | 188 pData->data.dData, false, "", |
189 v8::Local<v8::Object>(), pData->bPersistent == 1); | 189 v8::Local<v8::Object>(), pData->bPersistent == 1); |
190 FXJS_PutObjectNumber(nullptr, m_pJSObject->ToV8Object(), | 190 FXJS_PutObjectNumber(nullptr, m_pJSObject->ToV8Object(), |
191 pData->data.sKey.UTF8Decode(), pData->data.dData); | 191 pData->data.sKey.UTF8Decode(), pData->data.dData); |
192 break; | 192 break; |
193 case JS_GLOBALDATA_TYPE_BOOLEAN: | 193 case JS_GlobalDataType::BOOLEAN: |
194 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, | 194 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::BOOLEAN, 0, |
195 (bool)(pData->data.bData == 1), "", | 195 (bool)(pData->data.bData == 1), "", |
196 v8::Local<v8::Object>(), pData->bPersistent == 1); | 196 v8::Local<v8::Object>(), pData->bPersistent == 1); |
197 FXJS_PutObjectBoolean(nullptr, m_pJSObject->ToV8Object(), | 197 FXJS_PutObjectBoolean(nullptr, m_pJSObject->ToV8Object(), |
198 pData->data.sKey.UTF8Decode(), | 198 pData->data.sKey.UTF8Decode(), |
199 (bool)(pData->data.bData == 1)); | 199 (bool)(pData->data.bData == 1)); |
200 break; | 200 break; |
201 case JS_GLOBALDATA_TYPE_STRING: | 201 case JS_GlobalDataType::STRING: |
202 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, | 202 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::STRING, 0, |
203 false, pData->data.sData, v8::Local<v8::Object>(), | 203 false, pData->data.sData, v8::Local<v8::Object>(), |
204 pData->bPersistent == 1); | 204 pData->bPersistent == 1); |
205 FXJS_PutObjectString(nullptr, m_pJSObject->ToV8Object(), | 205 FXJS_PutObjectString(nullptr, m_pJSObject->ToV8Object(), |
206 pData->data.sKey.UTF8Decode(), | 206 pData->data.sKey.UTF8Decode(), |
207 pData->data.sData.UTF8Decode()); | 207 pData->data.sData.UTF8Decode()); |
208 break; | 208 break; |
209 case JS_GLOBALDATA_TYPE_OBJECT: { | 209 case JS_GlobalDataType::OBJECT: { |
210 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 210 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); |
211 v8::Local<v8::Object> pObj = | 211 v8::Local<v8::Object> pObj = |
212 FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 212 FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); |
213 | 213 |
214 PutObjectProperty(pObj, &pData->data); | 214 PutObjectProperty(pObj, &pData->data); |
215 | 215 |
216 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, | 216 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::OBJECT, 0, |
217 false, "", pObj, pData->bPersistent == 1); | 217 false, "", pObj, pData->bPersistent == 1); |
218 FXJS_PutObjectObject(nullptr, m_pJSObject->ToV8Object(), | 218 FXJS_PutObjectObject(nullptr, m_pJSObject->ToV8Object(), |
219 pData->data.sKey.UTF8Decode(), pObj); | 219 pData->data.sKey.UTF8Decode(), pObj); |
220 } break; | 220 } break; |
221 case JS_GLOBALDATA_TYPE_NULL: | 221 case JS_GlobalDataType::NULLOBJ: |
222 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, | 222 SetGlobalVariables(pData->data.sKey, JS_GlobalDataType::NULLOBJ, 0, |
223 "", v8::Local<v8::Object>(), | 223 false, "", v8::Local<v8::Object>(), |
224 pData->bPersistent == 1); | 224 pData->bPersistent == 1); |
225 FXJS_PutObjectNull(nullptr, m_pJSObject->ToV8Object(), | 225 FXJS_PutObjectNull(nullptr, m_pJSObject->ToV8Object(), |
226 pData->data.sKey.UTF8Decode()); | 226 pData->data.sKey.UTF8Decode()); |
227 break; | 227 break; |
228 } | 228 } |
229 } | 229 } |
230 } | 230 } |
231 | 231 |
232 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { | 232 void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_Context* cc) { |
233 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { | 233 for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { |
234 CFX_ByteString name = it->first; | 234 CFX_ByteString name = it->first; |
235 JSGlobalData* pData = it->second; | 235 JSGlobalData* pData = it->second; |
236 if (pData->bDeleted) { | 236 if (pData->bDeleted) { |
237 m_pGlobalData->DeleteGlobalVariable(name); | 237 m_pGlobalData->DeleteGlobalVariable(name); |
238 } else { | 238 } else { |
239 switch (pData->nType) { | 239 switch (pData->nType) { |
240 case JS_GLOBALDATA_TYPE_NUMBER: | 240 case JS_GlobalDataType::NUMBER: |
241 m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); | 241 m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); |
242 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 242 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
243 break; | 243 break; |
244 case JS_GLOBALDATA_TYPE_BOOLEAN: | 244 case JS_GlobalDataType::BOOLEAN: |
245 m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); | 245 m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); |
246 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 246 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
247 break; | 247 break; |
248 case JS_GLOBALDATA_TYPE_STRING: | 248 case JS_GlobalDataType::STRING: |
249 m_pGlobalData->SetGlobalVariableString(name, pData->sData); | 249 m_pGlobalData->SetGlobalVariableString(name, pData->sData); |
250 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 250 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
251 break; | 251 break; |
252 case JS_GLOBALDATA_TYPE_OBJECT: { | 252 case JS_GlobalDataType::OBJECT: { |
253 CJS_GlobalVariableArray array; | 253 CJS_GlobalVariableArray array; |
254 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( | 254 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New( |
255 GetJSObject()->GetIsolate(), pData->pData); | 255 GetJSObject()->GetIsolate(), pData->pData); |
256 ObjectToArray(cc, obj, array); | 256 ObjectToArray(cc, obj, array); |
257 m_pGlobalData->SetGlobalVariableObject(name, array); | 257 m_pGlobalData->SetGlobalVariableObject(name, array); |
258 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 258 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
259 } break; | 259 } break; |
260 case JS_GLOBALDATA_TYPE_NULL: | 260 case JS_GlobalDataType::NULLOBJ: |
261 m_pGlobalData->SetGlobalVariableNull(name); | 261 m_pGlobalData->SetGlobalVariableNull(name); |
262 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); | 262 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); |
263 break; | 263 break; |
264 } | 264 } |
265 } | 265 } |
266 } | 266 } |
267 } | 267 } |
268 | 268 |
269 void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, | 269 void JSGlobalAlternate::ObjectToArray(IJS_Context* cc, |
270 v8::Local<v8::Object> pObj, | 270 v8::Local<v8::Object> pObj, |
271 CJS_GlobalVariableArray& array) { | 271 CJS_GlobalVariableArray& array) { |
272 v8::Isolate* isolate = pObj->GetIsolate(); | 272 v8::Isolate* isolate = pObj->GetIsolate(); |
273 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); | 273 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); |
274 | 274 |
275 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); | 275 v8::Local<v8::Array> pKeyList = FXJS_GetObjectElementNames(isolate, pObj); |
276 int nObjElements = pKeyList->Length(); | 276 int nObjElements = pKeyList->Length(); |
277 for (int i = 0; i < nObjElements; i++) { | 277 for (int i = 0; i < nObjElements; i++) { |
278 CFX_WideString ws = | 278 CFX_WideString ws = |
279 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); | 279 FXJS_ToString(isolate, FXJS_GetArrayElement(isolate, pKeyList, i)); |
280 CFX_ByteString sKey = ws.UTF8Encode(); | 280 CFX_ByteString sKey = ws.UTF8Encode(); |
281 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws); | 281 v8::Local<v8::Value> v = FXJS_GetObjectElement(isolate, pObj, ws); |
282 switch (CJS_Value::GetValueType(v)) { | 282 switch (CJS_Value::GetValueType(v)) { |
283 case CJS_Value::VT_number: { | 283 case CJS_Value::VT_number: { |
284 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 284 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
285 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; | 285 pObjElement->nType = JS_GlobalDataType::NUMBER; |
286 pObjElement->sKey = sKey; | 286 pObjElement->sKey = sKey; |
287 pObjElement->dData = FXJS_ToNumber(isolate, v); | 287 pObjElement->dData = FXJS_ToNumber(isolate, v); |
288 array.Add(pObjElement); | 288 array.Add(pObjElement); |
289 } break; | 289 } break; |
290 case CJS_Value::VT_boolean: { | 290 case CJS_Value::VT_boolean: { |
291 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 291 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
292 pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 292 pObjElement->nType = JS_GlobalDataType::BOOLEAN; |
293 pObjElement->sKey = sKey; | 293 pObjElement->sKey = sKey; |
294 pObjElement->dData = FXJS_ToBoolean(isolate, v); | 294 pObjElement->dData = FXJS_ToBoolean(isolate, v); |
295 array.Add(pObjElement); | 295 array.Add(pObjElement); |
296 } break; | 296 } break; |
297 case CJS_Value::VT_string: { | 297 case CJS_Value::VT_string: { |
298 CFX_ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(); | 298 CFX_ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(); |
299 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 299 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
300 pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; | 300 pObjElement->nType = JS_GlobalDataType::STRING; |
301 pObjElement->sKey = sKey; | 301 pObjElement->sKey = sKey; |
302 pObjElement->sData = sValue; | 302 pObjElement->sData = sValue; |
303 array.Add(pObjElement); | 303 array.Add(pObjElement); |
304 } break; | 304 } break; |
305 case CJS_Value::VT_object: { | 305 case CJS_Value::VT_object: { |
306 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 306 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
307 pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; | 307 pObjElement->nType = JS_GlobalDataType::OBJECT; |
308 pObjElement->sKey = sKey; | 308 pObjElement->sKey = sKey; |
309 ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); | 309 ObjectToArray(cc, FXJS_ToObject(isolate, v), pObjElement->objData); |
310 array.Add(pObjElement); | 310 array.Add(pObjElement); |
311 } break; | 311 } break; |
312 case CJS_Value::VT_null: { | 312 case CJS_Value::VT_null: { |
313 CJS_KeyValue* pObjElement = new CJS_KeyValue; | 313 CJS_KeyValue* pObjElement = new CJS_KeyValue; |
314 pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; | 314 pObjElement->nType = JS_GlobalDataType::NULLOBJ; |
315 pObjElement->sKey = sKey; | 315 pObjElement->sKey = sKey; |
316 array.Add(pObjElement); | 316 array.Add(pObjElement); |
317 } break; | 317 } break; |
318 default: | 318 default: |
319 break; | 319 break; |
320 } | 320 } |
321 } | 321 } |
322 } | 322 } |
323 | 323 |
324 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, | 324 void JSGlobalAlternate::PutObjectProperty(v8::Local<v8::Object> pObj, |
325 CJS_KeyValue* pData) { | 325 CJS_KeyValue* pData) { |
326 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { | 326 for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { |
327 CJS_KeyValue* pObjData = pData->objData.GetAt(i); | 327 CJS_KeyValue* pObjData = pData->objData.GetAt(i); |
328 switch (pObjData->nType) { | 328 switch (pObjData->nType) { |
329 case JS_GLOBALDATA_TYPE_NUMBER: | 329 case JS_GlobalDataType::NUMBER: |
330 FXJS_PutObjectNumber(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 330 FXJS_PutObjectNumber(nullptr, pObj, pObjData->sKey.UTF8Decode(), |
331 pObjData->dData); | 331 pObjData->dData); |
332 break; | 332 break; |
333 case JS_GLOBALDATA_TYPE_BOOLEAN: | 333 case JS_GlobalDataType::BOOLEAN: |
334 FXJS_PutObjectBoolean(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 334 FXJS_PutObjectBoolean(nullptr, pObj, pObjData->sKey.UTF8Decode(), |
335 pObjData->bData == 1); | 335 pObjData->bData == 1); |
336 break; | 336 break; |
337 case JS_GLOBALDATA_TYPE_STRING: | 337 case JS_GlobalDataType::STRING: |
338 FXJS_PutObjectString(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 338 FXJS_PutObjectString(nullptr, pObj, pObjData->sKey.UTF8Decode(), |
339 pObjData->sData.UTF8Decode()); | 339 pObjData->sData.UTF8Decode()); |
340 break; | 340 break; |
341 case JS_GLOBALDATA_TYPE_OBJECT: { | 341 case JS_GlobalDataType::OBJECT: { |
342 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); | 342 v8::Isolate* pRuntime = m_pJSObject->ToV8Object()->GetIsolate(); |
343 v8::Local<v8::Object> pNewObj = | 343 v8::Local<v8::Object> pNewObj = |
344 FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); | 344 FXJS_NewFxDynamicObj(pRuntime, nullptr, -1); |
345 PutObjectProperty(pNewObj, pObjData); | 345 PutObjectProperty(pNewObj, pObjData); |
346 FXJS_PutObjectObject(nullptr, pObj, pObjData->sKey.UTF8Decode(), | 346 FXJS_PutObjectObject(nullptr, pObj, pObjData->sKey.UTF8Decode(), |
347 pNewObj); | 347 pNewObj); |
348 } break; | 348 } break; |
349 case JS_GLOBALDATA_TYPE_NULL: | 349 case JS_GlobalDataType::NULLOBJ: |
350 FXJS_PutObjectNull(nullptr, pObj, pObjData->sKey.UTF8Decode()); | 350 FXJS_PutObjectNull(nullptr, pObj, pObjData->sKey.UTF8Decode()); |
351 break; | 351 break; |
352 } | 352 } |
353 } | 353 } |
354 } | 354 } |
355 | 355 |
356 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { | 356 void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { |
357 for (const auto& pair : m_mapGlobal) { | 357 for (const auto& pair : m_mapGlobal) { |
358 delete pair.second; | 358 delete pair.second; |
359 } | 359 } |
360 m_mapGlobal.clear(); | 360 m_mapGlobal.clear(); |
361 } | 361 } |
362 | 362 |
363 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, | 363 FX_BOOL JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname, |
364 int nType, | 364 JS_GlobalDataType nType, |
365 double dData, | 365 double dData, |
366 bool bData, | 366 bool bData, |
367 const CFX_ByteString& sData, | 367 const CFX_ByteString& sData, |
368 v8::Local<v8::Object> pData, | 368 v8::Local<v8::Object> pData, |
369 bool bDefaultPersistent) { | 369 bool bDefaultPersistent) { |
370 if (propname.IsEmpty()) | 370 if (propname.IsEmpty()) |
371 return FALSE; | 371 return FALSE; |
372 | 372 |
373 auto it = m_mapGlobal.find(propname); | 373 auto it = m_mapGlobal.find(propname); |
374 if (it != m_mapGlobal.end()) { | 374 if (it != m_mapGlobal.end()) { |
375 JSGlobalData* pTemp = it->second; | 375 JSGlobalData* pTemp = it->second; |
376 if (pTemp->bDeleted || pTemp->nType != nType) { | 376 if (pTemp->bDeleted || pTemp->nType != nType) { |
377 pTemp->dData = 0; | 377 pTemp->dData = 0; |
378 pTemp->bData = 0; | 378 pTemp->bData = 0; |
379 pTemp->sData = ""; | 379 pTemp->sData = ""; |
380 pTemp->nType = nType; | 380 pTemp->nType = nType; |
381 } | 381 } |
382 | 382 |
383 pTemp->bDeleted = FALSE; | 383 pTemp->bDeleted = FALSE; |
384 switch (nType) { | 384 switch (nType) { |
385 case JS_GLOBALDATA_TYPE_NUMBER: { | 385 case JS_GlobalDataType::NUMBER: { |
386 pTemp->dData = dData; | 386 pTemp->dData = dData; |
387 } break; | 387 } break; |
388 case JS_GLOBALDATA_TYPE_BOOLEAN: { | 388 case JS_GlobalDataType::BOOLEAN: { |
389 pTemp->bData = bData; | 389 pTemp->bData = bData; |
390 } break; | 390 } break; |
391 case JS_GLOBALDATA_TYPE_STRING: { | 391 case JS_GlobalDataType::STRING: { |
392 pTemp->sData = sData; | 392 pTemp->sData = sData; |
393 } break; | 393 } break; |
394 case JS_GLOBALDATA_TYPE_OBJECT: { | 394 case JS_GlobalDataType::OBJECT: { |
395 pTemp->pData.Reset(pData->GetIsolate(), pData); | 395 pTemp->pData.Reset(pData->GetIsolate(), pData); |
396 } break; | 396 } break; |
397 case JS_GLOBALDATA_TYPE_NULL: | 397 case JS_GlobalDataType::NULLOBJ: |
398 break; | 398 break; |
399 default: | 399 default: |
400 return FALSE; | 400 return FALSE; |
401 } | 401 } |
402 return TRUE; | 402 return TRUE; |
403 } | 403 } |
404 | 404 |
405 JSGlobalData* pNewData = nullptr; | 405 JSGlobalData* pNewData = nullptr; |
406 | 406 |
407 switch (nType) { | 407 switch (nType) { |
408 case JS_GLOBALDATA_TYPE_NUMBER: { | 408 case JS_GlobalDataType::NUMBER: { |
409 pNewData = new JSGlobalData; | 409 pNewData = new JSGlobalData; |
410 pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; | 410 pNewData->nType = JS_GlobalDataType::NUMBER; |
411 pNewData->dData = dData; | 411 pNewData->dData = dData; |
412 pNewData->bPersistent = bDefaultPersistent; | 412 pNewData->bPersistent = bDefaultPersistent; |
413 } break; | 413 } break; |
414 case JS_GLOBALDATA_TYPE_BOOLEAN: { | 414 case JS_GlobalDataType::BOOLEAN: { |
415 pNewData = new JSGlobalData; | 415 pNewData = new JSGlobalData; |
416 pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; | 416 pNewData->nType = JS_GlobalDataType::BOOLEAN; |
417 pNewData->bData = bData; | 417 pNewData->bData = bData; |
418 pNewData->bPersistent = bDefaultPersistent; | 418 pNewData->bPersistent = bDefaultPersistent; |
419 } break; | 419 } break; |
420 case JS_GLOBALDATA_TYPE_STRING: { | 420 case JS_GlobalDataType::STRING: { |
421 pNewData = new JSGlobalData; | 421 pNewData = new JSGlobalData; |
422 pNewData->nType = JS_GLOBALDATA_TYPE_STRING; | 422 pNewData->nType = JS_GlobalDataType::STRING; |
423 pNewData->sData = sData; | 423 pNewData->sData = sData; |
424 pNewData->bPersistent = bDefaultPersistent; | 424 pNewData->bPersistent = bDefaultPersistent; |
425 } break; | 425 } break; |
426 case JS_GLOBALDATA_TYPE_OBJECT: { | 426 case JS_GlobalDataType::OBJECT: { |
427 pNewData = new JSGlobalData; | 427 pNewData = new JSGlobalData; |
428 pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; | 428 pNewData->nType = JS_GlobalDataType::OBJECT; |
429 pNewData->pData.Reset(pData->GetIsolate(), pData); | 429 pNewData->pData.Reset(pData->GetIsolate(), pData); |
430 pNewData->bPersistent = bDefaultPersistent; | 430 pNewData->bPersistent = bDefaultPersistent; |
431 } break; | 431 } break; |
432 case JS_GLOBALDATA_TYPE_NULL: { | 432 case JS_GlobalDataType::NULLOBJ: { |
433 pNewData = new JSGlobalData; | 433 pNewData = new JSGlobalData; |
434 pNewData->nType = JS_GLOBALDATA_TYPE_NULL; | 434 pNewData->nType = JS_GlobalDataType::NULLOBJ; |
435 pNewData->bPersistent = bDefaultPersistent; | 435 pNewData->bPersistent = bDefaultPersistent; |
436 } break; | 436 } break; |
437 default: | 437 default: |
438 return FALSE; | 438 return FALSE; |
439 } | 439 } |
440 | 440 |
441 m_mapGlobal[propname] = pNewData; | 441 m_mapGlobal[propname] = pNewData; |
442 return TRUE; | 442 return TRUE; |
443 } | 443 } |
OLD | NEW |