| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "fpdfsdk/fsdk_actionhandler.h" | 7 #include "fpdfsdk/fsdk_actionhandler.h" |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "core/fpdfapi/parser/cpdf_array.h" | 11 #include "core/fpdfapi/parser/cpdf_array.h" |
| 12 #include "core/fpdfdoc/cpdf_formfield.h" | 12 #include "core/fpdfdoc/cpdf_formfield.h" |
| 13 #include "core/fpdfdoc/cpdf_interform.h" | 13 #include "core/fpdfdoc/cpdf_interform.h" |
| 14 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" | 14 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" |
| 15 #include "fpdfsdk/cpdfsdk_interform.h" | 15 #include "fpdfsdk/cpdfsdk_interform.h" |
| 16 #include "fpdfsdk/fsdk_define.h" | 16 #include "fpdfsdk/fsdk_define.h" |
| 17 #include "fpdfsdk/javascript/ijs_context.h" | 17 #include "fpdfsdk/javascript/ijs_context.h" |
| 18 #include "fpdfsdk/javascript/ijs_runtime.h" | 18 #include "fpdfsdk/javascript/ijs_runtime.h" |
| 19 #include "third_party/base/stl_util.h" | 19 #include "third_party/base/stl_util.h" |
| 20 | 20 |
| 21 FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen( | 21 bool CPDFSDK_ActionHandler::DoAction_DocOpen( |
| 22 const CPDF_Action& action, | 22 const CPDF_Action& action, |
| 23 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 23 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 24 std::set<CPDF_Dictionary*> visited; | 24 std::set<CPDF_Dictionary*> visited; |
| 25 return ExecuteDocumentOpenAction(action, pFormFillEnv, &visited); | 25 return ExecuteDocumentOpenAction(action, pFormFillEnv, &visited); |
| 26 } | 26 } |
| 27 | 27 |
| 28 FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript( | 28 bool CPDFSDK_ActionHandler::DoAction_JavaScript( |
| 29 const CPDF_Action& JsAction, | 29 const CPDF_Action& JsAction, |
| 30 CFX_WideString csJSName, | 30 CFX_WideString csJSName, |
| 31 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 31 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 32 if (JsAction.GetType() == CPDF_Action::JavaScript) { | 32 if (JsAction.GetType() == CPDF_Action::JavaScript) { |
| 33 CFX_WideString swJS = JsAction.GetJavaScript(); | 33 CFX_WideString swJS = JsAction.GetJavaScript(); |
| 34 if (!swJS.IsEmpty()) { | 34 if (!swJS.IsEmpty()) { |
| 35 RunDocumentOpenJavaScript(pFormFillEnv, csJSName, swJS); | 35 RunDocumentOpenJavaScript(pFormFillEnv, csJSName, swJS); |
| 36 return TRUE; | 36 return true; |
| 37 } | 37 } |
| 38 } | 38 } |
| 39 | 39 |
| 40 return FALSE; | 40 return false; |
| 41 } | 41 } |
| 42 | 42 |
| 43 FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript( | 43 bool CPDFSDK_ActionHandler::DoAction_FieldJavaScript( |
| 44 const CPDF_Action& JsAction, | 44 const CPDF_Action& JsAction, |
| 45 CPDF_AAction::AActionType type, | 45 CPDF_AAction::AActionType type, |
| 46 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 46 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 47 CPDF_FormField* pFormField, | 47 CPDF_FormField* pFormField, |
| 48 PDFSDK_FieldAction& data) { | 48 PDFSDK_FieldAction& data) { |
| 49 ASSERT(pFormFillEnv); | 49 ASSERT(pFormFillEnv); |
| 50 if (pFormFillEnv->IsJSInitiated() && | 50 if (pFormFillEnv->IsJSInitiated() && |
| 51 JsAction.GetType() == CPDF_Action::JavaScript) { | 51 JsAction.GetType() == CPDF_Action::JavaScript) { |
| 52 CFX_WideString swJS = JsAction.GetJavaScript(); | 52 CFX_WideString swJS = JsAction.GetJavaScript(); |
| 53 if (!swJS.IsEmpty()) { | 53 if (!swJS.IsEmpty()) { |
| 54 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS); | 54 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS); |
| 55 return TRUE; | 55 return true; |
| 56 } | 56 } |
| 57 } | 57 } |
| 58 return FALSE; | 58 return false; |
| 59 } | 59 } |
| 60 | 60 |
| 61 FX_BOOL CPDFSDK_ActionHandler::DoAction_Page( | 61 bool CPDFSDK_ActionHandler::DoAction_Page( |
| 62 const CPDF_Action& action, | 62 const CPDF_Action& action, |
| 63 enum CPDF_AAction::AActionType eType, | 63 enum CPDF_AAction::AActionType eType, |
| 64 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 64 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 65 std::set<CPDF_Dictionary*> visited; | 65 std::set<CPDF_Dictionary*> visited; |
| 66 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited); | 66 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited); |
| 67 } | 67 } |
| 68 | 68 |
| 69 FX_BOOL CPDFSDK_ActionHandler::DoAction_Document( | 69 bool CPDFSDK_ActionHandler::DoAction_Document( |
| 70 const CPDF_Action& action, | 70 const CPDF_Action& action, |
| 71 enum CPDF_AAction::AActionType eType, | 71 enum CPDF_AAction::AActionType eType, |
| 72 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 72 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 73 std::set<CPDF_Dictionary*> visited; | 73 std::set<CPDF_Dictionary*> visited; |
| 74 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited); | 74 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited); |
| 75 } | 75 } |
| 76 | 76 |
| 77 FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark( | 77 bool CPDFSDK_ActionHandler::DoAction_BookMark( |
| 78 CPDF_Bookmark* pBookMark, | 78 CPDF_Bookmark* pBookMark, |
| 79 const CPDF_Action& action, | 79 const CPDF_Action& action, |
| 80 CPDF_AAction::AActionType type, | 80 CPDF_AAction::AActionType type, |
| 81 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 81 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 82 std::set<CPDF_Dictionary*> visited; | 82 std::set<CPDF_Dictionary*> visited; |
| 83 return ExecuteBookMark(action, pFormFillEnv, pBookMark, &visited); | 83 return ExecuteBookMark(action, pFormFillEnv, pBookMark, &visited); |
| 84 } | 84 } |
| 85 | 85 |
| 86 FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen( | 86 bool CPDFSDK_ActionHandler::DoAction_Screen( |
| 87 const CPDF_Action& action, | 87 const CPDF_Action& action, |
| 88 CPDF_AAction::AActionType type, | 88 CPDF_AAction::AActionType type, |
| 89 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 89 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 90 CPDFSDK_Annot* pScreen) { | 90 CPDFSDK_Annot* pScreen) { |
| 91 std::set<CPDF_Dictionary*> visited; | 91 std::set<CPDF_Dictionary*> visited; |
| 92 return ExecuteScreenAction(action, type, pFormFillEnv, pScreen, &visited); | 92 return ExecuteScreenAction(action, type, pFormFillEnv, pScreen, &visited); |
| 93 } | 93 } |
| 94 | 94 |
| 95 FX_BOOL CPDFSDK_ActionHandler::DoAction_Link( | 95 bool CPDFSDK_ActionHandler::DoAction_Link( |
| 96 const CPDF_Action& action, | 96 const CPDF_Action& action, |
| 97 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 97 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 98 std::set<CPDF_Dictionary*> visited; | 98 std::set<CPDF_Dictionary*> visited; |
| 99 return ExecuteLinkAction(action, pFormFillEnv, &visited); | 99 return ExecuteLinkAction(action, pFormFillEnv, &visited); |
| 100 } | 100 } |
| 101 | 101 |
| 102 FX_BOOL CPDFSDK_ActionHandler::DoAction_Field( | 102 bool CPDFSDK_ActionHandler::DoAction_Field( |
| 103 const CPDF_Action& action, | 103 const CPDF_Action& action, |
| 104 CPDF_AAction::AActionType type, | 104 CPDF_AAction::AActionType type, |
| 105 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 105 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 106 CPDF_FormField* pFormField, | 106 CPDF_FormField* pFormField, |
| 107 PDFSDK_FieldAction& data) { | 107 PDFSDK_FieldAction& data) { |
| 108 std::set<CPDF_Dictionary*> visited; | 108 std::set<CPDF_Dictionary*> visited; |
| 109 return ExecuteFieldAction(action, type, pFormFillEnv, pFormField, data, | 109 return ExecuteFieldAction(action, type, pFormFillEnv, pFormField, data, |
| 110 &visited); | 110 &visited); |
| 111 } | 111 } |
| 112 | 112 |
| 113 FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction( | 113 bool CPDFSDK_ActionHandler::ExecuteDocumentOpenAction( |
| 114 const CPDF_Action& action, | 114 const CPDF_Action& action, |
| 115 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 115 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 116 std::set<CPDF_Dictionary*>* visited) { | 116 std::set<CPDF_Dictionary*>* visited) { |
| 117 CPDF_Dictionary* pDict = action.GetDict(); | 117 CPDF_Dictionary* pDict = action.GetDict(); |
| 118 if (pdfium::ContainsKey(*visited, pDict)) | 118 if (pdfium::ContainsKey(*visited, pDict)) |
| 119 return FALSE; | 119 return false; |
| 120 | 120 |
| 121 visited->insert(pDict); | 121 visited->insert(pDict); |
| 122 | 122 |
| 123 ASSERT(pFormFillEnv); | 123 ASSERT(pFormFillEnv); |
| 124 if (action.GetType() == CPDF_Action::JavaScript) { | 124 if (action.GetType() == CPDF_Action::JavaScript) { |
| 125 if (pFormFillEnv->IsJSInitiated()) { | 125 if (pFormFillEnv->IsJSInitiated()) { |
| 126 CFX_WideString swJS = action.GetJavaScript(); | 126 CFX_WideString swJS = action.GetJavaScript(); |
| 127 if (!swJS.IsEmpty()) { | 127 if (!swJS.IsEmpty()) { |
| 128 RunDocumentOpenJavaScript(pFormFillEnv, L"", swJS); | 128 RunDocumentOpenJavaScript(pFormFillEnv, L"", swJS); |
| 129 } | 129 } |
| 130 } | 130 } |
| 131 } else { | 131 } else { |
| 132 DoAction_NoJs(action, pFormFillEnv); | 132 DoAction_NoJs(action, pFormFillEnv); |
| 133 } | 133 } |
| 134 | 134 |
| 135 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 135 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 136 CPDF_Action subaction = action.GetSubAction(i); | 136 CPDF_Action subaction = action.GetSubAction(i); |
| 137 if (!ExecuteDocumentOpenAction(subaction, pFormFillEnv, visited)) | 137 if (!ExecuteDocumentOpenAction(subaction, pFormFillEnv, visited)) |
| 138 return FALSE; | 138 return false; |
| 139 } | 139 } |
| 140 | 140 |
| 141 return TRUE; | 141 return true; |
| 142 } | 142 } |
| 143 | 143 |
| 144 FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction( | 144 bool CPDFSDK_ActionHandler::ExecuteLinkAction( |
| 145 const CPDF_Action& action, | 145 const CPDF_Action& action, |
| 146 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 146 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 147 std::set<CPDF_Dictionary*>* visited) { | 147 std::set<CPDF_Dictionary*>* visited) { |
| 148 CPDF_Dictionary* pDict = action.GetDict(); | 148 CPDF_Dictionary* pDict = action.GetDict(); |
| 149 if (pdfium::ContainsKey(*visited, pDict)) | 149 if (pdfium::ContainsKey(*visited, pDict)) |
| 150 return FALSE; | 150 return false; |
| 151 | 151 |
| 152 visited->insert(pDict); | 152 visited->insert(pDict); |
| 153 | 153 |
| 154 ASSERT(pFormFillEnv); | 154 ASSERT(pFormFillEnv); |
| 155 if (action.GetType() == CPDF_Action::JavaScript) { | 155 if (action.GetType() == CPDF_Action::JavaScript) { |
| 156 if (pFormFillEnv->IsJSInitiated()) { | 156 if (pFormFillEnv->IsJSInitiated()) { |
| 157 CFX_WideString swJS = action.GetJavaScript(); | 157 CFX_WideString swJS = action.GetJavaScript(); |
| 158 if (!swJS.IsEmpty()) { | 158 if (!swJS.IsEmpty()) { |
| 159 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); | 159 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); |
| 160 IJS_Context* pContext = pRuntime->NewContext(); | 160 IJS_Context* pContext = pRuntime->NewContext(); |
| 161 pContext->OnLink_MouseUp(pFormFillEnv); | 161 pContext->OnLink_MouseUp(pFormFillEnv); |
| 162 | 162 |
| 163 CFX_WideString csInfo; | 163 CFX_WideString csInfo; |
| 164 FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); | 164 bool bRet = pContext->RunScript(swJS, &csInfo); |
| 165 if (!bRet) { | 165 if (!bRet) { |
| 166 // FIXME: return error. | 166 // FIXME: return error. |
| 167 } | 167 } |
| 168 | 168 |
| 169 pRuntime->ReleaseContext(pContext); | 169 pRuntime->ReleaseContext(pContext); |
| 170 } | 170 } |
| 171 } | 171 } |
| 172 } else { | 172 } else { |
| 173 DoAction_NoJs(action, pFormFillEnv); | 173 DoAction_NoJs(action, pFormFillEnv); |
| 174 } | 174 } |
| 175 | 175 |
| 176 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 176 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 177 CPDF_Action subaction = action.GetSubAction(i); | 177 CPDF_Action subaction = action.GetSubAction(i); |
| 178 if (!ExecuteLinkAction(subaction, pFormFillEnv, visited)) | 178 if (!ExecuteLinkAction(subaction, pFormFillEnv, visited)) |
| 179 return FALSE; | 179 return false; |
| 180 } | 180 } |
| 181 | 181 |
| 182 return TRUE; | 182 return true; |
| 183 } | 183 } |
| 184 | 184 |
| 185 FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction( | 185 bool CPDFSDK_ActionHandler::ExecuteDocumentPageAction( |
| 186 const CPDF_Action& action, | 186 const CPDF_Action& action, |
| 187 CPDF_AAction::AActionType type, | 187 CPDF_AAction::AActionType type, |
| 188 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 188 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 189 std::set<CPDF_Dictionary*>* visited) { | 189 std::set<CPDF_Dictionary*>* visited) { |
| 190 CPDF_Dictionary* pDict = action.GetDict(); | 190 CPDF_Dictionary* pDict = action.GetDict(); |
| 191 if (pdfium::ContainsKey(*visited, pDict)) | 191 if (pdfium::ContainsKey(*visited, pDict)) |
| 192 return FALSE; | 192 return false; |
| 193 | 193 |
| 194 visited->insert(pDict); | 194 visited->insert(pDict); |
| 195 | 195 |
| 196 ASSERT(pFormFillEnv); | 196 ASSERT(pFormFillEnv); |
| 197 if (action.GetType() == CPDF_Action::JavaScript) { | 197 if (action.GetType() == CPDF_Action::JavaScript) { |
| 198 if (pFormFillEnv->IsJSInitiated()) { | 198 if (pFormFillEnv->IsJSInitiated()) { |
| 199 CFX_WideString swJS = action.GetJavaScript(); | 199 CFX_WideString swJS = action.GetJavaScript(); |
| 200 if (!swJS.IsEmpty()) { | 200 if (!swJS.IsEmpty()) { |
| 201 RunDocumentPageJavaScript(pFormFillEnv, type, swJS); | 201 RunDocumentPageJavaScript(pFormFillEnv, type, swJS); |
| 202 } | 202 } |
| 203 } | 203 } |
| 204 } else { | 204 } else { |
| 205 DoAction_NoJs(action, pFormFillEnv); | 205 DoAction_NoJs(action, pFormFillEnv); |
| 206 } | 206 } |
| 207 | 207 |
| 208 if (!IsValidDocView(pFormFillEnv)) | 208 if (!IsValidDocView(pFormFillEnv)) |
| 209 return FALSE; | 209 return false; |
| 210 | 210 |
| 211 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 211 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 212 CPDF_Action subaction = action.GetSubAction(i); | 212 CPDF_Action subaction = action.GetSubAction(i); |
| 213 if (!ExecuteDocumentPageAction(subaction, type, pFormFillEnv, visited)) | 213 if (!ExecuteDocumentPageAction(subaction, type, pFormFillEnv, visited)) |
| 214 return FALSE; | 214 return false; |
| 215 } | 215 } |
| 216 | 216 |
| 217 return TRUE; | 217 return true; |
| 218 } | 218 } |
| 219 | 219 |
| 220 FX_BOOL CPDFSDK_ActionHandler::IsValidField( | 220 bool CPDFSDK_ActionHandler::IsValidField( |
| 221 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 221 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 222 CPDF_Dictionary* pFieldDict) { | 222 CPDF_Dictionary* pFieldDict) { |
| 223 ASSERT(pFieldDict); | 223 ASSERT(pFieldDict); |
| 224 | 224 |
| 225 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); | 225 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); |
| 226 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); | 226 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); |
| 227 return !!pPDFInterForm->GetFieldByDict(pFieldDict); | 227 return !!pPDFInterForm->GetFieldByDict(pFieldDict); |
| 228 } | 228 } |
| 229 | 229 |
| 230 FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction( | 230 bool CPDFSDK_ActionHandler::ExecuteFieldAction( |
| 231 const CPDF_Action& action, | 231 const CPDF_Action& action, |
| 232 CPDF_AAction::AActionType type, | 232 CPDF_AAction::AActionType type, |
| 233 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 233 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 234 CPDF_FormField* pFormField, | 234 CPDF_FormField* pFormField, |
| 235 PDFSDK_FieldAction& data, | 235 PDFSDK_FieldAction& data, |
| 236 std::set<CPDF_Dictionary*>* visited) { | 236 std::set<CPDF_Dictionary*>* visited) { |
| 237 CPDF_Dictionary* pDict = action.GetDict(); | 237 CPDF_Dictionary* pDict = action.GetDict(); |
| 238 if (pdfium::ContainsKey(*visited, pDict)) | 238 if (pdfium::ContainsKey(*visited, pDict)) |
| 239 return FALSE; | 239 return false; |
| 240 | 240 |
| 241 visited->insert(pDict); | 241 visited->insert(pDict); |
| 242 | 242 |
| 243 ASSERT(pFormFillEnv); | 243 ASSERT(pFormFillEnv); |
| 244 if (action.GetType() == CPDF_Action::JavaScript) { | 244 if (action.GetType() == CPDF_Action::JavaScript) { |
| 245 if (pFormFillEnv->IsJSInitiated()) { | 245 if (pFormFillEnv->IsJSInitiated()) { |
| 246 CFX_WideString swJS = action.GetJavaScript(); | 246 CFX_WideString swJS = action.GetJavaScript(); |
| 247 if (!swJS.IsEmpty()) { | 247 if (!swJS.IsEmpty()) { |
| 248 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS); | 248 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS); |
| 249 if (!IsValidField(pFormFillEnv, pFormField->GetFieldDict())) | 249 if (!IsValidField(pFormFillEnv, pFormField->GetFieldDict())) |
| 250 return FALSE; | 250 return false; |
| 251 } | 251 } |
| 252 } | 252 } |
| 253 } else { | 253 } else { |
| 254 DoAction_NoJs(action, pFormFillEnv); | 254 DoAction_NoJs(action, pFormFillEnv); |
| 255 } | 255 } |
| 256 | 256 |
| 257 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 257 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 258 CPDF_Action subaction = action.GetSubAction(i); | 258 CPDF_Action subaction = action.GetSubAction(i); |
| 259 if (!ExecuteFieldAction(subaction, type, pFormFillEnv, pFormField, data, | 259 if (!ExecuteFieldAction(subaction, type, pFormFillEnv, pFormField, data, |
| 260 visited)) | 260 visited)) |
| 261 return FALSE; | 261 return false; |
| 262 } | 262 } |
| 263 | 263 |
| 264 return TRUE; | 264 return true; |
| 265 } | 265 } |
| 266 | 266 |
| 267 FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction( | 267 bool CPDFSDK_ActionHandler::ExecuteScreenAction( |
| 268 const CPDF_Action& action, | 268 const CPDF_Action& action, |
| 269 CPDF_AAction::AActionType type, | 269 CPDF_AAction::AActionType type, |
| 270 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 270 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 271 CPDFSDK_Annot* pScreen, | 271 CPDFSDK_Annot* pScreen, |
| 272 std::set<CPDF_Dictionary*>* visited) { | 272 std::set<CPDF_Dictionary*>* visited) { |
| 273 CPDF_Dictionary* pDict = action.GetDict(); | 273 CPDF_Dictionary* pDict = action.GetDict(); |
| 274 if (pdfium::ContainsKey(*visited, pDict)) | 274 if (pdfium::ContainsKey(*visited, pDict)) |
| 275 return FALSE; | 275 return false; |
| 276 | 276 |
| 277 visited->insert(pDict); | 277 visited->insert(pDict); |
| 278 | 278 |
| 279 ASSERT(pFormFillEnv); | 279 ASSERT(pFormFillEnv); |
| 280 if (action.GetType() == CPDF_Action::JavaScript) { | 280 if (action.GetType() == CPDF_Action::JavaScript) { |
| 281 if (pFormFillEnv->IsJSInitiated()) { | 281 if (pFormFillEnv->IsJSInitiated()) { |
| 282 CFX_WideString swJS = action.GetJavaScript(); | 282 CFX_WideString swJS = action.GetJavaScript(); |
| 283 if (!swJS.IsEmpty()) { | 283 if (!swJS.IsEmpty()) { |
| 284 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); | 284 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); |
| 285 IJS_Context* pContext = pRuntime->NewContext(); | 285 IJS_Context* pContext = pRuntime->NewContext(); |
| 286 CFX_WideString csInfo; | 286 CFX_WideString csInfo; |
| 287 FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); | 287 bool bRet = pContext->RunScript(swJS, &csInfo); |
| 288 if (!bRet) { | 288 if (!bRet) { |
| 289 // FIXME: return error. | 289 // FIXME: return error. |
| 290 } | 290 } |
| 291 | 291 |
| 292 pRuntime->ReleaseContext(pContext); | 292 pRuntime->ReleaseContext(pContext); |
| 293 } | 293 } |
| 294 } | 294 } |
| 295 } else { | 295 } else { |
| 296 DoAction_NoJs(action, pFormFillEnv); | 296 DoAction_NoJs(action, pFormFillEnv); |
| 297 } | 297 } |
| 298 | 298 |
| 299 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 299 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 300 CPDF_Action subaction = action.GetSubAction(i); | 300 CPDF_Action subaction = action.GetSubAction(i); |
| 301 if (!ExecuteScreenAction(subaction, type, pFormFillEnv, pScreen, visited)) | 301 if (!ExecuteScreenAction(subaction, type, pFormFillEnv, pScreen, visited)) |
| 302 return FALSE; | 302 return false; |
| 303 } | 303 } |
| 304 | 304 |
| 305 return TRUE; | 305 return true; |
| 306 } | 306 } |
| 307 | 307 |
| 308 FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark( | 308 bool CPDFSDK_ActionHandler::ExecuteBookMark( |
| 309 const CPDF_Action& action, | 309 const CPDF_Action& action, |
| 310 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 310 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 311 CPDF_Bookmark* pBookmark, | 311 CPDF_Bookmark* pBookmark, |
| 312 std::set<CPDF_Dictionary*>* visited) { | 312 std::set<CPDF_Dictionary*>* visited) { |
| 313 CPDF_Dictionary* pDict = action.GetDict(); | 313 CPDF_Dictionary* pDict = action.GetDict(); |
| 314 if (pdfium::ContainsKey(*visited, pDict)) | 314 if (pdfium::ContainsKey(*visited, pDict)) |
| 315 return FALSE; | 315 return false; |
| 316 | 316 |
| 317 visited->insert(pDict); | 317 visited->insert(pDict); |
| 318 | 318 |
| 319 ASSERT(pFormFillEnv); | 319 ASSERT(pFormFillEnv); |
| 320 if (action.GetType() == CPDF_Action::JavaScript) { | 320 if (action.GetType() == CPDF_Action::JavaScript) { |
| 321 if (pFormFillEnv->IsJSInitiated()) { | 321 if (pFormFillEnv->IsJSInitiated()) { |
| 322 CFX_WideString swJS = action.GetJavaScript(); | 322 CFX_WideString swJS = action.GetJavaScript(); |
| 323 if (!swJS.IsEmpty()) { | 323 if (!swJS.IsEmpty()) { |
| 324 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); | 324 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); |
| 325 IJS_Context* pContext = pRuntime->NewContext(); | 325 IJS_Context* pContext = pRuntime->NewContext(); |
| 326 pContext->OnBookmark_MouseUp(pBookmark); | 326 pContext->OnBookmark_MouseUp(pBookmark); |
| 327 | 327 |
| 328 CFX_WideString csInfo; | 328 CFX_WideString csInfo; |
| 329 FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); | 329 bool bRet = pContext->RunScript(swJS, &csInfo); |
| 330 if (!bRet) { | 330 if (!bRet) { |
| 331 // FIXME: return error. | 331 // FIXME: return error. |
| 332 } | 332 } |
| 333 | 333 |
| 334 pRuntime->ReleaseContext(pContext); | 334 pRuntime->ReleaseContext(pContext); |
| 335 } | 335 } |
| 336 } | 336 } |
| 337 } else { | 337 } else { |
| 338 DoAction_NoJs(action, pFormFillEnv); | 338 DoAction_NoJs(action, pFormFillEnv); |
| 339 } | 339 } |
| 340 | 340 |
| 341 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { | 341 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { |
| 342 CPDF_Action subaction = action.GetSubAction(i); | 342 CPDF_Action subaction = action.GetSubAction(i); |
| 343 if (!ExecuteBookMark(subaction, pFormFillEnv, pBookmark, visited)) | 343 if (!ExecuteBookMark(subaction, pFormFillEnv, pBookmark, visited)) |
| 344 return FALSE; | 344 return false; |
| 345 } | 345 } |
| 346 | 346 |
| 347 return TRUE; | 347 return true; |
| 348 } | 348 } |
| 349 | 349 |
| 350 void CPDFSDK_ActionHandler::DoAction_NoJs( | 350 void CPDFSDK_ActionHandler::DoAction_NoJs( |
| 351 const CPDF_Action& action, | 351 const CPDF_Action& action, |
| 352 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 352 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 353 ASSERT(pFormFillEnv); | 353 ASSERT(pFormFillEnv); |
| 354 | 354 |
| 355 switch (action.GetType()) { | 355 switch (action.GetType()) { |
| 356 case CPDF_Action::GoTo: | 356 case CPDF_Action::GoTo: |
| 357 DoAction_GoTo(pFormFillEnv, action); | 357 DoAction_GoTo(pFormFillEnv, action); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 382 case CPDF_Action::SubmitForm: | 382 case CPDF_Action::SubmitForm: |
| 383 DoAction_SubmitForm(action, pFormFillEnv); | 383 DoAction_SubmitForm(action, pFormFillEnv); |
| 384 break; | 384 break; |
| 385 case CPDF_Action::ResetForm: | 385 case CPDF_Action::ResetForm: |
| 386 DoAction_ResetForm(action, pFormFillEnv); | 386 DoAction_ResetForm(action, pFormFillEnv); |
| 387 break; | 387 break; |
| 388 case CPDF_Action::ImportData: | 388 case CPDF_Action::ImportData: |
| 389 DoAction_ImportData(action, pFormFillEnv); | 389 DoAction_ImportData(action, pFormFillEnv); |
| 390 break; | 390 break; |
| 391 case CPDF_Action::JavaScript: | 391 case CPDF_Action::JavaScript: |
| 392 ASSERT(FALSE); | 392 ASSERT(false); |
| 393 break; | 393 break; |
| 394 case CPDF_Action::SetOCGState: | 394 case CPDF_Action::SetOCGState: |
| 395 DoAction_SetOCGState(pFormFillEnv, action); | 395 DoAction_SetOCGState(pFormFillEnv, action); |
| 396 break; | 396 break; |
| 397 case CPDF_Action::Rendition: | 397 case CPDF_Action::Rendition: |
| 398 break; | 398 break; |
| 399 case CPDF_Action::Trans: | 399 case CPDF_Action::Trans: |
| 400 break; | 400 break; |
| 401 case CPDF_Action::GoTo3DView: | 401 case CPDF_Action::GoTo3DView: |
| 402 break; | 402 break; |
| 403 default: | 403 default: |
| 404 break; | 404 break; |
| 405 } | 405 } |
| 406 } | 406 } |
| 407 | 407 |
| 408 FX_BOOL CPDFSDK_ActionHandler::IsValidDocView( | 408 bool CPDFSDK_ActionHandler::IsValidDocView( |
| 409 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 409 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 410 ASSERT(pFormFillEnv); | 410 ASSERT(pFormFillEnv); |
| 411 return TRUE; | 411 return true; |
| 412 } | 412 } |
| 413 | 413 |
| 414 void CPDFSDK_ActionHandler::DoAction_GoTo( | 414 void CPDFSDK_ActionHandler::DoAction_GoTo( |
| 415 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 415 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 416 const CPDF_Action& action) { | 416 const CPDF_Action& action) { |
| 417 ASSERT(action.GetDict()); | 417 ASSERT(action.GetDict()); |
| 418 | 418 |
| 419 CPDF_Document* pPDFDocument = pFormFillEnv->GetPDFDocument(); | 419 CPDF_Document* pPDFDocument = pFormFillEnv->GetPDFDocument(); |
| 420 ASSERT(pPDFDocument); | 420 ASSERT(pPDFDocument); |
| 421 | 421 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 data.bModifier, data.nSelEnd, data.nSelStart, | 505 data.bModifier, data.nSelEnd, data.nSelStart, |
| 506 data.bShift, pFormField, data.sValue, | 506 data.bShift, pFormField, data.sValue, |
| 507 data.bWillCommit, data.bFieldFull, data.bRC); | 507 data.bWillCommit, data.bFieldFull, data.bRC); |
| 508 break; | 508 break; |
| 509 case CPDF_AAction::Validate: | 509 case CPDF_AAction::Validate: |
| 510 pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, | 510 pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, |
| 511 data.bModifier, data.bShift, pFormField, | 511 data.bModifier, data.bShift, pFormField, |
| 512 data.sValue, data.bRC); | 512 data.sValue, data.bRC); |
| 513 break; | 513 break; |
| 514 default: | 514 default: |
| 515 ASSERT(FALSE); | 515 ASSERT(false); |
| 516 break; | 516 break; |
| 517 } | 517 } |
| 518 | 518 |
| 519 CFX_WideString csInfo; | 519 CFX_WideString csInfo; |
| 520 FX_BOOL bRet = pContext->RunScript(script, &csInfo); | 520 bool bRet = pContext->RunScript(script, &csInfo); |
| 521 if (!bRet) { | 521 if (!bRet) { |
| 522 // FIXME: return error. | 522 // FIXME: return error. |
| 523 } | 523 } |
| 524 | 524 |
| 525 pRuntime->ReleaseContext(pContext); | 525 pRuntime->ReleaseContext(pContext); |
| 526 } | 526 } |
| 527 | 527 |
| 528 void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript( | 528 void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript( |
| 529 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 529 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 530 const CFX_WideString& sScriptName, | 530 const CFX_WideString& sScriptName, |
| 531 const CFX_WideString& script) { | 531 const CFX_WideString& script) { |
| 532 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); | 532 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime(); |
| 533 IJS_Context* pContext = pRuntime->NewContext(); | 533 IJS_Context* pContext = pRuntime->NewContext(); |
| 534 pContext->OnDoc_Open(pFormFillEnv, sScriptName); | 534 pContext->OnDoc_Open(pFormFillEnv, sScriptName); |
| 535 | 535 |
| 536 CFX_WideString csInfo; | 536 CFX_WideString csInfo; |
| 537 FX_BOOL bRet = pContext->RunScript(script, &csInfo); | 537 bool bRet = pContext->RunScript(script, &csInfo); |
| 538 if (!bRet) { | 538 if (!bRet) { |
| 539 // FIXME: return error. | 539 // FIXME: return error. |
| 540 } | 540 } |
| 541 | 541 |
| 542 pRuntime->ReleaseContext(pContext); | 542 pRuntime->ReleaseContext(pContext); |
| 543 } | 543 } |
| 544 | 544 |
| 545 void CPDFSDK_ActionHandler::RunDocumentPageJavaScript( | 545 void CPDFSDK_ActionHandler::RunDocumentPageJavaScript( |
| 546 CPDFSDK_FormFillEnvironment* pFormFillEnv, | 546 CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 547 CPDF_AAction::AActionType type, | 547 CPDF_AAction::AActionType type, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 570 case CPDF_AAction::DocumentPrinted: | 570 case CPDF_AAction::DocumentPrinted: |
| 571 pContext->OnDoc_DidPrint(pFormFillEnv); | 571 pContext->OnDoc_DidPrint(pFormFillEnv); |
| 572 break; | 572 break; |
| 573 case CPDF_AAction::PageVisible: | 573 case CPDF_AAction::PageVisible: |
| 574 pContext->OnPage_InView(pFormFillEnv); | 574 pContext->OnPage_InView(pFormFillEnv); |
| 575 break; | 575 break; |
| 576 case CPDF_AAction::PageInvisible: | 576 case CPDF_AAction::PageInvisible: |
| 577 pContext->OnPage_OutView(pFormFillEnv); | 577 pContext->OnPage_OutView(pFormFillEnv); |
| 578 break; | 578 break; |
| 579 default: | 579 default: |
| 580 ASSERT(FALSE); | 580 ASSERT(false); |
| 581 break; | 581 break; |
| 582 } | 582 } |
| 583 | 583 |
| 584 CFX_WideString csInfo; | 584 CFX_WideString csInfo; |
| 585 FX_BOOL bRet = pContext->RunScript(script, &csInfo); | 585 bool bRet = pContext->RunScript(script, &csInfo); |
| 586 if (!bRet) { | 586 if (!bRet) { |
| 587 // FIXME: return error. | 587 // FIXME: return error. |
| 588 } | 588 } |
| 589 | 589 |
| 590 pRuntime->ReleaseContext(pContext); | 590 pRuntime->ReleaseContext(pContext); |
| 591 } | 591 } |
| 592 | 592 |
| 593 FX_BOOL CPDFSDK_ActionHandler::DoAction_Hide( | 593 bool CPDFSDK_ActionHandler::DoAction_Hide( |
| 594 const CPDF_Action& action, | 594 const CPDF_Action& action, |
| 595 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 595 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 596 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); | 596 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); |
| 597 if (pInterForm->DoAction_Hide(action)) { | 597 if (pInterForm->DoAction_Hide(action)) { |
| 598 pFormFillEnv->SetChangeMark(); | 598 pFormFillEnv->SetChangeMark(); |
| 599 return TRUE; | 599 return true; |
| 600 } | 600 } |
| 601 | 601 |
| 602 return FALSE; | 602 return false; |
| 603 } | 603 } |
| 604 | 604 |
| 605 FX_BOOL CPDFSDK_ActionHandler::DoAction_SubmitForm( | 605 bool CPDFSDK_ActionHandler::DoAction_SubmitForm( |
| 606 const CPDF_Action& action, | 606 const CPDF_Action& action, |
| 607 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 607 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 608 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); | 608 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); |
| 609 return pInterForm->DoAction_SubmitForm(action); | 609 return pInterForm->DoAction_SubmitForm(action); |
| 610 } | 610 } |
| 611 | 611 |
| 612 FX_BOOL CPDFSDK_ActionHandler::DoAction_ResetForm( | 612 bool CPDFSDK_ActionHandler::DoAction_ResetForm( |
| 613 const CPDF_Action& action, | 613 const CPDF_Action& action, |
| 614 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 614 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 615 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); | 615 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); |
| 616 return pInterForm->DoAction_ResetForm(action); | 616 return pInterForm->DoAction_ResetForm(action); |
| 617 } | 617 } |
| 618 | 618 |
| 619 FX_BOOL CPDFSDK_ActionHandler::DoAction_ImportData( | 619 bool CPDFSDK_ActionHandler::DoAction_ImportData( |
| 620 const CPDF_Action& action, | 620 const CPDF_Action& action, |
| 621 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | 621 CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 622 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); | 622 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); |
| 623 if (pInterForm->DoAction_ImportData(action)) { | 623 if (pInterForm->DoAction_ImportData(action)) { |
| 624 pFormFillEnv->SetChangeMark(); | 624 pFormFillEnv->SetChangeMark(); |
| 625 return TRUE; | 625 return true; |
| 626 } | 626 } |
| 627 | 627 |
| 628 return FALSE; | 628 return false; |
| 629 } | 629 } |
| OLD | NEW |