bool CPDFSDK_ActionHandler::ExecuteDocumentPageAction( const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_FormFillEnvironment* pFormFillEnv, std::set<CPDF_Dictionary*>* visited) { CPDF_Dictionary* pDict = action.GetDict(); if (pdfium::ContainsKey(*visited, pDict)) return false; visited->insert(pDict); ASSERT(pFormFillEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pFormFillEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { RunDocumentPageJavaScript(pFormFillEnv, type, swJS); } } } else { DoAction_NoJs(action, pFormFillEnv); } if (!IsValidDocView(pFormFillEnv)) return false; for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteDocumentPageAction(subaction, type, pFormFillEnv, visited)) return false; } return true; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CFX_PtrList& list) { ASSERT(pDocument != NULL); if (list.Find((CPDF_Dictionary*)action)) return FALSE; list.AddTail((CPDF_Dictionary*)action); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if(pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { RunDocumentPageJavaScript(pDocument, type, swJS); } } } else { DoAction_NoJs(action, pDocument/*, pDocView*/); } if (!IsValidDocView(pDocument/*, pDocView*/)) return FALSE; for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteDocumentPageAction(subaction, type, pDocument,/* pDocView,*/ list)) return FALSE; } return TRUE; }