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 --- core/include/fpdfdoc/fpdf_doc.h | 20 +++++------- core/src/fpdfdoc/doc_action.cpp | 62 +++++++++++++++++++----------------- core/src/fpdfdoc/doc_bookmark.cpp | 4 +-- core/src/fpdfdoc/doc_formcontrol.cpp | 17 +++++----- core/src/fpdfdoc/doc_link.cpp | 2 +- 5 files changed, 51 insertions(+), 54 deletions(-) (limited to 'core') diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h index fc34f1af4b..a21063fedd 100644 --- a/core/include/fpdfdoc/fpdf_doc.h +++ b/core/include/fpdfdoc/fpdf_doc.h @@ -264,17 +264,6 @@ public: class CPDF_Action : public CFX_Object { public: - - CPDF_Action(CPDF_Dictionary* pDict = NULL) - { - m_pDict = pDict; - } - - operator CPDF_Dictionary* () const - { - return m_pDict; - } - enum ActionType { Unknown = 0, GoTo, @@ -297,6 +286,13 @@ public: GoTo3DView }; + CPDF_Action() : m_pDict(nullptr) { } + explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) { } + + operator bool () const { return m_pDict != NULL; } + + CPDF_Dictionary* GetDict() const { return m_pDict; } + CFX_ByteString GetTypeName() const { return m_pDict->GetString("S"); @@ -422,7 +418,7 @@ public: CPDF_Action GetSubAction(FX_DWORD iIndex) const; - +protected: CPDF_Dictionary* m_pDict; }; class CPDF_AAction : public CFX_Object diff --git a/core/src/fpdfdoc/doc_action.cpp b/core/src/fpdfdoc/doc_action.cpp index 801c69fbb7..324153563a 100644 --- a/core/src/fpdfdoc/doc_action.cpp +++ b/core/src/fpdfdoc/doc_action.cpp @@ -94,7 +94,7 @@ FX_DWORD CPDF_ActionFields::GetFieldsCount() const if (m_pAction == NULL) { return 0; } - CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); + CPDF_Dictionary* pDict = m_pAction->GetDict(); if (pDict == NULL) { return 0; } @@ -124,7 +124,7 @@ void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const if (m_pAction == NULL) { return; } - CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); + CPDF_Dictionary* pDict = m_pAction->GetDict(); if (pDict == NULL) { return; } @@ -157,7 +157,7 @@ CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const if (m_pAction == NULL) { return NULL; } - CPDF_Dictionary* pDict = (CPDF_Dictionary*)(*m_pAction); + CPDF_Dictionary* pDict = m_pAction->GetDict(); if (pDict == NULL) { return NULL; } @@ -260,19 +260,20 @@ FX_DWORD CPDF_Action::GetSubActionsCount() const CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const { if (m_pDict == NULL || !m_pDict->KeyExist("Next")) { - return NULL; + return CPDF_Action(); } CPDF_Object* pNext = m_pDict->GetElementValue("Next"); int iObjType = pNext->GetType(); if (iObjType == PDFOBJ_DICTIONARY) { + CPDF_Dictionary *pDict = static_cast(pNext); if (iIndex == 0) { - return (CPDF_Dictionary*)pNext; + return CPDF_Action(pDict); } + } else if (iObjType == PDFOBJ_ARRAY) { + CPDF_Array* pArray = static_cast(pNext); + return CPDF_Action(pArray->GetDict(iIndex)); } - if (iObjType == PDFOBJ_ARRAY) { - return ((CPDF_Array*)pNext)->GetDict(iIndex); - } - return NULL; + return CPDF_Action(); } const FX_CHAR* g_sAATypes[] = {"E", "X", "D", "U", "Fo", "Bl", "PO", "PC", "PV", "PI", "O", "C", @@ -289,10 +290,10 @@ FX_BOOL CPDF_AAction::ActionExist(AActionType eType) const } CPDF_Action CPDF_AAction::GetAction(AActionType eType) const { - if (m_pDict == NULL) { - return NULL; + if (!m_pDict) { + return CPDF_Action(); } - return m_pDict->GetDict(g_sAATypes[(int)eType]); + return CPDF_Action(m_pDict->GetDict(g_sAATypes[(int)eType])); } FX_POSITION CPDF_AAction::GetStartPos() const { @@ -304,25 +305,26 @@ FX_POSITION CPDF_AAction::GetStartPos() const CPDF_Action CPDF_AAction::GetNextAction(FX_POSITION& pos, AActionType& eType) const { if (m_pDict == NULL) { - return NULL; + return CPDF_Action(); } CFX_ByteString csKey; CPDF_Object* pObj = m_pDict->GetNextElement(pos, csKey); - if (pObj != NULL) { - CPDF_Object* pDirect = pObj->GetDirect(); - if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) { - int i = 0; - while (g_sAATypes[i][0] != '\0') { - if (csKey == g_sAATypes[i]) { - break; - } - i ++; - } - eType = (AActionType)i; - return (CPDF_Dictionary*)pDirect; + if (!pObj) { + return CPDF_Action(); + } + CPDF_Object* pDirect = pObj->GetDirect(); + if (!pDirect || pDirect->GetType() != PDFOBJ_DICTIONARY) { + return CPDF_Action(); + } + int i = 0; + while (g_sAATypes[i][0] != '\0') { + if (csKey == g_sAATypes[i]) { + break; } + i++; } - return NULL; + eType = (AActionType)i; + return CPDF_Action(static_cast(pDirect)); } CPDF_DocJSActions::CPDF_DocJSActions(CPDF_Document* pDoc) { @@ -340,9 +342,9 @@ CPDF_Action CPDF_DocJSActions::GetJSAction(int index, CFX_ByteString& csName) co CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); CPDF_Object *pAction = name_tree.LookupValue(index, csName); if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) { - return NULL; + return CPDF_Action(); } - return pAction->GetDict(); + return CPDF_Action(pAction->GetDict()); } CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const { @@ -350,9 +352,9 @@ CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript")); CPDF_Object *pAction = name_tree.LookupValue(csName); if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) { - return NULL; + return CPDF_Action(); } - return pAction->GetDict(); + return CPDF_Action(pAction->GetDict()); } int CPDF_DocJSActions::FindJSAction(const CFX_ByteString& csName) const { diff --git a/core/src/fpdfdoc/doc_bookmark.cpp b/core/src/fpdfdoc/doc_bookmark.cpp index e7b383eced..a3a194337e 100644 --- a/core/src/fpdfdoc/doc_bookmark.cpp +++ b/core/src/fpdfdoc/doc_bookmark.cpp @@ -86,7 +86,7 @@ CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const CPDF_Action CPDF_Bookmark::GetAction() const { if (!m_pDict) { - return NULL; + return CPDF_Action(); } - return m_pDict->GetDict("A"); + return CPDF_Action(m_pDict->GetDict("A")); } diff --git a/core/src/fpdfdoc/doc_formcontrol.cpp b/core/src/fpdfdoc/doc_formcontrol.cpp index 61cd980754..1ab63234d6 100644 --- a/core/src/fpdfdoc/doc_formcontrol.cpp +++ b/core/src/fpdfdoc/doc_formcontrol.cpp @@ -248,18 +248,17 @@ int CPDF_FormControl::GetTextPosition() } CPDF_Action CPDF_FormControl::GetAction() { - if (m_pWidgetDict == NULL) { - return NULL; + if (!m_pWidgetDict) { + return CPDF_Action(); } if (m_pWidgetDict->KeyExist("A")) { - return m_pWidgetDict->GetDict("A"); - } else { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "A"); - if (pObj == NULL) { - return NULL; - } - return pObj->GetDict(); + return CPDF_Action(m_pWidgetDict->GetDict("A")); + } + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "A"); + if (!pObj) { + return CPDF_Action(); } + return CPDF_Action(pObj->GetDict()); } CPDF_AAction CPDF_FormControl::GetAdditionalAction() { diff --git a/core/src/fpdfdoc/doc_link.cpp b/core/src/fpdfdoc/doc_link.cpp index 964b84e549..e7b6be5ca4 100644 --- a/core/src/fpdfdoc/doc_link.cpp +++ b/core/src/fpdfdoc/doc_link.cpp @@ -103,5 +103,5 @@ CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc) } CPDF_Action CPDF_Link::GetAction() { - return m_pDict->GetDict("A"); + return CPDF_Action(m_pDict->GetDict("A")); } -- cgit v1.2.3