Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / parser / xfa_script_signaturepseudomodel.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "../../../foxitlib.h"\r
8 #include "../common/xfa_utils.h"\r
9 #include "../common/xfa_object.h"\r
10 #include "../common/xfa_document.h"\r
11 #include "../common/xfa_parser.h"\r
12 #include "../common/xfa_script.h"\r
13 #include "../common/xfa_docdata.h"\r
14 #include "../common/xfa_doclayout.h"\r
15 #include "../common/xfa_debug.h"\r
16 #include "../common/xfa_localemgr.h"\r
17 #include "../common/xfa_fm2jsapi.h"\r
18 #include "xfa_debug_parser.h"\r
19 #include "xfa_script_signaturepseudomodel.h"\r
20 CScript_SignaturePseudoModel::CScript_SignaturePseudoModel(CXFA_Document* pDocument)\r
21     : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_SignaturePseudoModel)\r
22 {\r
23     m_uScriptHash = XFA_HASHCODE_Signature;\r
24 }\r
25 CScript_SignaturePseudoModel::~CScript_SignaturePseudoModel()\r
26 {\r
27 }\r
28 void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Verify(CFXJSE_Arguments* pArguments)\r
29 {\r
30     FX_INT32 iLength = pArguments->GetLength();\r
31     if (iLength < 1 || iLength > 4) {\r
32         ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"verify"));\r
33         return;\r
34     }\r
35     IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();\r
36     if (!pNotify) {\r
37         return;\r
38     }\r
39     XFA_HDOC hDoc = pNotify->GetHDOC();\r
40     CXFA_Node* pNode = NULL;\r
41     if (iLength >= 1) {\r
42         pNode = (CXFA_Node*)pArguments->GetObject(0);\r
43     }\r
44     FX_INT32 bVerify = pNotify->GetDocProvider()->Verify(hDoc, pNode);\r
45     FXJSE_HVALUE hValue = pArguments->GetReturnValue();\r
46     if (hValue) {\r
47         FXJSE_Value_SetInteger(hValue, bVerify);\r
48     }\r
49 }\r
50 void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Sign(CFXJSE_Arguments* pArguments)\r
51 {\r
52     FX_INT32 iLength = pArguments->GetLength();\r
53     if (iLength < 3 || iLength > 7) {\r
54         ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"sign"));\r
55         return;\r
56     }\r
57     IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();\r
58     if (!pNotify) {\r
59         return;\r
60     }\r
61     XFA_HDOC hDoc = pNotify->GetHDOC();\r
62     CXFA_NodeList* pNodeList = NULL;\r
63     CFX_WideString wsExpression;\r
64     CFX_WideString wsXMLIdent;\r
65     if (iLength >= 1) {\r
66         pNodeList = (CXFA_NodeList*)pArguments->GetObject(0);\r
67     }\r
68     if (iLength >= 2) {\r
69         CFX_ByteString bsExpression = pArguments->GetUTF8String(1);\r
70         wsExpression = CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength());\r
71     }\r
72     if (iLength >= 3) {\r
73         CFX_ByteString bsXMLIdent = pArguments->GetUTF8String(2);\r
74         wsXMLIdent = CFX_WideString::FromUTF8(bsXMLIdent, bsXMLIdent.GetLength());\r
75     }\r
76     FX_BOOL bSign = pNotify->GetDocProvider()->Sign(hDoc, pNodeList, wsExpression, wsXMLIdent);\r
77     FXJSE_HVALUE hValue = pArguments->GetReturnValue();\r
78     if (hValue) {\r
79         FXJSE_Value_SetBoolean(hValue, bSign);\r
80     }\r
81 }\r
82 void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Enumerate(CFXJSE_Arguments* pArguments)\r
83 {\r
84     FX_INT32 iLength = pArguments->GetLength();\r
85     if (iLength != 0) {\r
86         ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"enumerate"));\r
87         return;\r
88     }\r
89     IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();\r
90     if (!pNotify) {\r
91         return;\r
92     }\r
93     XFA_HDOC hDoc = pNotify->GetHDOC();\r
94     CXFA_NodeList *pList =  pNotify->GetDocProvider()->Enumerate(hDoc);\r
95     FXJSE_Value_Set(pArguments->GetReturnValue(), m_pDocument->GetScriptContext()->GetJSValueFromMap(pList));\r
96 }\r
97 void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Clear(CFXJSE_Arguments* pArguments)\r
98 {\r
99     FX_INT32 iLength = pArguments->GetLength();\r
100     if (iLength < 1 || iLength > 2) {\r
101         ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, (FX_LPCWSTR)(L"clear"));\r
102         return;\r
103     }\r
104     IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();\r
105     if (!pNotify) {\r
106         return;\r
107     }\r
108     XFA_HDOC hDoc = pNotify->GetHDOC();\r
109     CXFA_Node* pNode = NULL;\r
110     FX_BOOL bClear = TRUE;\r
111     if (iLength >= 1) {\r
112         pNode = (CXFA_Node*)pArguments->GetObject(0);\r
113     }\r
114     if (iLength >= 2) {\r
115         bClear = pArguments->GetInt32(1) == 0 ? FALSE : TRUE;\r
116     }\r
117     FX_BOOL bFlag = pNotify->GetDocProvider()->Clear(hDoc, pNode, bClear);\r
118     FXJSE_HVALUE hValue =  pArguments->GetReturnValue();\r
119     if (hValue) {\r
120         FXJSE_Value_SetBoolean(hValue, bFlag);\r
121     }\r
122 }\r