Home | History | Annotate | Download | only in app
      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 
     14 CXFA_FFDocHandler::CXFA_FFDocHandler() {}
     15 
     16 CXFA_FFDocHandler::~CXFA_FFDocHandler() {}
     17 
     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 
     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 
     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