From 7b5bc26e8267fec38bef9f95cd04d2bd731faff3 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 5 Mar 2015 16:44:22 -0800 Subject: Merge to XFA: Make conversion between CPDF_Action and its dictionary explicit. Original Review URL: https://codereview.chromium.org/984773002 R=thestig@chromium.org TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/984783002 --- fpdfsdk/src/fsdk_actionhandler.cpp | 214 +++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 114 deletions(-) (limited to 'fpdfsdk/src/fsdk_actionhandler.cpp') diff --git a/fpdfsdk/src/fsdk_actionhandler.cpp b/fpdfsdk/src/fsdk_actionhandler.cpp index 494b5298d3..5fd6c54209 100644 --- a/fpdfsdk/src/fsdk_actionhandler.cpp +++ b/fpdfsdk/src/fsdk_actionhandler.cpp @@ -1,7 +1,7 @@ // 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 "../include/fsdk_define.h" @@ -12,7 +12,7 @@ /* -------------------------- CBA_ActionHandler -------------------------- */ -CPDFSDK_ActionHandler::CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi) : +CPDFSDK_ActionHandler::CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi) : m_pFormActionHandler(NULL), m_pMediaActionHandler(NULL) { @@ -48,16 +48,15 @@ void CPDFSDK_ActionHandler::Destroy() } //document open -FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument - /*CReader_Document* pDocument, CReader_DocView *pDocView*/) +FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument) { CFX_PtrList list; - return ExecuteDocumentOpenAction(action, pDocument, /*pDocView, */list); + return ExecuteDocumentOpenAction(action, pDocument, list); } //document open FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName, - CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/) + CPDFSDK_Document* pDocument) { if (JsAction.GetType() == CPDF_Action::JavaScript) { @@ -72,8 +71,8 @@ FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(const CPDF_Action& JsAction,C return FALSE; } -FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, +FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data) { CPDFDoc_Environment* pEnv = pDocument->GetEnv(); @@ -91,56 +90,56 @@ FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAct } FX_BOOL CPDFSDK_ActionHandler::DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, - CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/) + CPDFSDK_Document* pDocument) { CFX_PtrList list; - return ExecuteDocumentPageAction(action, eType, pDocument,/* pDocView,*/ list); + return ExecuteDocumentPageAction(action, eType, pDocument, list); } FX_BOOL CPDFSDK_ActionHandler::DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, - CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/) + CPDFSDK_Document* pDocument) { CFX_PtrList list; - return ExecuteDocumentPageAction(action, eType, pDocument,/* pDocView,*/ list); + return ExecuteDocumentPageAction(action, eType, pDocument, list); } -FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/) +FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument) { CFX_PtrList list; - return this->ExecuteBookMark(action, pDocument,/* pDocView,*/ pBookMark, list); + return this->ExecuteBookMark(action, pDocument, pBookMark, list); } -FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument,/* CReader_DocView *pDocView,*/ CPDFSDK_Annot* pScreen) +FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen) { CFX_PtrList list; - return this->ExecuteScreenAction(action, type, pDocument,/* pDocView,*/ pScreen, list); + return this->ExecuteScreenAction(action, type, pDocument, pScreen, list); } -FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action, - CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/) +FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action, + CPDFSDK_Document* pDocument) { CFX_PtrList list; - return ExecuteLinkAction(action, pDocument,/* pDocView,*/ list); + return ExecuteLinkAction(action, pDocument, list); } -FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument,/* CReader_DocView *pDocView,*/ +FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data) { CFX_PtrList list; - return ExecuteFieldAction(action, type, pDocument,/* pDocView,*/ pFormField, data, list); + return ExecuteFieldAction(action, type, pDocument, pFormField, data, list); } FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, - /*CReader_DocView *pDocView,*/ CFX_PtrList& list) + CFX_PtrList& list) { - ASSERT(pDocument != NULL); - - if (list.Find((CPDF_Dictionary*)action)) + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) return FALSE; - list.AddTail((CPDF_Dictionary*)action); + + list.AddTail(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); @@ -157,29 +156,28 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(const CPDF_Action& acti } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); + DoAction_NoJs(action, pDocument); } -// if (!IsValidDocView(pDocument, pDocView)) -// return FALSE; - for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iGetEnv(); ASSERT(pEnv); @@ -204,7 +202,7 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action, CPDF FX_BOOL bRet = pContext->RunScript(swJS, csInfo); if (!bRet) { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); + // FIXME: return error. } pRuntime->ReleaseContext(pContext); @@ -213,29 +211,28 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action, CPDF } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); + DoAction_NoJs(action, pDocument); } -// if (!IsValidDocView(pDocument, pDocView)) -// return FALSE; - for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iGetEnv(); ASSERT(pEnv); @@ -252,16 +249,16 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(const CPDF_Action& acti } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); + DoAction_NoJs(action, pDocument); } - if (!IsValidDocView(pDocument/*, pDocView*/)) + if (!IsValidDocView(pDocument)) return FALSE; for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iGetFieldByDict(pFieldDict) != NULL; } -FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CPDF_FormField* pFormField, +FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data, CFX_PtrList& list) { ASSERT(pDocument != NULL); - if (list.Find((CPDF_Dictionary*)action)) + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) return FALSE; - list.AddTail((CPDF_Dictionary*)action); + + list.AddTail(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); @@ -308,28 +307,28 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPD } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); -// if (!IsValidDocView(pDocument, pDocView)) -// return FALSE; + DoAction_NoJs(action, pDocument); } for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iGetEnv(); ASSERT(pEnv); @@ -398,29 +397,28 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(const CPDF_Action& action, CP } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); + DoAction_NoJs(action, pDocument); } -// if (!IsValidDocView(pDocument, pDocView)) -// return FALSE; - for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iGetEnv(); ASSERT(pEnv); @@ -454,29 +452,26 @@ FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSD } else { - DoAction_NoJs(action, pDocument/*, pDocView*/); + DoAction_NoJs(action, pDocument); } -// if (!IsValidDocView(pDocument, pDocView)) -// return FALSE; - for (FX_INT32 i=0,sz=action.GetSubActionsCount(); iDoAction_Sound(action, pDocument/*, pDocView*/); + m_pMediaActionHandler->DoAction_Sound(action, pDocument); } break; case CPDF_Action::Movie: if (m_pMediaActionHandler) { - m_pMediaActionHandler->DoAction_Movie(action, pDocument/*, pDocView*/); + m_pMediaActionHandler->DoAction_Movie(action, pDocument); } break; case CPDF_Action::Hide: @@ -515,7 +510,7 @@ void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Doc case CPDF_Action::SubmitForm: if (m_pFormActionHandler) { - m_pFormActionHandler->DoAction_SubmitForm(action, pDocument/*, pDocView*/); + m_pFormActionHandler->DoAction_SubmitForm(action, pDocument); } break; case CPDF_Action::ResetForm: @@ -527,19 +522,19 @@ void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Doc case CPDF_Action::ImportData: if (m_pFormActionHandler) { - m_pFormActionHandler->DoAction_ImportData(action, pDocument/*, pDocView*/); + m_pFormActionHandler->DoAction_ImportData(action, pDocument); } break; case CPDF_Action::JavaScript: ASSERT(FALSE); break; case CPDF_Action::SetOCGState: - DoAction_SetOCGState(pDocument, /*pDocView,*/ action); + DoAction_SetOCGState(pDocument, action); break; case CPDF_Action::Rendition: if (m_pMediaActionHandler) { - m_pMediaActionHandler->DoAction_Rendition(action, pDocument/*, pDocView*/); + m_pMediaActionHandler->DoAction_Rendition(action, pDocument); } break; case CPDF_Action::Trans: @@ -551,21 +546,16 @@ void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Doc } } -FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument/*, CReader_DocView* pDocView*/) +FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) { ASSERT(pDocument != NULL); - //ASSERT(pDocView != NULL); - - //return pDocument->IsValidDocView(pDocView); return TRUE; } -void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, /*CReader_DocView* pDocView,*/ +void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action) { - ASSERT(pDocument != NULL); -// ASSERT(pDocView != NULL); - ASSERT(action != NULL); + ASSERT(action); CPDF_Document* pPDFDocument = pDocument->GetDocument()->GetPDFDoc(); ASSERT(pPDFDocument != NULL); @@ -605,27 +595,24 @@ void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, const C void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action) { - ASSERT(pDocument != NULL); - ASSERT(action != NULL); + ASSERT(action); CPDFDoc_Environment* pApp = pDocument->GetEnv(); ASSERT(pApp != NULL); - CFX_ByteString sURI = action.GetURI(pDocument->GetDocument()->GetPDFDoc()); pApp->FFI_DoURIAction(FX_LPCSTR(sURI)); } void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action) { - ASSERT(pDocument != NULL); - ASSERT(action != NULL); - + ASSERT(action); + CFX_ByteString csName = action.GetNamedAction(); pDocument->GetEnv()->FFI_ExecuteNamedAction(csName); } -void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ const CPDF_Action& action) +void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument, const CPDF_Action& action) { } @@ -666,7 +653,7 @@ void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, data.sValue); break; case CPDF_AAction::KeyStroke: - pContext->OnField_Keystroke(data.nCommitKey, data.sChange, data.sChangeEx, data.bKeyDown, + pContext->OnField_Keystroke(data.nCommitKey, data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier, data.nSelEnd, data.nSelStart, data.bShift, pFormField, data.sValue, data.bWillCommit, data.bFieldFull, data.bRC); break; @@ -726,7 +713,7 @@ void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(CPDFSDK_Document* pDocumen ASSERT(pContext != NULL); switch (type) - { + { case CPDF_AAction::OpenPage: pContext->OnPage_Open(pDocument); break; @@ -773,57 +760,57 @@ void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(CPDFSDK_Document* pDocumen FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument) { ASSERT(pDocument != NULL); - + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - + if (pInterForm->DoAction_Hide(action)) { pDocument->SetChangeMark(); return TRUE; } - + return FALSE; } FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument) { ASSERT(pDocument != NULL); - + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - + return pInterForm->DoAction_SubmitForm(action); } FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument) { ASSERT(pDocument != NULL); - + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - + if (pInterForm->DoAction_ResetForm(action)) - { + { return TRUE; } - + return FALSE; } FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument) { ASSERT(pDocument != NULL); - + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - + if (pInterForm->DoAction_ImportData(action)) { - pDocument->SetChangeMark(); + pDocument->SetChangeMark(); return TRUE; } - + return FALSE; } @@ -841,4 +828,3 @@ FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie(const CPDF_Action& action, CP { return FALSE; } - -- cgit v1.2.3