1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/fxfa/xfa_ffdochandler.h"
8
9 #include "xfa/fxfa/parser/cxfa_scriptcontext.h"
10 #include "xfa/fxfa/parser/xfa_resolvenode_rs.h"
11 #include "xfa/fxfa/xfa_checksum.h"
12 #include "xfa/fxfa/xfa_ffdoc.h"
13
CXFA_FFDocHandler()14 CXFA_FFDocHandler::CXFA_FFDocHandler() {}
15
~CXFA_FFDocHandler()16 CXFA_FFDocHandler::~CXFA_FFDocHandler() {}
17
GetXFAScriptObject(CXFA_FFDoc * hDoc)18 CFXJSE_Value* CXFA_FFDocHandler::GetXFAScriptObject(CXFA_FFDoc* hDoc) {
19 CXFA_Document* pXFADoc = hDoc->GetXFADoc();
20 if (!pXFADoc)
21 return nullptr;
22
23 CXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
24 if (!pScriptContext)
25 return nullptr;
26 return pScriptContext->GetJSValueFromMap(pXFADoc->GetRoot());
27 }
28
GetRestoreState(CXFA_FFDoc * hDoc)29 XFA_ATTRIBUTEENUM CXFA_FFDocHandler::GetRestoreState(CXFA_FFDoc* hDoc) {
30 CXFA_Document* pXFADoc = hDoc->GetXFADoc();
31 if (!pXFADoc)
32 return XFA_ATTRIBUTEENUM_Unknown;
33
34 CXFA_Node* pForm = ToNode(pXFADoc->GetXFAObject(XFA_HASHCODE_Form));
35 if (!pForm)
36 return XFA_ATTRIBUTEENUM_Unknown;
37
38 CXFA_Node* pSubForm = pForm->GetFirstChildByClass(XFA_Element::Subform);
39 if (!pSubForm)
40 return XFA_ATTRIBUTEENUM_Unknown;
41 return pSubForm->GetEnum(XFA_ATTRIBUTE_RestoreState);
42 }
43
RunDocScript(CXFA_FFDoc * hDoc,XFA_SCRIPTTYPE eScriptType,const CFX_WideStringC & wsScript,CFXJSE_Value * pRetValue,CFXJSE_Value * pThisValue)44 bool CXFA_FFDocHandler::RunDocScript(CXFA_FFDoc* hDoc,
45 XFA_SCRIPTTYPE eScriptType,
46 const CFX_WideStringC& wsScript,
47 CFXJSE_Value* pRetValue,
48 CFXJSE_Value* pThisValue) {
49 CXFA_Document* pXFADoc = hDoc->GetXFADoc();
50 if (!pXFADoc)
51 return false;
52
53 CXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
54 if (!pScriptContext)
55 return false;
56
57 return pScriptContext->RunScript(
58 (XFA_SCRIPTLANGTYPE)eScriptType, wsScript, pRetValue,
59 pThisValue ? CXFA_ScriptContext::ToObject(pThisValue, nullptr) : nullptr);
60 }
61