Remove CPDFSDK_ActionHandler.
It adds nothing beyond CPDFSDK_FormFillEnvironment.
Bug: pdfium:1795
Change-Id: I38b282dc768661b51f985c1b1fdeea0fb4096eb8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92391
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 67eb7fa..1f75bef 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -7,8 +7,6 @@
source_set("fpdfsdk") {
sources = [
- "cpdfsdk_actionhandler.cpp",
- "cpdfsdk_actionhandler.h",
"cpdfsdk_annot.cpp",
"cpdfsdk_annot.h",
"cpdfsdk_annotiteration.cpp",
diff --git a/fpdfsdk/cpdfsdk_actionhandler.cpp b/fpdfsdk/cpdfsdk_actionhandler.cpp
deleted file mode 100644
index 3ed76ff..0000000
--- a/fpdfsdk/cpdfsdk_actionhandler.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
-
-#include <set>
-#include <vector>
-
-#include "core/fpdfapi/parser/cpdf_array.h"
-#include "core/fpdfdoc/cpdf_formfield.h"
-#include "core/fpdfdoc/cpdf_interactiveform.h"
-#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
-#include "fpdfsdk/cpdfsdk_interactiveform.h"
-#include "fxjs/ijs_event_context.h"
-#include "fxjs/ijs_runtime.h"
-#include "third_party/base/check.h"
-#include "third_party/base/containers/contains.h"
-#include "third_party/base/notreached.h"
-
-bool CPDFSDK_ActionHandler::DoAction_DocOpen(
- const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- std::set<const CPDF_Dictionary*> visited;
- return ExecuteDocumentOpenAction(action, pFormFillEnv, &visited);
-}
-
-bool CPDFSDK_ActionHandler::DoAction_JavaScript(
- const CPDF_Action& JsAction,
- WideString csJSName,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- if (JsAction.GetType() == CPDF_Action::Type::kJavaScript) {
- WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunDocumentOpenJavaScript(pFormFillEnv, csJSName, swJS);
- return true;
- }
- }
-
- return false;
-}
-
-bool CPDFSDK_ActionHandler::DoAction_FieldJavaScript(
- const CPDF_Action& JsAction,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data) {
- DCHECK(pFormFillEnv);
- if (pFormFillEnv->IsJSPlatformPresent() &&
- JsAction.GetType() == CPDF_Action::Type::kJavaScript) {
- WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
- return true;
- }
- }
- return false;
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Link(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* form_fill_env,
- Mask<FWL_EVENTFLAG> modifiers) {
- DCHECK(form_fill_env);
-
- if (!CPDF_AAction::IsUserInput(type))
- return false;
-
- switch (action.GetType()) {
- case CPDF_Action::Type::kGoTo:
- DoAction_GoTo(form_fill_env, action);
- return true;
- case CPDF_Action::Type::kURI:
- DoAction_URI(form_fill_env, action, modifiers);
- return true;
- default:
- return false;
- }
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Destination(
- const CPDF_Dest& dest,
- CPDFSDK_FormFillEnvironment* form_fill_env) {
- DCHECK(form_fill_env);
- CPDF_Document* document = form_fill_env->GetPDFDocument();
- DCHECK(document);
-
- const CPDF_Array* dest_array = dest.GetArray();
- std::vector<float> dest_positions;
- // |dest_array| index 0 contains destination page details and index 1 contains
- // parameter that explains about the rest of |dest_array|.
- if (dest_array) {
- for (size_t i = 2; i < dest_array->size(); i++)
- dest_positions.push_back(dest_array->GetNumberAt(i));
- }
-
- form_fill_env->DoGoToAction(dest.GetDestPageIndex(document),
- dest.GetZoomMode(), dest_positions);
- return true;
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Page(
- const CPDF_Action& action,
- CPDF_AAction::AActionType eType,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- std::set<const CPDF_Dictionary*> visited;
- return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited);
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Document(
- const CPDF_Action& action,
- CPDF_AAction::AActionType eType,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- std::set<const CPDF_Dictionary*> visited;
- return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited);
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Field(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data) {
- std::set<const CPDF_Dictionary*> visited;
- return ExecuteFieldAction(action, type, pFormFillEnv, pFormField, data,
- &visited);
-}
-
-bool CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(
- const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- std::set<const CPDF_Dictionary*>* visited) {
- const CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::Contains(*visited, pDict))
- return false;
-
- visited->insert(pDict);
-
- DCHECK(pFormFillEnv);
- if (action.GetType() == CPDF_Action::Type::kJavaScript) {
- if (pFormFillEnv->IsJSPlatformPresent()) {
- WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- RunDocumentOpenJavaScript(pFormFillEnv, WideString(), swJS);
- }
- } else {
- DoAction_NoJs(action, CPDF_AAction::AActionType::kDocumentOpen,
- pFormFillEnv);
- }
-
- for (size_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteDocumentOpenAction(subaction, pFormFillEnv, visited))
- return false;
- }
-
- return true;
-}
-
-bool CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- std::set<const CPDF_Dictionary*>* visited) {
- const CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::Contains(*visited, pDict))
- return false;
-
- visited->insert(pDict);
-
- DCHECK(pFormFillEnv);
- if (action.GetType() == CPDF_Action::Type::kJavaScript) {
- if (pFormFillEnv->IsJSPlatformPresent()) {
- WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- RunDocumentPageJavaScript(pFormFillEnv, type, swJS);
- }
- } else {
- DoAction_NoJs(action, type, pFormFillEnv);
- }
-
- DCHECK(pFormFillEnv);
-
- for (size_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;
-}
-
-bool CPDFSDK_ActionHandler::IsValidField(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_Dictionary* pFieldDict) {
- DCHECK(pFieldDict);
-
- CPDFSDK_InteractiveForm* pForm = pFormFillEnv->GetInteractiveForm();
- CPDF_InteractiveForm* pPDFForm = pForm->GetInteractiveForm();
- return !!pPDFForm->GetFieldByDict(pFieldDict);
-}
-
-bool CPDFSDK_ActionHandler::ExecuteFieldAction(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data,
- std::set<const CPDF_Dictionary*>* visited) {
- const CPDF_Dictionary* pDict = action.GetDict();
- if (pdfium::Contains(*visited, pDict))
- return false;
-
- visited->insert(pDict);
-
- DCHECK(pFormFillEnv);
- if (action.GetType() == CPDF_Action::Type::kJavaScript) {
- if (pFormFillEnv->IsJSPlatformPresent()) {
- WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty()) {
- RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
- if (!IsValidField(pFormFillEnv, pFormField->GetFieldDict()))
- return false;
- }
- }
- } else {
- DoAction_NoJs(action, type, pFormFillEnv);
- }
-
- for (size_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteFieldAction(subaction, type, pFormFillEnv, pFormField, data,
- visited))
- return false;
- }
-
- return true;
-}
-
-void CPDFSDK_ActionHandler::DoAction_NoJs(
- const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- DCHECK(pFormFillEnv);
-
- switch (action.GetType()) {
- case CPDF_Action::Type::kGoTo:
- DoAction_GoTo(pFormFillEnv, action);
- break;
- case CPDF_Action::Type::kURI:
- if (CPDF_AAction::IsUserInput(type))
- DoAction_URI(pFormFillEnv, action, Mask<FWL_EVENTFLAG>{});
- break;
- case CPDF_Action::Type::kHide:
- DoAction_Hide(action, pFormFillEnv);
- break;
- case CPDF_Action::Type::kNamed:
- DoAction_Named(pFormFillEnv, action);
- break;
- case CPDF_Action::Type::kSubmitForm:
- if (CPDF_AAction::IsUserInput(type))
- DoAction_SubmitForm(action, pFormFillEnv);
- break;
- case CPDF_Action::Type::kResetForm:
- DoAction_ResetForm(action, pFormFillEnv);
- break;
- case CPDF_Action::Type::kJavaScript:
- NOTREACHED();
- break;
- case CPDF_Action::Type::kSetOCGState:
- case CPDF_Action::Type::kThread:
- case CPDF_Action::Type::kSound:
- case CPDF_Action::Type::kMovie:
- case CPDF_Action::Type::kRendition:
- case CPDF_Action::Type::kTrans:
- case CPDF_Action::Type::kGoTo3DView:
- case CPDF_Action::Type::kGoToR:
- case CPDF_Action::Type::kGoToE:
- case CPDF_Action::Type::kLaunch:
- case CPDF_Action::Type::kImportData:
- // Unimplemented
- break;
- default:
- break;
- }
-}
-
-void CPDFSDK_ActionHandler::DoAction_GoTo(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action) {
- DCHECK(action.GetDict());
-
- CPDF_Document* pPDFDocument = pFormFillEnv->GetPDFDocument();
- DCHECK(pPDFDocument);
-
- CPDF_Dest MyDest = action.GetDest(pPDFDocument);
- DoAction_Destination(MyDest, pFormFillEnv);
-}
-
-void CPDFSDK_ActionHandler::DoAction_URI(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action,
- Mask<FWL_EVENTFLAG> modifiers) {
- DCHECK(action.GetDict());
- pFormFillEnv->DoURIAction(action.GetURI(pFormFillEnv->GetPDFDocument()),
- modifiers);
-}
-
-void CPDFSDK_ActionHandler::DoAction_Named(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action) {
- DCHECK(action.GetDict());
- pFormFillEnv->ExecuteNamedAction(action.GetNamedAction());
-}
-
-void CPDFSDK_ActionHandler::RunFieldJavaScript(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CPDF_AAction::AActionType type,
- CFFL_FieldAction* data,
- const WideString& script) {
- DCHECK(type != CPDF_AAction::kCalculate);
- DCHECK(type != CPDF_AAction::kFormat);
-
- RunScript(pFormFillEnv, script,
- [type, data, pFormField](IJS_EventContext* context) {
- switch (type) {
- case CPDF_AAction::kCursorEnter:
- context->OnField_MouseEnter(data->bModifier, data->bShift,
- pFormField);
- break;
- case CPDF_AAction::kCursorExit:
- context->OnField_MouseExit(data->bModifier, data->bShift,
- pFormField);
- break;
- case CPDF_AAction::kButtonDown:
- context->OnField_MouseDown(data->bModifier, data->bShift,
- pFormField);
- break;
- case CPDF_AAction::kButtonUp:
- context->OnField_MouseUp(data->bModifier, data->bShift,
- pFormField);
- break;
- case CPDF_AAction::kGetFocus:
- context->OnField_Focus(data->bModifier, data->bShift,
- pFormField, &data->sValue);
- break;
- case CPDF_AAction::kLoseFocus:
- context->OnField_Blur(data->bModifier, data->bShift,
- pFormField, &data->sValue);
- break;
- case CPDF_AAction::kKeyStroke:
- context->OnField_Keystroke(
- &data->sChange, data->sChangeEx, data->bKeyDown,
- data->bModifier, &data->nSelEnd, &data->nSelStart,
- data->bShift, pFormField, &data->sValue,
- data->bWillCommit, data->bFieldFull, &data->bRC);
- break;
- case CPDF_AAction::kValidate:
- context->OnField_Validate(&data->sChange, data->sChangeEx,
- data->bKeyDown, data->bModifier,
- data->bShift, pFormField,
- &data->sValue, &data->bRC);
- break;
- default:
- NOTREACHED();
- break;
- }
- });
-}
-
-void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const WideString& sScriptName,
- const WideString& script) {
- RunScript(pFormFillEnv, script, [sScriptName](IJS_EventContext* context) {
- context->OnDoc_Open(sScriptName);
- });
-}
-
-void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_AAction::AActionType type,
- const WideString& script) {
- RunScript(pFormFillEnv, script, [type](IJS_EventContext* context) {
- switch (type) {
- case CPDF_AAction::kOpenPage:
- context->OnPage_Open();
- break;
- case CPDF_AAction::kClosePage:
- context->OnPage_Close();
- break;
- case CPDF_AAction::kCloseDocument:
- context->OnDoc_WillClose();
- break;
- case CPDF_AAction::kSaveDocument:
- context->OnDoc_WillSave();
- break;
- case CPDF_AAction::kDocumentSaved:
- context->OnDoc_DidSave();
- break;
- case CPDF_AAction::kPrintDocument:
- context->OnDoc_WillPrint();
- break;
- case CPDF_AAction::kDocumentPrinted:
- context->OnDoc_DidPrint();
- break;
- case CPDF_AAction::kPageVisible:
- context->OnPage_InView();
- break;
- case CPDF_AAction::kPageInvisible:
- context->OnPage_OutView();
- break;
- default:
- NOTREACHED();
- break;
- }
- });
-}
-
-bool CPDFSDK_ActionHandler::DoAction_Hide(
- const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- CPDFSDK_InteractiveForm* pForm = pFormFillEnv->GetInteractiveForm();
- if (pForm->DoAction_Hide(action)) {
- pFormFillEnv->SetChangeMark();
- return true;
- }
- return false;
-}
-
-bool CPDFSDK_ActionHandler::DoAction_SubmitForm(
- const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- CPDFSDK_InteractiveForm* pForm = pFormFillEnv->GetInteractiveForm();
- return pForm->DoAction_SubmitForm(action);
-}
-
-void CPDFSDK_ActionHandler::DoAction_ResetForm(
- const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv) {
- CPDFSDK_InteractiveForm* pForm = pFormFillEnv->GetInteractiveForm();
- pForm->DoAction_ResetForm(action);
-}
-
-void CPDFSDK_ActionHandler::RunScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const WideString& script,
- const RunScriptCallback& cb) {
- IJS_Runtime::ScopedEventContext pContext(pFormFillEnv->GetIJSRuntime());
- cb(pContext.Get());
- pContext->RunScript(script);
- // TODO(dsinclair): Return error if RunScript returns a IJS_Runtime::JS_Error.
-}
diff --git a/fpdfsdk/cpdfsdk_actionhandler.h b/fpdfsdk/cpdfsdk_actionhandler.h
deleted file mode 100644
index 2482104..0000000
--- a/fpdfsdk/cpdfsdk_actionhandler.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef FPDFSDK_CPDFSDK_ACTIONHANDLER_H_
-#define FPDFSDK_CPDFSDK_ACTIONHANDLER_H_
-
-#include <set>
-#include <utility>
-
-#include "core/fpdfdoc/cpdf_aaction.h"
-#include "core/fpdfdoc/cpdf_action.h"
-#include "core/fxcrt/mask.h"
-#include "core/fxcrt/widestring.h"
-#include "fpdfsdk/formfiller/cffl_fieldaction.h"
-#include "public/fpdf_fwlevent.h"
-
-class CPDFSDK_FormFillEnvironment;
-class CPDF_Dictionary;
-class CPDF_FormField;
-class IJS_EventContext;
-
-class CPDFSDK_ActionHandler {
- public:
- bool DoAction_DocOpen(const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- bool DoAction_JavaScript(const CPDF_Action& JsAction,
- WideString csJSName,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- bool DoAction_Page(const CPDF_Action& action,
- CPDF_AAction::AActionType eType,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- bool DoAction_Document(const CPDF_Action& action,
- CPDF_AAction::AActionType eType,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- bool DoAction_Field(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data);
- bool DoAction_FieldJavaScript(const CPDF_Action& JsAction,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data);
- bool DoAction_Link(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* form_fill_env,
- Mask<FWL_EVENTFLAG> modifiers);
- bool DoAction_Destination(const CPDF_Dest& dest,
- CPDFSDK_FormFillEnvironment* form_fill_env);
-
- private:
- using RunScriptCallback = std::function<void(IJS_EventContext* context)>;
-
- void RunScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const WideString& script,
- const RunScriptCallback& cb);
-
- bool ExecuteDocumentOpenAction(const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- std::set<const CPDF_Dictionary*>* visited);
- bool ExecuteDocumentPageAction(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- std::set<const CPDF_Dictionary*>* visited);
- bool ExecuteFieldAction(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CFFL_FieldAction* data,
- std::set<const CPDF_Dictionary*>* visited);
-
- void DoAction_NoJs(const CPDF_Action& action,
- CPDF_AAction::AActionType type,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- void RunDocumentPageJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_AAction::AActionType type,
- const WideString& script);
- void RunDocumentOpenJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const WideString& sScriptName,
- const WideString& script);
- void RunFieldJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_FormField* pFormField,
- CPDF_AAction::AActionType type,
- CFFL_FieldAction* data,
- const WideString& script);
-
- bool IsValidField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- CPDF_Dictionary* pFieldDict);
-
- void DoAction_GoTo(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action);
- void DoAction_Launch(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action);
- void DoAction_URI(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action,
- Mask<FWL_EVENTFLAG> modifiers);
- void DoAction_Named(CPDFSDK_FormFillEnvironment* pFormFillEnv,
- const CPDF_Action& action);
-
- bool DoAction_Hide(const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- bool DoAction_SubmitForm(const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
- void DoAction_ResetForm(const CPDF_Action& action,
- CPDFSDK_FormFillEnvironment* pFormFillEnv);
-};
-
-#endif // FPDFSDK_CPDFSDK_ACTIONHANDLER_H_
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index c94fc60..c660a08 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -21,7 +21,6 @@
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fxge/cfx_drawutils.h"
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_pageview.h"
#include "third_party/base/check.h"
@@ -352,13 +351,11 @@
CPDF_Action action = GetAAction(CPDF_AAction::kKeyStroke);
CPDFSDK_FormFillEnvironment* env = m_pPageView->GetFormFillEnv();
- CPDFSDK_ActionHandler* action_handler = env->GetActionHandler();
if (action.GetDict()) {
- return action_handler->DoAction_Link(action, CPDF_AAction::kKeyStroke, env,
- nFlags);
+ return env->DoActionLink(action, CPDF_AAction::kKeyStroke, nFlags);
}
- return action_handler->DoAction_Destination(GetDestination(), env);
+ return env->DoActionDestination(GetDestination());
}
bool CPDFSDK_BAAnnot::OnSetFocus(Mask<FWL_EVENTFLAG> nFlags) {
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index c2f980d..d707ef5 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -16,7 +16,6 @@
#include "core/fpdfdoc/cpdf_nametree.h"
#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxcrt/stl_util.h"
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "fpdfsdk/cpdfsdk_interactiveform.h"
#include "fpdfsdk/cpdfsdk_pageview.h"
@@ -24,8 +23,11 @@
#include "fpdfsdk/formfiller/cffl_formfield.h"
#include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
#include "fpdfsdk/formfiller/cffl_perwindowdata.h"
+#include "fxjs/ijs_event_context.h"
#include "fxjs/ijs_runtime.h"
#include "third_party/base/check.h"
+#include "third_party/base/containers/contains.h"
+#include "third_party/base/notreached.h"
#include "third_party/base/numerics/safe_conversions.h"
#ifdef PDF_ENABLE_XFA
@@ -347,12 +349,6 @@
return m_pIJSRuntime.get();
}
-CPDFSDK_ActionHandler* CPDFSDK_FormFillEnvironment::GetActionHandler() {
- if (!m_pActionHandler)
- m_pActionHandler = std::make_unique<CPDFSDK_ActionHandler>();
- return m_pActionHandler.get();
-}
-
void CPDFSDK_FormFillEnvironment::Invalidate(IPDF_Page* page,
const FX_RECT& rect) {
if (m_pInfo && m_pInfo->FFI_Invalidate) {
@@ -659,7 +655,7 @@
for (size_t i = 0; i < count; ++i) {
WideString name;
CPDF_Action action(ToDictionary(name_tree->LookupValueAndName(i, &name)));
- GetActionHandler()->DoAction_JavaScript(action, name, this);
+ DoActionJavaScript(action, name);
}
}
@@ -681,8 +677,7 @@
if (!pDict)
return false;
- CPDF_Action action(pDict);
- GetActionHandler()->DoAction_DocOpen(action, this);
+ DoActionDocOpen(CPDF_Action(pDict));
return true;
}
@@ -836,3 +831,383 @@
m_pInfo->FFI_OnFocusChange(m_pInfo, fpdf_annot, pPageView->GetPageIndex());
}
+
+bool CPDFSDK_FormFillEnvironment::DoActionDocOpen(const CPDF_Action& action) {
+ std::set<const CPDF_Dictionary*> visited;
+ return ExecuteDocumentOpenAction(action, &visited);
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionJavaScript(
+ const CPDF_Action& JsAction,
+ WideString csJSName) {
+ if (JsAction.GetType() == CPDF_Action::Type::kJavaScript) {
+ WideString swJS = JsAction.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunDocumentOpenJavaScript(csJSName, swJS);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionFieldJavaScript(
+ const CPDF_Action& JsAction,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data) {
+ if (IsJSPlatformPresent() &&
+ JsAction.GetType() == CPDF_Action::Type::kJavaScript) {
+ WideString swJS = JsAction.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunFieldJavaScript(pFormField, type, data, swJS);
+ return true;
+ }
+ }
+ return false;
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionLink(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ Mask<FWL_EVENTFLAG> modifiers) {
+ if (!CPDF_AAction::IsUserInput(type))
+ return false;
+
+ switch (action.GetType()) {
+ case CPDF_Action::Type::kGoTo:
+ DoActionGoTo(action);
+ return true;
+ case CPDF_Action::Type::kURI:
+ DoActionURI(action, modifiers);
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionDestination(const CPDF_Dest& dest) {
+ CPDF_Document* document = GetPDFDocument();
+ DCHECK(document);
+
+ const CPDF_Array* dest_array = dest.GetArray();
+ std::vector<float> dest_positions;
+ // |dest_array| index 0 contains destination page details and index 1 contains
+ // parameter that explains about the rest of |dest_array|.
+ if (dest_array) {
+ for (size_t i = 2; i < dest_array->size(); i++)
+ dest_positions.push_back(dest_array->GetNumberAt(i));
+ }
+
+ DoGoToAction(dest.GetDestPageIndex(document), dest.GetZoomMode(),
+ dest_positions);
+ return true;
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionPage(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType eType) {
+ std::set<const CPDF_Dictionary*> visited;
+ return ExecuteDocumentPageAction(action, eType, &visited);
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionDocument(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType eType) {
+ std::set<const CPDF_Dictionary*> visited;
+ return ExecuteDocumentPageAction(action, eType, &visited);
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionField(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data) {
+ std::set<const CPDF_Dictionary*> visited;
+ return ExecuteFieldAction(action, type, pFormField, data, &visited);
+}
+
+bool CPDFSDK_FormFillEnvironment::ExecuteDocumentOpenAction(
+ const CPDF_Action& action,
+ std::set<const CPDF_Dictionary*>* visited) {
+ const CPDF_Dictionary* pDict = action.GetDict();
+ if (pdfium::Contains(*visited, pDict))
+ return false;
+
+ visited->insert(pDict);
+
+ if (action.GetType() == CPDF_Action::Type::kJavaScript) {
+ if (IsJSPlatformPresent()) {
+ WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty())
+ RunDocumentOpenJavaScript(WideString(), swJS);
+ }
+ } else {
+ DoActionNoJs(action, CPDF_AAction::AActionType::kDocumentOpen);
+ }
+
+ for (size_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteDocumentOpenAction(subaction, visited))
+ return false;
+ }
+
+ return true;
+}
+
+bool CPDFSDK_FormFillEnvironment::ExecuteDocumentPageAction(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ std::set<const CPDF_Dictionary*>* visited) {
+ const CPDF_Dictionary* pDict = action.GetDict();
+ if (pdfium::Contains(*visited, pDict))
+ return false;
+
+ visited->insert(pDict);
+
+ if (action.GetType() == CPDF_Action::Type::kJavaScript) {
+ if (IsJSPlatformPresent()) {
+ WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty())
+ RunDocumentPageJavaScript(type, swJS);
+ }
+ } else {
+ DoActionNoJs(action, type);
+ }
+
+ for (size_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteDocumentPageAction(subaction, type, visited))
+ return false;
+ }
+
+ return true;
+}
+
+bool CPDFSDK_FormFillEnvironment::IsValidField(CPDF_Dictionary* pFieldDict) {
+ DCHECK(pFieldDict);
+
+ CPDFSDK_InteractiveForm* pForm = GetInteractiveForm();
+ CPDF_InteractiveForm* pPDFForm = pForm->GetInteractiveForm();
+ return !!pPDFForm->GetFieldByDict(pFieldDict);
+}
+
+bool CPDFSDK_FormFillEnvironment::ExecuteFieldAction(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data,
+ std::set<const CPDF_Dictionary*>* visited) {
+ const CPDF_Dictionary* pDict = action.GetDict();
+ if (pdfium::Contains(*visited, pDict))
+ return false;
+
+ visited->insert(pDict);
+
+ if (action.GetType() == CPDF_Action::Type::kJavaScript) {
+ if (IsJSPlatformPresent()) {
+ WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunFieldJavaScript(pFormField, type, data, swJS);
+ if (!IsValidField(pFormField->GetFieldDict()))
+ return false;
+ }
+ }
+ } else {
+ DoActionNoJs(action, type);
+ }
+
+ for (size_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteFieldAction(subaction, type, pFormField, data, visited))
+ return false;
+ }
+
+ return true;
+}
+
+void CPDFSDK_FormFillEnvironment::DoActionNoJs(const CPDF_Action& action,
+ CPDF_AAction::AActionType type) {
+ switch (action.GetType()) {
+ case CPDF_Action::Type::kGoTo:
+ DoActionGoTo(action);
+ break;
+ case CPDF_Action::Type::kURI:
+ if (CPDF_AAction::IsUserInput(type))
+ DoActionURI(action, Mask<FWL_EVENTFLAG>{});
+ break;
+ case CPDF_Action::Type::kHide:
+ DoActionHide(action);
+ break;
+ case CPDF_Action::Type::kNamed:
+ DoActionNamed(action);
+ break;
+ case CPDF_Action::Type::kSubmitForm:
+ if (CPDF_AAction::IsUserInput(type))
+ DoActionSubmitForm(action);
+ break;
+ case CPDF_Action::Type::kResetForm:
+ DoActionResetForm(action);
+ break;
+ case CPDF_Action::Type::kJavaScript:
+ NOTREACHED();
+ break;
+ case CPDF_Action::Type::kSetOCGState:
+ case CPDF_Action::Type::kThread:
+ case CPDF_Action::Type::kSound:
+ case CPDF_Action::Type::kMovie:
+ case CPDF_Action::Type::kRendition:
+ case CPDF_Action::Type::kTrans:
+ case CPDF_Action::Type::kGoTo3DView:
+ case CPDF_Action::Type::kGoToR:
+ case CPDF_Action::Type::kGoToE:
+ case CPDF_Action::Type::kLaunch:
+ case CPDF_Action::Type::kImportData:
+ // Unimplemented
+ break;
+ default:
+ break;
+ }
+}
+
+void CPDFSDK_FormFillEnvironment::DoActionGoTo(const CPDF_Action& action) {
+ DCHECK(action.GetDict());
+
+ CPDF_Document* pPDFDocument = GetPDFDocument();
+ DCHECK(pPDFDocument);
+
+ CPDF_Dest MyDest = action.GetDest(pPDFDocument);
+ DoActionDestination(MyDest);
+}
+
+void CPDFSDK_FormFillEnvironment::DoActionURI(const CPDF_Action& action,
+ Mask<FWL_EVENTFLAG> modifiers) {
+ DCHECK(action.GetDict());
+ DoURIAction(action.GetURI(GetPDFDocument()), modifiers);
+}
+
+void CPDFSDK_FormFillEnvironment::DoActionNamed(const CPDF_Action& action) {
+ DCHECK(action.GetDict());
+ ExecuteNamedAction(action.GetNamedAction());
+}
+
+void CPDFSDK_FormFillEnvironment::RunFieldJavaScript(
+ CPDF_FormField* pFormField,
+ CPDF_AAction::AActionType type,
+ CFFL_FieldAction* data,
+ const WideString& script) {
+ DCHECK(type != CPDF_AAction::kCalculate);
+ DCHECK(type != CPDF_AAction::kFormat);
+
+ RunScript(script, [type, data, pFormField](IJS_EventContext* context) {
+ switch (type) {
+ case CPDF_AAction::kCursorEnter:
+ context->OnField_MouseEnter(data->bModifier, data->bShift, pFormField);
+ break;
+ case CPDF_AAction::kCursorExit:
+ context->OnField_MouseExit(data->bModifier, data->bShift, pFormField);
+ break;
+ case CPDF_AAction::kButtonDown:
+ context->OnField_MouseDown(data->bModifier, data->bShift, pFormField);
+ break;
+ case CPDF_AAction::kButtonUp:
+ context->OnField_MouseUp(data->bModifier, data->bShift, pFormField);
+ break;
+ case CPDF_AAction::kGetFocus:
+ context->OnField_Focus(data->bModifier, data->bShift, pFormField,
+ &data->sValue);
+ break;
+ case CPDF_AAction::kLoseFocus:
+ context->OnField_Blur(data->bModifier, data->bShift, pFormField,
+ &data->sValue);
+ break;
+ case CPDF_AAction::kKeyStroke:
+ context->OnField_Keystroke(
+ &data->sChange, data->sChangeEx, data->bKeyDown, data->bModifier,
+ &data->nSelEnd, &data->nSelStart, data->bShift, pFormField,
+ &data->sValue, data->bWillCommit, data->bFieldFull, &data->bRC);
+ break;
+ case CPDF_AAction::kValidate:
+ context->OnField_Validate(&data->sChange, data->sChangeEx,
+ data->bKeyDown, data->bModifier, data->bShift,
+ pFormField, &data->sValue, &data->bRC);
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+ });
+}
+
+void CPDFSDK_FormFillEnvironment::RunDocumentOpenJavaScript(
+ const WideString& sScriptName,
+ const WideString& script) {
+ RunScript(script, [sScriptName](IJS_EventContext* context) {
+ context->OnDoc_Open(sScriptName);
+ });
+}
+
+void CPDFSDK_FormFillEnvironment::RunDocumentPageJavaScript(
+ CPDF_AAction::AActionType type,
+ const WideString& script) {
+ RunScript(script, [type](IJS_EventContext* context) {
+ switch (type) {
+ case CPDF_AAction::kOpenPage:
+ context->OnPage_Open();
+ break;
+ case CPDF_AAction::kClosePage:
+ context->OnPage_Close();
+ break;
+ case CPDF_AAction::kCloseDocument:
+ context->OnDoc_WillClose();
+ break;
+ case CPDF_AAction::kSaveDocument:
+ context->OnDoc_WillSave();
+ break;
+ case CPDF_AAction::kDocumentSaved:
+ context->OnDoc_DidSave();
+ break;
+ case CPDF_AAction::kPrintDocument:
+ context->OnDoc_WillPrint();
+ break;
+ case CPDF_AAction::kDocumentPrinted:
+ context->OnDoc_DidPrint();
+ break;
+ case CPDF_AAction::kPageVisible:
+ context->OnPage_InView();
+ break;
+ case CPDF_AAction::kPageInvisible:
+ context->OnPage_OutView();
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+ });
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionHide(const CPDF_Action& action) {
+ CPDFSDK_InteractiveForm* pForm = GetInteractiveForm();
+ if (pForm->DoAction_Hide(action)) {
+ SetChangeMark();
+ return true;
+ }
+ return false;
+}
+
+bool CPDFSDK_FormFillEnvironment::DoActionSubmitForm(
+ const CPDF_Action& action) {
+ CPDFSDK_InteractiveForm* pForm = GetInteractiveForm();
+ return pForm->DoAction_SubmitForm(action);
+}
+
+void CPDFSDK_FormFillEnvironment::DoActionResetForm(const CPDF_Action& action) {
+ CPDFSDK_InteractiveForm* pForm = GetInteractiveForm();
+ pForm->DoAction_ResetForm(action);
+}
+
+void CPDFSDK_FormFillEnvironment::RunScript(const WideString& script,
+ const RunScriptCallback& cb) {
+ IJS_Runtime::ScopedEventContext pContext(GetIJSRuntime());
+ cb(pContext.Get());
+ pContext->RunScript(script);
+ // TODO(dsinclair): Return error if RunScript returns a IJS_Runtime::JS_Error.
+}
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index d3135da..6c3b750 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -11,10 +11,13 @@
#include <map>
#include <memory>
+#include <set>
+#include <utility>
#include <vector>
#include "core/fpdfapi/page/cpdf_occontext.h"
#include "core/fpdfapi/parser/cpdf_document.h"
+#include "core/fpdfdoc/cpdf_aaction.h"
#include "core/fxcrt/cfx_timer.h"
#include "core/fxcrt/mask.h"
#include "core/fxcrt/observed_ptr.h"
@@ -27,11 +30,14 @@
#include "public/fpdf_formfill.h"
#include "third_party/base/span.h"
-class CPDFSDK_ActionHandler;
+class CPDF_Action;
+class CPDF_FormField;
class CPDFSDK_InteractiveForm;
class CPDFSDK_PageView;
+class IJS_EventContext;
class IJS_Runtime;
class IPDF_Page;
+struct CFFL_FieldAction;
// NOTE: |bsUTF16LE| must outlive the use of the result. Care must be taken
// since modifying the result would impact |bsUTF16LE|.
@@ -115,6 +121,33 @@
return m_pInfo ? m_pInfo->m_pJsPlatform : nullptr;
}
+ // Actions.
+ bool DoActionDocOpen(const CPDF_Action& action);
+ bool DoActionJavaScript(const CPDF_Action& JsAction, WideString csJSName);
+ bool DoActionPage(const CPDF_Action& action, CPDF_AAction::AActionType eType);
+ bool DoActionDocument(const CPDF_Action& action,
+ CPDF_AAction::AActionType eType);
+ bool DoActionField(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data);
+ bool DoActionFieldJavaScript(const CPDF_Action& JsAction,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data);
+ bool DoActionLink(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ Mask<FWL_EVENTFLAG> modifiers);
+ bool DoActionDestination(const CPDF_Dest& dest);
+ void DoActionNoJs(const CPDF_Action& action, CPDF_AAction::AActionType type);
+ void DoActionGoTo(const CPDF_Action& action);
+ void DoActionLaunch(const CPDF_Action& action);
+ void DoActionURI(const CPDF_Action& action, Mask<FWL_EVENTFLAG> modifiers);
+ void DoActionNamed(const CPDF_Action& action);
+ bool DoActionHide(const CPDF_Action& action);
+ bool DoActionSubmitForm(const CPDF_Action& action);
+ void DoActionResetForm(const CPDF_Action& action);
+
#ifdef PDF_ENABLE_V8
CPDFSDK_PageView* GetCurrentView();
FPDF_PAGE GetCurrentPage() const;
@@ -214,16 +247,38 @@
}
IJS_Runtime* GetIJSRuntime(); // Creates if not present.
- CPDFSDK_ActionHandler* GetActionHandler(); // Creates if not present.
CPDFSDK_InteractiveForm* GetInteractiveForm(); // Creates if not present.
private:
+ using RunScriptCallback = std::function<void(IJS_EventContext* context)>;
+
IPDF_Page* GetPage(int nIndex) const;
void OnSetFieldInputFocusInternal(const WideString& text, bool bFocus);
void SendOnFocusChange(ObservedPtr<CPDFSDK_Annot>& pAnnot);
+ // Support methods for Actions.
+ void RunScript(const WideString& script, const RunScriptCallback& cb);
+ bool ExecuteDocumentOpenAction(const CPDF_Action& action,
+ std::set<const CPDF_Dictionary*>* visited);
+ bool ExecuteDocumentPageAction(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ std::set<const CPDF_Dictionary*>* visited);
+ bool ExecuteFieldAction(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDF_FormField* pFormField,
+ CFFL_FieldAction* data,
+ std::set<const CPDF_Dictionary*>* visited);
+ void RunDocumentPageJavaScript(CPDF_AAction::AActionType type,
+ const WideString& script);
+ void RunDocumentOpenJavaScript(const WideString& sScriptName,
+ const WideString& script);
+ void RunFieldJavaScript(CPDF_FormField* pFormField,
+ CPDF_AAction::AActionType type,
+ CFFL_FieldAction* data,
+ const WideString& script);
+ bool IsValidField(CPDF_Dictionary* pFieldDict);
+
UnownedPtr<FPDF_FORMFILLINFO> const m_pInfo;
- std::unique_ptr<CPDFSDK_ActionHandler> m_pActionHandler;
std::unique_ptr<IJS_Runtime> m_pIJSRuntime;
std::map<IPDF_Page*, std::unique_ptr<CPDFSDK_PageView>> m_PageMap;
std::unique_ptr<CPDFSDK_InteractiveForm> m_pInteractiveForm;
diff --git a/fpdfsdk/cpdfsdk_interactiveform.cpp b/fpdfsdk/cpdfsdk_interactiveform.cpp
index 0c617e0..602fe39 100644
--- a/fpdfsdk/cpdfsdk_interactiveform.cpp
+++ b/fpdfsdk/cpdfsdk_interactiveform.cpp
@@ -27,7 +27,6 @@
#include "core/fxcrt/stl_util.h"
#include "core/fxge/cfx_graphstatedata.h"
#include "core/fxge/cfx_path.h"
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/cpdfsdk_annotiterator.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
@@ -362,8 +361,8 @@
fa.bModifier = false;
fa.bShift = false;
fa.sValue = csValue;
- m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript(
- action, CPDF_AAction::kKeyStroke, m_pFormFillEnv.Get(), pFormField, &fa);
+ m_pFormFillEnv->DoActionFieldJavaScript(action, CPDF_AAction::kKeyStroke,
+ pFormField, &fa);
return fa.bRC;
}
@@ -381,8 +380,8 @@
fa.bModifier = false;
fa.bShift = false;
fa.sValue = csValue;
- m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript(
- action, CPDF_AAction::kValidate, m_pFormFillEnv.Get(), pFormField, &fa);
+ m_pFormFillEnv->DoActionFieldJavaScript(action, CPDF_AAction::kValidate,
+ pFormField, &fa);
return fa.bRC;
}
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 2346cbf..0112f72 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -26,7 +26,6 @@
#include "core/fxge/cfx_graphstatedata.h"
#include "core/fxge/cfx_path.h"
#include "core/fxge/cfx_renderdevice.h"
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
#include "fpdfsdk/cpdfsdk_appstream.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_interactiveform.h"
@@ -1024,8 +1023,7 @@
CPDF_Action action = GetAAction(type);
if (action.GetType() != CPDF_Action::Type::kUnknown) {
- pFormFillEnv->GetActionHandler()->DoAction_Field(action, type, pFormFillEnv,
- GetFormField(), data);
+ pFormFillEnv->DoActionField(action, type, GetFormField(), data);
}
return false;
}
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index 135e56d..7fb9733 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -20,7 +20,6 @@
#include "core/fpdfdoc/cpdf_formfield.h"
#include "core/fpdfdoc/cpdf_interactiveform.h"
#include "core/fxge/cfx_defaultrenderdevice.h"
-#include "fpdfsdk/cpdfsdk_actionhandler.h"
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
@@ -775,11 +774,8 @@
CPDF_AAction aa(pDict->GetDictFor(pdfium::form_fields::kAA));
auto type = static_cast<CPDF_AAction::AActionType>(aaType);
- if (aa.ActionExist(type)) {
- CPDF_Action action = aa.GetAction(type);
- pFormFillEnv->GetActionHandler()->DoAction_Document(action, type,
- pFormFillEnv);
- }
+ if (aa.ActionExist(type))
+ pFormFillEnv->DoActionDocument(aa.GetAction(type), type);
}
FPDF_EXPORT void FPDF_CALLCONV FORM_DoPageAAction(FPDF_PAGE page,
@@ -798,16 +794,13 @@
if (!pFormFillEnv->GetPageView(pPage))
return;
- CPDFSDK_ActionHandler* pActionHandler = pFormFillEnv->GetActionHandler();
CPDF_Dictionary* pPageDict = pPDFPage->GetDict();
CPDF_AAction aa(pPageDict->GetDictFor(pdfium::form_fields::kAA));
CPDF_AAction::AActionType type = aaType == FPDFPAGE_AACTION_OPEN
? CPDF_AAction::kOpenPage
: CPDF_AAction::kClosePage;
- if (aa.ActionExist(type)) {
- CPDF_Action action = aa.GetAction(type);
- pActionHandler->DoAction_Page(action, type, pFormFillEnv);
- }
+ if (aa.ActionExist(type))
+ pFormFillEnv->DoActionPage(aa.GetAction(type), type);
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
@@ -816,15 +809,11 @@
int index,
FPDF_BOOL selected) {
CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return false;
- return pPageView->SetIndexSelected(index, selected);
+ return pPageView && pPageView->SetIndexSelected(index, selected);
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
FORM_IsIndexSelected(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int index) {
CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return false;
- return pPageView->IsIndexSelected(index);
+ return pPageView && pPageView->IsIndexSelected(index);
}