14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Document.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
95ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann#include <algorithm>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility>
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector>
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/font/cpdf_font.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/page/cpdf_page.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_array.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_document.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_string.h"
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_interform.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_nametree.h"
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_annotiteration.h"
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_interform.h"
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_pageview.h"
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_widget.h"
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Annot.h"
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Field.h"
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/Icon.h"
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Define.h"
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_EventHandler.h"
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Object.h"
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Value.h"
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/app.h"
345ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann#include "fpdfsdk/javascript/cjs_event_context.h"
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/cjs_runtime.h"
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/resource.h"
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/numerics/safe_math.h"
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h"
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSConstSpec CJS_PrintParamsObj::ConstSpecs[] = {{0, JSConstSpec::Number, 0, 0}};
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSPropertySpec CJS_PrintParamsObj::PropertySpecs[] = {{0, 0, 0}};
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSMethodSpec CJS_PrintParamsObj::MethodSpecs[] = {{0, 0}};
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannPrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CJS_EmbedObj(pJSObject) {
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bUI = true;
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  nStart = 0;
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  nEnd = 0;
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bSilent = false;
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bShrinkToFit = false;
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bPrintAsImage = false;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bReverse = false;
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bAnnotations = true;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define MINWIDTH 5.0f
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define MINHEIGHT 5.0f
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
635ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSConstSpec CJS_Document::ConstSpecs[] = {{0, JSConstSpec::Number, 0, 0}};
645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
655ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSPropertySpec CJS_Document::PropertySpecs[] = {
665ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"ADBE", get_ADBE_static, set_ADBE_static},
675ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"author", get_author_static, set_author_static},
685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"baseURL", get_baseURL_static, set_baseURL_static},
695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"bookmarkRoot", get_bookmarkRoot_static, set_bookmarkRoot_static},
705ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"calculate", get_calculate_static, set_calculate_static},
715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"Collab", get_Collab_static, set_Collab_static},
725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"creationDate", get_creationDate_static, set_creationDate_static},
735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"creator", get_creator_static, set_creator_static},
745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"delay", get_delay_static, set_delay_static},
755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"dirty", get_dirty_static, set_dirty_static},
765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"documentFileName", get_documentFileName_static,
775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann     set_documentFileName_static},
785ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"external", get_external_static, set_external_static},
795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"filesize", get_filesize_static, set_filesize_static},
805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"icons", get_icons_static, set_icons_static},
815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"info", get_info_static, set_info_static},
825ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"keywords", get_keywords_static, set_keywords_static},
835ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"layout", get_layout_static, set_layout_static},
845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"media", get_media_static, set_media_static},
855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"modDate", get_modDate_static, set_modDate_static},
865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"mouseX", get_mouseX_static, set_mouseX_static},
875ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"mouseY", get_mouseY_static, set_mouseY_static},
885ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"numFields", get_numFields_static, set_numFields_static},
895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"numPages", get_numPages_static, set_numPages_static},
905ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"pageNum", get_pageNum_static, set_pageNum_static},
915ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"pageWindowRect", get_pageWindowRect_static, set_pageWindowRect_static},
925ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"path", get_path_static, set_path_static},
935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"producer", get_producer_static, set_producer_static},
945ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"subject", get_subject_static, set_subject_static},
955ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"title", get_title_static, set_title_static},
965ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"URL", get_URL_static, set_URL_static},
975ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"zoom", get_zoom_static, set_zoom_static},
985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"zoomType", get_zoomType_static, set_zoomType_static},
995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {0, 0, 0}};
1005ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
1015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannJSMethodSpec CJS_Document::MethodSpecs[] = {
1025ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"addAnnot", addAnnot_static},
1035ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"addField", addField_static},
1045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"addLink", addLink_static},
1055ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"addIcon", addIcon_static},
1065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"calculateNow", calculateNow_static},
1075ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"closeDoc", closeDoc_static},
1085ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"createDataObject", createDataObject_static},
1095ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"deletePages", deletePages_static},
1105ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"exportAsText", exportAsText_static},
1115ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"exportAsFDF", exportAsFDF_static},
1125ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"exportAsXFDF", exportAsXFDF_static},
1135ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"extractPages", extractPages_static},
1145ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getAnnot", getAnnot_static},
1155ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getAnnots", getAnnots_static},
1165ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getAnnot3D", getAnnot3D_static},
1175ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getAnnots3D", getAnnots3D_static},
1185ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getField", getField_static},
1195ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getIcon", getIcon_static},
1205ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getLinks", getLinks_static},
1215ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getNthFieldName", getNthFieldName_static},
1225ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getOCGs", getOCGs_static},
1235ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getPageBox", getPageBox_static},
1245ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getPageNthWord", getPageNthWord_static},
1255ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getPageNthWordQuads", getPageNthWordQuads_static},
1265ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getPageNumWords", getPageNumWords_static},
1275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getPrintParams", getPrintParams_static},
1285ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"getURL", getURL_static},
1295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"gotoNamedDest", gotoNamedDest_static},
1305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"importAnFDF", importAnFDF_static},
1315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"importAnXFDF", importAnXFDF_static},
1325ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"importTextData", importTextData_static},
1335ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"insertPages", insertPages_static},
1345ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"mailForm", mailForm_static},
1355ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"print", print_static},
1365ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"removeField", removeField_static},
1375ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"replacePages", replacePages_static},
1385ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"resetForm", resetForm_static},
1395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"removeIcon", removeIcon_static},
1405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"saveAs", saveAs_static},
1415ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"submitForm", submitForm_static},
1425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"syncAnnotScan", syncAnnotScan_static},
1435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {"mailDoc", mailDoc_static},
1445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    {0, 0}};
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIMPLEMENT_JS_CLASS(CJS_Document, Document)
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(pIRuntime);
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Document* pDoc = static_cast<Document*>(GetEmbedObject());
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pDoc->SetFormFillEnv(pRuntime->GetFormFillEnv());
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannDocument::Document(CJS_Object* pJSObject)
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CJS_EmbedObj(pJSObject),
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pFormFillEnv(nullptr),
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_cwBaseURL(L""),
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_bDelay(false) {}
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannDocument::~Document() {
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// the total number of fileds in document.
1645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::numFields(CJS_Runtime* pRuntime,
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_PropValue& vp,
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << static_cast<int>(pPDFForm->CountFields(CFX_WideString()));
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::dirty(CJS_Runtime* pRuntime,
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << !!m_pFormFillEnv->GetChangeMark();
1905ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return true;
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1925ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  bool bChanged = false;
1935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vp >> bChanged;
1945ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (bChanged)
1955ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
1965ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  else
1975ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_pFormFillEnv->ClearChangeMark();
1985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2025ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::ADBE(CJS_Runtime* pRuntime,
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting())
2065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    vp.GetJSValue()->SetNull(pRuntime);
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2115ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::pageNum(CJS_Runtime* pRuntime,
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
2195ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    if (CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetCurrentView())
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      vp << pPageView->GetPageIndex();
2215ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return true;
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2235ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  int iPageCount = m_pFormFillEnv->GetPageCount();
2245ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  int iPageNum = 0;
2255ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vp >> iPageNum;
2265ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (iPageNum >= 0 && iPageNum < iPageCount)
2275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_pFormFillEnv->JS_docgotoPage(iPageNum);
2285ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  else if (iPageNum >= iPageCount)
2295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_pFormFillEnv->JS_docgotoPage(iPageCount - 1);
2305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  else if (iPageNum < 0)
2315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_pFormFillEnv->JS_docgotoPage(0);
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2365ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::addAnnot(CJS_Runtime* pRuntime,
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not supported.
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::addField(CJS_Runtime* pRuntime,
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not supported.
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2525ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::exportAsText(CJS_Runtime* pRuntime,
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2605ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::exportAsFDF(CJS_Runtime* pRuntime,
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::exportAsXFDF(CJS_Runtime* pRuntime,
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Maps a field object in PDF document to a JavaScript variable
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: the paremter cName, this is clue how to treat if the cName is not a
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// valiable filed name in this document
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getField(CJS_Runtime* pRuntime,
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() < 1) {
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPDFForm->CountFields(wideName) <= 0) {
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vRet.SetNull(pRuntime);
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pFieldObj =
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_Field::g_nObjDefnID);
3035ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (pFieldObj.IsEmpty())
3045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return false;
3055ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Field* pJSField =
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CJS_Field*>(pRuntime->GetObjectPrivate(pFieldObj));
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Field* pField = static_cast<Field*>(pJSField->GetEmbedObject());
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pField->AttachField(this, wideName);
3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pJSField);
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Gets the name of the nth field in the document
3155ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getNthFieldName(CJS_Runtime* pRuntime,
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               const std::vector<CJS_Value>& params,
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CJS_Value& vRet,
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CFX_WideString& sError) {
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nIndex = params[0].ToInt(pRuntime);
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nIndex < 0) {
3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_FormField* pField = pPDFForm->GetField(nIndex, CFX_WideString());
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pField)
3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pField->GetFullName().c_str());
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::importAnFDF(CJS_Runtime* pRuntime,
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3505ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::importAnXFDF(CJS_Runtime* pRuntime,
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3585ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::importTextData(CJS_Runtime* pRuntime,
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// exports the form data and mails the resulting fdf file as an attachment to
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// all recipients.
3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment: need reader supports
3695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::mailForm(CJS_Runtime* pRuntime,
3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int iLength = params.size();
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = iLength > 0 ? params[0].ToBool(pRuntime) : true;
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L"";
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L"";
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cSubject =
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteTextBuf textBuf;
3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
3955ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFormFillEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cTo.c_str(), cSubject.c_str(), cCc.c_str(),
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cBcc.c_str(), cMsg.c_str());
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4035ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::print(CJS_Runtime* pRuntime,
4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     const std::vector<CJS_Value>& params,
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_Value& vRet,
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = true;
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nStart = 0;
4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nEnd = 0;
4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bSilent = false;
4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bShrinkToFit = false;
4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bPrintAsImage = false;
4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bReverse = false;
4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bAnnotations = false;
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nlength = params.size();
4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nlength == 9) {
4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (params[8].GetType() == CJS_Value::VT_object) {
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      v8::Local<v8::Object> pObj = params[8].ToV8Object(pRuntime);
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (CFXJS_Engine::GetObjDefnID(pObj) ==
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          CJS_PrintParamsObj::g_nObjDefnID) {
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (CJS_Object* pJSObj = params[8].ToCJSObject(pRuntime)) {
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (PrintParamsObj* pprintparamsObj =
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  static_cast<PrintParamsObj*>(pJSObj->GetEmbedObject())) {
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bUI = pprintparamsObj->bUI;
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            nStart = pprintparamsObj->nStart;
4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            nEnd = pprintparamsObj->nEnd;
4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bSilent = pprintparamsObj->bSilent;
4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bShrinkToFit = pprintparamsObj->bShrinkToFit;
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bPrintAsImage = pprintparamsObj->bPrintAsImage;
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bReverse = pprintparamsObj->bReverse;
4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            bAnnotations = pprintparamsObj->bAnnotations;
4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 1)
4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bUI = params[0].ToBool(pRuntime);
4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 2)
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nStart = params[1].ToInt(pRuntime);
4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 3)
4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nEnd = params[2].ToInt(pRuntime);
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 4)
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bSilent = params[3].ToBool(pRuntime);
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 5)
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bShrinkToFit = params[4].ToBool(pRuntime);
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 6)
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bPrintAsImage = params[5].ToBool(pRuntime);
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 7)
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bReverse = params[6].ToBool(pRuntime);
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nlength >= 8)
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bAnnotations = params[7].ToBool(pRuntime);
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pFormFillEnv) {
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit,
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                bPrintAsImage, bReverse, bAnnotations);
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// removes the specified field from the document.
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: if the filed name is not rational, adobe is dumb for it.
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::removeField(CJS_Runtime* pRuntime,
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM))) {
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime);
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDFSDK_Annot::ObservedPtr> widgets;
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pInterForm->GetWidgets(sFieldName, &widgets);
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (widgets.empty())
4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pAnnot : widgets) {
4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_Widget* pWidget = static_cast<CPDFSDK_Widget*>(pAnnot.Get());
4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pWidget)
4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_FloatRect rcAnnot = pWidget->GetRect();
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    --rcAnnot.left;
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    --rcAnnot.bottom;
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ++rcAnnot.right;
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ++rcAnnot.top;
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::vector<CFX_FloatRect> aRefresh(1, rcAnnot);
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ASSERT(pPage);
5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // If there is currently no pageview associated with the page being used
5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // do not create one. We may be in the process of tearing down the document
5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // and creating a new pageview at this point will cause bad things.
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false);
5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageView) {
5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#if PDF_ENABLE_XFA
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPageView->DeleteAnnot(pWidget);
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // PDF_ENABLE_XFA
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pPageView->UpdateRects(aRefresh);
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->SetChangeMark();
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// reset filed values within a document.
5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// comment:
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// note: if the fields names r not rational, aodbe is dumb for it.
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::resetForm(CJS_Runtime* pRuntime,
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const std::vector<CJS_Value>& params,
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_Value& vRet,
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array aName;
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.empty()) {
5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPDFForm->ResetForm(true);
5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (params[0].GetType()) {
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aName.Attach(params[0].ToV8Array(pRuntime));
5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case CJS_Value::VT_string:
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aName.SetElement(pRuntime, 0, params[0]);
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDF_FormField*> aFields;
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, isz = aName.GetLength(pRuntime); i < isz; ++i) {
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Value valElement(pRuntime);
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aName.GetElement(pRuntime, i, valElement);
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swVal = valElement.ToCFXWideString(pRuntime);
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j)
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aFields.push_back(pPDFForm->GetField(j, swVal));
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!aFields.empty()) {
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pPDFForm->ResetForm(aFields, true, true);
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::saveAs(CJS_Runtime* pRuntime,
5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      const std::vector<CJS_Value>& params,
5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_Value& vRet,
5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::syncAnnotScan(CJS_Runtime* pRuntime,
5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const std::vector<CJS_Value>& params,
5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CJS_Value& vRet,
5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& sError) {
5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5965ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::submitForm(CJS_Runtime* pRuntime,
5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nSize = params.size();
6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nSize < 1) {
6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6095ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array aFields;
6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString strURL;
6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bFDF = true;
6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bEmpty = false;
6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Value v = params[0];
6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (v.GetType() == CJS_Value::VT_string) {
6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    strURL = params[0].ToCFXWideString(pRuntime);
6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 1)
6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bFDF = params[1].ToBool(pRuntime);
6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 2)
6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bEmpty = params[2].ToBool(pRuntime);
6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nSize > 3)
6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      aFields.Attach(params[3].ToV8Array(pRuntime));
6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else if (v.GetType() == CJS_Value::VT_object) {
6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj = params[0].ToV8Object(pRuntime);
6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Value> pValue = pRuntime->GetObjectProperty(pObj, L"cURL");
6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pValue.IsEmpty())
6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      strURL = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"bFDF");
6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bFDF = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"bEmpty");
6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bEmpty = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"aFields");
6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aFields.Attach(CJS_Value(pRuntime, pValue).ToV8Array(pRuntime));
6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (aFields.GetLength(pRuntime) == 0 && bEmpty) {
6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPDFInterForm->CheckRequiredFields(nullptr, true)) {
6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->BeginBlock();
6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pInterForm->SubmitForm(strURL, false);
6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->EndBlock();
6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<CPDF_FormField*> fieldObjects;
6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = aFields.GetLength(pRuntime); i < sz; ++i) {
6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Value valName(pRuntime);
6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    aFields.GetElement(pRuntime, i, valName);
6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString sName = valName.ToCFXWideString(pRuntime);
6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_FormField* pField = pPDFForm->GetField(j, sName);
6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!bEmpty && pField->GetValue().IsEmpty())
6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        continue;
6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      fieldObjects.push_back(pField);
6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPDFInterForm->CheckRequiredFields(&fieldObjects, true)) {
6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pRuntime->BeginBlock();
6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pInterForm->SubmitFields(strURL, fieldObjects, true, !bFDF);
6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pRuntime->EndBlock();
6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv.Reset(pFormFillEnv);
6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6785ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::bookmarkRoot(CJS_Runtime* pRuntime,
6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_PropValue& vp,
6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::mailDoc(CJS_Runtime* pRuntime,
6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tsepez): Check maximum number of allowed params.
6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bUI = true;
6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cTo = L"";
6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cCc = L"";
6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cBcc = L"";
6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cSubject = L"";
6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cMsg = L"";
6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 1)
6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bUI = params[0].ToBool(pRuntime);
6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 2)
6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cTo = params[1].ToCFXWideString(pRuntime);
7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 3)
7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cCc = params[2].ToCFXWideString(pRuntime);
7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 4)
7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cBcc = params[3].ToCFXWideString(pRuntime);
7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 5)
7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cSubject = params[4].ToCFXWideString(pRuntime);
7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 6)
7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cMsg = params[5].ToCFXWideString(pRuntime);
7084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() >= 1 && params[0].GetType() == CJS_Value::VT_object) {
7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj = params[0].ToV8Object(pRuntime);
7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Value> pValue = pRuntime->GetObjectProperty(pObj, L"bUI");
7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bUI = CJS_Value(pRuntime, pValue).ToBool(pRuntime);
7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cTo");
7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cTo = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cCc");
7194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cCc = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cBcc");
7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cBcc = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cSubject");
7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cSubject = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue = pRuntime->GetObjectProperty(pObj, L"cMsg");
7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    cMsg = CJS_Value(pRuntime, pValue).ToCFXWideString(pRuntime);
7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
7324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pFormFillEnv->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(), cSubject.c_str(),
7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               cCc.c_str(), cBcc.c_str(), cMsg.c_str());
7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::author(CJS_Runtime* pRuntime,
7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
7425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Author", sError);
7434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7455ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::info(CJS_Runtime* pRuntime,
7464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
7494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
7534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
7544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
7574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDictionary)
7584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
7594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author");
7614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwTitle = pDictionary->GetUnicodeTextFor("Title");
7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject");
7634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords");
7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator");
7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer");
7664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwCreationDate =
7674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pDictionary->GetUnicodeTextFor("CreationDate");
7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
7694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString cwTrapped = pDictionary->GetUnicodeTextFor("Trapped");
7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1);
7725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Author",
7735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwAuthor.AsStringC()));
7745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Title",
7755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwTitle.AsStringC()));
7765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Subject",
7775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwSubject.AsStringC()));
7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Keywords",
7795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwKeywords.AsStringC()));
7805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Creator",
7815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwCreator.AsStringC()));
7824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Producer",
7835ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwProducer.AsStringC()));
7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"CreationDate",
7855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwCreationDate.AsStringC()));
7865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"ModDate",
7875ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwModDate.AsStringC()));
7885ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pRuntime->PutObjectProperty(pObj, L"Trapped",
7895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                              pRuntime->NewString(cwTrapped.AsStringC()));
7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // It's to be compatible to non-standard info dictionary.
7924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& it : *pDictionary) {
7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    const CFX_ByteString& bsKey = it.first;
7944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_Object* pValueObj = it.second.get();
7954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
7964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValueObj->IsString() || pValueObj->IsName()) {
7974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(
7985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          pObj, wsKey,
7995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann          pRuntime->NewString(pValueObj->GetUnicodeText().AsStringC()));
8004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValueObj->IsNumber()) {
8014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(pObj, wsKey,
8024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  pRuntime->NewNumber(pValueObj->GetNumber()));
8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValueObj->IsBoolean()) {
8044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->PutObjectProperty(
8054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pObj, wsKey, pRuntime->NewBoolean(!!pValueObj->GetInteger()));
8064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << pObj;
8094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
8104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8125ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPropertyInternal(CJS_Runtime* pRuntime,
8134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CJS_PropValue& vp,
8144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const CFX_ByteString& propName,
8154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CFX_WideString& sError) {
8164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
8174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
8184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pDictionary = m_pFormFillEnv->GetPDFDocument()->GetInfo();
8214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDictionary)
8224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
8254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << pDictionary->GetUnicodeTextFor(propName);
8264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
8274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
8284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
8294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
8304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
8314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString csProperty;
8324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> csProperty;
8334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pDictionary->SetNewFor<CPDF_String>(propName, PDF_EncodeText(csProperty),
8344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        false);
8354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFormFillEnv->SetChangeMark();
8364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
8384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::creationDate(CJS_Runtime* pRuntime,
8414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_PropValue& vp,
8424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
8435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "CreationDate", sError);
8444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8465ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::creator(CJS_Runtime* pRuntime,
8474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
8484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
8495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Creator", sError);
8504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8525ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::delay(CJS_Runtime* pRuntime,
8534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
8544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
8554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
8564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
8574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
8584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
8604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << m_bDelay;
8615ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return true;
8625ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  }
8635ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY)) {
8645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
8655ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return false;
8665ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  }
8675ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vp >> m_bDelay;
8685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (m_bDelay) {
8695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    m_DelayData.clear();
8705ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return true;
8714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
8725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  std::list<std::unique_ptr<CJS_DelayData>> DelayDataToProcess;
8735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  DelayDataToProcess.swap(m_DelayData);
8745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  for (const auto& pData : DelayDataToProcess)
8755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
8765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
8774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
8784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::keywords(CJS_Runtime* pRuntime,
8814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
8824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
8835ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Keywords", sError);
8844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::modDate(CJS_Runtime* pRuntime,
8874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
8884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
8895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "ModDate", sError);
8904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8925ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::producer(CJS_Runtime* pRuntime,
8934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
8944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
8955ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Producer", sError);
8964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
8974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
8985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::subject(CJS_Runtime* pRuntime,
8994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
9004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
9015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Subject", sError);
9024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::title(CJS_Runtime* pRuntime,
9054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
9064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
9074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) {
9084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9115ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return getPropertyInternal(pRuntime, vp, "Title", sError);
9124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9145ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::numPages(CJS_Runtime* pRuntime,
9154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
9224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << m_pFormFillEnv->GetPageCount();
9264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::external(CJS_Runtime* pRuntime,
9304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // In Chrome case, should always return true.
9334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
9344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << true;
9354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::filesize(CJS_Runtime* pRuntime,
9404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
9414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
9424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << 0;
9474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9505ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::mouseX(CJS_Runtime* pRuntime,
9514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
9524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
9534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9565ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::mouseY(CJS_Runtime* pRuntime,
9574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
9584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
9594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9625ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::URL(CJS_Runtime* pRuntime,
9635ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                   CJS_PropValue& vp,
9645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann                   CFX_WideString& sError) {
9654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
9664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
9674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
9704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << m_pFormFillEnv->JS_docGetFilePath();
9744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::baseURL(CJS_Runtime* pRuntime,
9784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_PropValue& vp,
9794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
9804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
9814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << m_cwBaseURL;
9824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
9834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp >> m_cwBaseURL;
9844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
9864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
9874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
9885ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::calculate(CJS_Runtime* pRuntime,
9894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_PropValue& vp,
9904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
9914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
9924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
9934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
9944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
9954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
9964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsGetting()) {
9974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << !!pInterForm->IsCalculateEnabled();
9985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return true;
9994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10005ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  bool bCalculate;
10015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vp >> bCalculate;
10025ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pInterForm->EnableCalculate(bCalculate);
10034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::documentFileName(CJS_Runtime* pRuntime,
10074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CJS_PropValue& vp,
10084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CFX_WideString& sError) {
10094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
10104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
10114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath();
10184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t i = wsFilePath.GetLength() - 1;
10194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (; i >= 0; i--) {
10204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/')
10214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
10224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (i >= 0 && i < wsFilePath.GetLength() - 1) {
10244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1);
10254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
10264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp << L"";
10274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::path(CJS_Runtime* pRuntime,
10324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
10334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
10344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
10354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
10364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << app::SysPathToPDFPath(m_pFormFillEnv->JS_docGetFilePath());
10434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10465ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::pageWindowRect(CJS_Runtime* pRuntime,
10474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_PropValue& vp,
10484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
10494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10525ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::layout(CJS_Runtime* pRuntime,
10534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
10544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
10554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10585ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::addLink(CJS_Runtime* pRuntime,
10594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
10604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
10614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
10624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10655ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::closeDoc(CJS_Runtime* pRuntime,
10664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
10674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
10684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
10694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPageBox(CJS_Runtime* pRuntime,
10734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
10744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
10754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
10764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
10774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
10784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getAnnot(CJS_Runtime* pRuntime,
10804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
10814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
10824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
10834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 2) {
10844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
10854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
10884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
10894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
10914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params[0].ToInt(pRuntime);
10924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
10934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo);
10944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageView)
10954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
10964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_AnnotIteration annotIteration(pPageView, false);
10984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDFSDK_BAAnnot* pSDKBAAnnot = nullptr;
10994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pSDKAnnotCur : annotIteration) {
11004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_BAAnnot* pBAAnnot =
11014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur.Get());
11024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pBAAnnot && pBAAnnot->GetAnnotName() == swAnnotName) {
11034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pSDKBAAnnot = pBAAnnot;
11044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
11054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
11064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pSDKBAAnnot)
11084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pObj =
11114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
11124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pObj.IsEmpty())
11134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Annot* pJS_Annot =
11164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
11174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
11184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pAnnot->SetSDKAnnot(pSDKBAAnnot);
11194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pJS_Annot);
11204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11235ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getAnnots(CJS_Runtime* pRuntime,
11244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const std::vector<CJS_Value>& params,
11254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CJS_Value& vRet,
11264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         CFX_WideString& sError) {
11274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
11284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
11294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
11304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tonikitoo): Add support supported parameters as per
11324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // the PDF spec.
11334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = m_pFormFillEnv->GetPageCount();
11354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array annots;
11364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0; i < nPageNo; ++i) {
11384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(i);
11394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pPageView)
11404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
11414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDFSDK_AnnotIteration annotIteration(pPageView, false);
11434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (const auto& pSDKAnnotCur : annotIteration) {
11444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pSDKAnnotCur) {
11454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
11464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
11484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      v8::Local<v8::Object> pObj =
11494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pRuntime->NewFxDynamicObj(CJS_Annot::g_nObjDefnID);
11504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (pObj.IsEmpty())
11514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return false;
11524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CJS_Annot* pJS_Annot =
11544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          static_cast<CJS_Annot*>(pRuntime->GetObjectPrivate(pObj));
11554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      Annot* pAnnot = static_cast<Annot*>(pJS_Annot->GetEmbedObject());
11564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pAnnot->SetSDKAnnot(static_cast<CPDFSDK_BAAnnot*>(pSDKAnnotCur.Get()));
11574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      annots.SetElement(pRuntime, i, CJS_Value(pRuntime, pJS_Annot));
11584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
11594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
11604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, annots);
11614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getAnnot3D(CJS_Runtime* pRuntime,
11654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
11664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
11674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
11685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vRet.SetNull(pRuntime);
11694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getAnnots3D(CJS_Runtime* pRuntime,
11734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
11744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
11754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
11764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getOCGs(CJS_Runtime* pRuntime,
11804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
11814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
11824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
11834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getLinks(CJS_Runtime* pRuntime,
11874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        const std::vector<CJS_Value>& params,
11884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_Value& vRet,
11894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
11904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
11914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) {
11944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (rect.left <= LinkRect.left && rect.top <= LinkRect.top &&
11954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
11964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
11974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::addIcon(CJS_Runtime* pRuntime,
11994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
12004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
12014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
12024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 2) {
12034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
12044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
12084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params[1].GetType() != CJS_Value::VT_object) {
12094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pJSIcon = params[1].ToV8Object(pRuntime);
12144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pRuntime->GetObjDefnID(pJSIcon) != CJS_Icon::g_nObjDefnID) {
12154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12195ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (!params[1].ToCJSObject(pRuntime)->GetEmbedObject()) {
12204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
12214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12245ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  m_IconNames.push_back(swIconName);
12254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12285ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::icons(CJS_Runtime* pRuntime,
12294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
12304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
12314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (vp.IsSetting()) {
12324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
12334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12355ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (m_IconNames.empty()) {
12364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    vp.GetJSValue()->SetNull(pRuntime);
12374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return true;
12384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CJS_Array Icons;
12414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int i = 0;
12425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  for (const auto& name : m_IconNames) {
12434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    v8::Local<v8::Object> pObj =
12444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
12454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pObj.IsEmpty())
12464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return false;
12474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CJS_Icon* pJS_Icon =
12494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
12504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
12515ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pIcon->SetIconName(name);
12524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Icons.SetElement(pRuntime, i++, CJS_Value(pRuntime, pJS_Icon));
12534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vp << Icons;
12564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12595ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getIcon(CJS_Runtime* pRuntime,
12604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       const std::vector<CJS_Value>& params,
12614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CJS_Value& vRet,
12624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                       CFX_WideString& sError) {
12634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
12644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
12654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
12664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
12674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
12695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  auto it = std::find(m_IconNames.begin(), m_IconNames.end(), swIconName);
12705ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (it == m_IconNames.end())
12715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return false;
12724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  v8::Local<v8::Object> pObj =
12745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_Icon::g_nObjDefnID);
12755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (pObj.IsEmpty())
12765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return false;
12774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12785ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  CJS_Icon* pJS_Icon = static_cast<CJS_Icon*>(pRuntime->GetObjectPrivate(pObj));
12795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  Icon* pIcon = static_cast<Icon*>(pJS_Icon->GetEmbedObject());
12805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pIcon->SetIconName(*it);
12815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  vRet = CJS_Value(pRuntime, pJS_Icon);
12825ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return true;
12834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::removeIcon(CJS_Runtime* pRuntime,
12864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          const std::vector<CJS_Value>& params,
12874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CJS_Value& vRet,
12884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                          CFX_WideString& sError) {
12894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, no supported.
12904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::createDataObject(CJS_Runtime* pRuntime,
12944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                const std::vector<CJS_Value>& params,
12954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CJS_Value& vRet,
12964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                CFX_WideString& sError) {
12974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not implemented.
12984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
12994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::media(CJS_Runtime* pRuntime,
13024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CJS_PropValue& vp,
13034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                     CFX_WideString& sError) {
13044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13075ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::calculateNow(CJS_Runtime* pRuntime,
13084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
13094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
13104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
13114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
13124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
13134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(m_pFormFillEnv->GetPermissions(FPDFPERM_MODIFY) ||
13164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_ANNOT_FORM) ||
13174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM))) {
13184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
13194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->GetInterForm()->OnCalculate();
13224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13255ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::Collab(CJS_Runtime* pRuntime,
13264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_PropValue& vp,
13274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
13284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPageNthWord(CJS_Runtime* pRuntime,
13324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
13334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
13344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
13354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
13364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
13374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
13404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
13414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // TODO(tsepez): check maximum allowable params.
13454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
13474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWordNo = params.size() > 1 ? params[1].ToInt(pRuntime) : 0;
13484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bStrip = params.size() > 2 ? params[2].ToBool(pRuntime) : true;
13494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
13514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDocument)
13524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
13554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
13564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
13604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageDict)
13614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Page page(pDocument, pPageDict, true);
13644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  page.ParseContent();
13654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
13674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swRet;
13684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (auto& pPageObj : *page.GetPageObjectList()) {
13694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageObj->IsText()) {
13704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CPDF_TextObject* pTextObj = pPageObj->AsText();
13714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int nObjWords = CountWords(pTextObj);
13724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (nWords + nObjWords >= nWordNo) {
13734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        swRet = GetObjWordStr(pTextObj, nWordNo - nWords);
13744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        break;
13754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
13764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords += nObjWords;
13774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
13784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bStrip) {
13814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    swRet.TrimLeft();
13824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    swRet.TrimRight();
13834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, swRet.c_str());
13864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
13874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
13884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
13895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPageNthWordQuads(CJS_Runtime* pRuntime,
13904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   const std::vector<CJS_Value>& params,
13914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CJS_Value& vRet,
13924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   CFX_WideString& sError) {
13934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
13944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
13954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
13964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
13974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
13984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
13994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return false;
14024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPageNumWords(CJS_Runtime* pRuntime,
14054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               const std::vector<CJS_Value>& params,
14064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CJS_Value& vRet,
14074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               CFX_WideString& sError) {
14084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
14094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
14104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) {
14134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
14144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
14174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
14184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
14194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
14204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
14244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pPageDict)
14254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
14264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Page page(pDocument, pPageDict, true);
14284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  page.ParseContent();
14294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
14314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (auto& pPageObj : *page.GetPageObjectList()) {
14324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pPageObj->IsText())
14334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords += CountWords(pPageObj->AsText());
14344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, nWords);
14374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
14384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getPrintParams(CJS_Runtime* pRuntime,
14414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              const std::vector<CJS_Value>& params,
14424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CJS_Value& vRet,
14434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& sError) {
14444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  v8::Local<v8::Object> pRetObj =
14454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID);
14465ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  if (pRetObj.IsEmpty())
14475ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    return false;
14484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not implemented yet.
14504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  vRet = CJS_Value(pRuntime, pRetObj);
14524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
14534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
14564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint Document::CountWords(CPDF_TextObject* pTextObj) {
14584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pTextObj)
14594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
14604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
14624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Font* pFont = pTextObj->GetFont();
14644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFont)
14654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
14664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIsLatin = false;
14684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
14704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t charcode = CPDF_Font::kInvalidCharCode;
14714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT kerning;
14724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pTextObj->GetCharInfo(i, &charcode, &kerning);
14744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
14754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint16_t unicode = 0;
14774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (swUnicode.GetLength() > 0)
14784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      unicode = swUnicode[0];
14794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ISLATINWORD(unicode) && bIsLatin)
14814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
14824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bIsLatin = ISLATINWORD(unicode);
14844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (unicode != 0x20)
14854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      nWords++;
14864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
14874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nWords;
14894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
14904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
14924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       int nWordIndex) {
14934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString swRet;
14944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Font* pFont = pTextObj->GetFont();
14964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pFont)
14974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return L"";
14984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
14994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int nWords = 0;
15004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIsLatin = false;
15014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
15034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t charcode = CPDF_Font::kInvalidCharCode;
15044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT kerning;
15054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann    pTextObj->GetCharInfo(i, &charcode, &kerning);
15074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
15084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint16_t unicode = 0;
15104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (swUnicode.GetLength() > 0)
15114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      unicode = swUnicode[0];
15124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ISLATINWORD(unicode) && bIsLatin) {
15144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else {
15154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bIsLatin = ISLATINWORD(unicode);
15164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (unicode != 0x20)
15174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        nWords++;
15184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
15194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (nWords - 1 == nWordIndex)
15214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      swRet += unicode;
15224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return swRet;
15254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::zoom(CJS_Runtime* pRuntime,
15284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CJS_PropValue& vp,
15294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    CFX_WideString& sError) {
15304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann/**
15344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(none,  NoVary)
15354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitP,  FitPage)
15364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitW,  FitWidth)
15374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitH,  FitHeight)
15384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(fitV,  FitVisibleWidth)
15394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(pref,  Preferred)
15404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann(refW,  ReflowWidth)
15414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann*/
15424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::zoomType(CJS_Runtime* pRuntime,
15444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CJS_PropValue& vp,
15454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        CFX_WideString& sError) {
15464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::deletePages(CJS_Runtime* pRuntime,
15504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
15514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
15524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
15534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, no supported.
15544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15575ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::extractPages(CJS_Runtime* pRuntime,
15584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
15594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
15604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
15614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
15624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15655ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::insertPages(CJS_Runtime* pRuntime,
15664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const std::vector<CJS_Value>& params,
15674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CJS_Value& vRet,
15684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           CFX_WideString& sError) {
15694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
15704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::replacePages(CJS_Runtime* pRuntime,
15744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            const std::vector<CJS_Value>& params,
15754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CJS_Value& vRet,
15764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            CFX_WideString& sError) {
15774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
15784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::getURL(CJS_Runtime* pRuntime,
15824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      const std::vector<CJS_Value>& params,
15834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CJS_Value& vRet,
15844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      CFX_WideString& sError) {
15854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Unsafe, not supported.
15864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
15874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
15884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool Document::gotoNamedDest(CJS_Runtime* pRuntime,
15904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const std::vector<CJS_Value>& params,
15914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CJS_Value& vRet,
15924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             CFX_WideString& sError) {
15934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (params.size() != 1) {
15944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
15954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
15964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
15974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pFormFillEnv) {
15984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
15994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
16024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ByteString utf8Name = wideName.UTF8Encode();
16034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
16044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDocument)
16054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_NameTree nameTree(pDocument, "Dests");
16084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, utf8Name);
16094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!destArray)
16104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
16114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Dest dest(destArray);
16134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const CPDF_Array* arrayObject = ToArray(dest.GetObject());
16144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<float[]> scrollPositionArray;
16164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int scrollPositionArraySize = 0;
16174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (arrayObject) {
16194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    scrollPositionArray.reset(new float[arrayObject->GetCount()]);
16204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int j = 0;
16214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (size_t i = 2; i < arrayObject->GetCount(); i++)
16224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      scrollPositionArray[j++] = arrayObject->GetFloatAt(i);
16234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    scrollPositionArraySize = j;
16244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->BeginBlock();
16274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pFormFillEnv->DoGoToAction(dest.GetPageIndex(pDocument), dest.GetZoomMode(),
16284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               scrollPositionArray.get(),
16294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               scrollPositionArraySize);
16304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRuntime->EndBlock();
16314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
16334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::AddDelayData(CJS_DelayData* pData) {
16364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData));
16374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid Document::DoFieldDelay(const CFX_WideString& sFieldName,
16404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                            int nControlIndex) {
16414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex;
16424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  auto iter = m_DelayData.begin();
16434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (iter != m_DelayData.end()) {
16444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    auto old = iter++;
16454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if ((*old)->sFieldName == sFieldName &&
16464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        (*old)->nControlIndex == nControlIndex) {
16474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      DelayDataForFieldAndControlIndex.push_back(std::move(*old));
16484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_DelayData.erase(old);
16494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
16504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
16514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (const auto& pData : DelayDataForFieldAndControlIndex)
16534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Field::DoDelay(m_pFormFillEnv.Get(), pData.get());
16544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
16554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
16564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCJS_Document* Document::GetCJSDoc() const {
16574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return static_cast<CJS_Document*>(m_pJSObject);
16584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1659