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