Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: fpdfsdk/javascript/global.cpp

Issue 2154843002: Clean up singleton implementation (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/javascript/global.h ('k') | pdfium.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « fpdfsdk/javascript/global.h ('k') | pdfium.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698