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 "../../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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 | 89 |
90 BEGIN_JS_STATIC_PROP(CJS_Global) | 90 BEGIN_JS_STATIC_PROP(CJS_Global) |
91 END_JS_STATIC_PROP() | 91 END_JS_STATIC_PROP() |
92 | 92 |
93 BEGIN_JS_STATIC_METHOD(CJS_Global) | 93 BEGIN_JS_STATIC_METHOD(CJS_Global) |
94 JS_STATIC_METHOD_ENTRY(setPersistent) | 94 JS_STATIC_METHOD_ENTRY(setPersistent) |
95 END_JS_STATIC_METHOD() | 95 END_JS_STATIC_METHOD() |
96 | 96 |
97 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global); | 97 IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global); |
98 | 98 |
99 FX_BOOL»CJS_Global::InitInstance(IFXJS_Context* cc) | 99 bool» CJS_Global::InitInstance(IFXJS_Context* cc) |
100 { | 100 { |
101 CJS_Context* pContext = (CJS_Context*)cc; | 101 CJS_Context* pContext = (CJS_Context*)cc; |
102 ASSERT(pContext != NULL); | 102 ASSERT(pContext != NULL); |
103 | 103 |
104 global_alternate* pGlobal = (global_alternate*)GetEmbedObject(); | 104 global_alternate* pGlobal = (global_alternate*)GetEmbedObject(); |
105 ASSERT(pGlobal != NULL); | 105 ASSERT(pGlobal != NULL); |
106 | 106 |
107 pGlobal->Initial(pContext->GetReaderApp()); | 107 pGlobal->Initial(pContext->GetReaderApp()); |
108 | 108 |
109 » return TRUE; | 109 » return true; |
110 }; | 110 }; |
111 | 111 |
112 global_alternate::global_alternate(CJS_Object* pJSObject) | 112 global_alternate::global_alternate(CJS_Object* pJSObject) |
113 : CJS_EmbedObj(pJSObject), | 113 : CJS_EmbedObj(pJSObject), |
114 m_pApp(NULL) | 114 m_pApp(NULL) |
115 { | 115 { |
116 } | 116 } |
117 | 117 |
118 global_alternate::~global_alternate(void) | 118 global_alternate::~global_alternate(void) |
119 { | 119 { |
120 DestroyGlobalPersisitentVariables(); | 120 DestroyGlobalPersisitentVariables(); |
121 m_pApp->GetRuntimeFactory()->ReleaseGlobalData(); | 121 m_pApp->GetRuntimeFactory()->ReleaseGlobalData(); |
122 } | 122 } |
123 | 123 |
124 void global_alternate::Initial(CPDFDoc_Environment* pApp) | 124 void global_alternate::Initial(CPDFDoc_Environment* pApp) |
125 { | 125 { |
126 m_pApp = pApp; | 126 m_pApp = pApp; |
127 m_pGlobalData = pApp->GetRuntimeFactory()->NewGlobalData(pApp); | 127 m_pGlobalData = pApp->GetRuntimeFactory()->NewGlobalData(pApp); |
128 UpdateGlobalPersistentVariables(); | 128 UpdateGlobalPersistentVariables(); |
129 } | 129 } |
130 | 130 |
131 FX_BOOL»global_alternate::QueryProperty(const FX_WCHAR* propname) | 131 bool» global_alternate::QueryProperty(const FX_WCHAR* propname) |
132 { | 132 { |
133 return CFX_WideString(propname) != L"setPersistent"; | 133 return CFX_WideString(propname) != L"setPersistent"; |
134 } | 134 } |
135 | 135 |
136 FX_BOOL»global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propnam
e, CFX_WideString& sError) | 136 bool» global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propnam
e, CFX_WideString& sError) |
137 { | 137 { |
138 js_global_data* pData = NULL; | 138 js_global_data* pData = NULL; |
139 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); | 139 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); |
140 | 140 |
141 if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) | 141 if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) |
142 { | 142 { |
143 » » pData->bDeleted = TRUE; | 143 » » pData->bDeleted = true; |
144 » » return TRUE; | 144 » » return true; |
145 } | 145 } |
146 | 146 |
147 » return FALSE; | 147 » return false; |
148 } | 148 } |
149 | 149 |
150 FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname
, CJS_PropValue& vp, CFX_WideString& sError) | 150 bool global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, C
JS_PropValue& vp, CFX_WideString& sError) |
151 { | 151 { |
152 if (vp.IsSetting()) | 152 if (vp.IsSetting()) |
153 { | 153 { |
154 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname)
; | 154 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname)
; |
155 switch (vp.GetType()) | 155 switch (vp.GetType()) |
156 { | 156 { |
157 case VT_number: | 157 case VT_number: |
158 { | 158 { |
159 double dData; | 159 double dData; |
160 vp >> dData; | 160 vp >> dData; |
161 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_NUMBER, dData, false, "", v8::Local<v8::Object>(), FALSE); | 161 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_NUMBER, dData, false, "", v8::Local<v8::Object>(), false); |
162 } | 162 } |
163 case VT_boolean: | 163 case VT_boolean: |
164 { | 164 { |
165 bool bData; | 165 bool bData; |
166 vp >> bData; | 166 vp >> bData; |
167 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), FALSE); | 167 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), false); |
168 } | 168 } |
169 case VT_string: | 169 case VT_string: |
170 { | 170 { |
171 CFX_ByteString sData; | 171 CFX_ByteString sData; |
172 vp >> sData; | 172 vp >> sData; |
173 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_STRING, 0, false, sData, v8::Local<v8::Object>(), FALSE); | 173 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_STRING, 0, false, sData, v8::Local<v8::Object>(), false); |
174 } | 174 } |
175 case VT_object: | 175 case VT_object: |
176 { | 176 { |
177 JSObject pData; | 177 JSObject pData; |
178 vp >> pData; | 178 vp >> pData; |
179 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_OBJECT, 0, false, "", pData, FALSE); | 179 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_OBJECT, 0, false, "", pData, false); |
180 } | 180 } |
181 case VT_null: | 181 case VT_null: |
182 { | 182 { |
183 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), FALSE); | 183 » » » » return SetGlobalVariables(sPropName, JS_GLOBALDA
TA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), false); |
184 } | 184 } |
185 case VT_undefined: | 185 case VT_undefined: |
186 { | 186 { |
187 DelProperty(cc, propname, sError); | 187 DelProperty(cc, propname, sError); |
188 » » » » return TRUE; | 188 » » » » return true; |
189 } | 189 } |
190 default: | 190 default: |
191 » » » return FALSE; | 191 » » » return false; |
192 } | 192 } |
193 } | 193 } |
194 else | 194 else |
195 { | 195 { |
196 js_global_data* pData = NULL; | 196 js_global_data* pData = NULL; |
197 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname)
; | 197 CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname)
; |
198 | 198 |
199 if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) | 199 if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) |
200 { | 200 { |
201 if (pData) | 201 if (pData) |
(...skipping 14 matching lines...) Expand all Loading... |
216 case JS_GLOBALDATA_TYPE_OBJECT: | 216 case JS_GLOBALDATA_TYPE_OBJECT: |
217 { | 217 { |
218 v8::Local<v8::Object> ob
j = v8::Local<v8::Object>::New(vp.GetIsolate(),pData->pData); | 218 v8::Local<v8::Object> ob
j = v8::Local<v8::Object>::New(vp.GetIsolate(),pData->pData); |
219 vp << obj; | 219 vp << obj; |
220 break; | 220 break; |
221 } | 221 } |
222 case JS_GLOBALDATA_TYPE_NULL: | 222 case JS_GLOBALDATA_TYPE_NULL: |
223 vp.SetNull(); | 223 vp.SetNull(); |
224 break; | 224 break; |
225 default: | 225 default: |
226 » » » » » » return FALSE; | 226 » » » » » » return false; |
227 } | 227 } |
228 » » » » » return TRUE; | 228 » » » » » return true; |
229 } | 229 } |
230 else | 230 else |
231 { | 231 { |
232 » » » » » return TRUE; | 232 » » » » » return true; |
233 } | 233 } |
234 } | 234 } |
235 else | 235 else |
236 { | 236 { |
237 vp.SetNull(); | 237 vp.SetNull(); |
238 » » » » return TRUE; | 238 » » » » return true; |
239 } | 239 } |
240 } | 240 } |
241 else | 241 else |
242 { | 242 { |
243 vp.SetNull(); | 243 vp.SetNull(); |
244 » » » return TRUE; | 244 » » » return true; |
245 } | 245 } |
246 } | 246 } |
247 | 247 |
248 » return FALSE; | 248 » return false; |
249 } | 249 } |
250 | 250 |
251 FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters&
params, CJS_Value& vRet, CFX_WideString& sError) | 251 bool global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters& pa
rams, CJS_Value& vRet, CFX_WideString& sError) |
252 { | 252 { |
253 CJS_Context* pContext = static_cast<CJS_Context*>(cc); | 253 CJS_Context* pContext = static_cast<CJS_Context*>(cc); |
254 if (params.size() != 2) | 254 if (params.size() != 2) |
255 { | 255 { |
256 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); | 256 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); |
257 » » return FALSE; | 257 » » return false; |
258 } | 258 } |
259 | 259 |
260 CFX_ByteString sName = params[0].ToCFXByteString(); | 260 CFX_ByteString sName = params[0].ToCFXByteString(); |
261 | 261 |
262 js_global_data* pData = NULL; | 262 js_global_data* pData = NULL; |
263 if (m_mapGlobal.Lookup(sName, (void*&)pData)) | 263 if (m_mapGlobal.Lookup(sName, (void*&)pData)) |
264 { | 264 { |
265 if (pData && !pData->bDeleted) | 265 if (pData && !pData->bDeleted) |
266 { | 266 { |
267 pData->bPersistent = params[1].ToBool(); | 267 pData->bPersistent = params[1].ToBool(); |
268 » » » return TRUE; | 268 » » » return true; |
269 } | 269 } |
270 } | 270 } |
271 | 271 |
272 sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); | 272 sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); |
273 » return FALSE; | 273 » return false; |
274 } | 274 } |
275 | 275 |
276 void global_alternate::UpdateGlobalPersistentVariables() | 276 void global_alternate::UpdateGlobalPersistentVariables() |
277 { | 277 { |
278 ASSERT(m_pGlobalData != NULL); | 278 ASSERT(m_pGlobalData != NULL); |
279 | 279 |
280 for (int i=0,sz=m_pGlobalData->GetSize(); i<sz; i++) | 280 for (int i=0,sz=m_pGlobalData->GetSize(); i<sz; i++) |
281 { | 281 { |
282 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); | 282 CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); |
283 ASSERT(pData != NULL); | 283 ASSERT(pData != NULL); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 CFX_ByteString name; | 486 CFX_ByteString name; |
487 js_global_data* pData = NULL; | 487 js_global_data* pData = NULL; |
488 m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); | 488 m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); |
489 delete pData; | 489 delete pData; |
490 } | 490 } |
491 | 491 |
492 m_mapGlobal.RemoveAll(); | 492 m_mapGlobal.RemoveAll(); |
493 } | 493 } |
494 | 494 |
495 | 495 |
496 FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType, | 496 bool global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType, |
497 double dData, bool bData, const CFX_ByteString&
sData, JSObject pData, bool bDefaultPersistent) | 497 double dData, bool bData, const CFX_ByteString&
sData, JSObject pData, bool bDefaultPersistent) |
498 { | 498 { |
499 » if (propname == NULL) return FALSE; | 499 » if (propname == NULL) return false; |
500 | 500 |
501 js_global_data* pTemp = NULL; | 501 js_global_data* pTemp = NULL; |
502 m_mapGlobal.Lookup(propname, (void*&)pTemp); | 502 m_mapGlobal.Lookup(propname, (void*&)pTemp); |
503 | 503 |
504 if (pTemp) | 504 if (pTemp) |
505 { | 505 { |
506 if (pTemp->bDeleted || pTemp->nType != nType) | 506 if (pTemp->bDeleted || pTemp->nType != nType) |
507 { | 507 { |
508 pTemp->dData = 0; | 508 pTemp->dData = 0; |
509 pTemp->bData = 0; | 509 pTemp->bData = 0; |
510 pTemp->sData = ""; | 510 pTemp->sData = ""; |
511 pTemp->nType = nType; | 511 pTemp->nType = nType; |
512 } | 512 } |
513 | 513 |
514 » » pTemp->bDeleted = FALSE; | 514 » » pTemp->bDeleted = false; |
515 | 515 |
516 switch (nType) | 516 switch (nType) |
517 { | 517 { |
518 case JS_GLOBALDATA_TYPE_NUMBER: | 518 case JS_GLOBALDATA_TYPE_NUMBER: |
519 { | 519 { |
520 pTemp->dData = dData; | 520 pTemp->dData = dData; |
521 } | 521 } |
522 break; | 522 break; |
523 case JS_GLOBALDATA_TYPE_BOOLEAN: | 523 case JS_GLOBALDATA_TYPE_BOOLEAN: |
524 { | 524 { |
525 pTemp->bData = bData; | 525 pTemp->bData = bData; |
526 } | 526 } |
527 break; | 527 break; |
528 case JS_GLOBALDATA_TYPE_STRING: | 528 case JS_GLOBALDATA_TYPE_STRING: |
529 { | 529 { |
530 pTemp->sData = sData; | 530 pTemp->sData = sData; |
531 } | 531 } |
532 break; | 532 break; |
533 case JS_GLOBALDATA_TYPE_OBJECT: | 533 case JS_GLOBALDATA_TYPE_OBJECT: |
534 { | 534 { |
535 pTemp->pData.Reset(JS_GetRuntime(pData), pData); | 535 pTemp->pData.Reset(JS_GetRuntime(pData), pData); |
536 } | 536 } |
537 break; | 537 break; |
538 case JS_GLOBALDATA_TYPE_NULL: | 538 case JS_GLOBALDATA_TYPE_NULL: |
539 break; | 539 break; |
540 default: | 540 default: |
541 » » » return FALSE; | 541 » » » return false; |
542 } | 542 } |
543 | 543 |
544 » » return TRUE; | 544 » » return true; |
545 } | 545 } |
546 | 546 |
547 js_global_data* pNewData = NULL; | 547 js_global_data* pNewData = NULL; |
548 | 548 |
549 switch (nType) | 549 switch (nType) |
550 { | 550 { |
551 case JS_GLOBALDATA_TYPE_NUMBER: | 551 case JS_GLOBALDATA_TYPE_NUMBER: |
552 { | 552 { |
553 pNewData = new js_global_data; | 553 pNewData = new js_global_data; |
554 pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; | 554 pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; |
(...skipping 26 matching lines...) Expand all Loading... |
581 } | 581 } |
582 break; | 582 break; |
583 case JS_GLOBALDATA_TYPE_NULL: | 583 case JS_GLOBALDATA_TYPE_NULL: |
584 { | 584 { |
585 pNewData = new js_global_data; | 585 pNewData = new js_global_data; |
586 pNewData->nType = JS_GLOBALDATA_TYPE_NULL; | 586 pNewData->nType = JS_GLOBALDATA_TYPE_NULL; |
587 pNewData->bPersistent = bDefaultPersistent; | 587 pNewData->bPersistent = bDefaultPersistent; |
588 } | 588 } |
589 break; | 589 break; |
590 default: | 590 default: |
591 » » return FALSE; | 591 » » return false; |
592 } | 592 } |
593 | 593 |
594 m_mapGlobal.SetAt(propname, (void*)pNewData); | 594 m_mapGlobal.SetAt(propname, (void*)pNewData); |
595 | 595 |
596 » return TRUE; | 596 » return true; |
597 } | 597 } |
598 | 598 |
599 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p) | 599 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p) |
600 { | 600 { |
601 const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p)); | 601 const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p)); |
602 | 602 |
603 if (nHash == JSCONST_nUndefHash) | 603 if (nHash == JSCONST_nUndefHash) |
604 return VT_undefined; | 604 return VT_undefined; |
605 if (nHash == JSCONST_nNullHash) | 605 if (nHash == JSCONST_nNullHash) |
606 return VT_null; | 606 return VT_null; |
607 if (nHash == JSCONST_nStringHash) | 607 if (nHash == JSCONST_nStringHash) |
608 return VT_string; | 608 return VT_string; |
609 if (nHash == JSCONST_nNumberHash) | 609 if (nHash == JSCONST_nNumberHash) |
610 return VT_number; | 610 return VT_number; |
611 if (nHash == JSCONST_nBoolHash) | 611 if (nHash == JSCONST_nBoolHash) |
612 return VT_boolean; | 612 return VT_boolean; |
613 if (nHash == JSCONST_nDateHash) | 613 if (nHash == JSCONST_nDateHash) |
614 return VT_date; | 614 return VT_date; |
615 if (nHash == JSCONST_nObjectHash) | 615 if (nHash == JSCONST_nObjectHash) |
616 return VT_object; | 616 return VT_object; |
617 if (nHash == JSCONST_nFXobjHash) | 617 if (nHash == JSCONST_nFXobjHash) |
618 return VT_fxobject; | 618 return VT_fxobject; |
619 | 619 |
620 return VT_unknown; | 620 return VT_unknown; |
621 } | 621 } |
622 | 622 |
OLD | NEW |