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

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

Issue 2453683011: Remove FX_BOOL from fpdfsdk. (Closed)
Patch Set: Regenerate patch after rebase. Created 4 years, 1 month 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/Document.h ('k') | fpdfsdk/javascript/Field.h » ('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/Document.h" 7 #include "fpdfsdk/javascript/Document.h"
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 30 matching lines...) Expand all
41 BEGIN_JS_STATIC_PROP(CJS_PrintParamsObj) 41 BEGIN_JS_STATIC_PROP(CJS_PrintParamsObj)
42 END_JS_STATIC_PROP() 42 END_JS_STATIC_PROP()
43 43
44 BEGIN_JS_STATIC_METHOD(CJS_PrintParamsObj) 44 BEGIN_JS_STATIC_METHOD(CJS_PrintParamsObj)
45 END_JS_STATIC_METHOD() 45 END_JS_STATIC_METHOD()
46 46
47 IMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj) 47 IMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
48 48
49 PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject) 49 PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
50 : CJS_EmbedObj(pJSObject) { 50 : CJS_EmbedObj(pJSObject) {
51 bUI = TRUE; 51 bUI = true;
52 nStart = 0; 52 nStart = 0;
53 nEnd = 0; 53 nEnd = 0;
54 bSilent = FALSE; 54 bSilent = false;
55 bShrinkToFit = FALSE; 55 bShrinkToFit = false;
56 bPrintAsImage = FALSE; 56 bPrintAsImage = false;
57 bReverse = FALSE; 57 bReverse = false;
58 bAnnotations = TRUE; 58 bAnnotations = true;
59 } 59 }
60 60
61 #define MINWIDTH 5.0f 61 #define MINWIDTH 5.0f
62 #define MINHEIGHT 5.0f 62 #define MINHEIGHT 5.0f
63 63
64 BEGIN_JS_STATIC_CONST(CJS_Document) 64 BEGIN_JS_STATIC_CONST(CJS_Document)
65 END_JS_STATIC_CONST() 65 END_JS_STATIC_CONST()
66 66
67 BEGIN_JS_STATIC_PROP(CJS_Document) 67 BEGIN_JS_STATIC_PROP(CJS_Document)
68 JS_STATIC_PROP_ENTRY(ADBE) 68 JS_STATIC_PROP_ENTRY(ADBE)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) { 149 void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
150 CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime); 150 CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
151 Document* pDoc = static_cast<Document*>(GetEmbedObject()); 151 Document* pDoc = static_cast<Document*>(GetEmbedObject());
152 pDoc->SetFormFillEnv(pRuntime->GetFormFillEnv()); 152 pDoc->SetFormFillEnv(pRuntime->GetFormFillEnv());
153 } 153 }
154 154
155 Document::Document(CJS_Object* pJSObject) 155 Document::Document(CJS_Object* pJSObject)
156 : CJS_EmbedObj(pJSObject), 156 : CJS_EmbedObj(pJSObject),
157 m_pFormFillEnv(nullptr), 157 m_pFormFillEnv(nullptr),
158 m_cwBaseURL(L""), 158 m_cwBaseURL(L""),
159 m_bDelay(FALSE) {} 159 m_bDelay(false) {}
160 160
161 Document::~Document() { 161 Document::~Document() {
162 } 162 }
163 163
164 // the total number of fileds in document. 164 // the total number of fileds in document.
165 FX_BOOL Document::numFields(IJS_Context* cc, 165 bool Document::numFields(IJS_Context* cc,
166 CJS_PropValue& vp, 166 CJS_PropValue& vp,
167 CFX_WideString& sError) { 167 CFX_WideString& sError) {
168 if (vp.IsSetting()) { 168 if (vp.IsSetting()) {
169 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 169 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
170 return FALSE; 170 return false;
171 } 171 }
172 if (!m_pFormFillEnv) { 172 if (!m_pFormFillEnv) {
173 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 173 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
174 return FALSE; 174 return false;
175 } 175 }
176 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 176 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
177 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); 177 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
178 vp << static_cast<int>(pPDFForm->CountFields(CFX_WideString())); 178 vp << static_cast<int>(pPDFForm->CountFields(CFX_WideString()));
179 return TRUE; 179 return true;
180 } 180 }
181 181
182 FX_BOOL Document::dirty(IJS_Context* cc, 182 bool Document::dirty(IJS_Context* cc,
183 CJS_PropValue& vp, 183 CJS_PropValue& vp,
184 CFX_WideString& sError) { 184 CFX_WideString& sError) {
185 if (!m_pFormFillEnv) { 185 if (!m_pFormFillEnv) {
186 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 186 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
187 return FALSE; 187 return false;
188 } 188 }
189 if (vp.IsGetting()) { 189 if (vp.IsGetting()) {
190 vp << !!m_pFormFillEnv->GetChangeMark(); 190 vp << !!m_pFormFillEnv->GetChangeMark();
191 } else { 191 } else {
192 bool bChanged = false; 192 bool bChanged = false;
193 vp >> bChanged; 193 vp >> bChanged;
194 194
195 if (bChanged) 195 if (bChanged)
196 m_pFormFillEnv->SetChangeMark(); 196 m_pFormFillEnv->SetChangeMark();
197 else 197 else
198 m_pFormFillEnv->ClearChangeMark(); 198 m_pFormFillEnv->ClearChangeMark();
199 } 199 }
200 return TRUE; 200 return true;
201 } 201 }
202 202
203 FX_BOOL Document::ADBE(IJS_Context* cc, 203 bool Document::ADBE(IJS_Context* cc,
204 CJS_PropValue& vp, 204 CJS_PropValue& vp,
205 CFX_WideString& sError) { 205 CFX_WideString& sError) {
206 if (vp.IsGetting()) 206 if (vp.IsGetting())
207 vp.GetJSValue()->SetNull(CJS_Runtime::FromContext(cc)); 207 vp.GetJSValue()->SetNull(CJS_Runtime::FromContext(cc));
208 208
209 return TRUE; 209 return true;
210 } 210 }
211 211
212 FX_BOOL Document::pageNum(IJS_Context* cc, 212 bool Document::pageNum(IJS_Context* cc,
213 CJS_PropValue& vp, 213 CJS_PropValue& vp,
214 CFX_WideString& sError) { 214 CFX_WideString& sError) {
215 if (!m_pFormFillEnv) { 215 if (!m_pFormFillEnv) {
216 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 216 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
217 return FALSE; 217 return false;
218 } 218 }
219 if (vp.IsGetting()) { 219 if (vp.IsGetting()) {
220 if (CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetCurrentView()) { 220 if (CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetCurrentView()) {
221 vp << pPageView->GetPageIndex(); 221 vp << pPageView->GetPageIndex();
222 } 222 }
223 } else { 223 } else {
224 int iPageCount = m_pFormFillEnv->GetPageCount(); 224 int iPageCount = m_pFormFillEnv->GetPageCount();
225 int iPageNum = 0; 225 int iPageNum = 0;
226 vp >> iPageNum; 226 vp >> iPageNum;
227 227
228 if (iPageNum >= 0 && iPageNum < iPageCount) { 228 if (iPageNum >= 0 && iPageNum < iPageCount) {
229 m_pFormFillEnv->JS_docgotoPage(iPageNum); 229 m_pFormFillEnv->JS_docgotoPage(iPageNum);
230 } else if (iPageNum >= iPageCount) { 230 } else if (iPageNum >= iPageCount) {
231 m_pFormFillEnv->JS_docgotoPage(iPageCount - 1); 231 m_pFormFillEnv->JS_docgotoPage(iPageCount - 1);
232 } else if (iPageNum < 0) { 232 } else if (iPageNum < 0) {
233 m_pFormFillEnv->JS_docgotoPage(0); 233 m_pFormFillEnv->JS_docgotoPage(0);
234 } 234 }
235 } 235 }
236 236
237 return TRUE; 237 return true;
238 } 238 }
239 239
240 FX_BOOL Document::addAnnot(IJS_Context* cc, 240 bool Document::addAnnot(IJS_Context* cc,
241 const std::vector<CJS_Value>& params,
242 CJS_Value& vRet,
243 CFX_WideString& sError) {
244 // Not supported.
245 return true;
246 }
247
248 bool Document::addField(IJS_Context* cc,
249 const std::vector<CJS_Value>& params,
250 CJS_Value& vRet,
251 CFX_WideString& sError) {
252 // Not supported.
253 return true;
254 }
255
256 bool Document::exportAsText(IJS_Context* cc,
257 const std::vector<CJS_Value>& params,
258 CJS_Value& vRet,
259 CFX_WideString& sError) {
260 // Unsafe, not supported.
261 return true;
262 }
263
264 bool Document::exportAsFDF(IJS_Context* cc,
241 const std::vector<CJS_Value>& params, 265 const std::vector<CJS_Value>& params,
242 CJS_Value& vRet, 266 CJS_Value& vRet,
243 CFX_WideString& sError) { 267 CFX_WideString& sError) {
244 // Not supported. 268 // Unsafe, not supported.
245 return TRUE; 269 return true;
246 } 270 }
247 271
248 FX_BOOL Document::addField(IJS_Context* cc, 272 bool Document::exportAsXFDF(IJS_Context* cc,
249 const std::vector<CJS_Value>& params, 273 const std::vector<CJS_Value>& params,
250 CJS_Value& vRet, 274 CJS_Value& vRet,
251 CFX_WideString& sError) { 275 CFX_WideString& sError) {
252 // Not supported.
253 return TRUE;
254 }
255
256 FX_BOOL Document::exportAsText(IJS_Context* cc,
257 const std::vector<CJS_Value>& params,
258 CJS_Value& vRet,
259 CFX_WideString& sError) {
260 // Unsafe, not supported. 276 // Unsafe, not supported.
261 return TRUE; 277 return true;
262 }
263
264 FX_BOOL Document::exportAsFDF(IJS_Context* cc,
265 const std::vector<CJS_Value>& params,
266 CJS_Value& vRet,
267 CFX_WideString& sError) {
268 // Unsafe, not supported.
269 return TRUE;
270 }
271
272 FX_BOOL Document::exportAsXFDF(IJS_Context* cc,
273 const std::vector<CJS_Value>& params,
274 CJS_Value& vRet,
275 CFX_WideString& sError) {
276 // Unsafe, not supported.
277 return TRUE;
278 } 278 }
279 279
280 // Maps a field object in PDF document to a JavaScript variable 280 // Maps a field object in PDF document to a JavaScript variable
281 // comment: 281 // comment:
282 // note: the paremter cName, this is clue how to treat if the cName is not a 282 // note: the paremter cName, this is clue how to treat if the cName is not a
283 // valiable filed name in this document 283 // valiable filed name in this document
284 284
285 FX_BOOL Document::getField(IJS_Context* cc, 285 bool Document::getField(IJS_Context* cc,
286 const std::vector<CJS_Value>& params, 286 const std::vector<CJS_Value>& params,
287 CJS_Value& vRet, 287 CJS_Value& vRet,
288 CFX_WideString& sError) { 288 CFX_WideString& sError) {
289 if (params.size() < 1) { 289 if (params.size() < 1) {
290 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 290 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
291 return FALSE; 291 return false;
292 } 292 }
293 if (!m_pFormFillEnv) { 293 if (!m_pFormFillEnv) {
294 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 294 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
295 return FALSE; 295 return false;
296 } 296 }
297 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 297 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
298 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 298 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
299 CFX_WideString wideName = params[0].ToCFXWideString(pRuntime); 299 CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
300 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 300 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
301 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); 301 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
302 if (pPDFForm->CountFields(wideName) <= 0) { 302 if (pPDFForm->CountFields(wideName) <= 0) {
303 vRet.SetNull(pRuntime); 303 vRet.SetNull(pRuntime);
304 return TRUE; 304 return true;
305 } 305 }
306 306
307 v8::Local<v8::Object> pFieldObj = 307 v8::Local<v8::Object> pFieldObj =
308 pRuntime->NewFxDynamicObj(CJS_Field::g_nObjDefnID); 308 pRuntime->NewFxDynamicObj(CJS_Field::g_nObjDefnID);
309 CJS_Field* pJSField = 309 CJS_Field* pJSField =
310 static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pFieldObj)); 310 static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pFieldObj));
311 Field* pField = static_cast<Field*>(pJSField->GetEmbedObject()); 311 Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
312 pField->AttachField(this, wideName); 312 pField->AttachField(this, wideName);
313 313
314 vRet = CJS_Value(pRuntime, pJSField); 314 vRet = CJS_Value(pRuntime, pJSField);
315 return TRUE; 315 return true;
316 } 316 }
317 317
318 // Gets the name of the nth field in the document 318 // Gets the name of the nth field in the document
319 FX_BOOL Document::getNthFieldName(IJS_Context* cc, 319 bool Document::getNthFieldName(IJS_Context* cc,
320 const std::vector<CJS_Value>& params, 320 const std::vector<CJS_Value>& params,
321 CJS_Value& vRet, 321 CJS_Value& vRet,
322 CFX_WideString& sError) { 322 CFX_WideString& sError) {
323 if (params.size() != 1) { 323 if (params.size() != 1) {
324 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 324 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
325 return FALSE; 325 return false;
326 } 326 }
327 if (!m_pFormFillEnv) { 327 if (!m_pFormFillEnv) {
328 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 328 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
329 return FALSE; 329 return false;
330 } 330 }
331 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 331 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
332 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 332 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
333 int nIndex = params[0].ToInt(pRuntime); 333 int nIndex = params[0].ToInt(pRuntime);
334 if (nIndex < 0) { 334 if (nIndex < 0) {
335 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR); 335 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
336 return FALSE; 336 return false;
337 } 337 }
338 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 338 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
339 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); 339 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
340 CPDF_FormField* pField = pPDFForm->GetField(nIndex, CFX_WideString()); 340 CPDF_FormField* pField = pPDFForm->GetField(nIndex, CFX_WideString());
341 if (!pField) 341 if (!pField)
342 return FALSE; 342 return false;
343 343
344 vRet = CJS_Value(pRuntime, pField->GetFullName().c_str()); 344 vRet = CJS_Value(pRuntime, pField->GetFullName().c_str());
345 return TRUE; 345 return true;
346 } 346 }
347 347
348 FX_BOOL Document::importAnFDF(IJS_Context* cc, 348 bool Document::importAnFDF(IJS_Context* cc,
349 const std::vector<CJS_Value>& params,
350 CJS_Value& vRet,
351 CFX_WideString& sError) {
352 // Unsafe, not supported.
353 return true;
354 }
355
356 bool Document::importAnXFDF(IJS_Context* cc,
357 const std::vector<CJS_Value>& params,
358 CJS_Value& vRet,
359 CFX_WideString& sError) {
360 // Unsafe, not supported.
361 return true;
362 }
363
364 bool Document::importTextData(IJS_Context* cc,
349 const std::vector<CJS_Value>& params, 365 const std::vector<CJS_Value>& params,
350 CJS_Value& vRet, 366 CJS_Value& vRet,
351 CFX_WideString& sError) { 367 CFX_WideString& sError) {
352 // Unsafe, not supported. 368 // Unsafe, not supported.
353 return TRUE; 369 return true;
354 }
355
356 FX_BOOL Document::importAnXFDF(IJS_Context* cc,
357 const std::vector<CJS_Value>& params,
358 CJS_Value& vRet,
359 CFX_WideString& sError) {
360 // Unsafe, not supported.
361 return TRUE;
362 }
363
364 FX_BOOL Document::importTextData(IJS_Context* cc,
365 const std::vector<CJS_Value>& params,
366 CJS_Value& vRet,
367 CFX_WideString& sError) {
368 // Unsafe, not supported.
369 return TRUE;
370 } 370 }
371 371
372 // exports the form data and mails the resulting fdf file as an attachment to 372 // exports the form data and mails the resulting fdf file as an attachment to
373 // all recipients. 373 // all recipients.
374 // comment: need reader supports 374 // comment: need reader supports
375 FX_BOOL Document::mailForm(IJS_Context* cc, 375 bool Document::mailForm(IJS_Context* cc,
376 const std::vector<CJS_Value>& params, 376 const std::vector<CJS_Value>& params,
377 CJS_Value& vRet, 377 CJS_Value& vRet,
378 CFX_WideString& sError) { 378 CFX_WideString& sError) {
379 if (!m_pFormFillEnv) { 379 if (!m_pFormFillEnv) {
380 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 380 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
381 return FALSE; 381 return false;
382 } 382 }
383 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) { 383 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
384 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 384 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
385 return FALSE; 385 return false;
386 } 386 }
387 387
388 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 388 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
389 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 389 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
390 390
391 int iLength = params.size(); 391 int iLength = params.size();
392 FX_BOOL bUI = iLength > 0 ? params[0].ToBool(pRuntime) : TRUE; 392 bool bUI = iLength > 0 ? params[0].ToBool(pRuntime) : true;
393 CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L""; 393 CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
394 CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L""; 394 CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L"";
395 CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L""; 395 CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L"";
396 CFX_WideString cSubject = 396 CFX_WideString cSubject =
397 iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L""; 397 iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
398 CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L""; 398 CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
399 399
400 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 400 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
401 CFX_ByteTextBuf textBuf; 401 CFX_ByteTextBuf textBuf;
402 if (!pInterForm->ExportFormToFDFTextBuf(textBuf)) 402 if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
403 return FALSE; 403 return false;
404 404
405 pRuntime->BeginBlock(); 405 pRuntime->BeginBlock();
406 CPDFSDK_FormFillEnvironment* pFormFillEnv = pContext->GetFormFillEnv(); 406 CPDFSDK_FormFillEnvironment* pFormFillEnv = pContext->GetFormFillEnv();
407 pFormFillEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, 407 pFormFillEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
408 cTo.c_str(), cSubject.c_str(), cCc.c_str(), 408 cTo.c_str(), cSubject.c_str(), cCc.c_str(),
409 cBcc.c_str(), cMsg.c_str()); 409 cBcc.c_str(), cMsg.c_str());
410 pRuntime->EndBlock(); 410 pRuntime->EndBlock();
411 return TRUE; 411 return true;
412 } 412 }
413 413
414 FX_BOOL Document::print(IJS_Context* cc, 414 bool Document::print(IJS_Context* cc,
415 const std::vector<CJS_Value>& params, 415 const std::vector<CJS_Value>& params,
416 CJS_Value& vRet, 416 CJS_Value& vRet,
417 CFX_WideString& sError) { 417 CFX_WideString& sError) {
418 if (!m_pFormFillEnv) { 418 if (!m_pFormFillEnv) {
419 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 419 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
420 return FALSE; 420 return false;
421 } 421 }
422 422
423 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 423 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
424 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 424 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
425 425
426 FX_BOOL bUI = TRUE; 426 bool bUI = true;
427 int nStart = 0; 427 int nStart = 0;
428 int nEnd = 0; 428 int nEnd = 0;
429 FX_BOOL bSilent = FALSE; 429 bool bSilent = false;
430 FX_BOOL bShrinkToFit = FALSE; 430 bool bShrinkToFit = false;
431 FX_BOOL bPrintAsImage = FALSE; 431 bool bPrintAsImage = false;
432 FX_BOOL bReverse = FALSE; 432 bool bReverse = false;
433 FX_BOOL bAnnotations = FALSE; 433 bool bAnnotations = false;
434 434
435 int nlength = params.size(); 435 int nlength = params.size();
436 if (nlength == 9) { 436 if (nlength == 9) {
437 if (params[8].GetType() == CJS_Value::VT_object) { 437 if (params[8].GetType() == CJS_Value::VT_object) {
438 v8::Local<v8::Object> pObj = params[8].ToV8Object(pRuntime); 438 v8::Local<v8::Object> pObj = params[8].ToV8Object(pRuntime);
439 if (CFXJS_Engine::GetObjDefnID(pObj) == 439 if (CFXJS_Engine::GetObjDefnID(pObj) ==
440 CJS_PrintParamsObj::g_nObjDefnID) { 440 CJS_PrintParamsObj::g_nObjDefnID) {
441 if (CJS_Object* pJSObj = params[8].ToCJSObject(pRuntime)) { 441 if (CJS_Object* pJSObj = params[8].ToCJSObject(pRuntime)) {
442 if (PrintParamsObj* pprintparamsObj = 442 if (PrintParamsObj* pprintparamsObj =
443 static_cast<PrintParamsObj*>(pJSObj->GetEmbedObject())) { 443 static_cast<PrintParamsObj*>(pJSObj->GetEmbedObject())) {
(...skipping 24 matching lines...) Expand all
468 bPrintAsImage = params[5].ToBool(pRuntime); 468 bPrintAsImage = params[5].ToBool(pRuntime);
469 if (nlength >= 7) 469 if (nlength >= 7)
470 bReverse = params[6].ToBool(pRuntime); 470 bReverse = params[6].ToBool(pRuntime);
471 if (nlength >= 8) 471 if (nlength >= 8)
472 bAnnotations = params[7].ToBool(pRuntime); 472 bAnnotations = params[7].ToBool(pRuntime);
473 } 473 }
474 474
475 if (m_pFormFillEnv) { 475 if (m_pFormFillEnv) {
476 m_pFormFillEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, 476 m_pFormFillEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit,
477 bPrintAsImage, bReverse, bAnnotations); 477 bPrintAsImage, bReverse, bAnnotations);
478 return TRUE; 478 return true;
479 } 479 }
480 return FALSE; 480 return false;
481 } 481 }
482 482
483 // removes the specified field from the document. 483 // removes the specified field from the document.
484 // comment: 484 // comment:
485 // note: if the filed name is not rational, adobe is dumb for it. 485 // note: if the filed name is not rational, adobe is dumb for it.
486 486
487 FX_BOOL Document::removeField(IJS_Context* cc, 487 bool Document::removeField(IJS_Context* cc,
488 const std::vector<CJS_Value>& params, 488 const std::vector<CJS_Value>& params,
489 CJS_Value& vRet, 489 CJS_Value& vRet,
490 CFX_WideString& sError) { 490 CFX_WideString& sError) {
491 if (params.size() != 1) { 491 if (params.size() != 1) {
492 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 492 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
493 return FALSE; 493 return false;
494 } 494 }
495 if (!m_pFormFillEnv) { 495 if (!m_pFormFillEnv) {
496 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 496 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
497 return FALSE; 497 return false;
498 } 498 }
499 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) || 499 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
500 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM))) { 500 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM))) {
501 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 501 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
502 return FALSE; 502 return false;
503 } 503 }
504 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 504 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
505 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 505 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
506 CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime); 506 CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime);
507 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 507 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
508 std::vector<CPDFSDK_Widget*> widgets; 508 std::vector<CPDFSDK_Widget*> widgets;
509 pInterForm->GetWidgets(sFieldName, &widgets); 509 pInterForm->GetWidgets(sFieldName, &widgets);
510 if (widgets.empty()) 510 if (widgets.empty())
511 return TRUE; 511 return true;
512 512
513 for (CPDFSDK_Widget* pWidget : widgets) { 513 for (CPDFSDK_Widget* pWidget : widgets) {
514 CFX_FloatRect rcAnnot = pWidget->GetRect(); 514 CFX_FloatRect rcAnnot = pWidget->GetRect();
515 --rcAnnot.left; 515 --rcAnnot.left;
516 --rcAnnot.bottom; 516 --rcAnnot.bottom;
517 ++rcAnnot.right; 517 ++rcAnnot.right;
518 ++rcAnnot.top; 518 ++rcAnnot.top;
519 519
520 std::vector<CFX_FloatRect> aRefresh(1, rcAnnot); 520 std::vector<CFX_FloatRect> aRefresh(1, rcAnnot);
521 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); 521 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
522 ASSERT(pPage); 522 ASSERT(pPage);
523 523
524 // If there is currently no pageview associated with the page being used 524 // If there is currently no pageview associated with the page being used
525 // do not create one. We may be in the process of tearing down the document 525 // do not create one. We may be in the process of tearing down the document
526 // and creating a new pageview at this point will cause bad things. 526 // and creating a new pageview at this point will cause bad things.
527 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false); 527 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false);
528 if (pPageView) { 528 if (pPageView) {
529 #if PDF_ENABLE_XFA 529 #if PDF_ENABLE_XFA
530 pPageView->DeleteAnnot(pWidget); 530 pPageView->DeleteAnnot(pWidget);
531 #endif // PDF_ENABLE_XFA 531 #endif // PDF_ENABLE_XFA
532 pPageView->UpdateRects(aRefresh); 532 pPageView->UpdateRects(aRefresh);
533 } 533 }
534 } 534 }
535 m_pFormFillEnv->SetChangeMark(); 535 m_pFormFillEnv->SetChangeMark();
536 536
537 return TRUE; 537 return true;
538 } 538 }
539 539
540 // reset filed values within a document. 540 // reset filed values within a document.
541 // comment: 541 // comment:
542 // note: if the fields names r not rational, aodbe is dumb for it. 542 // note: if the fields names r not rational, aodbe is dumb for it.
543 543
544 FX_BOOL Document::resetForm(IJS_Context* cc, 544 bool Document::resetForm(IJS_Context* cc,
545 const std::vector<CJS_Value>& params, 545 const std::vector<CJS_Value>& params,
546 CJS_Value& vRet, 546 CJS_Value& vRet,
547 CFX_WideString& sError) { 547 CFX_WideString& sError) {
548 if (!m_pFormFillEnv) { 548 if (!m_pFormFillEnv) {
549 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 549 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
550 return FALSE; 550 return false;
551 } 551 }
552 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) || 552 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
553 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) || 553 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
554 m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) { 554 m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
555 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 555 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
556 return FALSE; 556 return false;
557 } 557 }
558 558
559 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 559 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
560 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); 560 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
561 CJS_Array aName; 561 CJS_Array aName;
562 562
563 if (params.empty()) { 563 if (params.empty()) {
564 pPDFForm->ResetForm(TRUE); 564 pPDFForm->ResetForm(true);
565 m_pFormFillEnv->SetChangeMark(); 565 m_pFormFillEnv->SetChangeMark();
566 return TRUE; 566 return true;
567 } 567 }
568 568
569 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 569 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
570 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 570 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
571 571
572 switch (params[0].GetType()) { 572 switch (params[0].GetType()) {
573 default: 573 default:
574 aName.Attach(params[0].ToV8Array(pRuntime)); 574 aName.Attach(params[0].ToV8Array(pRuntime));
575 break; 575 break;
576 case CJS_Value::VT_string: 576 case CJS_Value::VT_string:
577 aName.SetElement(pRuntime, 0, params[0]); 577 aName.SetElement(pRuntime, 0, params[0]);
578 break; 578 break;
579 } 579 }
580 580
581 std::vector<CPDF_FormField*> aFields; 581 std::vector<CPDF_FormField*> aFields;
582 for (int i = 0, isz = aName.GetLength(pRuntime); i < isz; ++i) { 582 for (int i = 0, isz = aName.GetLength(pRuntime); i < isz; ++i) {
583 CJS_Value valElement(pRuntime); 583 CJS_Value valElement(pRuntime);
584 aName.GetElement(pRuntime, i, valElement); 584 aName.GetElement(pRuntime, i, valElement);
585 CFX_WideString swVal = valElement.ToCFXWideString(pRuntime); 585 CFX_WideString swVal = valElement.ToCFXWideString(pRuntime);
586 for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j) 586 for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j)
587 aFields.push_back(pPDFForm->GetField(j, swVal)); 587 aFields.push_back(pPDFForm->GetField(j, swVal));
588 } 588 }
589 589
590 if (!aFields.empty()) { 590 if (!aFields.empty()) {
591 pPDFForm->ResetForm(aFields, TRUE, TRUE); 591 pPDFForm->ResetForm(aFields, true, true);
592 m_pFormFillEnv->SetChangeMark(); 592 m_pFormFillEnv->SetChangeMark();
593 } 593 }
594 594
595 return TRUE; 595 return true;
596 } 596 }
597 597
598 FX_BOOL Document::saveAs(IJS_Context* cc, 598 bool Document::saveAs(IJS_Context* cc,
599 const std::vector<CJS_Value>& params, 599 const std::vector<CJS_Value>& params,
600 CJS_Value& vRet, 600 CJS_Value& vRet,
601 CFX_WideString& sError) { 601 CFX_WideString& sError) {
602 // Unsafe, not supported. 602 // Unsafe, not supported.
603 return TRUE; 603 return true;
604 } 604 }
605 605
606 FX_BOOL Document::syncAnnotScan(IJS_Context* cc, 606 bool Document::syncAnnotScan(IJS_Context* cc,
607 const std::vector<CJS_Value>& params,
608 CJS_Value& vRet,
609 CFX_WideString& sError) {
610 return TRUE;
611 }
612
613 FX_BOOL Document::submitForm(IJS_Context* cc,
614 const std::vector<CJS_Value>& params, 607 const std::vector<CJS_Value>& params,
615 CJS_Value& vRet, 608 CJS_Value& vRet,
616 CFX_WideString& sError) { 609 CFX_WideString& sError) {
610 return true;
611 }
612
613 bool Document::submitForm(IJS_Context* cc,
614 const std::vector<CJS_Value>& params,
615 CJS_Value& vRet,
616 CFX_WideString& sError) {
617 int nSize = params.size(); 617 int nSize = params.size();
618 if (nSize < 1) { 618 if (nSize < 1) {
619 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 619 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
620 return FALSE; 620 return false;
621 } 621 }
622 if (!m_pFormFillEnv) { 622 if (!m_pFormFillEnv) {
623 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 623 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
624 return FALSE; 624 return false;
625 } 625 }
626 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 626 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
627 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 627 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
628 CJS_Array aFields; 628 CJS_Array aFields;
629 CFX_WideString strURL; 629 CFX_WideString strURL;
630 FX_BOOL bFDF = TRUE; 630 bool bFDF = true;
631 FX_BOOL bEmpty = FALSE; 631 bool bEmpty = false;
632 CJS_Value v = params[0]; 632 CJS_Value v = params[0];
633 if (v.GetType() == CJS_Value::VT_string) { 633 if (v.GetType() == CJS_Value::VT_string) {
634 strURL = params[0].ToCFXWideString(pRuntime); 634 strURL = params[0].ToCFXWideString(pRuntime);
635 if (nSize > 1) 635 if (nSize > 1)
636 bFDF = params[1].ToBool(pRuntime); 636 bFDF = params[1].ToBool(pRuntime);
637 if (nSize > 2) 637 if (nSize > 2)
638 bEmpty = params[2].ToBool(pRuntime); 638 bEmpty = params[2].ToBool(pRuntime);
639 if (nSize > 3) 639 if (nSize > 3)
640 aFields.Attach(params[3].ToV8Array(pRuntime)); 640 aFields.Attach(params[3].ToV8Array(pRuntime));
641 } else if (v.GetType() == CJS_Value::VT_object) { 641 } else if (v.GetType() == CJS_Value::VT_object) {
(...skipping 10 matching lines...) Expand all
652 652
653 pValue = pRuntime->GetObjectProperty(pObj, L"aFields"); 653 pValue = pRuntime->GetObjectProperty(pObj, L"aFields");
654 aFields.Attach(CJS_Value(pRuntime, pValue).ToV8Array(pRuntime)); 654 aFields.Attach(CJS_Value(pRuntime, pValue).ToV8Array(pRuntime));
655 } 655 }
656 656
657 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 657 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
658 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); 658 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
659 if (aFields.GetLength(pRuntime) == 0 && bEmpty) { 659 if (aFields.GetLength(pRuntime) == 0 && bEmpty) {
660 if (pPDFInterForm->CheckRequiredFields(nullptr, true)) { 660 if (pPDFInterForm->CheckRequiredFields(nullptr, true)) {
661 pRuntime->BeginBlock(); 661 pRuntime->BeginBlock();
662 pInterForm->SubmitForm(strURL, FALSE); 662 pInterForm->SubmitForm(strURL, false);
663 pRuntime->EndBlock(); 663 pRuntime->EndBlock();
664 } 664 }
665 return TRUE; 665 return true;
666 } 666 }
667 667
668 std::vector<CPDF_FormField*> fieldObjects; 668 std::vector<CPDF_FormField*> fieldObjects;
669 for (int i = 0, sz = aFields.GetLength(pRuntime); i < sz; ++i) { 669 for (int i = 0, sz = aFields.GetLength(pRuntime); i < sz; ++i) {
670 CJS_Value valName(pRuntime); 670 CJS_Value valName(pRuntime);
671 aFields.GetElement(pRuntime, i, valName); 671 aFields.GetElement(pRuntime, i, valName);
672 672
673 CFX_WideString sName = valName.ToCFXWideString(pRuntime); 673 CFX_WideString sName = valName.ToCFXWideString(pRuntime);
674 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); 674 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
675 for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) { 675 for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
676 CPDF_FormField* pField = pPDFForm->GetField(j, sName); 676 CPDF_FormField* pField = pPDFForm->GetField(j, sName);
677 if (!bEmpty && pField->GetValue().IsEmpty()) 677 if (!bEmpty && pField->GetValue().IsEmpty())
678 continue; 678 continue;
679 679
680 fieldObjects.push_back(pField); 680 fieldObjects.push_back(pField);
681 } 681 }
682 } 682 }
683 683
684 if (pPDFInterForm->CheckRequiredFields(&fieldObjects, true)) { 684 if (pPDFInterForm->CheckRequiredFields(&fieldObjects, true)) {
685 pRuntime->BeginBlock(); 685 pRuntime->BeginBlock();
686 pInterForm->SubmitFields(strURL, fieldObjects, true, !bFDF); 686 pInterForm->SubmitFields(strURL, fieldObjects, true, !bFDF);
687 pRuntime->EndBlock(); 687 pRuntime->EndBlock();
688 } 688 }
689 return TRUE; 689 return true;
690 } 690 }
691 691
692 void Document::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) { 692 void Document::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
693 m_pFormFillEnv.Reset(pFormFillEnv); 693 m_pFormFillEnv.Reset(pFormFillEnv);
694 } 694 }
695 695
696 FX_BOOL Document::bookmarkRoot(IJS_Context* cc, 696 bool Document::bookmarkRoot(IJS_Context* cc,
697 CJS_PropValue& vp, 697 CJS_PropValue& vp,
698 CFX_WideString& sError) { 698 CFX_WideString& sError) {
699 return TRUE; 699 return true;
700 } 700 }
701 701
702 FX_BOOL Document::mailDoc(IJS_Context* cc, 702 bool Document::mailDoc(IJS_Context* cc,
703 const std::vector<CJS_Value>& params, 703 const std::vector<CJS_Value>& params,
704 CJS_Value& vRet, 704 CJS_Value& vRet,
705 CFX_WideString& sError) { 705 CFX_WideString& sError) {
706 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 706 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
707 707
708 // TODO(tsepez): Check maximum number of allowed params. 708 // TODO(tsepez): Check maximum number of allowed params.
709 709
710 FX_BOOL bUI = TRUE; 710 bool bUI = true;
711 CFX_WideString cTo = L""; 711 CFX_WideString cTo = L"";
712 CFX_WideString cCc = L""; 712 CFX_WideString cCc = L"";
713 CFX_WideString cBcc = L""; 713 CFX_WideString cBcc = L"";
714 CFX_WideString cSubject = L""; 714 CFX_WideString cSubject = L"";
715 CFX_WideString cMsg = L""; 715 CFX_WideString cMsg = L"";
716 716
717 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 717 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
718 718
719 if (params.size() >= 1) 719 if (params.size() >= 1)
720 bUI = params[0].ToBool(pRuntime); 720 bUI = params[0].ToBool(pRuntime);
(...skipping 29 matching lines...) Expand all
750 pValue = pRuntime->GetObjectProperty(pObj, L"cMsg"); 750 pValue = pRuntime->GetObjectProperty(pObj, L"cMsg");
751 cMsg = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime); 751 cMsg = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
752 } 752 }
753 753
754 pRuntime->BeginBlock(); 754 pRuntime->BeginBlock();
755 CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv(); 755 CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
756 pFormFillEnv->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(), cSubject.c_str(), 756 pFormFillEnv->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(), cSubject.c_str(),
757 cCc.c_str(), cBcc.c_str(), cMsg.c_str()); 757 cCc.c_str(), cBcc.c_str(), cMsg.c_str());
758 pRuntime->EndBlock(); 758 pRuntime->EndBlock();
759 759
760 return TRUE; 760 return true;
761 } 761 }
762 762
763 FX_BOOL Document::author(IJS_Context* cc, 763 bool Document::author(IJS_Context* cc,
764 CJS_PropValue& vp, 764 CJS_PropValue& vp,
765 CFX_WideString& sError) { 765 CFX_WideString& sError) {
766 return getPropertyInternal(cc, vp, "Author", sError); 766 return getPropertyInternal(cc, vp, "Author", sError);
767 } 767 }
768 768
769 FX_BOOL Document::info(IJS_Context* cc, 769 bool Document::info(IJS_Context* cc,
770 CJS_PropValue& vp, 770 CJS_PropValue& vp,
771 CFX_WideString& sError) { 771 CFX_WideString& sError) {
772 if (vp.IsSetting()) { 772 if (vp.IsSetting()) {
773 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 773 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
774 return FALSE; 774 return false;
775 } 775 }
776 if (!m_pFormFillEnv) { 776 if (!m_pFormFillEnv) {
777 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 777 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
778 return FALSE; 778 return false;
779 } 779 }
780 CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo(); 780 CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
781 if (!pDictionary) 781 if (!pDictionary)
782 return FALSE; 782 return false;
783 783
784 CFX_WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author"); 784 CFX_WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author");
785 CFX_WideString cwTitle = pDictionary->GetUnicodeTextFor("Title"); 785 CFX_WideString cwTitle = pDictionary->GetUnicodeTextFor("Title");
786 CFX_WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject"); 786 CFX_WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject");
787 CFX_WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords"); 787 CFX_WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords");
788 CFX_WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator"); 788 CFX_WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator");
789 CFX_WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer"); 789 CFX_WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer");
790 CFX_WideString cwCreationDate = 790 CFX_WideString cwCreationDate =
791 pDictionary->GetUnicodeTextFor("CreationDate"); 791 pDictionary->GetUnicodeTextFor("CreationDate");
792 CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate"); 792 CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
(...skipping 20 matching lines...) Expand all
813 CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC()); 813 CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
814 if (pValueObj->IsString() || pValueObj->IsName()) { 814 if (pValueObj->IsString() || pValueObj->IsName()) {
815 pRuntime->PutObjectString(pObj, wsKey, pValueObj->GetUnicodeText()); 815 pRuntime->PutObjectString(pObj, wsKey, pValueObj->GetUnicodeText());
816 } else if (pValueObj->IsNumber()) { 816 } else if (pValueObj->IsNumber()) {
817 pRuntime->PutObjectNumber(pObj, wsKey, (float)pValueObj->GetNumber()); 817 pRuntime->PutObjectNumber(pObj, wsKey, (float)pValueObj->GetNumber());
818 } else if (pValueObj->IsBoolean()) { 818 } else if (pValueObj->IsBoolean()) {
819 pRuntime->PutObjectBoolean(pObj, wsKey, !!pValueObj->GetInteger()); 819 pRuntime->PutObjectBoolean(pObj, wsKey, !!pValueObj->GetInteger());
820 } 820 }
821 } 821 }
822 vp << pObj; 822 vp << pObj;
823 return TRUE; 823 return true;
824 } 824 }
825 825
826 FX_BOOL Document::getPropertyInternal(IJS_Context* cc, 826 bool Document::getPropertyInternal(IJS_Context* cc,
827 CJS_PropValue& vp, 827 CJS_PropValue& vp,
828 const CFX_ByteString& propName, 828 const CFX_ByteString& propName,
829 CFX_WideString& sError) { 829 CFX_WideString& sError) {
830 if (!m_pFormFillEnv) { 830 if (!m_pFormFillEnv) {
831 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 831 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
832 return FALSE; 832 return false;
833 } 833 }
834 CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo(); 834 CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
835 if (!pDictionary) 835 if (!pDictionary)
836 return FALSE; 836 return false;
837 837
838 if (vp.IsGetting()) { 838 if (vp.IsGetting()) {
839 vp << pDictionary->GetUnicodeTextFor(propName); 839 vp << pDictionary->GetUnicodeTextFor(propName);
840 } else { 840 } else {
841 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) { 841 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
842 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 842 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
843 return FALSE; 843 return false;
844 } 844 }
845 CFX_WideString csProperty; 845 CFX_WideString csProperty;
846 vp >> csProperty; 846 vp >> csProperty;
847 pDictionary->SetStringFor(propName, PDF_EncodeText(csProperty)); 847 pDictionary->SetStringFor(propName, PDF_EncodeText(csProperty));
848 m_pFormFillEnv->SetChangeMark(); 848 m_pFormFillEnv->SetChangeMark();
849 } 849 }
850 return TRUE; 850 return true;
851 } 851 }
852 852
853 FX_BOOL Document::creationDate(IJS_Context* cc, 853 bool Document::creationDate(IJS_Context* cc,
854 CJS_PropValue& vp, 854 CJS_PropValue& vp,
855 CFX_WideString& sError) { 855 CFX_WideString& sError) {
856 return getPropertyInternal(cc, vp, "CreationDate", sError); 856 return getPropertyInternal(cc, vp, "CreationDate", sError);
857 } 857 }
858 858
859 FX_BOOL Document::creator(IJS_Context* cc, 859 bool Document::creator(IJS_Context* cc,
860 CJS_PropValue& vp, 860 CJS_PropValue& vp,
861 CFX_WideString& sError) { 861 CFX_WideString& sError) {
862 return getPropertyInternal(cc, vp, "Creator", sError); 862 return getPropertyInternal(cc, vp, "Creator", sError);
863 } 863 }
864 864
865 FX_BOOL Document::delay(IJS_Context* cc, 865 bool Document::delay(IJS_Context* cc,
866 CJS_PropValue& vp, 866 CJS_PropValue& vp,
867 CFX_WideString& sError) { 867 CFX_WideString& sError) {
868 if (!m_pFormFillEnv) { 868 if (!m_pFormFillEnv) {
869 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 869 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
870 return FALSE; 870 return false;
871 } 871 }
872 if (vp.IsGetting()) { 872 if (vp.IsGetting()) {
873 vp << m_bDelay; 873 vp << m_bDelay;
874 } else { 874 } else {
875 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) { 875 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
876 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 876 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
877 return FALSE; 877 return false;
878 } 878 }
879 vp >> m_bDelay; 879 vp >> m_bDelay;
880 if (m_bDelay) { 880 if (m_bDelay) {
881 m_DelayData.clear(); 881 m_DelayData.clear();
882 } else { 882 } else {
883 std::list<std::unique_ptr<CJS_DelayData>> DelayDataToProcess; 883 std::list<std::unique_ptr<CJS_DelayData>> DelayDataToProcess;
884 DelayDataToProcess.swap(m_DelayData); 884 DelayDataToProcess.swap(m_DelayData);
885 for (const auto& pData : DelayDataToProcess) 885 for (const auto& pData : DelayDataToProcess)
886 Field::DoDelay(m_pFormFillEnv.Get(), pData.get()); 886 Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
887 } 887 }
888 } 888 }
889 return TRUE; 889 return true;
890 } 890 }
891 891
892 FX_BOOL Document::keywords(IJS_Context* cc, 892 bool Document::keywords(IJS_Context* cc,
893 CJS_PropValue& vp, 893 CJS_PropValue& vp,
894 CFX_WideString& sError) { 894 CFX_WideString& sError) {
895 return getPropertyInternal(cc, vp, "Keywords", sError); 895 return getPropertyInternal(cc, vp, "Keywords", sError);
896 } 896 }
897 897
898 FX_BOOL Document::modDate(IJS_Context* cc, 898 bool Document::modDate(IJS_Context* cc,
899 CJS_PropValue& vp, 899 CJS_PropValue& vp,
900 CFX_WideString& sError) { 900 CFX_WideString& sError) {
901 return getPropertyInternal(cc, vp, "ModDate", sError); 901 return getPropertyInternal(cc, vp, "ModDate", sError);
902 } 902 }
903 903
904 FX_BOOL Document::producer(IJS_Context* cc, 904 bool Document::producer(IJS_Context* cc,
905 CJS_PropValue& vp, 905 CJS_PropValue& vp,
906 CFX_WideString& sError) { 906 CFX_WideString& sError) {
907 return getPropertyInternal(cc, vp, "Producer", sError); 907 return getPropertyInternal(cc, vp, "Producer", sError);
908 } 908 }
909 909
910 FX_BOOL Document::subject(IJS_Context* cc, 910 bool Document::subject(IJS_Context* cc,
911 CJS_PropValue& vp, 911 CJS_PropValue& vp,
912 CFX_WideString& sError) { 912 CFX_WideString& sError) {
913 return getPropertyInternal(cc, vp, "Subject", sError); 913 return getPropertyInternal(cc, vp, "Subject", sError);
914 } 914 }
915 915
916 FX_BOOL Document::title(IJS_Context* cc, 916 bool Document::title(IJS_Context* cc,
917 CJS_PropValue& vp, 917 CJS_PropValue& vp,
918 CFX_WideString& sError) { 918 CFX_WideString& sError) {
919 if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) { 919 if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) {
920 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 920 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
921 return FALSE; 921 return false;
922 } 922 }
923 return getPropertyInternal(cc, vp, "Title", sError); 923 return getPropertyInternal(cc, vp, "Title", sError);
924 } 924 }
925 925
926 FX_BOOL Document::numPages(IJS_Context* cc, 926 bool Document::numPages(IJS_Context* cc,
927 CJS_PropValue& vp, 927 CJS_PropValue& vp,
928 CFX_WideString& sError) { 928 CFX_WideString& sError) {
929 if (vp.IsSetting()) { 929 if (vp.IsSetting()) {
930 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 930 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
931 return FALSE; 931 return false;
932 } 932 }
933 if (!m_pFormFillEnv) { 933 if (!m_pFormFillEnv) {
934 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 934 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
935 return FALSE; 935 return false;
936 } 936 }
937 vp << m_pFormFillEnv->GetPageCount(); 937 vp << m_pFormFillEnv->GetPageCount();
938 return TRUE; 938 return true;
939 } 939 }
940 940
941 FX_BOOL Document::external(IJS_Context* cc, 941 bool Document::external(IJS_Context* cc,
942 CJS_PropValue& vp, 942 CJS_PropValue& vp,
943 CFX_WideString& sError) { 943 CFX_WideString& sError) {
944 // In Chrome case, should always return true. 944 // In Chrome case, should always return true.
945 if (vp.IsGetting()) { 945 if (vp.IsGetting()) {
946 vp << true; 946 vp << true;
947 } 947 }
948 return TRUE; 948 return true;
949 } 949 }
950 950
951 FX_BOOL Document::filesize(IJS_Context* cc, 951 bool Document::filesize(IJS_Context* cc,
952 CJS_PropValue& vp, 952 CJS_PropValue& vp,
953 CFX_WideString& sError) { 953 CFX_WideString& sError) {
954 if (vp.IsSetting()) { 954 if (vp.IsSetting()) {
955 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 955 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
956 return FALSE; 956 return false;
957 } 957 }
958 vp << 0; 958 vp << 0;
959 return TRUE; 959 return true;
960 } 960 }
961 961
962 FX_BOOL Document::mouseX(IJS_Context* cc, 962 bool Document::mouseX(IJS_Context* cc,
963 CJS_PropValue& vp, 963 CJS_PropValue& vp,
964 CFX_WideString& sError) { 964 CFX_WideString& sError) {
965 return TRUE; 965 return true;
966 } 966 }
967 967
968 FX_BOOL Document::mouseY(IJS_Context* cc, 968 bool Document::mouseY(IJS_Context* cc,
969 CJS_PropValue& vp, 969 CJS_PropValue& vp,
970 CFX_WideString& sError) { 970 CFX_WideString& sError) {
971 return TRUE; 971 return true;
972 } 972 }
973 973
974 FX_BOOL Document::URL(IJS_Context* cc, 974 bool Document::URL(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
975 CJS_PropValue& vp,
976 CFX_WideString& sError) {
977 if (vp.IsSetting()) { 975 if (vp.IsSetting()) {
978 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 976 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
979 return FALSE; 977 return false;
980 } 978 }
981 if (!m_pFormFillEnv) { 979 if (!m_pFormFillEnv) {
982 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 980 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
983 return FALSE; 981 return false;
984 } 982 }
985 vp << m_pFormFillEnv->JS_docGetFilePath(); 983 vp << m_pFormFillEnv->JS_docGetFilePath();
986 return TRUE; 984 return true;
987 } 985 }
988 986
989 FX_BOOL Document::baseURL(IJS_Context* cc, 987 bool Document::baseURL(IJS_Context* cc,
990 CJS_PropValue& vp, 988 CJS_PropValue& vp,
991 CFX_WideString& sError) { 989 CFX_WideString& sError) {
992 if (vp.IsGetting()) { 990 if (vp.IsGetting()) {
993 vp << m_cwBaseURL; 991 vp << m_cwBaseURL;
994 } else { 992 } else {
995 vp >> m_cwBaseURL; 993 vp >> m_cwBaseURL;
996 } 994 }
997 return TRUE; 995 return true;
998 } 996 }
999 997
1000 FX_BOOL Document::calculate(IJS_Context* cc, 998 bool Document::calculate(IJS_Context* cc,
1001 CJS_PropValue& vp, 999 CJS_PropValue& vp,
1002 CFX_WideString& sError) { 1000 CFX_WideString& sError) {
1003 if (!m_pFormFillEnv) { 1001 if (!m_pFormFillEnv) {
1004 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1002 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1005 return FALSE; 1003 return false;
1006 } 1004 }
1007 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm(); 1005 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
1008 if (vp.IsGetting()) { 1006 if (vp.IsGetting()) {
1009 vp << !!pInterForm->IsCalculateEnabled(); 1007 vp << !!pInterForm->IsCalculateEnabled();
1010 } else { 1008 } else {
1011 bool bCalculate; 1009 bool bCalculate;
1012 vp >> bCalculate; 1010 vp >> bCalculate;
1013 pInterForm->EnableCalculate(bCalculate); 1011 pInterForm->EnableCalculate(bCalculate);
1014 } 1012 }
1015 return TRUE; 1013 return true;
1016 } 1014 }
1017 1015
1018 FX_BOOL Document::documentFileName(IJS_Context* cc, 1016 bool Document::documentFileName(IJS_Context* cc,
1019 CJS_PropValue& vp, 1017 CJS_PropValue& vp,
1020 CFX_WideString& sError) { 1018 CFX_WideString& sError) {
1021 if (vp.IsSetting()) { 1019 if (vp.IsSetting()) {
1022 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 1020 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
1023 return FALSE; 1021 return false;
1024 } 1022 }
1025 if (!m_pFormFillEnv) { 1023 if (!m_pFormFillEnv) {
1026 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1024 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1027 return FALSE; 1025 return false;
1028 } 1026 }
1029 CFX_WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath(); 1027 CFX_WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath();
1030 int32_t i = wsFilePath.GetLength() - 1; 1028 int32_t i = wsFilePath.GetLength() - 1;
1031 for (; i >= 0; i--) { 1029 for (; i >= 0; i--) {
1032 if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/') 1030 if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/')
1033 break; 1031 break;
1034 } 1032 }
1035 if (i >= 0 && i < wsFilePath.GetLength() - 1) { 1033 if (i >= 0 && i < wsFilePath.GetLength() - 1) {
1036 vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1); 1034 vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1);
1037 } else { 1035 } else {
1038 vp << L""; 1036 vp << L"";
1039 } 1037 }
1040 return TRUE; 1038 return true;
1041 } 1039 }
1042 1040
1043 FX_BOOL Document::path(IJS_Context* cc, 1041 bool Document::path(IJS_Context* cc,
1044 CJS_PropValue& vp, 1042 CJS_PropValue& vp,
1045 CFX_WideString& sError) { 1043 CFX_WideString& sError) {
1046 if (vp.IsSetting()) { 1044 if (vp.IsSetting()) {
1047 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 1045 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
1048 return FALSE; 1046 return false;
1049 } 1047 }
1050 if (!m_pFormFillEnv) { 1048 if (!m_pFormFillEnv) {
1051 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1049 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1052 return FALSE; 1050 return false;
1053 } 1051 }
1054 vp << app::SysPathToPDFPath(m_pFormFillEnv->JS_docGetFilePath()); 1052 vp << app::SysPathToPDFPath(m_pFormFillEnv->JS_docGetFilePath());
1055 return TRUE; 1053 return true;
1056 } 1054 }
1057 1055
1058 FX_BOOL Document::pageWindowRect(IJS_Context* cc, 1056 bool Document::pageWindowRect(IJS_Context* cc,
1059 CJS_PropValue& vp, 1057 CJS_PropValue& vp,
1060 CFX_WideString& sError) { 1058 CFX_WideString& sError) {
1061 return TRUE; 1059 return true;
1062 } 1060 }
1063 1061
1064 FX_BOOL Document::layout(IJS_Context* cc, 1062 bool Document::layout(IJS_Context* cc,
1065 CJS_PropValue& vp, 1063 CJS_PropValue& vp,
1066 CFX_WideString& sError) { 1064 CFX_WideString& sError) {
1067 return TRUE; 1065 return true;
1068 } 1066 }
1069 1067
1070 FX_BOOL Document::addLink(IJS_Context* cc, 1068 bool Document::addLink(IJS_Context* cc,
1069 const std::vector<CJS_Value>& params,
1070 CJS_Value& vRet,
1071 CFX_WideString& sError) {
1072 return true;
1073 }
1074
1075 bool Document::closeDoc(IJS_Context* cc,
1076 const std::vector<CJS_Value>& params,
1077 CJS_Value& vRet,
1078 CFX_WideString& sError) {
1079 return true;
1080 }
1081
1082 bool Document::getPageBox(IJS_Context* cc,
1071 const std::vector<CJS_Value>& params, 1083 const std::vector<CJS_Value>& params,
1072 CJS_Value& vRet, 1084 CJS_Value& vRet,
1073 CFX_WideString& sError) { 1085 CFX_WideString& sError) {
1074 return TRUE; 1086 return true;
1075 } 1087 }
1076 1088
1077 FX_BOOL Document::closeDoc(IJS_Context* cc, 1089 bool Document::getAnnot(IJS_Context* cc,
1078 const std::vector<CJS_Value>& params, 1090 const std::vector<CJS_Value>& params,
1079 CJS_Value& vRet, 1091 CJS_Value& vRet,
1080 CFX_WideString& sError) { 1092 CFX_WideString& sError) {
1081 return TRUE;
1082 }
1083
1084 FX_BOOL Document::getPageBox(IJS_Context* cc,
1085 const std::vector<CJS_Value>& params,
1086 CJS_Value& vRet,
1087 CFX_WideString& sError) {
1088 return TRUE;
1089 }
1090
1091 FX_BOOL Document::getAnnot(IJS_Context* cc,
1092 const std::vector<CJS_Value>& params,
1093 CJS_Value& vRet,
1094 CFX_WideString& sError) {
1095 if (params.size() != 2) { 1093 if (params.size() != 2) {
1096 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 1094 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1097 return FALSE; 1095 return false;
1098 } 1096 }
1099 if (!m_pFormFillEnv) { 1097 if (!m_pFormFillEnv) {
1100 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1098 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1101 return FALSE; 1099 return false;
1102 } 1100 }
1103 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 1101 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
1104 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 1102 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1105 int nPageNo = params[0].ToInt(pRuntime); 1103 int nPageNo = params[0].ToInt(pRuntime);
1106 CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime); 1104 CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
1107 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo); 1105 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo);
1108 if (!pPageView) 1106 if (!pPageView)
1109 return FALSE; 1107 return false;
1110 1108
1111 CPDFSDK_AnnotIterator annotIterator(pPageView, false); 1109 CPDFSDK_AnnotIterator annotIterator(pPageView, false);
1112 CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr; 1110 CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr;
1113 while (CPDFSDK_Annot* pSDKAnnotCur = annotIterator.Next()) { 1111 while (CPDFSDK_Annot* pSDKAnnotCur = annotIterator.Next()) {
1114 CPDFSDK_BAAnnot* pBAAnnot = static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur); 1112 CPDFSDK_BAAnnot* pBAAnnot = static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur);
1115 if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) { 1113 if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) {
1116 pSDKBAAnnot = pBAAnnot; 1114 pSDKBAAnnot = pBAAnnot;
1117 break; 1115 break;
1118 } 1116 }
1119 } 1117 }
1120 1118
1121 if (!pSDKBAAnnot) 1119 if (!pSDKBAAnnot)
1122 return FALSE; 1120 return false;
1123 1121
1124 v8::Local<v8::Object> pObj = 1122 v8::Local<v8::Object> pObj =
1125 pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID); 1123 pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
1126 if (pObj.IsEmpty()) 1124 if (pObj.IsEmpty())
1127 return FALSE; 1125 return false;
1128 1126
1129 CJS_Annot* pJS_Annot = 1127 CJS_Annot* pJS_Annot =
1130 static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj)); 1128 static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
1131 if (!pJS_Annot) 1129 if (!pJS_Annot)
1132 return FALSE; 1130 return false;
1133 1131
1134 Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject()); 1132 Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
1135 if (!pAnnot) 1133 if (!pAnnot)
1136 return FALSE; 1134 return false;
1137 1135
1138 pAnnot->SetSDKAnnot(pSDKBAAnnot); 1136 pAnnot->SetSDKAnnot(pSDKBAAnnot);
1139 1137
1140 vRet = CJS_Value(pRuntime, pJS_Annot); 1138 vRet = CJS_Value(pRuntime, pJS_Annot);
1141 return TRUE; 1139 return true;
1142 } 1140 }
1143 1141
1144 FX_BOOL Document::getAnnots(IJS_Context* cc, 1142 bool Document::getAnnots(IJS_Context* cc,
1145 const std::vector<CJS_Value>& params, 1143 const std::vector<CJS_Value>& params,
1146 CJS_Value& vRet, 1144 CJS_Value& vRet,
1147 CFX_WideString& sError) { 1145 CFX_WideString& sError) {
1148 if (!m_pFormFillEnv) { 1146 if (!m_pFormFillEnv) {
1149 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1147 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1150 return FALSE; 1148 return false;
1151 } 1149 }
1152 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 1150 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
1153 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 1151 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1154 1152
1155 // TODO(tonikitoo): Add support supported parameters as per 1153 // TODO(tonikitoo): Add support supported parameters as per
1156 // the PDF spec. 1154 // the PDF spec.
1157 1155
1158 int nPageNo = m_pFormFillEnv->GetPageCount(); 1156 int nPageNo = m_pFormFillEnv->GetPageCount();
1159 CJS_Array annots; 1157 CJS_Array annots;
1160 1158
1161 for (int i = 0; i < nPageNo; ++i) { 1159 for (int i = 0; i < nPageNo; ++i) {
1162 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(i); 1160 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(i);
1163 if (!pPageView) 1161 if (!pPageView)
1164 return FALSE; 1162 return false;
1165 1163
1166 CPDFSDK_AnnotIterator annotIterator(pPageView, false); 1164 CPDFSDK_AnnotIterator annotIterator(pPageView, false);
1167 while (CPDFSDK_Annot* pSDKAnnotCur = annotIterator.Next()) { 1165 while (CPDFSDK_Annot* pSDKAnnotCur = annotIterator.Next()) {
1168 CPDFSDK_BAAnnot* pSDKBAAnnot = 1166 CPDFSDK_BAAnnot* pSDKBAAnnot =
1169 static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur); 1167 static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur);
1170 if (!pSDKBAAnnot) 1168 if (!pSDKBAAnnot)
1171 return FALSE; 1169 return false;
1172 1170
1173 v8::Local<v8::Object> pObj = 1171 v8::Local<v8::Object> pObj =
1174 pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID); 1172 pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
1175 if (pObj.IsEmpty()) 1173 if (pObj.IsEmpty())
1176 return FALSE; 1174 return false;
1177 1175
1178 CJS_Annot* pJS_Annot = 1176 CJS_Annot* pJS_Annot =
1179 static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj)); 1177 static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
1180 if (!pJS_Annot) 1178 if (!pJS_Annot)
1181 return FALSE; 1179 return false;
1182 1180
1183 Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject()); 1181 Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
1184 if (!pAnnot) 1182 if (!pAnnot)
1185 return FALSE; 1183 return false;
1186 1184
1187 pAnnot->SetSDKAnnot(pSDKBAAnnot); 1185 pAnnot->SetSDKAnnot(pSDKBAAnnot);
1188 annots.SetElement(pRuntime, i, CJS_Value(pRuntime, pJS_Annot)); 1186 annots.SetElement(pRuntime, i, CJS_Value(pRuntime, pJS_Annot));
1189 } 1187 }
1190 } 1188 }
1191 1189
1192 vRet = CJS_Value(pRuntime, annots); 1190 vRet = CJS_Value(pRuntime, annots);
1193 return TRUE; 1191 return true;
1194 } 1192 }
1195 1193
1196 FX_BOOL Document::getAnnot3D(IJS_Context* cc, 1194 bool Document::getAnnot3D(IJS_Context* cc,
1197 const std::vector<CJS_Value>& params,
1198 CJS_Value& vRet,
1199 CFX_WideString& sError) {
1200 vRet.SetNull(CJS_Runtime::FromContext(cc));
1201 return TRUE;
1202 }
1203
1204 FX_BOOL Document::getAnnots3D(IJS_Context* cc,
1205 const std::vector<CJS_Value>& params,
1206 CJS_Value& vRet,
1207 CFX_WideString& sError) {
1208 return TRUE;
1209 }
1210
1211 FX_BOOL Document::getOCGs(IJS_Context* cc,
1212 const std::vector<CJS_Value>& params, 1195 const std::vector<CJS_Value>& params,
1213 CJS_Value& vRet, 1196 CJS_Value& vRet,
1214 CFX_WideString& sError) { 1197 CFX_WideString& sError) {
1215 return TRUE; 1198 vRet.SetNull(CJS_Runtime::FromContext(cc));
1199 return true;
1216 } 1200 }
1217 1201
1218 FX_BOOL Document::getLinks(IJS_Context* cc, 1202 bool Document::getAnnots3D(IJS_Context* cc,
1219 const std::vector<CJS_Value>& params, 1203 const std::vector<CJS_Value>& params,
1220 CJS_Value& vRet, 1204 CJS_Value& vRet,
1221 CFX_WideString& sError) { 1205 CFX_WideString& sError) {
1222 return TRUE; 1206 return true;
1207 }
1208
1209 bool Document::getOCGs(IJS_Context* cc,
1210 const std::vector<CJS_Value>& params,
1211 CJS_Value& vRet,
1212 CFX_WideString& sError) {
1213 return true;
1214 }
1215
1216 bool Document::getLinks(IJS_Context* cc,
1217 const std::vector<CJS_Value>& params,
1218 CJS_Value& vRet,
1219 CFX_WideString& sError) {
1220 return true;
1223 } 1221 }
1224 1222
1225 bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) { 1223 bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) {
1226 return (rect.left <= LinkRect.left && rect.top <= LinkRect.top && 1224 return (rect.left <= LinkRect.left && rect.top <= LinkRect.top &&
1227 rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom); 1225 rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
1228 } 1226 }
1229 1227
1230 FX_BOOL Document::addIcon(IJS_Context* cc, 1228 bool Document::addIcon(IJS_Context* cc,
1231 const std::vector<CJS_Value>& params, 1229 const std::vector<CJS_Value>& params,
1232 CJS_Value& vRet, 1230 CJS_Value& vRet,
1233 CFX_WideString& sError) { 1231 CFX_WideString& sError) {
1234 if (params.size() != 2) { 1232 if (params.size() != 2) {
1235 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 1233 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1236 return FALSE; 1234 return false;
1237 } 1235 }
1238 1236
1239 CJS_Context* pContext = static_cast<CJS_Context*>(cc); 1237 CJS_Context* pContext = static_cast<CJS_Context*>(cc);
1240 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 1238 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1241 CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime); 1239 CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
1242 1240
1243 if (params[1].GetType() != CJS_Value::VT_object) { 1241 if (params[1].GetType() != CJS_Value::VT_object) {
1244 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR); 1242 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
1245 return FALSE; 1243 return false;
1246 } 1244 }
1247 1245
1248 v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(pRuntime); 1246 v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(pRuntime);
1249 if (pRuntime->GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) { 1247 if (pRuntime->GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) {
1250 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR); 1248 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
1251 return FALSE; 1249 return false;
1252 } 1250 }
1253 1251
1254 CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject(pRuntime)->GetEmbedObject(); 1252 CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject(pRuntime)->GetEmbedObject();
1255 if (!pEmbedObj) { 1253 if (!pEmbedObj) {
1256 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR); 1254 sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
1257 return FALSE; 1255 return false;
1258 } 1256 }
1259 1257
1260 m_Icons.push_back(pdfium::MakeUnique<IconElement>( 1258 m_Icons.push_back(pdfium::MakeUnique<IconElement>(
1261 swIconName, static_cast<Icon*>(pEmbedObj))); 1259 swIconName, static_cast<Icon*>(pEmbedObj)));
1262 return TRUE; 1260 return true;
1263 } 1261 }
1264 1262
1265 FX_BOOL Document::icons(IJS_Context* cc, 1263 bool Document::icons(IJS_Context* cc,
1266 CJS_PropValue& vp, 1264 CJS_PropValue& vp,
1267 CFX_WideString& sError) { 1265 CFX_WideString& sError) {
1268 if (vp.IsSetting()) { 1266 if (vp.IsSetting()) {
1269 sError = JSGetStringFromID(IDS_STRING_JSREADONLY); 1267 sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
1270 return FALSE; 1268 return false;
1271 } 1269 }
1272 1270
1273 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); 1271 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
1274 if (m_Icons.empty()) { 1272 if (m_Icons.empty()) {
1275 vp.GetJSValue()->SetNull(pRuntime); 1273 vp.GetJSValue()->SetNull(pRuntime);
1276 return TRUE; 1274 return true;
1277 } 1275 }
1278 1276
1279 CJS_Array Icons; 1277 CJS_Array Icons;
1280 1278
1281 int i = 0; 1279 int i = 0;
1282 for (const auto& pIconElement : m_Icons) { 1280 for (const auto& pIconElement : m_Icons) {
1283 v8::Local<v8::Object> pObj = 1281 v8::Local<v8::Object> pObj =
1284 pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID); 1282 pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
1285 if (pObj.IsEmpty()) 1283 if (pObj.IsEmpty())
1286 return FALSE; 1284 return false;
1287 1285
1288 CJS_Icon* pJS_Icon = 1286 CJS_Icon* pJS_Icon =
1289 static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj)); 1287 static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
1290 if (!pJS_Icon) 1288 if (!pJS_Icon)
1291 return FALSE; 1289 return false;
1292 1290
1293 Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject()); 1291 Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
1294 if (!pIcon) 1292 if (!pIcon)
1295 return FALSE; 1293 return false;
1296 1294
1297 pIcon->SetStream(pIconElement->IconStream->GetStream()); 1295 pIcon->SetStream(pIconElement->IconStream->GetStream());
1298 pIcon->SetIconName(pIconElement->IconName); 1296 pIcon->SetIconName(pIconElement->IconName);
1299 Icons.SetElement(pRuntime, i++, CJS_Value(pRuntime, pJS_Icon)); 1297 Icons.SetElement(pRuntime, i++, CJS_Value(pRuntime, pJS_Icon));
1300 } 1298 }
1301 1299
1302 vp << Icons; 1300 vp << Icons;
1303 return TRUE; 1301 return true;
1304 } 1302 }
1305 1303
1306 FX_BOOL Document::getIcon(IJS_Context* cc, 1304 bool Document::getIcon(IJS_Context* cc,
1307 const std::vector<CJS_Value>& params, 1305 const std::vector<CJS_Value>& params,
1308 CJS_Value& vRet, 1306 CJS_Value& vRet,
1309 CFX_WideString& sError) { 1307 CFX_WideString& sError) {
1310 if (params.size() != 1) { 1308 if (params.size() != 1) {
1311 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 1309 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1312 return FALSE; 1310 return false;
1313 } 1311 }
1314 1312
1315 if (m_Icons.empty()) 1313 if (m_Icons.empty())
1316 return FALSE; 1314 return false;
1317 1315
1318 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); 1316 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
1319 CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime); 1317 CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
1320 1318
1321 for (const auto& pIconElement : m_Icons) { 1319 for (const auto& pIconElement : m_Icons) {
1322 if (pIconElement->IconName != swIconName) 1320 if (pIconElement->IconName != swIconName)
1323 continue; 1321 continue;
1324 1322
1325 v8::Local<v8::Object> pObj = 1323 v8::Local<v8::Object> pObj =
1326 pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID); 1324 pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
1327 if (pObj.IsEmpty()) 1325 if (pObj.IsEmpty())
1328 return FALSE; 1326 return false;
1329 1327
1330 CJS_Icon* pJS_Icon = 1328 CJS_Icon* pJS_Icon =
1331 static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj)); 1329 static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
1332 if (!pJS_Icon) 1330 if (!pJS_Icon)
1333 return FALSE; 1331 return false;
1334 1332
1335 Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); 1333 Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
1336 if (!pIcon) 1334 if (!pIcon)
1337 return FALSE; 1335 return false;
1338 1336
1339 pIcon->SetIconName(swIconName); 1337 pIcon->SetIconName(swIconName);
1340 pIcon->SetStream(pIconElement->IconStream->GetStream()); 1338 pIcon->SetStream(pIconElement->IconStream->GetStream());
1341 1339
1342 vRet = CJS_Value(pRuntime, pJS_Icon); 1340 vRet = CJS_Value(pRuntime, pJS_Icon);
1343 return TRUE; 1341 return true;
1344 } 1342 }
1345 1343
1346 return FALSE; 1344 return false;
1347 } 1345 }
1348 1346
1349 FX_BOOL Document::removeIcon(IJS_Context* cc, 1347 bool Document::removeIcon(IJS_Context* cc,
1350 const std::vector<CJS_Value>& params, 1348 const std::vector<CJS_Value>& params,
1351 CJS_Value& vRet, 1349 CJS_Value& vRet,
1352 CFX_WideString& sError) { 1350 CFX_WideString& sError) {
1353 // Unsafe, no supported. 1351 // Unsafe, no supported.
1354 return TRUE; 1352 return true;
1355 } 1353 }
1356 1354
1357 FX_BOOL Document::createDataObject(IJS_Context* cc, 1355 bool Document::createDataObject(IJS_Context* cc,
1358 const std::vector<CJS_Value>& params, 1356 const std::vector<CJS_Value>& params,
1359 CJS_Value& vRet, 1357 CJS_Value& vRet,
1360 CFX_WideString& sError) { 1358 CFX_WideString& sError) {
1361 // Unsafe, not implemented. 1359 // Unsafe, not implemented.
1362 return TRUE; 1360 return true;
1363 } 1361 }
1364 1362
1365 FX_BOOL Document::media(IJS_Context* cc, 1363 bool Document::media(IJS_Context* cc,
1366 CJS_PropValue& vp, 1364 CJS_PropValue& vp,
1367 CFX_WideString& sError) { 1365 CFX_WideString& sError) {
1368 return TRUE; 1366 return true;
1369 } 1367 }
1370 1368
1371 FX_BOOL Document::calculateNow(IJS_Context* cc, 1369 bool Document::calculateNow(IJS_Context* cc,
1372 const std::vector<CJS_Value>& params, 1370 const std::vector<CJS_Value>& params,
1373 CJS_Value& vRet, 1371 CJS_Value& vRet,
1374 CFX_WideString& sError) { 1372 CFX_WideString& sError) {
1375 if (!m_pFormFillEnv) { 1373 if (!m_pFormFillEnv) {
1376 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1374 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1377 return FALSE; 1375 return false;
1378 } 1376 }
1379 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) || 1377 if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
1380 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) || 1378 m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
1381 m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) { 1379 m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
1382 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 1380 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
1383 return FALSE; 1381 return false;
1384 } 1382 }
1385 m_pFormFillEnv->GetInterForm()->OnCalculate(); 1383 m_pFormFillEnv->GetInterForm()->OnCalculate();
1386 return TRUE; 1384 return true;
1387 } 1385 }
1388 1386
1389 FX_BOOL Document::Collab(IJS_Context* cc, 1387 bool Document::Collab(IJS_Context* cc,
1390 CJS_PropValue& vp, 1388 CJS_PropValue& vp,
1391 CFX_WideString& sError) { 1389 CFX_WideString& sError) {
1392 return TRUE; 1390 return true;
1393 } 1391 }
1394 1392
1395 FX_BOOL Document::getPageNthWord(IJS_Context* cc, 1393 bool Document::getPageNthWord(IJS_Context* cc,
1396 const std::vector<CJS_Value>& params, 1394 const std::vector<CJS_Value>& params,
1397 CJS_Value& vRet, 1395 CJS_Value& vRet,
1398 CFX_WideString& sError) { 1396 CFX_WideString& sError) {
1399 if (!m_pFormFillEnv) { 1397 if (!m_pFormFillEnv) {
1400 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1398 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1401 return FALSE; 1399 return false;
1402 } 1400 }
1403 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) { 1401 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
1404 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 1402 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
1405 return FALSE; 1403 return false;
1406 } 1404 }
1407 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); 1405 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
1408 1406
1409 // TODO(tsepez): check maximum allowable params. 1407 // TODO(tsepez): check maximum allowable params.
1410 1408
1411 int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0; 1409 int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
1412 int nWordNo = params.size() > 1 ? params[1].ToInt(pRuntime) : 0; 1410 int nWordNo = params.size() > 1 ? params[1].ToInt(pRuntime) : 0;
1413 bool bStrip = params.size() > 2 ? params[2].ToBool(pRuntime) : true; 1411 bool bStrip = params.size() > 2 ? params[2].ToBool(pRuntime) : true;
1414 1412
1415 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); 1413 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
1416 if (!pDocument) 1414 if (!pDocument)
1417 return FALSE; 1415 return false;
1418 1416
1419 if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) { 1417 if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
1420 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR); 1418 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
1421 return FALSE; 1419 return false;
1422 } 1420 }
1423 1421
1424 CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); 1422 CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
1425 if (!pPageDict) 1423 if (!pPageDict)
1426 return FALSE; 1424 return false;
1427 1425
1428 CPDF_Page page(pDocument, pPageDict, true); 1426 CPDF_Page page(pDocument, pPageDict, true);
1429 page.ParseContent(); 1427 page.ParseContent();
1430 1428
1431 int nWords = 0; 1429 int nWords = 0;
1432 CFX_WideString swRet; 1430 CFX_WideString swRet;
1433 for (auto& pPageObj : *page.GetPageObjectList()) { 1431 for (auto& pPageObj : *page.GetPageObjectList()) {
1434 if (pPageObj->IsText()) { 1432 if (pPageObj->IsText()) {
1435 CPDF_TextObject* pTextObj = pPageObj->AsText(); 1433 CPDF_TextObject* pTextObj = pPageObj->AsText();
1436 int nObjWords = CountWords(pTextObj); 1434 int nObjWords = CountWords(pTextObj);
1437 if (nWords + nObjWords >= nWordNo) { 1435 if (nWords + nObjWords >= nWordNo) {
1438 swRet = GetObjWordStr(pTextObj, nWordNo - nWords); 1436 swRet = GetObjWordStr(pTextObj, nWordNo - nWords);
1439 break; 1437 break;
1440 } 1438 }
1441 nWords += nObjWords; 1439 nWords += nObjWords;
1442 } 1440 }
1443 } 1441 }
1444 1442
1445 if (bStrip) { 1443 if (bStrip) {
1446 swRet.TrimLeft(); 1444 swRet.TrimLeft();
1447 swRet.TrimRight(); 1445 swRet.TrimRight();
1448 } 1446 }
1449 1447
1450 vRet = CJS_Value(pRuntime, swRet.c_str()); 1448 vRet = CJS_Value(pRuntime, swRet.c_str());
1451 return TRUE; 1449 return true;
1452 } 1450 }
1453 1451
1454 FX_BOOL Document::getPageNthWordQuads(IJS_Context* cc, 1452 bool Document::getPageNthWordQuads(IJS_Context* cc,
1455 const std::vector<CJS_Value>& params, 1453 const std::vector<CJS_Value>& params,
1456 CJS_Value& vRet, 1454 CJS_Value& vRet,
1457 CFX_WideString& sError) { 1455 CFX_WideString& sError) {
1458 if (!m_pFormFillEnv) { 1456 if (!m_pFormFillEnv) {
1459 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1457 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1460 return FALSE; 1458 return false;
1461 } 1459 }
1462 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) { 1460 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
1463 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1461 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1464 return FALSE; 1462 return false;
1465 } 1463 }
1466 return FALSE; 1464 return false;
1467 } 1465 }
1468 1466
1469 FX_BOOL Document::getPageNumWords(IJS_Context* cc, 1467 bool Document::getPageNumWords(IJS_Context* cc,
1470 const std::vector<CJS_Value>& params, 1468 const std::vector<CJS_Value>& params,
1471 CJS_Value& vRet, 1469 CJS_Value& vRet,
1472 CFX_WideString& sError) { 1470 CFX_WideString& sError) {
1473 if (!m_pFormFillEnv) { 1471 if (!m_pFormFillEnv) {
1474 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1472 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1475 return FALSE; 1473 return false;
1476 } 1474 }
1477 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) { 1475 if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
1478 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION); 1476 sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
1479 return FALSE; 1477 return false;
1480 } 1478 }
1481 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); 1479 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
1482 int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0; 1480 int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
1483 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); 1481 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
1484 if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) { 1482 if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
1485 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR); 1483 sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
1486 return FALSE; 1484 return false;
1487 } 1485 }
1488 1486
1489 CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); 1487 CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
1490 if (!pPageDict) 1488 if (!pPageDict)
1491 return FALSE; 1489 return false;
1492 1490
1493 CPDF_Page page(pDocument, pPageDict, true); 1491 CPDF_Page page(pDocument, pPageDict, true);
1494 page.ParseContent(); 1492 page.ParseContent();
1495 1493
1496 int nWords = 0; 1494 int nWords = 0;
1497 for (auto& pPageObj : *page.GetPageObjectList()) { 1495 for (auto& pPageObj : *page.GetPageObjectList()) {
1498 if (pPageObj->IsText()) 1496 if (pPageObj->IsText())
1499 nWords += CountWords(pPageObj->AsText()); 1497 nWords += CountWords(pPageObj->AsText());
1500 } 1498 }
1501 1499
1502 vRet = CJS_Value(pRuntime, nWords); 1500 vRet = CJS_Value(pRuntime, nWords);
1503 return TRUE; 1501 return true;
1504 } 1502 }
1505 1503
1506 FX_BOOL Document::getPrintParams(IJS_Context* cc, 1504 bool Document::getPrintParams(IJS_Context* cc,
1507 const std::vector<CJS_Value>& params, 1505 const std::vector<CJS_Value>& params,
1508 CJS_Value& vRet, 1506 CJS_Value& vRet,
1509 CFX_WideString& sError) { 1507 CFX_WideString& sError) {
1510 CJS_Context* pContext = (CJS_Context*)cc; 1508 CJS_Context* pContext = (CJS_Context*)cc;
1511 CJS_Runtime* pRuntime = pContext->GetJSRuntime(); 1509 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1512 v8::Local<v8::Object> pRetObj = 1510 v8::Local<v8::Object> pRetObj =
1513 pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID); 1511 pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID);
1514 1512
1515 // Not implemented yet. 1513 // Not implemented yet.
1516 1514
1517 vRet = CJS_Value(pRuntime, pRetObj); 1515 vRet = CJS_Value(pRuntime, pRetObj);
1518 return TRUE; 1516 return true;
1519 } 1517 }
1520 1518
1521 #define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF) 1519 #define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
1522 1520
1523 int Document::CountWords(CPDF_TextObject* pTextObj) { 1521 int Document::CountWords(CPDF_TextObject* pTextObj) {
1524 if (!pTextObj) 1522 if (!pTextObj)
1525 return 0; 1523 return 0;
1526 1524
1527 int nWords = 0; 1525 int nWords = 0;
1528 1526
1529 CPDF_Font* pFont = pTextObj->GetFont(); 1527 CPDF_Font* pFont = pTextObj->GetFont();
1530 if (!pFont) 1528 if (!pFont)
1531 return 0; 1529 return 0;
1532 1530
1533 FX_BOOL bIsLatin = FALSE; 1531 bool bIsLatin = false;
1534 1532
1535 for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) { 1533 for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
1536 uint32_t charcode = CPDF_Font::kInvalidCharCode; 1534 uint32_t charcode = CPDF_Font::kInvalidCharCode;
1537 FX_FLOAT kerning; 1535 FX_FLOAT kerning;
1538 1536
1539 pTextObj->GetCharInfo(i, charcode, kerning); 1537 pTextObj->GetCharInfo(i, charcode, kerning);
1540 CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); 1538 CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
1541 1539
1542 uint16_t unicode = 0; 1540 uint16_t unicode = 0;
1543 if (swUnicode.GetLength() > 0) 1541 if (swUnicode.GetLength() > 0)
(...skipping 12 matching lines...) Expand all
1556 1554
1557 CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, 1555 CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
1558 int nWordIndex) { 1556 int nWordIndex) {
1559 CFX_WideString swRet; 1557 CFX_WideString swRet;
1560 1558
1561 CPDF_Font* pFont = pTextObj->GetFont(); 1559 CPDF_Font* pFont = pTextObj->GetFont();
1562 if (!pFont) 1560 if (!pFont)
1563 return L""; 1561 return L"";
1564 1562
1565 int nWords = 0; 1563 int nWords = 0;
1566 FX_BOOL bIsLatin = FALSE; 1564 bool bIsLatin = false;
1567 1565
1568 for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) { 1566 for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
1569 uint32_t charcode = CPDF_Font::kInvalidCharCode; 1567 uint32_t charcode = CPDF_Font::kInvalidCharCode;
1570 FX_FLOAT kerning; 1568 FX_FLOAT kerning;
1571 1569
1572 pTextObj->GetCharInfo(i, charcode, kerning); 1570 pTextObj->GetCharInfo(i, charcode, kerning);
1573 CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); 1571 CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
1574 1572
1575 uint16_t unicode = 0; 1573 uint16_t unicode = 0;
1576 if (swUnicode.GetLength() > 0) 1574 if (swUnicode.GetLength() > 0)
1577 unicode = swUnicode[0]; 1575 unicode = swUnicode[0];
1578 1576
1579 if (ISLATINWORD(unicode) && bIsLatin) { 1577 if (ISLATINWORD(unicode) && bIsLatin) {
1580 } else { 1578 } else {
1581 bIsLatin = ISLATINWORD(unicode); 1579 bIsLatin = ISLATINWORD(unicode);
1582 if (unicode != 0x20) 1580 if (unicode != 0x20)
1583 nWords++; 1581 nWords++;
1584 } 1582 }
1585 1583
1586 if (nWords - 1 == nWordIndex) 1584 if (nWords - 1 == nWordIndex)
1587 swRet += unicode; 1585 swRet += unicode;
1588 } 1586 }
1589 1587
1590 return swRet; 1588 return swRet;
1591 } 1589 }
1592 1590
1593 FX_BOOL Document::zoom(IJS_Context* cc, 1591 bool Document::zoom(IJS_Context* cc,
1594 CJS_PropValue& vp, 1592 CJS_PropValue& vp,
1595 CFX_WideString& sError) { 1593 CFX_WideString& sError) {
1596 return TRUE; 1594 return true;
1597 } 1595 }
1598 1596
1599 /** 1597 /**
1600 (none, NoVary) 1598 (none, NoVary)
1601 (fitP, FitPage) 1599 (fitP, FitPage)
1602 (fitW, FitWidth) 1600 (fitW, FitWidth)
1603 (fitH, FitHeight) 1601 (fitH, FitHeight)
1604 (fitV, FitVisibleWidth) 1602 (fitV, FitVisibleWidth)
1605 (pref, Preferred) 1603 (pref, Preferred)
1606 (refW, ReflowWidth) 1604 (refW, ReflowWidth)
1607 */ 1605 */
1608 1606
1609 FX_BOOL Document::zoomType(IJS_Context* cc, 1607 bool Document::zoomType(IJS_Context* cc,
1610 CJS_PropValue& vp, 1608 CJS_PropValue& vp,
1611 CFX_WideString& sError) { 1609 CFX_WideString& sError) {
1612 return TRUE; 1610 return true;
1613 } 1611 }
1614 1612
1615 FX_BOOL Document::deletePages(IJS_Context* cc, 1613 bool Document::deletePages(IJS_Context* cc,
1616 const std::vector<CJS_Value>& params, 1614 const std::vector<CJS_Value>& params,
1617 CJS_Value& vRet, 1615 CJS_Value& vRet,
1618 CFX_WideString& sError) { 1616 CFX_WideString& sError) {
1619 // Unsafe, no supported. 1617 // Unsafe, no supported.
1620 return TRUE; 1618 return true;
1621 } 1619 }
1622 1620
1623 FX_BOOL Document::extractPages(IJS_Context* cc, 1621 bool Document::extractPages(IJS_Context* cc,
1624 const std::vector<CJS_Value>& params, 1622 const std::vector<CJS_Value>& params,
1625 CJS_Value& vRet, 1623 CJS_Value& vRet,
1626 CFX_WideString& sError) { 1624 CFX_WideString& sError) {
1627 // Unsafe, not supported. 1625 // Unsafe, not supported.
1628 return TRUE; 1626 return true;
1629 } 1627 }
1630 1628
1631 FX_BOOL Document::insertPages(IJS_Context* cc, 1629 bool Document::insertPages(IJS_Context* cc,
1632 const std::vector<CJS_Value>& params, 1630 const std::vector<CJS_Value>& params,
1633 CJS_Value& vRet, 1631 CJS_Value& vRet,
1634 CFX_WideString& sError) { 1632 CFX_WideString& sError) {
1635 // Unsafe, not supported. 1633 // Unsafe, not supported.
1636 return TRUE; 1634 return true;
1637 } 1635 }
1638 1636
1639 FX_BOOL Document::replacePages(IJS_Context* cc, 1637 bool Document::replacePages(IJS_Context* cc,
1640 const std::vector<CJS_Value>& params, 1638 const std::vector<CJS_Value>& params,
1641 CJS_Value& vRet, 1639 CJS_Value& vRet,
1642 CFX_WideString& sError) { 1640 CFX_WideString& sError) {
1643 // Unsafe, not supported. 1641 // Unsafe, not supported.
1644 return TRUE; 1642 return true;
1645 } 1643 }
1646 1644
1647 FX_BOOL Document::getURL(IJS_Context* cc, 1645 bool Document::getURL(IJS_Context* cc,
1648 const std::vector<CJS_Value>& params, 1646 const std::vector<CJS_Value>& params,
1649 CJS_Value& vRet, 1647 CJS_Value& vRet,
1650 CFX_WideString& sError) { 1648 CFX_WideString& sError) {
1651 // Unsafe, not supported. 1649 // Unsafe, not supported.
1652 return TRUE; 1650 return true;
1653 } 1651 }
1654 1652
1655 FX_BOOL Document::gotoNamedDest(IJS_Context* cc, 1653 bool Document::gotoNamedDest(IJS_Context* cc,
1656 const std::vector<CJS_Value>& params, 1654 const std::vector<CJS_Value>& params,
1657 CJS_Value& vRet, 1655 CJS_Value& vRet,
1658 CFX_WideString& sError) { 1656 CFX_WideString& sError) {
1659 if (params.size() != 1) { 1657 if (params.size() != 1) {
1660 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR); 1658 sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1661 return FALSE; 1659 return false;
1662 } 1660 }
1663 if (!m_pFormFillEnv) { 1661 if (!m_pFormFillEnv) {
1664 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT); 1662 sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1665 return FALSE; 1663 return false;
1666 } 1664 }
1667 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc); 1665 CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
1668 CFX_WideString wideName = params[0].ToCFXWideString(pRuntime); 1666 CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
1669 CFX_ByteString utf8Name = wideName.UTF8Encode(); 1667 CFX_ByteString utf8Name = wideName.UTF8Encode();
1670 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); 1668 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
1671 if (!pDocument) 1669 if (!pDocument)
1672 return FALSE; 1670 return false;
1673 1671
1674 CPDF_NameTree nameTree(pDocument, "Dests"); 1672 CPDF_NameTree nameTree(pDocument, "Dests");
1675 CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, utf8Name); 1673 CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, utf8Name);
1676 if (!destArray) 1674 if (!destArray)
1677 return FALSE; 1675 return false;
1678 1676
1679 CPDF_Dest dest(destArray); 1677 CPDF_Dest dest(destArray);
1680 const CPDF_Array* arrayObject = ToArray(dest.GetObject()); 1678 const CPDF_Array* arrayObject = ToArray(dest.GetObject());
1681 1679
1682 std::unique_ptr<float[]> scrollPositionArray; 1680 std::unique_ptr<float[]> scrollPositionArray;
1683 int scrollPositionArraySize = 0; 1681 int scrollPositionArraySize = 0;
1684 1682
1685 if (arrayObject) { 1683 if (arrayObject) {
1686 scrollPositionArray.reset(new float[arrayObject->GetCount()]); 1684 scrollPositionArray.reset(new float[arrayObject->GetCount()]);
1687 int j = 0; 1685 int j = 0;
1688 for (size_t i = 2; i < arrayObject->GetCount(); i++) 1686 for (size_t i = 2; i < arrayObject->GetCount(); i++)
1689 scrollPositionArray[j++] = arrayObject->GetFloatAt(i); 1687 scrollPositionArray[j++] = arrayObject->GetFloatAt(i);
1690 scrollPositionArraySize = j; 1688 scrollPositionArraySize = j;
1691 } 1689 }
1692 1690
1693 pRuntime->BeginBlock(); 1691 pRuntime->BeginBlock();
1694 m_pFormFillEnv->DoGoToAction(dest.GetPageIndex(pDocument), dest.GetZoomMode(), 1692 m_pFormFillEnv->DoGoToAction(dest.GetPageIndex(pDocument), dest.GetZoomMode(),
1695 scrollPositionArray.get(), 1693 scrollPositionArray.get(),
1696 scrollPositionArraySize); 1694 scrollPositionArraySize);
1697 pRuntime->EndBlock(); 1695 pRuntime->EndBlock();
1698 1696
1699 return TRUE; 1697 return true;
1700 } 1698 }
1701 1699
1702 void Document::AddDelayData(CJS_DelayData* pData) { 1700 void Document::AddDelayData(CJS_DelayData* pData) {
1703 m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData)); 1701 m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData));
1704 } 1702 }
1705 1703
1706 void Document::DoFieldDelay(const CFX_WideString& sFieldName, 1704 void Document::DoFieldDelay(const CFX_WideString& sFieldName,
1707 int nControlIndex) { 1705 int nControlIndex) {
1708 std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex; 1706 std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex;
1709 auto iter = m_DelayData.begin(); 1707 auto iter = m_DelayData.begin();
1710 while (iter != m_DelayData.end()) { 1708 while (iter != m_DelayData.end()) {
1711 auto old = iter++; 1709 auto old = iter++;
1712 if ((*old)->sFieldName == sFieldName && 1710 if ((*old)->sFieldName == sFieldName &&
1713 (*old)->nControlIndex == nControlIndex) { 1711 (*old)->nControlIndex == nControlIndex) {
1714 DelayDataForFieldAndControlIndex.push_back(std::move(*old)); 1712 DelayDataForFieldAndControlIndex.push_back(std::move(*old));
1715 m_DelayData.erase(old); 1713 m_DelayData.erase(old);
1716 } 1714 }
1717 } 1715 }
1718 1716
1719 for (const auto& pData : DelayDataForFieldAndControlIndex) 1717 for (const auto& pData : DelayDataForFieldAndControlIndex)
1720 Field::DoDelay(m_pFormFillEnv.Get(), pData.get()); 1718 Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
1721 } 1719 }
1722 1720
1723 CJS_Document* Document::GetCJSDoc() const { 1721 CJS_Document* Document::GetCJSDoc() const {
1724 return static_cast<CJS_Document*>(m_pJSObject); 1722 return static_cast<CJS_Document*>(m_pJSObject);
1725 } 1723 }
OLDNEW
« no previous file with comments | « fpdfsdk/javascript/Document.h ('k') | fpdfsdk/javascript/Field.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698