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