Merge to XFA: Make conversion between CPDF_Dest and its object explicit.
authorTom Sepez <tsepez@chromium.org>
Fri, 6 Mar 2015 18:52:05 +0000 (10:52 -0800)
committerTom Sepez <tsepez@chromium.org>
Fri, 6 Mar 2015 18:52:05 +0000 (10:52 -0800)
Original Review URL: https://codereview.chromium.org/984703004
TBR=thestig@chromium.org

Review URL: https://codereview.chromium.org/984143002

core/include/fpdfdoc/fpdf_doc.h
core/src/fpdfdoc/doc_action.cpp
core/src/fpdfdoc/doc_bookmark.cpp
core/src/fpdfdoc/doc_link.cpp
fpdfsdk/src/fpdfdoc.cpp
fpdfsdk/src/fsdk_actionhandler.cpp

index a21063f..5e3e11a 100644 (file)
@@ -124,28 +124,19 @@ public:
 class CPDF_Dest : public CFX_Object
 {
 public:
+    CPDF_Dest() : m_pObj(nullptr) { }
+    explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) { }
 
-    CPDF_Dest(CPDF_Object* pObj = NULL)
-    {
-        m_pObj = pObj;
-    }
-
-    operator CPDF_Object* () const
-    {
-        return m_pObj;
-    }
+    operator bool () const { return m_pObj != NULL; }
+    CPDF_Object* GetObject() const { return m_pObj; }
 
     CFX_ByteString             GetRemoteName();
-
     int                                        GetPageIndex(CPDF_Document* pDoc);
-
     FX_DWORD                   GetPageObjNum();
-
     int                                        GetZoomMode();
-
     FX_FLOAT                   GetParam(int index);
 
-
+protected:
     CPDF_Object*               m_pObj;
 };
 class CPDF_OCContext : public CFX_Object, public IPDF_OCContext
index 3241535..ac40335 100644 (file)
@@ -7,25 +7,26 @@
 #include "../../include/fpdfdoc/fpdf_doc.h"
 CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const
 {
-    if (m_pDict == NULL) {
-        return NULL;
+    if (!m_pDict) {
+        return CPDF_Dest();
     }
     CFX_ByteString type = m_pDict->GetString("S");
     if (type != "GoTo" && type != "GoToR") {
-        return NULL;
+        return CPDF_Dest();
     }
     CPDF_Object* pDest = m_pDict->GetElementValue("D");
-    if (pDest == NULL) {
-        return NULL;
+    if (!pDest) {
+        return CPDF_Dest();
     }
     if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
         CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
         CFX_ByteStringC name = pDest->GetString();
-        return name_tree.LookupNamedDest(pDoc, name);
-    } else if (pDest->GetType() == PDFOBJ_ARRAY) {
-        return (CPDF_Array*)pDest;
+        return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
     }
-    return NULL;
+    if (pDest->GetType() == PDFOBJ_ARRAY) {
+        return CPDF_Dest((CPDF_Array*)pDest);
+    }
+    return CPDF_Dest();
 }
 const FX_CHAR* g_sATypes[] = {"Unknown", "GoTo", "GoToR", "GoToE", "Launch", "Thread", "URI", "Sound", "Movie",
                               "Hide",  "Named", "SubmitForm", "ResetForm", "ImportData", "JavaScript", "SetOCGState",
index a3a1943..9814de6 100644 (file)
@@ -68,20 +68,21 @@ CFX_WideString CPDF_Bookmark::GetTitle() const
 CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const
 {
     if (!m_pDict) {
-        return NULL;
+        return CPDF_Dest();
     }
     CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
     if (!pDest) {
-        return NULL;
+        return CPDF_Dest();
     }
     if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
         CPDF_NameTree name_tree(pDocument, FX_BSTRC("Dests"));
         CFX_ByteStringC name = pDest->GetString();
-        return name_tree.LookupNamedDest(pDocument, name);
-    } else if (pDest->GetType() == PDFOBJ_ARRAY) {
-        return (CPDF_Array*)pDest;
+        return CPDF_Dest(name_tree.LookupNamedDest(pDocument, name));
     }
-    return NULL;
+    if (pDest->GetType() == PDFOBJ_ARRAY) {
+        return CPDF_Dest((CPDF_Array*)pDest);
+    }
+    return CPDF_Dest();
 }
 CPDF_Action CPDF_Bookmark::GetAction() const
 {
index e7b6be5..b7c640a 100644 (file)
@@ -90,16 +90,17 @@ CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc)
 {
     CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
     if (pDest == NULL) {
-        return NULL;
+        return CPDF_Dest();
     }
     if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
         CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
         CFX_ByteStringC name = pDest->GetString();
-        return name_tree.LookupNamedDest(pDoc, name);
-    } else if (pDest->GetType() == PDFOBJ_ARRAY) {
-        return (CPDF_Array*)pDest;
+        return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
     }
-    return NULL;
+    if (pDest->GetType() == PDFOBJ_ARRAY) {
+        return CPDF_Dest((CPDF_Array*)pDest);
+    }
+    return CPDF_Dest();
 }
 CPDF_Action CPDF_Link::GetAction()
 {
index 9e4267f..e89a7aa 100644 (file)
@@ -86,12 +86,12 @@ DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BO
        CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
        CPDF_Dest dest = bookmark.GetDest(pDoc);
        if (dest)
-               return dest;
+               return dest.GetObject();
        // If this bookmark is not directly associated with a dest, we try to get action
        CPDF_Action action = bookmark.GetAction();
        if (!action)
                return NULL;
-       return action.GetDest(pDoc);
+       return action.GetDest(pDoc).GetObject();
 }
 
 DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict)
@@ -131,7 +131,7 @@ DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTI
                return NULL;
        CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
        CPDF_Action action((CPDF_Dictionary*)pDict);
-       return action.GetDest(pDoc);
+       return action.GetDest(pDoc).GetObject();
 }
 
 DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict,
@@ -157,7 +157,7 @@ DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FP
        if (!pDict)
                return 0;
        CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
-       CPDF_Dest dest = (CPDF_Array*)pDict;
+       CPDF_Dest dest((CPDF_Array*)pDict);
        return dest.GetPageIndex(pDoc);
 }
 
@@ -192,14 +192,14 @@ DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK p
                return NULL;
        CPDF_Link link = (CPDF_Dictionary*)pDict;
 
-       FPDF_DEST dest = link.GetDest(pDoc);
+       FPDF_DEST dest = link.GetDest(pDoc).GetObject();
        if (dest)
                return dest;
        // If this link is not directly associated with a dest, we try to get action
        CPDF_Action action = link.GetAction();
        if (!action)
                return NULL;
-       return action.GetDest(pDoc);
+       return action.GetDest(pDoc).GetObject();
 }
 
 DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict)
index 5fd6c54..6f8ea0c 100644 (file)
@@ -565,7 +565,7 @@ void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
        CPDF_Dest MyDest = action.GetDest(pPDFDocument);
        int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
        int nFitType = MyDest.GetZoomMode();
-       const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.m_pObj;
+       const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.GetObject();
        float* pPosAry = NULL;
        int sizeOfAry = 0;
        if (pMyArray != NULL)