Introduce CPDF_Document::FromFPDFDocument().
authorTom Sepez <tsepez@chromium.org>
Wed, 14 Oct 2015 23:34:46 +0000 (16:34 -0700)
committerTom Sepez <tsepez@chromium.org>
Wed, 14 Oct 2015 23:34:46 +0000 (16:34 -0700)
This will be used to abstract one major difference between master
and XFA, namely that the CPDF_Document is not a direct cast in XFA.

R=thestig@chromium.org

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

core/include/fpdfapi/fpdf_parser.h
core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
fpdfsdk/src/fpdf_dataavail.cpp
fpdfsdk/src/fpdf_ext.cpp
fpdfsdk/src/fpdfdoc.cpp
fpdfsdk/src/fpdfeditimg.cpp
fpdfsdk/src/fpdfeditpage.cpp
fpdfsdk/src/fpdfformfill.cpp
fpdfsdk/src/fpdfppo.cpp
fpdfsdk/src/fpdfsave.cpp
fpdfsdk/src/fpdfview.cpp

index 04c7d90..b58cf14 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PARSER_H_
 #define CORE_INCLUDE_FPDFAPI_FPDF_PARSER_H_
 
+#include "../../../public/fpdfview.h"
 #include "../fxcrt/fx_system.h"
 #include "fpdf_objects.h"
 
@@ -56,6 +57,8 @@ extern const FX_WORD PDFDocEncoding[256];
 
 class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects {
  public:
+  static CPDF_Document* FromFPDFDocument(FPDF_DOCUMENT document);
+
   CPDF_Document();
   explicit CPDF_Document(CPDF_Parser* pParser);
 
index 5b78013..b93cadd 100644 (file)
@@ -7,6 +7,11 @@
 #include "../../../include/fpdfapi/fpdf_parser.h"
 #include "../../../include/fpdfapi/fpdf_module.h"
 
+// static
+CPDF_Document* CPDF_Document::FromFPDFDocument(FPDF_DOCUMENT document) {
+  return static_cast<CPDF_Document*>(document);
+}
+
 CPDF_Document::CPDF_Document(CPDF_Parser* pParser)
     : CPDF_IndirectObjects(pParser) {
   ASSERT(pParser != NULL);
index 5343723..3944f67 100644 (file)
@@ -115,9 +115,9 @@ FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) {
 }
 
 DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) {
-  if (doc == NULL)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(doc);
+  if (!doc)
     return 0;
-  CPDF_Document* pDoc = (CPDF_Document*)doc;
   return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo();
 }
 
index 2d84ff2..1cc1829 100644 (file)
@@ -183,10 +183,11 @@ void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) {
 }
 
 DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) {
-  if (!document)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return PAGEMODE_UNKNOWN;
 
-  CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot();
+  CPDF_Dictionary* pRoot = pDoc->GetRoot();
   if (!pRoot)
     return PAGEMODE_UNKNOWN;
 
index 4e2e7f3..ffdad28 100644 (file)
@@ -52,9 +52,9 @@ CPDF_LinkList* GetLinkList(CPDF_Page* page) {
 
 DLLEXPORT FPDF_BOOKMARK STDCALL
 FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
-  if (!document)
-    return NULL;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
   CPDF_BookmarkTree tree(pDoc);
   CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
   return tree.GetFirstChild(bookmark).GetDict();
@@ -62,9 +62,11 @@ FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
 
 DLLEXPORT FPDF_BOOKMARK STDCALL
 FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
-  if (!document || !pDict)
-    return NULL;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  if (!pDict)
+    return nullptr;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
   CPDF_BookmarkTree tree(pDoc);
   CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
   return tree.GetNextSibling(bookmark).GetDict();
@@ -87,11 +89,11 @@ DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict,
 
 DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
                                                   FPDF_WIDESTRING title) {
-  if (!document)
-    return NULL;
   if (!title || title[0] == 0)
-    return NULL;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+    return nullptr;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
   CPDF_BookmarkTree tree(pDoc);
   FX_STRSIZE len = CFX_WideString::WStringLength(title);
   CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
@@ -100,12 +102,12 @@ DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
 
 DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
                                                  FPDF_BOOKMARK pDict) {
-  if (!document)
-    return NULL;
   if (!pDict)
-    return NULL;
+    return nullptr;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
   CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_Dest dest = bookmark.GetDest(pDoc);
   if (dest)
     return dest.GetObject();
@@ -113,7 +115,7 @@ DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
   // action
   CPDF_Action action = bookmark.GetAction();
   if (!action)
-    return NULL;
+    return nullptr;
   return action.GetDest(pDoc).GetObject();
 }
 
@@ -146,10 +148,11 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) {
 
 DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
                                                FPDF_ACTION pDict) {
-  if (!document || !pDict)
+  if (!pDict)
+    return nullptr;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return nullptr;
-
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_Action action((CPDF_Dictionary*)pDict);
   return action.GetDest(pDoc).GetObject();
 }
@@ -172,10 +175,11 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
                                                       FPDF_ACTION pDict,
                                                       void* buffer,
                                                       unsigned long buflen) {
-  if (!document || !pDict)
+  if (!pDict)
+    return 0;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return 0;
-
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_Action action((CPDF_Dictionary*)pDict);
   CFX_ByteString path = action.GetURI(pDoc);
   unsigned long len = path.GetLength() + 1;
@@ -186,10 +190,11 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
 
 DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
                                                       FPDF_DEST pDict) {
-  if (!document || !pDict)
+  if (!pDict)
+    return 0;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return 0;
-
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_Dest dest((CPDF_Array*)pDict);
   return dest.GetPageIndex(pDoc);
 }
@@ -219,10 +224,11 @@ FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page, double x, double y) {
 
 DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
                                              FPDF_LINK pDict) {
-  if (!document || !pDict)
+  if (!pDict)
+    return nullptr;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return nullptr;
-
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_Link link((CPDF_Dictionary*)pDict);
   FPDF_DEST dest = link.GetDest(pDoc).GetObject();
   if (dest)
@@ -317,10 +323,11 @@ DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc,
                                                  FPDF_BYTESTRING tag,
                                                  void* buffer,
                                                  unsigned long buflen) {
-  if (!doc || !tag)
+  if (!tag)
+    return 0;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(doc);
+  if (!pDoc)
     return 0;
-  CPDF_Document* pDoc = (CPDF_Document*)doc;
-  // Get info dictionary
   CPDF_Dictionary* pInfo = pDoc->GetInfo();
   if (!pInfo)
     return 0;
index bb71078..ef0576b 100644 (file)
@@ -9,10 +9,11 @@
 
 DLLEXPORT FPDF_PAGEOBJECT STDCALL
 FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) {
-  if (!document)
-    return NULL;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
   CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
-  CPDF_Image* pImg = new CPDF_Image((CPDF_Document*)document);
+  CPDF_Image* pImg = new CPDF_Image(pDoc);
   pImageObj->m_pImage = pImg;
   return pImageObj;
 }
index 8796d0e..574fa39 100644 (file)
@@ -44,10 +44,8 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() {
 }
 
 DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
-  if (pDoc == NULL)
-    return;
-  if (page_index < 0 || page_index >= pDoc->GetPageCount())
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc || page_index < 0 || page_index >= pDoc->GetPageCount())
     return;
 
   pDoc->DeletePage(page_index);
@@ -57,17 +55,14 @@ DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
                                          int page_index,
                                          double width,
                                          double height) {
-  if (!document)
-    return NULL;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
 
-  //   CPDF_Parser* pParser = (CPDF_Parser*)document;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   if (page_index < 0)
     page_index = 0;
   if (pDoc->GetPageCount() < page_index)
     page_index = pDoc->GetPageCount();
-  //   if (page_index < 0 || page_index >= pDoc->GetPageCount())
-  //           return NULL;
 
   CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index);
   if (!pPageDict)
index 37af1fb..fed9a7e 100644 (file)
@@ -79,10 +79,12 @@ DLLEXPORT int STDCALL FPDFPage_FormFieldZOrderAtPoint(FPDF_FORMHANDLE hHandle,
 DLLEXPORT FPDF_FORMHANDLE STDCALL
 FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
                                 FPDF_FORMFILLINFO* formInfo) {
-  if (!document || !formInfo || formInfo->version != 1)
+  if (!formInfo || formInfo->version != 1)
     return nullptr;
 
-  CPDF_Document* pDocument = (CPDF_Document*)document;
+  CPDF_Document* pDocument = CPDF_Document::FromFPDFDocument(document);
+  if (!pDocument)
+    return nullptr;
   CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo);
   pEnv->SetSDKDocument(new CPDFSDK_Document(pDocument, pEnv));
   return pEnv;
index a377724..50ed660 100644 (file)
@@ -369,11 +369,15 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
                                              FPDF_DOCUMENT src_doc,
                                              FPDF_BYTESTRING pagerange,
                                              int index) {
-  if (!dest_doc || !src_doc)
+  CPDF_Document* pDestDoc = CPDF_Document::FromFPDFDocument(dest_doc);
+  if (!dest_doc)
+    return FALSE;
+
+  CPDF_Document* pSrcDoc = CPDF_Document::FromFPDFDocument(src_doc);
+  if (!pSrcDoc)
     return FALSE;
 
   CFX_WordArray pageArray;
-  CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
   int nCount = pSrcDoc->GetPageCount();
   if (pagerange) {
     if (!ParserPageRangeString(pagerange, &pageArray, nCount))
@@ -384,30 +388,30 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
     }
   }
 
-  CPDF_Document* pDestDoc = (CPDF_Document*)dest_doc;
   CPDF_PageOrganizer pageOrg;
-
   pageOrg.PDFDocInit(pDestDoc, pSrcDoc);
-
   return pageOrg.ExportPage(pSrcDoc, &pageArray, pDestDoc, index);
 }
 
 DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
                                                        FPDF_DOCUMENT src_doc) {
-  if (!src_doc || !dest_doc)
-    return false;
+  CPDF_Document* pDstDoc = CPDF_Document::FromFPDFDocument(dest_doc);
+  if (!pDstDoc)
+    return FALSE;
+
+  CPDF_Document* pSrcDoc = CPDF_Document::FromFPDFDocument(src_doc);
+  if (!pSrcDoc)
+    return FALSE;
 
-  CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
   CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
   pSrcDict = pSrcDict->GetDict(FX_BSTRC("ViewerPreferences"));
-  ;
   if (!pSrcDict)
     return FALSE;
 
-  CPDF_Document* pDstDoc = (CPDF_Document*)dest_doc;
   CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
   if (!pDstDict)
     return FALSE;
+
   pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE));
   return TRUE;
 }
index 3655309..e0f2398 100644 (file)
@@ -56,7 +56,7 @@ FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,
                          FPDF_DWORD flags,
                          FPDF_BOOL bSetVersion,
                          int fileVerion) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
   if (!pDoc)
     return 0;
 
index 84dabe6..a1d8473 100644 (file)
@@ -218,13 +218,18 @@ FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
 
 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
                                                 int* fileVersion) {
-  if (!doc || !fileVersion)
+  if (!fileVersion)
     return FALSE;
+
   *fileVersion = 0;
-  CPDF_Document* pDoc = (CPDF_Document*)doc;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(doc);
+  if (!pDoc)
+    return FALSE;
+
   CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
   if (!pParser)
     return FALSE;
+
   *fileVersion = pParser->GetFileVersion();
   return TRUE;
 }
@@ -232,45 +237,39 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match
 // header).
 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) {
-  if (document == NULL)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return 0;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+
   CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
   CPDF_Dictionary* pDict = pParser->GetEncryptDict();
-  if (pDict == NULL)
-    return (FX_DWORD)-1;
-
-  return pDict->GetInteger("P");
+  return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1;
 }
 
 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) {
-  if (document == NULL)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return -1;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+
   CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
   CPDF_Dictionary* pDict = pParser->GetEncryptDict();
-  if (pDict == NULL)
-    return -1;
-
-  return pDict->GetInteger("R");
+  return pDict ? pDict->GetInteger("R") : -1;
 }
 
 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) {
-  if (document == NULL)
-    return 0;
-  return ((CPDF_Document*)document)->GetPageCount();
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  return pDoc ? pDoc->GetPageCount() : 0;
 }
 
 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
                                           int page_index) {
-  if (document == NULL)
-    return NULL;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
+
   if (page_index < 0 || page_index >= FPDF_GetPageCount(document))
-    return NULL;
+    return nullptr;
 
-  CPDF_Document* pDoc = (CPDF_Document*)document;
-  if (pDoc == NULL)
-    return NULL;
   CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
   if (pDict == NULL)
     return NULL;
@@ -513,11 +512,12 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
 }
 
 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
-  if (!document)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+
   CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
-  if (pParser == NULL) {
+  if (!pParser) {
     delete pDoc;
     return;
   }
@@ -745,12 +745,12 @@ DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
                                               int page_index,
                                               double* width,
                                               double* height) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
-  if (pDoc == NULL)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return FALSE;
 
   CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
-  if (pDict == NULL)
+  if (!pDict)
     return FALSE;
 
   CPDF_Page page;
@@ -763,7 +763,7 @@ DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
 
 DLLEXPORT FPDF_BOOL STDCALL
 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
   if (!pDoc)
     return TRUE;
   CPDF_ViewerPreferences viewRef(pDoc);
@@ -771,7 +771,7 @@ FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) {
 }
 
 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
   if (!pDoc)
     return 1;
   CPDF_ViewerPreferences viewRef(pDoc);
@@ -780,7 +780,7 @@ DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) {
 
 DLLEXPORT FPDF_PAGERANGE STDCALL
 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
   if (!pDoc)
     return NULL;
   CPDF_ViewerPreferences viewRef(pDoc);
@@ -789,7 +789,7 @@ FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) {
 
 DLLEXPORT FPDF_DUPLEXTYPE STDCALL
 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) {
-  CPDF_Document* pDoc = (CPDF_Document*)document;
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
   if (!pDoc)
     return DuplexUndefined;
   CPDF_ViewerPreferences viewRef(pDoc);
@@ -804,9 +804,9 @@ FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) {
 }
 
 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) {
-  if (!document)
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
     return 0;
-  CPDF_Document* pDoc = (CPDF_Document*)document;
 
   CPDF_Dictionary* pRoot = pDoc->GetRoot();
   if (!pRoot)
@@ -822,12 +822,13 @@ DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) {
 
 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
                                                     FPDF_BYTESTRING name) {
-  if (!document)
-    return NULL;
   if (!name || name[0] == 0)
-    return NULL;
+    return nullptr;
+
+  CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document);
+  if (!pDoc)
+    return nullptr;
 
-  CPDF_Document* pDoc = (CPDF_Document*)document;
   CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
   return name_tree.LookupNamedDest(pDoc, name);
 }