1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_common.h" 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdochandler.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdoc.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDocHandler::CXFA_FFDocHandler() {} 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFDocHandler::~CXFA_FFDocHandler() {} 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDocHandler::ReleaseDoc(IXFA_Doc* hDoc) { 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete hDoc; // virtual dtor. 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_DocProvider* CXFA_FFDocHandler::GetDocProvider(IXFA_Doc* hDoc) { 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->GetDocProvider(); 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CXFA_FFDocHandler::GetDocType(IXFA_Doc* hDoc) { 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->GetDocType(); 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFDocHandler::StartLoad(IXFA_Doc* hDoc) { 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->StartLoad(); 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFDocHandler::DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause) { 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->DoLoad(pPause); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDocHandler::StopLoad(IXFA_Doc* hDoc) { 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static_cast<CXFA_FFDoc*>(hDoc)->StopLoad(); 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_DocView* CXFA_FFDocHandler::CreateDocView(IXFA_Doc* hDoc, 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwView) { 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->CreateDocView(dwView); 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFDocHandler::CountPackages(IXFA_Doc* hDoc) { 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDocHandler::GetPackageName(IXFA_Doc* hDoc, 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iPackage, 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideStringC& wsPackage) {} 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFDE_XMLElement* CXFA_FFDocHandler::GetPackageData( 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_Doc* hDoc, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_WideStringC& wsPackage) { 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->GetPackageData(wsPackage); 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDocHandler::SavePackage(IXFA_Doc* hDoc, 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_WideStringC& wsPackage, 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileWrite* pFile, 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_ChecksumContext* pCSContext) { 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc) 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ->SavePackage(wsPackage, pFile, pCSContext); 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDocHandler::CloseDoc(IXFA_Doc* hDoc) { 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->CloseDoc(); 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDocHandler::ImportData(IXFA_Doc* hDoc, 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileRead* pStream, 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bXDP) { 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<CXFA_FFDoc*>(hDoc)->ImportData(pStream, bXDP); 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFDocHandler::SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime) { 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc()->InitScriptContext(hRuntime); 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFXJSE_HVALUE CXFA_FFDocHandler::GetXFAScriptObject(IXFA_Doc* hDoc) { 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc(); 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFADoc) { 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext(); 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pScriptContext) { 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pScriptContext->GetJSValueFromMap(pXFADoc->GetRoot()); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannXFA_ATTRIBUTEENUM CXFA_FFDocHandler::GetRestoreState(IXFA_Doc* hDoc) { 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc(); 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFADoc) { 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_ATTRIBUTEENUM_Unknown; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pForm = (CXFA_Node*)pXFADoc->GetXFANode(XFA_HASHCODE_Form); 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pForm) { 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_ATTRIBUTEENUM_Unknown; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Node* pSubForm = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform); 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pSubForm) { 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return XFA_ATTRIBUTEENUM_Unknown; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pSubForm->GetEnum(XFA_ATTRIBUTE_RestoreState); 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFDocHandler::RunDocScript(IXFA_Doc* hDoc, 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann XFA_SCRIPTTYPE eScriptType, 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_WideStringC& wsScript, 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HVALUE hRetValue, 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXJSE_HVALUE hThisObject) { 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc(); 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXFADoc) { 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext(); 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pScriptContext) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pScriptContext->RunScript( 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (XFA_SCRIPTLANGTYPE)eScriptType, wsScript, hRetValue, 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann hThisObject ? (CXFA_Object*)FXJSE_Value_ToObject(hThisObject, NULL) 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : NULL); 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 110