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

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

Issue 1239313005: Merge to XFA - else after returns. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Fix issues. Created 5 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/src/javascript/PublicMethods.cpp ('k') | fpdfsdk/src/javascript/util.cpp » ('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 "../../include/javascript/IJavaScript.h" 7 #include "../../include/javascript/IJavaScript.h"
8 #include "../../include/javascript/JS_Context.h" 8 #include "../../include/javascript/JS_Context.h"
9 #include "../../include/javascript/JS_Define.h" 9 #include "../../include/javascript/JS_Define.h"
10 #include "../../include/javascript/JS_EventHandler.h" 10 #include "../../include/javascript/JS_EventHandler.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 #endif 85 #endif
86 86
87 87
88 BEGIN_JS_STATIC_CONST(CJS_Global) 88 BEGIN_JS_STATIC_CONST(CJS_Global)
89 END_JS_STATIC_CONST() 89 END_JS_STATIC_CONST()
90 90
91 BEGIN_JS_STATIC_PROP(CJS_Global) 91 BEGIN_JS_STATIC_PROP(CJS_Global)
92 END_JS_STATIC_PROP() 92 END_JS_STATIC_PROP()
93 93
94 BEGIN_JS_STATIC_METHOD(CJS_Global) 94 BEGIN_JS_STATIC_METHOD(CJS_Global)
95 » JS_STATIC_METHOD_ENTRY(setPersistent) 95 JS_STATIC_METHOD_ENTRY(setPersistent)
96 END_JS_STATIC_METHOD() 96 END_JS_STATIC_METHOD()
97 97
98 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global); 98 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global);
99 99
100 FX_BOOL»CJS_Global::InitInstance(IFXJS_Context* cc) 100 FX_BOOL CJS_Global::InitInstance(IFXJS_Context* cc)
101 { 101 {
102 » CJS_Context* pContext = (CJS_Context*)cc; 102 CJS_Context* pContext = (CJS_Context*)cc;
103 » ASSERT(pContext != NULL); 103 ASSERT(pContext != NULL);
104 104
105 » global_alternate* pGlobal = (global_alternate*)GetEmbedObject(); 105 global_alternate* pGlobal = (global_alternate*)GetEmbedObject();
106 » ASSERT(pGlobal != NULL); 106 ASSERT(pGlobal != NULL);
107 107
108 » pGlobal->Initial(pContext->GetReaderApp()); 108 pGlobal->Initial(pContext->GetReaderApp());
109 109
110 » return TRUE; 110 return TRUE;
111 }; 111 };
112 112
113 global_alternate::global_alternate(CJS_Object* pJSObject) 113 global_alternate::global_alternate(CJS_Object* pJSObject)
114 » : CJS_EmbedObj(pJSObject), 114 : CJS_EmbedObj(pJSObject),
115 » m_pApp(NULL) 115 m_pApp(NULL)
116 { 116 {
117 } 117 }
118 118
119 global_alternate::~global_alternate(void) 119 global_alternate::~global_alternate(void)
120 { 120 {
121 DestroyGlobalPersisitentVariables(); 121 DestroyGlobalPersisitentVariables();
122 CPDFXFA_App::GetInstance()->GetRuntimeFactory()->ReleaseGlobalData(); 122 CPDFXFA_App::GetInstance()->GetRuntimeFactory()->ReleaseGlobalData();
123 } 123 }
124 124
125 void global_alternate::Initial(CPDFDoc_Environment* pApp) 125 void global_alternate::Initial(CPDFDoc_Environment* pApp)
126 { 126 {
127 m_pApp = pApp; 127 m_pApp = pApp;
128 m_pGlobalData = CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewGlob alData(pApp); 128 m_pGlobalData = CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewGlob alData(pApp);
129 UpdateGlobalPersistentVariables(); 129 UpdateGlobalPersistentVariables();
130 } 130 }
131 131
132 FX_BOOL»global_alternate::QueryProperty(const FX_WCHAR* propname) 132 FX_BOOL global_alternate::QueryProperty(const FX_WCHAR* propname)
133 { 133 {
134 » return CFX_WideString(propname) != L"setPersistent"; 134 return CFX_WideString(propname) != L"setPersistent";
135 } 135 }
136 136
137 FX_BOOL»global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propnam e, CFX_WideString& sError) 137 FX_BOOL global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propnam e, CFX_WideString& sError)
138 { 138 {
139 » js_global_data* pData = NULL; 139 js_global_data* pData = NULL;
140 » CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); 140 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
141 141
142 » if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) 142 if (m_mapGlobal.Lookup(sPropName, (void*&)pData))
143 » { 143 {
144 » » pData->bDeleted = TRUE; 144 pData->bDeleted = TRUE;
145 » » return TRUE; 145 return TRUE;
146 » } 146 }
147 147
148 » return FALSE; 148 return FALSE;
149 } 149 }
150 150
151 FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname , CJS_PropValue& vp, CFX_WideString& sError) 151 FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname , CJS_PropValue& vp, CFX_WideString& sError)
152 { 152 {
153 » if (vp.IsSetting()) 153 if (vp.IsSetting())
154 » { 154 {
155 » » CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname) ; 155 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
156 » » switch (vp.GetType()) 156 switch (vp.GetType())
157 » » { 157 {
158 » » case VT_number: 158 case VT_number:
159 » » » { 159 {
160 » » » » double dData; 160 double dData;
161 » » » » vp >> dData; 161 vp >> dData;
162 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA TA_TYPE_NUMBER, dData, false, "", v8::Local<v8::Object>(), FALSE); 162 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, false, "", v8::Local<v8::Object>(), FALSE);
163 » » » } 163 }
164 » » case VT_boolean: 164 case VT_boolean:
165 » » » { 165 {
166 » » » » bool bData; 166 bool bData;
167 » » » » vp >> bData; 167 vp >> bData;
168 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA TA_TYPE_BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), FALSE); 168 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), FALSE);
169 » » » } 169 }
170 » » case VT_string: 170 case VT_string:
171 » » » { 171 {
172 » » » » CFX_ByteString sData; 172 CFX_ByteString sData;
173 » » » » vp >> sData; 173 vp >> sData;
174 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA TA_TYPE_STRING, 0, false, sData, v8::Local<v8::Object>(), FALSE); 174 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, false, sData, v8::Local<v8::Object>(), FALSE);
175 » » » } 175 }
176 » » case VT_object: 176 case VT_object:
177 » » » { 177 {
178 » » » » JSObject pData; 178 JSObject pData;
179 » » » » vp >> pData; 179 vp >> pData;
180 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA TA_TYPE_OBJECT, 0, false, "", pData, FALSE); 180 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", pData, FALSE);
181 » » » } 181 }
182 » » case VT_null: 182 case VT_null:
183 » » » { 183 {
184 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA TA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), FALSE); 184 return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), FALSE);
185 » » » } 185 }
186 » » case VT_undefined: 186 case VT_undefined:
187 » » » { 187 {
188 » » » » DelProperty(cc, propname, sError); 188 DelProperty(cc, propname, sError);
189 » » » » return TRUE; 189 return TRUE;
190 » » » } 190 }
191 » » default: 191 default:
192 » » » return FALSE; 192 break;
193 » » } 193 }
194 » } 194 }
195 » else 195 else
196 » { 196 {
197 » » js_global_data* pData = NULL; 197 void* pVoid = nullptr;
198 » » CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname) ; 198 if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid))
199 199 {
200 » » if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) 200 vp.SetNull();
201 » » { 201 return TRUE;
202 » » » if (pData) 202 }
203 » » » { 203 if (!pVoid)
204 » » » » if (!pData->bDeleted) 204 {
205 » » » » { 205 vp.SetNull();
206 » » » » » switch (pData->nType) 206 return TRUE;
207 » » » » » { 207 }
208 » » » » » case JS_GLOBALDATA_TYPE_NUMBER: 208 js_global_data* pData = (js_global_data*)pVoid;
209 » » » » » » vp << pData->dData; 209 if (pData->bDeleted)
210 » » » » » » break; 210 return TRUE;
211 » » » » » case JS_GLOBALDATA_TYPE_BOOLEAN: 211
212 » » » » » » vp << pData->bData; 212 switch (pData->nType)
213 » » » » » » break; 213 {
214 » » » » » case JS_GLOBALDATA_TYPE_STRING: 214 case JS_GLOBALDATA_TYPE_NUMBER:
215 » » » » » » vp << pData->sData; 215 vp << pData->dData;
216 » » » » » » break; 216 return TRUE;
217 » » » » » case JS_GLOBALDATA_TYPE_OBJECT: 217 case JS_GLOBALDATA_TYPE_BOOLEAN:
218 » » » » » » { 218 vp << pData->bData;
219 » » » » » » » v8::Local<v8::Object> ob j = v8::Local<v8::Object>::New(vp.GetIsolate(),pData->pData); 219 return TRUE;
220 » » » » » » » vp << obj; 220 case JS_GLOBALDATA_TYPE_STRING:
221 » » » » » » » break; 221 vp << pData->sData;
222 » » » » » » } 222 return TRUE;
223 » » » » » case JS_GLOBALDATA_TYPE_NULL: 223 case JS_GLOBALDATA_TYPE_OBJECT:
224 » » » » » » vp.SetNull(); 224 {
225 » » » » » » break; 225 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(vp.Ge tIsolate(),pData->pData);
226 » » » » » default: 226 vp << obj;
227 » » » » » » return FALSE; 227 return TRUE;
228 » » » » » } 228 }
229 » » » » » return TRUE; 229 case JS_GLOBALDATA_TYPE_NULL:
230 » » » » } 230 vp.SetNull();
231 » » » » else 231 return TRUE;
232 » » » » { 232 default:
233 » » » » » return TRUE; 233 break;
234 » » » » } 234 }
235 » » » } 235 }
236 » » » else 236 return FALSE;
237 » » » {
238 » » » » vp.SetNull();
239 » » » » return TRUE;
240 » » » }
241 » » }
242 » » else
243 » » {
244 » » » vp.SetNull();
245 » » » return TRUE;
246 » » }
247 » }
248
249 » return FALSE;
250 } 237 }
251 238
252 FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) 239 FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
253 { 240 {
254 » CJS_Context* pContext = static_cast<CJS_Context*>(cc); 241 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
255 » if (params.size() != 2) 242 if (params.size() != 2)
256 » { 243 {
257 » » sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); 244 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
258 » » return FALSE; 245 return FALSE;
259 » } 246 }
260 247
261 » CFX_ByteString sName = params[0].ToCFXByteString(); 248 CFX_ByteString sName = params[0].ToCFXByteString();
262 249
263 » js_global_data* pData = NULL; 250 js_global_data* pData = NULL;
264 » if (m_mapGlobal.Lookup(sName, (void*&)pData)) 251 if (m_mapGlobal.Lookup(sName, (void*&)pData))
265 » { 252 {
266 » » if (pData && !pData->bDeleted) 253 if (pData && !pData->bDeleted)
267 » » { 254 {
268 » » » pData->bPersistent = params[1].ToBool(); 255 pData->bPersistent = params[1].ToBool();
269 » » » return TRUE; 256 return TRUE;
270 » » } 257 }
271 » } 258 }
272 259
273 » sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); 260 sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL);
274 » return FALSE; 261 return FALSE;
275 } 262 }
276 263
277 void global_alternate::UpdateGlobalPersistentVariables() 264 void global_alternate::UpdateGlobalPersistentVariables()
278 { 265 {
279 » ASSERT(m_pGlobalData != NULL); 266 ASSERT(m_pGlobalData != NULL);
280 267
281 » for (int i=0,sz=m_pGlobalData->GetSize(); i<sz; i++) 268 for (int i=0,sz=m_pGlobalData->GetSize(); i<sz; i++)
282 » { 269 {
283 » » CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); 270 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i);
284 » » ASSERT(pData != NULL); 271 ASSERT(pData != NULL);
285 272
286 » » switch (pData->data.nType) 273 switch (pData->data.nType)
287 » » { 274 {
288 » » case JS_GLOBALDATA_TYPE_NUMBER: 275 case JS_GLOBALDATA_TYPE_NUMBER:
289 » » » SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_ NUMBER, pData->data.dData, false, "", v8::Local<v8::Object>(), pData->bPersisten t == 1); 276 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, pDat a->data.dData, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1);
290 » » » JS_PutObjectNumber(NULL,(JSFXObject)(*m_pJSObject), 277 JS_PutObjectNumber(NULL,(JSFXObject)(*m_pJSObject),
291 » » » » » » » pData->data.sKey.UTF8 Decode().c_str(), pData->data.dData); 278 pData->data.sKey.UTF8Decode().c_str(), pData->dat a.dData);
292 » » » break; 279 break;
293 » » case JS_GLOBALDATA_TYPE_BOOLEAN: 280 case JS_GLOBALDATA_TYPE_BOOLEAN:
294 » » » SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_ BOOLEAN, 0, (bool)(pData->data.bData == 1), "", v8::Local<v8::Object>(), pData-> bPersistent == 1); 281 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, (bool)(pData->data.bData == 1), "", v8::Local<v8::Object>(), pData->bPersistent == 1);
295 » » » JS_PutObjectBoolean(NULL,(JSFXObject)(*m_pJSObject), 282 JS_PutObjectBoolean(NULL,(JSFXObject)(*m_pJSObject),
296 » » » » » » » » pData->data.sKey .UTF8Decode().c_str(), (bool)(pData->data.bData == 1)); 283 pData->data.sKey.UTF8Decode().c_str(), (bool)(pD ata->data.bData == 1));
297 » » » break; 284 break;
298 » » case JS_GLOBALDATA_TYPE_STRING: 285 case JS_GLOBALDATA_TYPE_STRING:
299 » » » SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_ STRING, 0, false, pData->data.sData, v8::Local<v8::Object>(), pData->bPersistent == 1); 286 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, f alse, pData->data.sData, v8::Local<v8::Object>(), pData->bPersistent == 1);
300 » » » JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject), 287 JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject),
301 » » » » » » » pData->data.sKey.UTF8 Decode().c_str(), 288 pData->data.sKey.UTF8Decode().c_str(),
302 » » » » » » » pData->data.sData.UTF 8Decode().c_str()); 289 pData->data.sData.UTF8Decode().c_str());
303 » » » break; 290 break;
304 » » case JS_GLOBALDATA_TYPE_OBJECT: 291 case JS_GLOBALDATA_TYPE_OBJECT:
305 » » » { 292 {
306 » » » » IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObjec t)(*m_pJSObject)); 293 IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject) );
307 » » » » v8::Local<v8::Object> pObj = JS_NewFxDynamicObj( pRuntime, NULL, -1); 294 v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
308 295
309 » » » » PutObjectProperty(pObj, &pData->data); 296 PutObjectProperty(pObj, &pData->data);
310 297
311 » » » » SetGlobalVariables(pData->data.sKey, JS_GLOBALDA TA_TYPE_OBJECT, 0, false, "", 298 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "",
312 » » » » » (JSObject)pObj, pData->bPersistent == 1) ; 299 (JSObject)pObj, pData->bPersistent == 1);
313 » » » » JS_PutObjectObject(NULL,(JSFXObject)(*m_pJSObjec t), 300 JS_PutObjectObject(NULL,(JSFXObject)(*m_pJSObject),
314 » » » » » » » » pData->data.s Key.UTF8Decode().c_str(), (JSObject)pObj); 301 pData->data.sKey.UTF8Decode().c_str(), (JSObj ect)pObj);
315 » » » } 302 }
316 » » » break; 303 break;
317 » » case JS_GLOBALDATA_TYPE_NULL: 304 case JS_GLOBALDATA_TYPE_NULL:
318 » » » SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_ NULL, 0, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1); 305 SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, fal se, "", v8::Local<v8::Object>(), pData->bPersistent == 1);
319 » » » JS_PutObjectNull(NULL,(JSFXObject)(*m_pJSObject), 306 JS_PutObjectNull(NULL,(JSFXObject)(*m_pJSObject),
320 » » » » » » » pData->data.sKey.UTF8De code().c_str()); 307 pData->data.sKey.UTF8Decode().c_str());
321 » » » break; 308 break;
322 » » } 309 }
323 » } 310 }
324 } 311 }
325 312
326 void global_alternate::CommitGlobalPersisitentVariables() 313 void global_alternate::CommitGlobalPersisitentVariables()
327 { 314 {
328 » ASSERT(m_pGlobalData != NULL); 315 ASSERT(m_pGlobalData != NULL);
329 316
330 » FX_POSITION» pos = m_mapGlobal.GetStartPosition(); 317 FX_POSITION pos = m_mapGlobal.GetStartPosition();
331 » while (pos) 318 while (pos)
332 » { 319 {
333 » » CFX_ByteString name; 320 CFX_ByteString name;
334 » » js_global_data* pData = NULL; 321 js_global_data* pData = NULL;
335 » » m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); 322 m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
336 323
337 » » if (pData) 324 if (pData)
338 » » { 325 {
339 » » » if (pData->bDeleted) 326 if (pData->bDeleted)
340 » » » { 327 {
341 » » » » m_pGlobalData->DeleteGlobalVariable(name); 328 m_pGlobalData->DeleteGlobalVariable(name);
342 » » » } 329 }
343 » » » else 330 else
344 » » » { 331 {
345 » » » » switch (pData->nType) 332 switch (pData->nType)
346 » » » » { 333 {
347 » » » » case JS_GLOBALDATA_TYPE_NUMBER: 334 case JS_GLOBALDATA_TYPE_NUMBER:
348 » » » » » m_pGlobalData->SetGlobalVariableNumber(n ame, pData->dData); 335 m_pGlobalData->SetGlobalVariableNumber(name, pData->dData);
349 » » » » » m_pGlobalData->SetGlobalVariablePersiste nt(name, pData->bPersistent); 336 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPer sistent);
350 » » » » » break; 337 break;
351 » » » » case JS_GLOBALDATA_TYPE_BOOLEAN: 338 case JS_GLOBALDATA_TYPE_BOOLEAN:
352 » » » » » m_pGlobalData->SetGlobalVariableBoolean( name, pData->bData); 339 m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData);
353 » » » » » m_pGlobalData->SetGlobalVariablePersiste nt(name, pData->bPersistent); 340 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPer sistent);
354 » » » » » break; 341 break;
355 » » » » case JS_GLOBALDATA_TYPE_STRING: 342 case JS_GLOBALDATA_TYPE_STRING:
356 » » » » » m_pGlobalData->SetGlobalVariableString(n ame, pData->sData); 343 m_pGlobalData->SetGlobalVariableString(name, pData->sData);
357 » » » » » m_pGlobalData->SetGlobalVariablePersiste nt(name, pData->bPersistent); 344 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPer sistent);
358 » » » » » break; 345 break;
359 » » » » case JS_GLOBALDATA_TYPE_OBJECT: 346 case JS_GLOBALDATA_TYPE_OBJECT:
360 » » » » » //if (pData->pData) 347 //if (pData->pData)
361 » » » » » { 348 {
362 » » » » » » CJS_GlobalVariableArray array; 349 CJS_GlobalVariableArray array;
363 » » » » » » v8::Local<v8::Object> obj = v8:: Local<v8::Object>::New(GetJSObject()->GetIsolate(),pData->pData); 350 v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(G etJSObject()->GetIsolate(),pData->pData);
364 » » » » » » ObjectToArray(obj, array); 351 ObjectToArray(obj, array);
365 » » » » » » m_pGlobalData->SetGlobalVariable Object(name, array); 352 m_pGlobalData->SetGlobalVariableObject(name, array);
366 » » » » » » m_pGlobalData->SetGlobalVariable Persistent(name, pData->bPersistent); 353 m_pGlobalData->SetGlobalVariablePersistent(name, pData-> bPersistent);
367 » » » » » } 354 }
368 » » » » » break; 355 break;
369 » » » » case JS_GLOBALDATA_TYPE_NULL: 356 case JS_GLOBALDATA_TYPE_NULL:
370 » » » » » m_pGlobalData->SetGlobalVariableNull(nam e); 357 m_pGlobalData->SetGlobalVariableNull(name);
371 » » » » » m_pGlobalData->SetGlobalVariablePersiste nt(name, pData->bPersistent); 358 m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPer sistent);
372 » » » » » break; 359 break;
373 » » » » } 360 }
374 » » » } 361 }
375 » » } 362 }
376 » } 363 }
377 } 364 }
378 365
379 void global_alternate::ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVaria bleArray& array) 366 void global_alternate::ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVaria bleArray& array)
380 { 367 {
381 » v8::Local<v8::Context> context = pObj->CreationContext(); 368 v8::Local<v8::Context> context = pObj->CreationContext();
382 » v8::Isolate* isolate = context->GetIsolate(); 369 v8::Isolate* isolate = context->GetIsolate();
383 » v8::Local<v8::Array> pKeyList = JS_GetObjectElementNames(isolate, pObj); 370 v8::Local<v8::Array> pKeyList = JS_GetObjectElementNames(isolate, pObj);
384 » int» nObjElements = pKeyList->Length(); 371 int nObjElements = pKeyList->Length();
385 372
386 » for (int i=0; i<nObjElements; i++) 373 for (int i=0; i<nObjElements; i++)
387 » { 374 {
388 375
389 » » CFX_WideString ws = JS_ToString(isolate, JS_GetArrayElement(isol ate, pKeyList, i)); 376 CFX_WideString ws = JS_ToString(isolate, JS_GetArrayElement(isolate, pKe yList, i));
390 » » CFX_ByteString sKey = ws.UTF8Encode(); 377 CFX_ByteString sKey = ws.UTF8Encode();
391 378
392 » » v8::Local<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c _str()); 379 v8::Local<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c_str());
393 » » FXJSVALUETYPE vt = GET_VALUE_TYPE(v); 380 FXJSVALUETYPE vt = GET_VALUE_TYPE(v);
394 » » switch (vt) 381 switch (vt)
395 » » { 382 {
396 » » case VT_number: 383 case VT_number:
397 » » » { 384 {
398 » » » » CJS_KeyValue* pObjElement = new CJS_KeyValue; 385 CJS_KeyValue* pObjElement = new CJS_KeyValue;
399 » » » » pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; 386 pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER;
400 » » » » pObjElement->sKey = sKey; 387 pObjElement->sKey = sKey;
401 » » » » pObjElement->dData = JS_ToNumber(isolate, v); 388 pObjElement->dData = JS_ToNumber(isolate, v);
402 » » » » array.Add(pObjElement); 389 array.Add(pObjElement);
403 » » » } 390 }
404 » » » break; 391 break;
405 » » case VT_boolean: 392 case VT_boolean:
406 » » » { 393 {
407 » » » » CJS_KeyValue* pObjElement = new CJS_KeyValue; 394 CJS_KeyValue* pObjElement = new CJS_KeyValue;
408 » » » » pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; 395 pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
409 » » » » pObjElement->sKey = sKey; 396 pObjElement->sKey = sKey;
410 » » » » pObjElement->dData = JS_ToBoolean(isolate, v); 397 pObjElement->dData = JS_ToBoolean(isolate, v);
411 » » » » array.Add(pObjElement); 398 array.Add(pObjElement);
412 » » » } 399 }
413 » » » break; 400 break;
414 » » case VT_string: 401 case VT_string:
415 » » » { 402 {
416 » » » » CFX_ByteString sValue = CJS_Value(isolate, v, VT _string).ToCFXByteString(); 403 CFX_ByteString sValue = CJS_Value(isolate, v, VT_string).ToCFXBy teString();
417 » » » » CJS_KeyValue* pObjElement = new CJS_KeyValue; 404 CJS_KeyValue* pObjElement = new CJS_KeyValue;
418 » » » » pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; 405 pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
419 » » » » pObjElement->sKey = sKey; 406 pObjElement->sKey = sKey;
420 » » » » pObjElement->sData = sValue; 407 pObjElement->sData = sValue;
421 » » » » array.Add(pObjElement); 408 array.Add(pObjElement);
422 » » » } 409 }
423 » » » break; 410 break;
424 » » case VT_object: 411 case VT_object:
425 » » » { 412 {
426 » » » » CJS_KeyValue* pObjElement = new CJS_KeyValue; 413 CJS_KeyValue* pObjElement = new CJS_KeyValue;
427 » » » » pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; 414 pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT;
428 » » » » pObjElement->sKey = sKey; 415 pObjElement->sKey = sKey;
429 » » » » ObjectToArray(JS_ToObject(isolate, v), pObjEleme nt->objData); 416 ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData);
430 » » » » array.Add(pObjElement); 417 array.Add(pObjElement);
431 » » » } 418 }
432 » » » break; 419 break;
433 » » case VT_null: 420 case VT_null:
434 » » » { 421 {
435 » » » » CJS_KeyValue* pObjElement = new CJS_KeyValue; 422 CJS_KeyValue* pObjElement = new CJS_KeyValue;
436 » » » » pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; 423 pObjElement->nType = JS_GLOBALDATA_TYPE_NULL;
437 » » » » pObjElement->sKey = sKey; 424 pObjElement->sKey = sKey;
438 » » » » array.Add(pObjElement); 425 array.Add(pObjElement);
439 » » » } 426 }
440 » » » break; 427 break;
441 » » default: 428 default:
442 » » » break; 429 break;
443 » » } 430 }
444 » } 431 }
445 } 432 }
446 433
447 void global_alternate::PutObjectProperty(v8::Local<v8::Object> pObj, CJS_KeyValu e* pData) 434 void global_alternate::PutObjectProperty(v8::Local<v8::Object> pObj, CJS_KeyValu e* pData)
448 { 435 {
449 » ASSERT(pData != NULL); 436 ASSERT(pData != NULL);
450 437
451 » for (int i=0,sz=pData->objData.Count(); i<sz; i++) 438 for (int i=0,sz=pData->objData.Count(); i<sz; i++)
452 » { 439 {
453 » » CJS_KeyValue* pObjData = pData->objData.GetAt(i); 440 CJS_KeyValue* pObjData = pData->objData.GetAt(i);
454 » » ASSERT(pObjData != NULL); 441 ASSERT(pObjData != NULL);
455 442
456 » » switch (pObjData->nType) 443 switch (pObjData->nType)
457 » » { 444 {
458 » » case JS_GLOBALDATA_TYPE_NUMBER: 445 case JS_GLOBALDATA_TYPE_NUMBER:
459 » » » JS_PutObjectNumber(NULL,(JSObject)pObj, pObjData->sKey.U TF8Decode().c_str(), pObjData->dData); 446 JS_PutObjectNumber(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode(). c_str(), pObjData->dData);
460 » » » break; 447 break;
461 » » case JS_GLOBALDATA_TYPE_BOOLEAN: 448 case JS_GLOBALDATA_TYPE_BOOLEAN:
462 » » » JS_PutObjectBoolean(NULL,(JSObject)pObj, pObjData->sKey. UTF8Decode().c_str(), (bool)(pObjData->bData == 1)); 449 JS_PutObjectBoolean(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode() .c_str(), (bool)(pObjData->bData == 1));
463 » » » break; 450 break;
464 » » case JS_GLOBALDATA_TYPE_STRING: 451 case JS_GLOBALDATA_TYPE_STRING:
465 » » » JS_PutObjectString(NULL,(JSObject)pObj, pObjData->sKey.U TF8Decode().c_str(), pObjData->sData.UTF8Decode().c_str()); 452 JS_PutObjectString(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode(). c_str(), pObjData->sData.UTF8Decode().c_str());
466 » » » break; 453 break;
467 » » case JS_GLOBALDATA_TYPE_OBJECT: 454 case JS_GLOBALDATA_TYPE_OBJECT:
468 » » » { 455 {
469 » » » » IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObjec t)(*m_pJSObject)); 456 IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject) );
470 » » » » v8::Local<v8::Object> pNewObj = JS_NewFxDynamicO bj(pRuntime, NULL, -1); 457 v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NUL L, -1);
471 » » » » PutObjectProperty(pNewObj, pObjData); 458 PutObjectProperty(pNewObj, pObjData);
472 » » » » JS_PutObjectObject(NULL, (JSObject)pObj, pObjDat a->sKey.UTF8Decode().c_str(), (JSObject)pNewObj); 459 JS_PutObjectObject(NULL, (JSObject)pObj, pObjData->sKey.UTF8Deco de().c_str(), (JSObject)pNewObj);
473 » » » } 460 }
474 » » » break; 461 break;
475 » » case JS_GLOBALDATA_TYPE_NULL: 462 case JS_GLOBALDATA_TYPE_NULL:
476 » » » JS_PutObjectNull(NULL,(JSObject)pObj, pObjData->sKey.UTF 8Decode().c_str()); 463 JS_PutObjectNull(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_ str());
477 » » » break; 464 break;
478 » » } 465 }
479 » } 466 }
480 } 467 }
481 468
482 void global_alternate::DestroyGlobalPersisitentVariables() 469 void global_alternate::DestroyGlobalPersisitentVariables()
483 { 470 {
484 » FX_POSITION» pos = m_mapGlobal.GetStartPosition(); 471 FX_POSITION pos = m_mapGlobal.GetStartPosition();
485 » while (pos) 472 while (pos)
486 » { 473 {
487 » » CFX_ByteString name; 474 CFX_ByteString name;
488 » » js_global_data* pData = NULL; 475 js_global_data* pData = NULL;
489 » » m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); 476 m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
490 » » delete pData; 477 delete pData;
491 » } 478 }
492 479
493 » m_mapGlobal.RemoveAll(); 480 m_mapGlobal.RemoveAll();
494 } 481 }
495 482
496 483
497 FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType, 484 FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType,
498 » » » » double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent) 485 double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent)
499 { 486 {
500 » if (propname == NULL) return FALSE; 487 if (propname == NULL) return FALSE;
501 488
502 » js_global_data* pTemp = NULL; 489 js_global_data* pTemp = NULL;
503 » m_mapGlobal.Lookup(propname, (void*&)pTemp); 490 m_mapGlobal.Lookup(propname, (void*&)pTemp);
504 491
505 » if (pTemp) 492 if (pTemp)
506 » { 493 {
507 » » if (pTemp->bDeleted || pTemp->nType != nType) 494 if (pTemp->bDeleted || pTemp->nType != nType)
508 » » { 495 {
509 » » » pTemp->dData = 0; 496 pTemp->dData = 0;
510 » » » pTemp->bData = 0; 497 pTemp->bData = 0;
511 » » » pTemp->sData = ""; 498 pTemp->sData = "";
512 » » » pTemp->nType = nType; 499 pTemp->nType = nType;
513 » » } 500 }
514 501
515 » » pTemp->bDeleted = FALSE; 502 pTemp->bDeleted = FALSE;
516 503
517 » » switch (nType) 504 switch (nType)
518 » » { 505 {
519 » » case JS_GLOBALDATA_TYPE_NUMBER: 506 case JS_GLOBALDATA_TYPE_NUMBER:
520 » » » { 507 {
521 » » » » pTemp->dData = dData; 508 pTemp->dData = dData;
522 » » » } 509 }
523 » » » break; 510 break;
524 » » case JS_GLOBALDATA_TYPE_BOOLEAN: 511 case JS_GLOBALDATA_TYPE_BOOLEAN:
525 » » » { 512 {
526 » » » » pTemp->bData = bData; 513 pTemp->bData = bData;
527 » » » } 514 }
528 » » » break; 515 break;
529 » » case JS_GLOBALDATA_TYPE_STRING: 516 case JS_GLOBALDATA_TYPE_STRING:
530 » » » { 517 {
531 » » » » pTemp->sData = sData; 518 pTemp->sData = sData;
532 » » » } 519 }
533 » » » break; 520 break;
534 » » case JS_GLOBALDATA_TYPE_OBJECT: 521 case JS_GLOBALDATA_TYPE_OBJECT:
535 » » » { 522 {
536 » » » » pTemp->pData.Reset(JS_GetRuntime(pData), pData); 523 pTemp->pData.Reset(JS_GetRuntime(pData), pData);
537 » » » } 524 }
538 » » » break; 525 break;
539 » » case JS_GLOBALDATA_TYPE_NULL: 526 case JS_GLOBALDATA_TYPE_NULL:
540 » » » break; 527 break;
541 » » default: 528 default:
542 » » » return FALSE; 529 return FALSE;
543 » » } 530 }
544 531
545 » » return TRUE; 532 return TRUE;
546 » } 533 }
547 534
548 » js_global_data* pNewData = NULL; 535 js_global_data* pNewData = NULL;
549 536
550 » switch (nType) 537 switch (nType)
551 » { 538 {
552 » case JS_GLOBALDATA_TYPE_NUMBER: 539 case JS_GLOBALDATA_TYPE_NUMBER:
553 » » { 540 {
554 » » » pNewData = new js_global_data; 541 pNewData = new js_global_data;
555 » » » pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; 542 pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER;
556 » » » pNewData->dData = dData; 543 pNewData->dData = dData;
557 » » » pNewData->bPersistent = bDefaultPersistent; 544 pNewData->bPersistent = bDefaultPersistent;
558 » » } 545 }
559 » » break; 546 break;
560 » case JS_GLOBALDATA_TYPE_BOOLEAN: 547 case JS_GLOBALDATA_TYPE_BOOLEAN:
561 » » { 548 {
562 » » » pNewData = new js_global_data; 549 pNewData = new js_global_data;
563 » » » pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; 550 pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
564 » » » pNewData->bData = bData; 551 pNewData->bData = bData;
565 » » » pNewData->bPersistent = bDefaultPersistent; 552 pNewData->bPersistent = bDefaultPersistent;
566 » » } 553 }
567 » » break; 554 break;
568 » case JS_GLOBALDATA_TYPE_STRING: 555 case JS_GLOBALDATA_TYPE_STRING:
569 » » { 556 {
570 » » » pNewData = new js_global_data; 557 pNewData = new js_global_data;
571 » » » pNewData->nType = JS_GLOBALDATA_TYPE_STRING; 558 pNewData->nType = JS_GLOBALDATA_TYPE_STRING;
572 » » » pNewData->sData = sData; 559 pNewData->sData = sData;
573 » » » pNewData->bPersistent = bDefaultPersistent; 560 pNewData->bPersistent = bDefaultPersistent;
574 » » } 561 }
575 » » break; 562 break;
576 » case JS_GLOBALDATA_TYPE_OBJECT: 563 case JS_GLOBALDATA_TYPE_OBJECT:
577 » » { 564 {
578 » » » pNewData = new js_global_data; 565 pNewData = new js_global_data;
579 » » » pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; 566 pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT;
580 » » » pNewData->pData.Reset(JS_GetRuntime(pData), pData); 567 pNewData->pData.Reset(JS_GetRuntime(pData), pData);
581 » » » pNewData->bPersistent = bDefaultPersistent; 568 pNewData->bPersistent = bDefaultPersistent;
582 » » } 569 }
583 » » break; 570 break;
584 » case JS_GLOBALDATA_TYPE_NULL: 571 case JS_GLOBALDATA_TYPE_NULL:
585 » » { 572 {
586 » » » pNewData = new js_global_data; 573 pNewData = new js_global_data;
587 » » » pNewData->nType = JS_GLOBALDATA_TYPE_NULL; 574 pNewData->nType = JS_GLOBALDATA_TYPE_NULL;
588 » » » pNewData->bPersistent = bDefaultPersistent; 575 pNewData->bPersistent = bDefaultPersistent;
589 » » } 576 }
590 » » break; 577 break;
591 » default: 578 default:
592 » » return FALSE; 579 return FALSE;
593 » } 580 }
594 581
595 » m_mapGlobal.SetAt(propname, (void*)pNewData); 582 m_mapGlobal.SetAt(propname, (void*)pNewData);
596 583
597 » return TRUE; 584 return TRUE;
598 } 585 }
599 586
600 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p) 587 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p)
601 { 588 {
602 const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p)); 589 const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p));
603 590
604 if (nHash == JSCONST_nUndefHash) 591 if (nHash == JSCONST_nUndefHash)
605 return VT_undefined; 592 return VT_undefined;
606 if (nHash == JSCONST_nNullHash) 593 if (nHash == JSCONST_nNullHash)
607 return VT_null; 594 return VT_null;
608 if (nHash == JSCONST_nStringHash) 595 if (nHash == JSCONST_nStringHash)
609 return VT_string; 596 return VT_string;
610 if (nHash == JSCONST_nNumberHash) 597 if (nHash == JSCONST_nNumberHash)
611 return VT_number; 598 return VT_number;
612 if (nHash == JSCONST_nBoolHash) 599 if (nHash == JSCONST_nBoolHash)
613 return VT_boolean; 600 return VT_boolean;
614 if (nHash == JSCONST_nDateHash) 601 if (nHash == JSCONST_nDateHash)
615 return VT_date; 602 return VT_date;
616 if (nHash == JSCONST_nObjectHash) 603 if (nHash == JSCONST_nObjectHash)
617 return VT_object; 604 return VT_object;
618 if (nHash == JSCONST_nFXobjHash) 605 if (nHash == JSCONST_nFXobjHash)
619 return VT_fxobject; 606 return VT_fxobject;
620 607
621 return VT_unknown; 608 return VT_unknown;
622 } 609 }
623
OLDNEW
« no previous file with comments | « fpdfsdk/src/javascript/PublicMethods.cpp ('k') | fpdfsdk/src/javascript/util.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698