Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: fpdfsdk/fsdk_actionhandler.cpp

Issue 2227173002: Merge CPDFSDK_FormActionHandler into CPDFSDK_ActionHandler (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | fpdfsdk/include/fsdk_actionhandler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fpdfsdk/fsdk_actionhandler.cpp
diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp
index 27f0d34066806b9f06b937a16dde43087ca69290..e11fb747a63f157cea5931d84306681ccc26c1fe 100644
--- a/fpdfsdk/fsdk_actionhandler.cpp
+++ b/fpdfsdk/fsdk_actionhandler.cpp
@@ -17,8 +17,41 @@
#include "fpdfsdk/javascript/ijs_runtime.h"
#include "third_party/base/stl_util.h"
-CPDFSDK_ActionHandler::CPDFSDK_ActionHandler()
- : m_pFormActionHandler(new CPDFSDK_FormActionHandler) {}
+class NoJsActionHandler {
+ public:
+ NoJsActionHandler(const CPDF_Action&, CPDFSDK_Document*);
+ void Run();
+
+ private:
+ static void DoAction_GoTo(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_GoToR(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_Launch(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_URI(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_Named(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_SetOCGState(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_Hide(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_SubmitForm(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_ResetForm(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+ static void DoAction_ImportData(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
+
+ CPDF_Action m_action;
+ CPDFSDK_Document* m_document;
+
+ typedef void (*Callback)(CPDFSDK_Document*, const CPDF_Action&);
+ Callback m_callback = nullptr;
Tom Sepez 2016/08/09 21:11:20 Instead of storing the callback, can we store the
+};
+
+CPDFSDK_ActionHandler::CPDFSDK_ActionHandler() {}
CPDFSDK_ActionHandler::~CPDFSDK_ActionHandler() {}
@@ -129,7 +162,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
@@ -173,7 +206,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
@@ -185,6 +218,11 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(
return TRUE;
}
+FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument);
+ return TRUE;
+}
+
FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
const CPDF_Action& action,
CPDF_AAction::AActionType type,
@@ -206,7 +244,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
if (!IsValidDocView(pDocument))
@@ -255,7 +293,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
@@ -300,7 +338,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
@@ -345,7 +383,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(
}
}
} else {
- DoAction_NoJs(action, pDocument);
+ NoJsActionHandler(action, pDocument).Run();
}
for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
@@ -357,64 +395,49 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(
return TRUE;
}
-void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
- ASSERT(pDocument);
-
- switch (action.GetType()) {
+NoJsActionHandler::NoJsActionHandler(const CPDF_Action& action,
+ CPDFSDK_Document* document)
+ : m_action(action), m_document(document) {
+ switch (m_action.GetType()) {
case CPDF_Action::GoTo:
- DoAction_GoTo(pDocument, action);
+ m_callback = &DoAction_GoTo;
break;
case CPDF_Action::GoToR:
- DoAction_GoToR(pDocument, action);
- break;
- case CPDF_Action::GoToE:
+ m_callback = &DoAction_GoToR;
break;
case CPDF_Action::Launch:
- DoAction_Launch(pDocument, action);
- break;
- case CPDF_Action::Thread:
+ m_callback = &DoAction_Launch;
break;
case CPDF_Action::URI:
- DoAction_URI(pDocument, action);
- break;
- case CPDF_Action::Sound:
- break;
- case CPDF_Action::Movie:
+ m_callback = &DoAction_URI;
break;
case CPDF_Action::Hide:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_Hide(action, pDocument);
- }
+ m_callback = &DoAction_Hide;
break;
case CPDF_Action::Named:
- DoAction_Named(pDocument, action);
+ m_callback = &DoAction_Named;
break;
case CPDF_Action::SubmitForm:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_SubmitForm(action, pDocument);
- }
+ m_callback = &DoAction_SubmitForm;
break;
case CPDF_Action::ResetForm:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_ResetForm(action, pDocument);
- }
+ m_callback = &DoAction_ResetForm;
break;
case CPDF_Action::ImportData:
- if (m_pFormActionHandler) {
- m_pFormActionHandler->DoAction_ImportData(action, pDocument);
- }
+ m_callback = &DoAction_ImportData;
break;
case CPDF_Action::JavaScript:
ASSERT(FALSE);
break;
case CPDF_Action::SetOCGState:
- DoAction_SetOCGState(pDocument, action);
+ m_callback = &DoAction_SetOCGState;
break;
+ case CPDF_Action::GoToE:
+ case CPDF_Action::Thread:
+ case CPDF_Action::Sound:
+ case CPDF_Action::Movie:
case CPDF_Action::Rendition:
- break;
case CPDF_Action::Trans:
- break;
case CPDF_Action::GoTo3DView:
break;
default:
@@ -422,13 +445,16 @@ void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action,
}
}
-FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) {
- ASSERT(pDocument);
- return TRUE;
+void NoJsActionHandler::Run() {
+ if (!m_callback)
+ return;
+
+ ASSERT(m_document);
+ m_callback(m_document, m_action);
}
-void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
+void NoJsActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
ASSERT(action.GetDict());
CPDF_Document* pPDFDocument = pDocument->GetPDFDocument();
@@ -454,14 +480,14 @@ void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
delete[] pPosAry;
}
-void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
+void NoJsActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
-void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
+void NoJsActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
-void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
+void NoJsActionHandler::DoAction_URI(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
ASSERT(action.GetDict());
CPDFDoc_Environment* pApp = pDocument->GetEnv();
@@ -469,16 +495,16 @@ void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument,
pApp->FFI_DoURIAction(sURI.c_str());
}
-void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {
+void NoJsActionHandler::DoAction_Named(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
ASSERT(action.GetDict());
CFX_ByteString csName = action.GetNamedAction();
pDocument->GetEnv()->FFI_ExecuteNamedAction(csName.c_str());
}
-void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,
- const CPDF_Action& action) {}
+void NoJsActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument,
CPDF_FormField* pFormField,
@@ -606,39 +632,28 @@ void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
pRuntime->ReleaseContext(pContext);
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
+void NoJsActionHandler::DoAction_Hide(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
- if (pInterForm->DoAction_Hide(action)) {
+ if (pInterForm->DoAction_Hide(action))
pDocument->SetChangeMark();
- return TRUE;
- }
-
- return FALSE;
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
+void NoJsActionHandler::DoAction_SubmitForm(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
- return pInterForm->DoAction_SubmitForm(action);
+ pInterForm->DoAction_SubmitForm(action);
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
+void NoJsActionHandler::DoAction_ResetForm(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
- return pInterForm->DoAction_ResetForm(action);
+ pInterForm->DoAction_ResetForm(action);
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(
- const CPDF_Action& action,
- CPDFSDK_Document* pDocument) {
+void NoJsActionHandler::DoAction_ImportData(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
- if (pInterForm->DoAction_ImportData(action)) {
+ if (pInterForm->DoAction_ImportData(action))
pDocument->SetChangeMark();
- return TRUE;
- }
-
- return FALSE;
}
« no previous file with comments | « no previous file | fpdfsdk/include/fsdk_actionhandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698